(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-09-14
(54)【発明の名称】分散型データベース前処理方法及びプロキシ層、システム、記憶媒体
(51)【国際特許分類】
G06F 16/27 20190101AFI20220907BHJP
G06F 16/245 20190101ALI20220907BHJP
【FI】
G06F16/27
G06F16/245
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2022500741
(86)(22)【出願日】2020-07-13
(85)【翻訳文提出日】2022-01-06
(86)【国際出願番号】 CN2020101571
(87)【国際公開番号】W WO2021008475
(87)【国際公開日】2021-01-21
(31)【優先権主張番号】201910647652.7
(32)【優先日】2019-07-17
(33)【優先権主張国・地域又は機関】CN
(81)【指定国・地域】
(71)【出願人】
【識別番号】511151662
【氏名又は名称】中興通訊股▲ふん▼有限公司
【氏名又は名称原語表記】ZTE CORPORATION
【住所又は居所原語表記】ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan Shenzhen,Guangdong 518057 China
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】張 軍
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175AA01
5B175EA03
5B175HA04
(57)【要約】
分散型データベース前処理方法、データベースプロキシ層、システム及び記憶媒体であって、前記方法は:前処理文に対応するリクエストを受信するステップと、前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行うステップとを含み、前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、クライアントとデータベースとが接続の確立に成功した前処理文セッションである。
【特許請求の範囲】
【請求項1】
データベースプロキシ層に適用される分散型データベース前処理方法であって、
前処理文に対応するリクエストを受信するステップと、
前記前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行うステップと、
を含み、
前記前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、クライアントとデータベースとが接続の確立に成功した前処理文セッションである
分散型データベース前処理方法。
【請求項2】
受信した前処理文に対応するリクエストが準備prepareリクエストであることを契機に、前記前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行うステップは:
前記前処理文キャッシュライブラリ内で現在のprepareリクエストセッションに対応するセッション識別子を検索できたことを契機に、前記prepareリクエストの応答メッセージを前記クライアントに送信するステップと、
前記前処理文キャッシュライブラリ内で現在のprepareリクエストセッションに対応するセッション識別子を検索できなかったことを契機に、前記prepareリクエストを前記データベースに送信し、前記データベースによって処理しかつ前記prepareリクエストの応答メッセージを前記クライアントに送信する
請求項1に記載の分散型データベース前処理方法。
【請求項3】
前記prepareリクエストを前記データベースに送信し、前記データベースによって処理しかつ前記prepareリクエストの応答メッセージを前記クライアントに送信するステップの後に、前記方法はさらに:
前記現在のprepareリクエストセッションに対応するセッション識別子を前記前処理文キャッシュライブラリにキャッシュするステップを含む
請求項2に記載の分散型データベース前処理方法。
【請求項4】
受信した前処理文に対応するリクエストが実行executeリクエストであることを契機に、前記前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行うステップは:
前記前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できたことを契機に、前記executeリクエストを前記データベースに送信し、前記データベースによって処理しかつ前記executeリクエストの応答メッセージを前記クライアントに送信するステップと、
前記前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できなかったことを契機に、アイドルなprepareリクエストセッションが現れるまで待ち、前記executeリクエストを前記データベースに送信し、前記データベースによって処理しかつ前記executeリクエストの応答メッセージを前記クライアントに送信するステップと、
を含む請求項1から3の何れか一項に記載の分散型データベース前処理方法。
【請求項5】
前記データベースによって処理しかつ前記executeリクエストの応答メッセージを前記クライアントに送信するステップは:
前記データベースによって前記executeリクエストを実行して生成した結果セットまたは失敗時メッセージを受信し、前記結果セットまたは失敗時メッセージを前記クライアントに送信するステップを含む
請求項4に記載の分散型データベース前処理方法。
【請求項6】
前記結果セットまたは失敗時メッセージを前記クライアントに送信するステップの後に、前記方法はさらに:
受信した前処理文に対応するリクエストが解放deallocateリクエストであることを契機に、処理しかつ前記deallocateリクエストの応答メッセージを前記クライアントに送信するステップを含む
請求項5に記載の分散型データベース前処理方法。
【請求項7】
処理しかつ前記deallocateリクエストの応答メッセージを前記クライアントに送信するステップは:
現在前記クライアントと接続を確立されている前処理文に対応するセッションを解放し、前記deallocateリクエストの応答メッセージをクライアントに送信するステップを含む
請求項6に記載の分散型データベース前処理方法。
【請求項8】
受信モジュールと処理モジュールとを含むデータベースプロキシ層であって、
前記受信モジュールは、前処理文に対応するリクエストを受信するように構成され、
前記処理モジュールは、前記前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行うように構成され、
前記前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、クライアントとデータベースとが接続の確立に成功した前処理文セッションである
データベースプロキシ層。
【請求項9】
前記処理モジュールは:
前記前処理文キャッシュライブラリ内で現在のprepareリクエストセッションに対応するセッション識別子を検索できたことを契機に、前記prepareリクエストの応答メッセージを前記クライアントに送信し、
前記前処理文キャッシュライブラリ内で現在のprepareリクエストセッションに対応するセッション識別子を検索できなかったことを契機に、前記prepareリクエストを前記データベースに送信し、前記データベースによって処理しかつ前記prepareリクエストの応答メッセージを前記クライアントに送信する
ように構成されている請求項8に記載のデータベースプロキシ層。
【請求項10】
さらにキャッシュモジュールを含み、前記キャッシュモジュールは:
前記処理モジュールが前記prepareリクエストをデータベースに送信し、前記データベースによって処理しかつ前記prepareリクエストの応答メッセージを前記クライアントに送信した後に、前記現在のprepareリクエストセッションに対応するセッション識別子を前記前処理文キャッシュライブラリにキャッシュするように構成されている
請求項9に記載のデータベースプロキシ層。
【請求項11】
前記処理モジュールは:
前記前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できたことを契機に、前記executeリクエストを前記データベースに送信し、前記データベースによって処理しかつ前記executeリクエストの応答メッセージを前記クライアントに送信し、
前記前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できなかったことを契機に、アイドルなprepareリクエストセッションが現れるまで待ち、前記executeリクエストを前記データベースに送信し、前記データベースによって処理しかつ前記executeリクエストの応答メッセージを前記クライアントに送信するように構成されている
請求項10に記載のデータベースプロキシ層。
【請求項12】
クライアント、データベース及び請求項8から11の何れか一項に記載のデータベースプロキシ層を含むシステムであって、
前記クライアントは、前処理文に対応するリクエストを前記データベースプロキシ層に送信し、
前記データベースプロキシ層は、受信した前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行い、前記前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、クライアントとデータベースとが接続の確立に成功した前処理文セッションであり、
前記データベースは、前記データベースプロキシ層内の前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションとの接続を維持する
システム。
【請求項13】
1つ以上のプロセッサによって実行された時、前記1つ以上のプロセッサが請求項1から7の何れか一項に記載の分散型データベース前処理方法を実現する1つ以上のプログラムが記憶されている
記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データベースの技術分野に関するが、これに限定されるものではない。
【背景技術】
【0002】
前処理文とは、準備(prepare)、実行(execute)、解放(deallocate)文を総称したもので、記憶プロセスに似ており、バックグラウンドで実行されるSQL文の集合である。即時SQL文と比較して、前処理文はSQL文を2つの部分に分割する。第一部分は前の同じコマンドと構成部分で、第二部分は後の可変データの部分である。SQL文を実行するとき、先ずは前の同じコマンドと構成部分(SQL文の値をプレースホルダで置き換え、SQL文をテンプレート化またはパラメータ化したものと見なせる)をデータベースに送信し、データベースに予め一回の前処理(字句解析と構文解析、文の最適化、実行計画の作成など)をさせてから、前処理文を実行するときに、パラメータのデータのみを送信すればよい。前処理文の利点をまとめると、1回の前処理で複数回の実行が可能で、解析と最適化などのプロセスを省くことと、前処理文によってSQLインジェクションを防げることである。
【0003】
分散型データベースでは現在、既に前処理がサポートされているが、前処理文は毎回最下層のデータベースに転送され、現在のセッションを保持し、前処理が完了するまでセッションを解放しないため、リソースが大量に消費され、高並行性の場面でデータベースに前処理文を頻繁に転送するとデータベースの負荷を増やしてしまう。よって、分散型データベースの前処理の性能及び効率がともに低いことがわかる。
【発明の概要】
【課題を解決するための手段】
【0004】
本開示の実施例は、データベースプロキシ層に適用される分散型データベース前処理方法を提供し、前記分散型データベース前処理方法は:前処理文に対応するリクエストを受信するステップと、前記前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行うステップと、を含み、前記前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、クライアントとデータベースとが接続の確立に成功した前処理文セッションである。
【0005】
本開示の実施例はさらに、受信モジュールと処理モジュールとを含むデータベースプロキシ層を提供する。前記受信モジュールは、前処理文に対応するリクエストを受信するように構成されている。前記処理モジュールは、前記前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行うように構成され、前記前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、クライアントとデータベースとが接続の確立に成功した前処理文セッションである。
【0006】
本開示の実施例はさらに、クライアント、データベース及び前記データベースプロキシ層を含むシステムを提供する。前記クライアントは、前記前処理文に対応するリクエストを前記データベースプロキシ層に送信する。前記データベースプロキシ層は、受信した前記前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行い、前記前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、クライアントとデータベースとが接続の確立に成功した前処理文セッションである。前記データベースは、前記データベースプロキシ層内の前処理文キャッシュライブラリにキャッシュされているセッションとの接続を維持する。
【0007】
本開示の実施例はさらに記憶媒体を提供し、前記記憶媒体には、1つ以上のプロセッサによって実行されることで、前記分散型データベース前処理方法のステップを実現できる1つ以上のプログラムが記憶されている。
【0008】
以下では、図面及び実施例を組み合わせて本開示をさらに説明する。
【図面の簡単な説明】
【0009】
【
図1】本開示の実施例による分散型データベースの前処理方法の基本フローの模式図である。
【
図2】本開示の実施例による分散型データベースの前処理方法の具体的なフローの模式図である。
【
図3】本開示の実施例によるデータベースプロキシ層の構成模式図である。
【
図4】本開示の実施例によるデータベースプロキシ層のもう一つの構成模式図である。
【発明を実施するための形態】
【0010】
本開示の目的、技術案及び利点をより明らかにするために、以下では、具体的な実施形態に添付図面を組み合わせて本開示の実施例をさらに詳しく説明する。ここで説明する具体的な実施例は本開示を解釈するためだけに使われるのであって、本開示を限定するために使われるものではないことは、理解すべきである。
【0011】
従来技術における分散型データベースの前処理の性能及び効率がともに低いという問題点を解決するために、本開示の実施例では、前処理文に対応するリクエストを受信し、さらに、前記前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行う。前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、クライアントとデータベースとが接続の確立に成功した前処理文セッションである。
図1を参照し、
図1に示すように、本開示の実施例による分散型データベース前処理方法の基本的なフローは、ステップS101からS102を含む。
【0012】
ステップS101において、前処理文に対応するリクエストを受信する。
本実施例では、前処理文には、prepare、execute、deallocate文が含まれるが、これらに限定されず、実際には、前処理文に含まれれば、本開示の保護範囲に含まれ、本開示ではそれについて具体的に限定しない。
【0013】
本開示をよりよく理解するために、本実施例は、前処理文にprepare、execute、deallocate文が含まれる場合を例として説明する。
【0014】
ステップS102において、前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行い、前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、クライアントとデータベースとが接続の確立に成功した前処理文セッションである。
【0015】
なお、本実施例におけるセッション識別子は、セッションを一意に識別するために使用され、例えばセッション番号を含むが、これに限定されない。実際の応用において、具体的な応用場面に応じて柔軟に調整することができる。
【0016】
本実施例では、データベースプロキシ層により受信した前処理文に対応するリクエストがprepareリクエストである場合、前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行うことは、少なくとも以下の2つのケースを含む。
【0017】
ケース1:前処理文キャッシュライブラリ内で現在のprepareリクエストセッションに対応するセッション識別子を検索できた場合、prepareリクエストの応答メッセージをクライアントに送信する。
【0018】
prepareリクエストを受信し、かつデータベースプロキシ層の前処理文キャッシュライブラリに、このprepareリクエストセッションに対応するセッション識別子がキャッシュされている場合、つまり、前処理文キャッシュライブラリ内でこのprepareリクエストセッションに対応するセッション識別子を検索できた場合、現在のprepareリクエストが既に処理されたということになり、この場合、prepareリクエストを再びデータベースに転送する必要がなく、prepareリクエストの応答メッセージを直接クライアントに送信し、それによりクライアントとデータベースとのインタラクション操作を省いて、データベースの負荷をある程度軽減させる。本実施例で言及されたprepareリクエストが既に処理されたということは、このprepareリクエストがクライアントによってデータベースに1回送信されたことがあり、かつセッションの確立に成功したことを意味する。また、データベースプロキシ層の前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、常にデータベースとの接続を維持している。
【0019】
ケース2:前処理文キャッシュライブラリ内で現在のprepareリクエストセッションに対応するセッション識別子を検索できなかった場合、prepareリクエストをデータベースに送信し、データベースによって処理しかつprepareリクエストの応答メッセージをクライアントに送信する。
【0020】
prepareリクエストを受信したが、データベースプロキシ層の前処理文キャッシュライブラリに、このprepareリクエストセッションに対応するセッション識別子がキャッシュされていない場合、つまり、前処理文キャッシュライブラリ内でこのprepareリクエストセッションに対応するセッション識別子を検索できなかった場合、現在のprepareリクエストが処理されたことはないということになり、この場合、やはりこのprepareリクエストをデータベースに転送して、データベースによってさらに処理する必要がある。
【0021】
本実施例では、prepareリクエストをデータベースプロキシ層においてデータベースに送信し、データベースによって処理しかつprepareリクエストの応答メッセージをクライアントに送信した後に、さらに:現在のprepareリクエストセッションを前処理文キャッシュライブラリにキャッシュするステップを含む。
【0022】
データベースプロキシ層の前処理文キャッシュライブラリ内のセッション識別子は通常、クライアントが最初にデータベースに送信しかつセッションが正常に確立された時点でキャッシュされるのであり、これにより、クライアントが再度前処理文に対応するリクエストを行ったときに、前処理文に対応するリクエストを再びデータベースに転送する必要がなく、データベースプロキシ層の前処理文キャッシュライブラリ内で検索できるようになるので、クライアントとデータベースとのインタラクション操作を省く。前処理文キャッシュライブラリ内のセッション識別子は、クライアントがN回目にデータベースに送信しかつセッションが正常に確立された時点でキャッシュされてもよく、ただし、Nは1より大きく、実際の応用では、開発者が実際の応用場面に応じて柔軟に調整する。
【0023】
代替的に、prepareリクエストをデータベースプロキシ層においてデータベースに送信し、データベースによって処理しかつprepareリクエストの応答メッセージをクライアントに送信した後に、現在のprepareリクエストセッションを前処理文キャッシュライブラリにキャッシュすることにより、次回クライアントが再度このprepareリクエストを行ったときに、データベースプロキシ層とインタラクション操作するだけでよい。
【0024】
本実施例では、データベースプロキシ層により受信した前処理文に対応するリクエストがexecuteリクエストである場合、前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行うことは、少なくとも以下の2つのケースを含む。
【0025】
ケース1:前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できた場合、executeリクエストをデータベースに送信し、データベースによって処理しかつexecuteリクエストの応答メッセージをクライアントに送信する。
【0026】
executeリクエストを受信し、かつデータベースプロキシ層の前処理文キャッシュライブラリに、アイドルなprepareリクエストセッションに対応するセッション識別子が存在する場合、つまり、前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できた場合、executeリクエストをデータベースに送信して、データベースによって処理しかつexecuteリクエストの応答メッセージをクライアントに送信する。
【0027】
ケース2:前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できなかった場合、アイドルなprepareリクエストセッションが現れるまで待ち、executeリクエストをデータベースに送信し、データベースによって処理しかつexecuteリクエストの応答メッセージをクライアントに送信する。
【0028】
executeリクエストを受信したが、データベースプロキシ層の前処理文キャッシュライブラリに、アイドルなprepareリクエストセッションに対応するセッション識別子が存在しない場合、つまり、前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できなかった場合、また、executeリクエストは処理されたprepareリクエストに基づく必要があるので、この場合、前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できるまで待つ必要があり、さらに、executeリクエストをデータベースに送信して、データベースによって処理しかつexecuteリクエストの応答メッセージをクライアントに送信する。
【0029】
本実施例では、データベースによって処理しかつexecuteリクエストの応答メッセージをクライアントに送信することは:データベースによってexecuteリクエストを実行して生成した結果セットまたは失敗時メッセージを受信し、結果セットまたは失敗時メッセージをクライアントに送信することを含む。
【0030】
データベースによってexecuteリクエストを実行し、生成した結果セットまたは失敗時メッセージをデータベースプロキシ層に送信し、データベースプロキシ層が送信された結果セットまたは失敗時メッセージを受信すると、その結果セットまたは失敗時メッセージをさらにクライアントに送信する。
【0031】
本実施例では、結果セットまたは失敗時メッセージをクライアントに送信した後に、さらに:受信した前処理文に対応するリクエストがdeallocateリクエストである場合、処理しかつdeallocateリクエストの応答メッセージをクライアントに送信することも含む。
【0032】
クライアントは必要に応じてデータベースプロキシ層との接続を切断することができるので、データベースプロキシ層がdeallocateリクエストを受信すると、処理しかつdeallocateリクエストの応答メッセージをクライアントに送信する。
【0033】
本実施例では、処理しかつdeallocateリクエストの応答メッセージをクライアントに送信することは:現在クライアントと正常に接続を確立されている前処理文に対応するセッションを解放し、deallocateリクエストの応答メッセージをクライアントに送信することも含む。代替的に、現在クライアントと正常に接続を確立されているprepareリクエストセッションを解放し、かつdeallocateリクエストの応答メッセージをクライアントに送信することにより、リソースをさらに節約することもできる。
【0034】
本開示の実施例の分散型データベース前処理方法によれば、前処理文に対応するリクエストを受信し、さらに、前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行い、前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、クライアントとデータベースとが接続の確立に成功した前処理文セッションであるので、分散型データベースの前処理の性能及び効率がともに低いという問題点を解決する。すなわち、本開示の実施例の分散型データベース前処理方法によれば、クライアントとデータベースとが1回接続の確立に成功した前処理文セッションを、データベースプロキシ層の前処理文キャッシュライブラリに記憶し、データベースプロキシ層が前処理文に対応するリクエストを受信すると、前処理文キャッシュライブラリ内のセッション識別子によって処理できるので、クライアントが毎回前処理文をデータベースに転送する必要がなくなり、データベースの負荷を大幅に軽減させ、分散型データベースの前処理の性能及び効率を大幅に向上させ、リソースを節約する。
【0035】
以下では、一つの具体的な分散型データベース前処理方法を例にして、本開示の実施例をさらに例示的に説明し、
図2を参照して、示されたフローは以下のステップS201からS2018を含む。
【0036】
ステップS201において、クライアントがprepareリクエストをデータベースプロキシ層に送信する。
【0037】
ステップS202において、データベースプロキシ層は、前処理文キャッシュライブラリにキャッシュされているprepareセッション内で、このprepareリクエストセッションが存在するか否かを検索する。
【0038】
ステップS203において、検索できた場合に、prepareリクエストの応答メッセージをクライアントに送信する。
【0039】
ステップS204において、検索できなかった場合に、リンクを取得し、prepareリクエストをデータベースに送信する。
【0040】
ステップS205において、データベースがprepareリクエストの応答メッセージをデータベースプロキシ層に送信する。
【0041】
ステップS206において、データベースプロキシ層がprepareリクエストの応答メッセージをクライアントに送信する。
【0042】
ステップS207において、クライアントがexecuteリクエストをデータベースプロキシ層に送信する。
【0043】
ステップS208において、データベースプロキシ層は、前処理文キャッシュライブラリにキャッシュされているprepareセッション内で、アイドルなprepareセッションが存在するか否かを検索する。
【0044】
ステップS209において、アイドルなprepareセッションを検索できた場合、executeリクエストをデータベースに送信する。
【0045】
ステップS2010において、データベースがexecuteリクエストの応答メッセージをデータベースプロキシ層に送信する。
【0046】
ステップS2011において、データベースプロキシ層がexecuteリクエストの応答メッセージをクライアントに送信する。
【0047】
ステップS2012において、アイドルなprepareセッションを検索できなかった場合、新しいリンクを取得してprepareリクエストをデータベースに送信する。
【0048】
ステップS2013において、データベースがprepareリクエストの応答メッセージをデータベースプロキシ層に送信する。
【0049】
ステップS2014において、データベースプロキシ層がexecuteリクエストをデータベースに送信する。
【0050】
ステップS2015において、データベースがexecuteリクエストの応答メッセージをデータベースプロキシ層に送信する。
【0051】
ステップS2016において、データベースプロキシ層がexecute応答メッセージをクライアントに送信する。
【0052】
ステップS2017において、クライアントがdeallocateリクエストをデータベースプロキシ層に送信する。
【0053】
ステップS2018において、データベースプロキシ層がdeallocateリクエストの応答メッセージをクライアントに送信する。
【0054】
本開示の実施例の分散型データベース前処理方法によれば、データベースプロキシ層において、prepareリクエストとexecute実行セッションに対応するセッション識別子とをともに前処理文キャッシュライブラリにキャッシュするので、prepareリクエストがヒットしたときに応答メッセージを直接返して、クライアントとデータベースとのインタラクション操作を省き、executeリクエストがヒットしたときにセッションを取得し、かつ処理の終了時にセッションを解放することで、現在のセッションを使用し続ける必要がなくなり、セッションの使用率が向上し、分散型データベースの前処理の性能が大幅に向上する。
【0055】
フレーム間予測モードにおいて動きベクトルと予測残差の両方を同時に符号化する必要があり、符号化性能が低いという問題を解決するために、
図3を参照し、本開示の実施例において、データベースプロキシ層を提供する。
【0056】
データベースプロキシ層は、受信モジュール301と処理モジュール302とを含む。
受信モジュール301は、前処理文に対応するリクエストを受信するように構成されている。
【0057】
処理モジュール302は、前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行うように構成され、前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、クライアントとデータベースとが接続の確立に成功した前処理文セッションである。
【0058】
本実施例では、前処理文には、prepare、execute、deallocate文が含まれるが、これらに限定されず、実際には、前処理文に含まれれば、本開示の保護範囲に含まれ、本開示ではそれについて具体的に限定しない。
【0059】
本開示をよりよく理解するために、本実施例は、前処理文にprepare、execute、deallocate文が含まれる場合を例として説明する。
【0060】
なお、本実施例におけるセッション識別子は、セッションを一意に識別するために使用され、例えばセッション番号を含むが、これに限定されない。実際の応用において、具体的な応用場面に応じて柔軟に調整することができる。
【0061】
本実施例では、受信モジュール301が受信した前処理文に対応するリクエストがprepareリクエストである場合、処理モジュール302は、前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行うことは、少なくとも以下の2つのケースを含む。
【0062】
ケース1:処理モジュール302が前処理文キャッシュライブラリ内で現在のprepareリクエストセッションに対応するセッション識別子を検索できた場合、prepareリクエストの応答メッセージをクライアントに送信する。
【0063】
prepareリクエストを受信し、かつデータベースプロキシ層の前処理文キャッシュライブラリに、このprepareリクエストセッションに対応するセッション識別子がキャッシュされている場合、つまり、処理モジュール302は前処理文キャッシュライブラリ内でこのprepareリクエストセッションに対応するセッション識別子を検索できた場合、現在のprepareリクエストが既に処理されたということになり、この場合、prepareリクエストを再びデータベースに転送する必要がなく、prepareリクエストの応答メッセージを直接クライアントに送信し、それによりクライアントとデータベースとのインタラクション操作を省いて、データベースの負荷をある程度軽減させる。本実施例で言及されたprepareリクエストが既に処理されたということは、このprepareリクエストがクライアントによってデータベースに1回送信されたことがあり、かつセッションの確立に成功したことを意味する。また、データベースプロキシ層の前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、常にデータベースとの接続を維持している。
【0064】
ケース2:処理モジュール302が前処理文キャッシュライブラリ内で現在のprepareリクエストセッションに対応するセッション識別子を検索できなかった場合、prepareリクエストをデータベースに送信し、データベースによって処理しかつprepareリクエストの応答メッセージをクライアントに送信する。
【0065】
prepareリクエストを受信したが、データベースプロキシ層の前処理文キャッシュライブラリに、このprepareリクエストセッションに対応するセッション識別子がキャッシュされていいない場合、つまり、処理モジュール302が前処理文キャッシュライブラリ内でこのprepareリクエストセッションに対応するセッション識別子を検索できなかった場合、現在のprepareリクエストが処理されたことはないということになり、この場合、やはりこのprepareリクエストをデータベースに転送して、データベースによってさらに処理する必要がある。
【0066】
本実施例では、代替的に、
図4に示すように、データベースプロキシ層はさらにキャッシュモジュール303を含み、処理モジュール302がprepareリクエストをデータベースに送信し、データベースによって処理しかつprepareリクエストの応答メッセージをクライアントに送信した後に、キャッシュモジュール303が現在のprepareリクエストセッションを前処理文キャッシュライブラリにキャッシュする。
【0067】
データベースプロキシ層の前処理文キャッシュライブラリ内のセッション識別子は通常、クライアントが最初にデータベースに送信しかつセッションが正常に確立された時点でキャッシュされるのであり、これにより、クライアントが再度前処理文に対応するリクエストを行ったときに、前処理文に対応するリクエストを再びデータベースに転送する必要がなく、データベースプロキシ層の前処理文キャッシュライブラリ内で検索できるようになるので、クライアントとデータベースとのインタラクション操作を省く。前処理文キャッシュライブラリ内のセッション識別子は、クライアントがN回目にデータベースに送信しかつセッションが正常に確立された時点でキャッシュされてもよく、ただし、Nは1より大きく、実際の応用では、開発者が実際の応用場面に応じて柔軟に調整する。
【0068】
代替的に、処理モジュール302がprepareリクエストをデータベースに送信し、データベースによって処理しかつprepareリクエストの応答メッセージをクライアントに送信した後に、キャッシュモジュール303が現在のprepareリクエストセッションを前処理文キャッシュライブラリにキャッシュすることにより、次回クライアントが再度このprepareリクエストを行ったときに、データベースプロキシ層とインタラクション操作するだけでよい。
【0069】
本実施例では、受信モジュール301が受信した前処理文に対応するリクエストがexecuteリクエストである場合、前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行うことは、少なくとも以下の2つのケースを含む。
【0070】
ケース1:処理モジュール302が前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できた場合、executeリクエストをデータベースに送信し、データベースによって処理しかつexecuteリクエストの応答メッセージをクライアントに送信する。
【0071】
executeリクエストを受信し、かつデータベースプロキシ層の前処理文キャッシュライブラリに、アイドルなprepareリクエストセッションに対応するセッション識別子が存在する場合、つまり、処理モジュール302が前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できた場合、executeリクエストをデータベースに送信して、データベースによって処理しかつexecuteリクエストの応答メッセージをクライアントに送信する。
【0072】
ケース2:処理モジュール302が前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できなかった場合、アイドルなprepareリクエストセッションが現れるまで待ち、executeリクエストをデータベースに送信し、データベースによって処理しかつexecuteリクエストの応答メッセージをクライアントに送信する。
【0073】
executeリクエストを受信したが、データベースプロキシ層の前処理文キャッシュライブラリに、アイドルなprepareリクエストセッションに対応するセッション識別子が存在しない場合、つまり、処理モジュール302が前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できなかった場合、また、executeリクエストは処理されたprepareリクエストに基づく必要があるので、この場合、前処理文キャッシュライブラリ内でアイドルなprepareリクエストセッションに対応するセッション識別子を検索できるまで待つ必要があり、さらに、executeリクエストをデータベースに送信して、データベースによって処理しかつexecuteリクエストの応答メッセージをクライアントに送信する。
【0074】
本実施例では、受信モジュール301はさらに、データベースによってexecuteリクエストを実行して生成した結果セットまたは失敗時メッセージを受信し、そして処理モジュール302が結果セットまたは失敗時メッセージをクライアントに送信する。データベースによってexecuteリクエストを実行し、生成した結果セットまたは失敗時メッセージを受信モジュール301に送信し、受信モジュール301が送信された結果セットまたは失敗時メッセージを受信すると、処理モジュール302によってその結果セットまたは失敗時メッセージをさらにクライアントに送信する。
【0075】
本実施例では、受信モジュール301が受信した前処理文に対応するリクエストがdeallocateリクエストである場合、処理モジュール302が処理しかつdeallocateリクエストの応答メッセージをクライアントに送信する。クライアントは必要に応じてデータベースプロキシ層との接続を切断することができるので、受信モジュール301がdeallocateリクエストを受信すると、処理モジュール302が処理しかつdeallocateリクエストの応答メッセージをクライアントに送信する。
【0076】
本実施例では、処理モジュール302が現在クライアントと正常に接続を確立されている前処理文に対応するセッションを解放し、deallocateリクエストの応答メッセージをクライアントに送信する。代替的に、処理モジュール302が現在クライアントと正常に接続を確立されているprepareリクエストセッションを解放し、かつdeallocateリクエストの応答メッセージをクライアントに送信することにより、リソースをさらに節約することもできる。
【0077】
本開示の実施例の分散型データベース前処理方法によれば、前処理文に対応するリクエストを受信し、さらに、前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行い、前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、クライアントとデータベースとが接続の確立に成功した前処理文セッションであるので、分散型データベースの前処理の性能及び効率がともに低いという問題点を解決する。すなわち、本開示の実施例のデータベースプロキシ層によれば、クライアントとデータベースとが1回接続の確立に成功した前処理文セッションを、前処理文キャッシュライブラリに記憶し、データベースプロキシ層が前処理文に対応するリクエストを受信すると、前処理文キャッシュライブラリ内のセッション識別子によって処理できるので、クライアントが毎回前処理文をデータベースに転送する必要がなくなる。よって、本開示の実施例によるデータベースプロキシ層は、データベースの負荷を大幅に軽減させ、分散型データベースの前処理の性能及び効率を向上させ、リソースを節約する。
【0078】
本開示の実施例はさらに、クライアント、データベース及びデータベースプロキシ層を含むシステムを提供する。
【0079】
クライアントは、前処理文に対応するリクエストをデータベースプロキシ層に送信する。
【0080】
データベースプロキシ層は、受信した前処理文に対応するリクエスト及び前処理文キャッシュライブラリにキャッシュされているセッション識別子に基づいて処理を行い、前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションは、クライアントとデータベースとが接続の確立に成功した前処理文セッションである。
【0081】
データベースは、データベースプロキシ層内の前処理文キャッシュライブラリにキャッシュされているセッション識別子に対応するセッションとの接続を維持する。
【0082】
本実施例では、説明をくどくしないために、すべての例を完全に説明していない。前述した実施形態のすべての例示が本実施例に適用できる。
【0083】
本開示の実施例のシステムによれば、分散型データベースの前処理の性能及び効率がともに低いという問題を解決し、これにより、本開示の実施例のシステムはデータベースの負荷をある程度軽減させ、分散型データベースの前処理の性能及び効率を向上させ、リソースを節約する。
【0084】
本開示の実施例はさらに記憶媒体を提供し、記憶媒体には、1つ以上のプロセッサによって実行されることで、本開示の実施例の分散型データベース前処理方法を実現できる1つ以上のプログラムが記憶されている。
【0085】
この記憶媒体は情報(例えばコンピュータ読み取り可能な命令、データ構造、コンピュータプログラムモジュールまたは他のデータ)を記憶するための任意の方法または技術において実施される、揮発性または不揮発性の、取り外し可能または取り外し不可能な媒体を含む。記憶媒体は、RAM(Random Access Memory:ランダムアクセスメモリ)、ROM(Read-Only Memory:リードオンリーメモリ)、EEPROM(Electrically Erasable Programmable read only memory:電気的に消去可能なプログラマブルリードオンリーメモリ)、フラッシュメモリまたはその他のメモリ技術、CD-ROM(Compact Disc Read-Only Memory:リードオンリー光ディスク)、デジタル多用途ディスク(DVD)またはその他の光ディスクストレージ、磁気カートリッジ、磁気テープ、磁気ディスクストレージまたはその他の磁気記憶デバイス、または所望の情報を記憶するために使用できかつコンピュータによってアクセス可能なその他任意の媒体を含むが、これらに限定されない。
【0086】
明らかに、上記で開示された方法のステップ、システム、装置における機能モジュール/ユニットの全て又は一部は、ソフトウェア(コンピューティング装置によって実行可能なプログラムコードによって実装できる)、ファームウェア、ハードウェア、及びそれらの適切な組み合わせとして実装されてもよいことを、当業者は理解できるであろう。ハードウェアによる実施形態では、上記説明で言及された機能モジュール/ユニット間の区分は、物理的組立体の区分に必ずしも対応しているとは限らず、例えば、一つの物理的組立体は複数の機能を有することができ、または、一つの機能またはステップはいくつかの物理的組立体によって協働して実行されることができる。いくつかの物理的組立体またはすべての物理的組立体は、中央処理装置、デジタルシグナルプロセッサまたはマイクロプロセッサのようなプロセッサによって実行されるソフトウェアとして、あるいはハードウェアとして、あるいは特定用途向け集積回路のような集積回路として実施することができる。そういったソフトウェアは、コンピュータ読み取り可能な媒体上に分散し、コンピューティング装置によって実効でき、また、いくつかの場合では、こことは異なる順番で図示または説明されたステップを実行してもよい。コンピュータ読み取り可能な媒体はコンピュータ記憶媒体(または非一時的な媒体)及び通信媒体(または一時的な媒体)を含むことができる。コンピュータ記憶媒体という用語は、情報(コンピュータ読み取り可能な命令、データ構造、プログラムモジュール又は他のデータ)を記憶するための任意の方法または技術において実現される、揮発性及び不揮発性、取り外し可能及び取り外し不可能な媒体を含むことは、当業者にとって周知のことである。さらに、通信媒体は通常、コンピュータ読み取り可能な命令、データ構造、プログラムモジュール、または搬送波または他の伝送メカニズムのような変調データ信号中の他のデータを含み、任意の情報伝送媒体を含むことができることは、当業者にとって周知のことである。したがって、本開示は、いかなる特定のハードウェア及びソフトウェアの組み合わせにも限定されない。
【0087】
以上の内容は、本開示の実施例を具体的な実施形態を合わせてさらに詳しく説明したものであり、本開示の具体的な実施がこれらの説明に限定されると認めるべきではない。本開示が属する技術分野の当業者にとって、本開示の発明構想を逸脱することなく、いくつかの簡単な推断演繹又は置換を行うことができ、それらはいずれも本開示の保護範囲に属するとみなすべきである。
【国際調査報告】