検索制御プログラム、検索方法、検索システム
【課題】検索要求及び更新要求の待ち時間を削減し、レスポンスのばらつきを小さくすることが可能な検索制御プログラムを提供する。
【解決手段】検索制御プログラムは、コンピュータに、格納部に格納された複数のレコードの一部分である第1のレコード群のうち、第1の検索条件を満たすレコードを抽出する第1の検索処理を実行させ、第1の検索処理の実行中に第2の検索条件を受け付けた場合に、格納部に格納された複数のレコードの第1のレコード群とは異なる一部分である第2のレコード群に含まれるレコードのうち、第1の検索条件を満たすレコード及び第2の検索条件を満たすレコードを抽出する第2の検索処理を実行させる。
【解決手段】検索制御プログラムは、コンピュータに、格納部に格納された複数のレコードの一部分である第1のレコード群のうち、第1の検索条件を満たすレコードを抽出する第1の検索処理を実行させ、第1の検索処理の実行中に第2の検索条件を受け付けた場合に、格納部に格納された複数のレコードの第1のレコード群とは異なる一部分である第2のレコード群に含まれるレコードのうち、第1の検索条件を満たすレコード及び第2の検索条件を満たすレコードを抽出する第2の検索処理を実行させる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、検索制御プログラム、検索方法、検索システムに関する。
【背景技術】
【0002】
データベースシステムにおいて、複数の検索要求についての検索処理を行なう場合に、データベースから順次データを読み出し、順次読み出されたデータのそれぞれに対して複数の検索要求を用いた検索を実行する検索(一括検索)技術がある。
【0003】
なお、データベースの排他制御方法において、データの参照のみを行う検索トランザクションとデータの更新を新たな版の生成により実行する更新トランザクションを混在して実行する場合において、版管理表を設けて、多版実行することが提案されている。
【0004】
また、データベースへの問い合わせに対するフロントエンドの役割をするデータベースサーバと、データベースに対する操作を行う役割をする複数のデータベース操作サーバで構成され、フロントエンドのデータベースサーバと、データベース操作サーバとはネットワークで繋がる。SQL文などの複数のデータベース操作文を含んだ、データベースへの問い合わせを、フロントエンドのデータベースサーバで解析して、同じデータベース操作サーバで一回の起動要求で実行できる1つ以上のデータベース操作文を判定してグループ化し、グループ化したデータベース操作文をデータベース操作サーバにまとめて転送し、転送した複数のデータベース操作文を一回の起動要求で起動することが提案されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2002−222194号公報
【特許文献2】特開平03−123946号公報
【特許文献3】特開平10−040146号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
一括検索処理を実行した場合に、一括検索処理の実行中にデータベースに到着する新たな検索要求は、一括検索処理が終了するまで、その実行を待たされる。この場合、新たな検索要求の待ち時間は、最大で一括検索処理に要する時間に及ぶ。このため、例えば、一括検索処理の実行の開始直後にデータベースに到着する新たな検索要求に応じた処理のレスポンスは、およそ一括検索処理に要する時間の2倍となる。一方、一括検索処理の実行の終了直前にデータベースに到着する新たな検索要求に応じた処理のレスポンスは、およそ一括検索処理に要する時間となる。従って、検索要求に応じた処理のレスポンスは、検索要求が到着するタイミングに依存して、最大で2倍と大きくばらつく。更新要求についても、同様である。
【0007】
本発明は、検索要求に応じた処理のレスポンスの遅れを抑制することを目的とする。
【課題を解決するための手段】
【0008】
開示される検索制御プログラムは、コンピュータに、格納部に格納された複数のレコードの一部分である第1のレコード群のうち、第1の検索条件を満たすレコードを抽出する第1の検索処理を実行させ、第1の検索処理の実行中に第2の検索条件を受け付けた場合に、格納部に格納された複数のレコードの第1のレコード群とは異なる一部分である第2のレコード群に含まれるレコードのうち、第1の検索条件を満たすレコード及び第2の検索条件を満たすレコードを抽出する第2の検索処理を実行させる。
【発明の効果】
【0009】
開示される検索制御プログラムによれば、データベースシステムにおいて実行される一括検索処理の制御において、検索要求に応じた処理のレスポンスの遅れを抑制することができる。
【図面の簡単な説明】
【0010】
【図1】検索システムの一例を示す図である。
【図2】図1の検索システムに設けられる検索装置の一例を示す図である。
【図3】図2の検索装置のハードウェア構成の一例を示す図である。
【図4】データ構造の説明図である。
【図5】データ構造の説明図である。
【図6】検索処理の説明図である。
【図7】要求受付け処理フローを示す。
【図8】実行要求処理フローを示す。
【図9】実行要求処理の説明図である。
【図10】更新要求処理フローを示す。
【図11】更新実行処理フローを示す。
【図12】更新要求処理の説明図である。
【図13】検索要求処理フローを示す。
【図14】検索要求処理の説明図である。
【図15】検索要求処理の説明図である。
【図16】一括検索実行処理フローを示す。
【図17】検索要求処理の他の例の説明図である。
【図18】検索要求処理フローの他の例を示す。
【図19】検索要求処理フローの他の例を示す。
【図20】検索要求処理の更に他の例の説明図である。
【図21】検索要求処理の更に他の例の説明図である。
【図22】検索要求処理の更に他の例の説明図である。
【図23】検索要求処理の更に他の例の説明図である。
【図24】検索要求処理の更に他の例の説明図である。
【図25】検索要求処理の更に他の例の説明図である。
【発明を実施するための形態】
【0011】
図1は、検索システムの一例を示す図である。
【0012】
検索システムは、検索装置100と、複数のクライアント200と、検索装置100と複数のクライアント200との間を接続するネットワーク300とを含む。検索装置100は、例えばデータベースサーバである。
【0013】
複数のクライアント200は、各々、アプリケーション201を含む。各々のアプリケーション201は、実行要求を発行する実行要求部であり、ネットワーク300を介して、実行要求を検索装置100へ送信する。実行要求は、例えば、検索要求、更新要求である。検索要求は、データの参照のみを行う要求である。更新要求は、データの更新を新たな版の生成により実行する要求である。
【0014】
検索装置100は、検索要求を受信すると、受信した検索要求を実行して、検索要求に対する応答として、検索結果であるデータを、ネットワーク300を介して、要求元であるクライアント200へ返信する。要求元であるクライアント200は、検索結果であるデータを受信する。検索装置100は、更新要求を受信すると、受信した更新要求を実行して、データを更新する。
【0015】
図2は、図1の検索システムに設けられる検索装置の一例を示す図である。
【0016】
検索装置100は、要求受付部1と、更新制御部2と、検索制御部3と、更新実行部4と、データ格納部5と、一括検索実行部6と、結果返却部7とを含む。要求受付部1は、更新要求キュー11と、検索要求キュー12とを含む。検索制御部3は、一括検索のための制御情報、具体的には、検索要求集合格納部に格納された検索要求集合31と、検索要求/バージョンID対応情報格納部に格納された検索要求/バージョンID対応情報32と、検索要求/区間ID対応情報格納部に格納された検索要求/区間ID対応情報33と、次の一括検索実施区間情報格納部に格納された次の一括検索実施区間情報34とを含む。データ格納部5は、一括検索のための制御情報、具体的には、格納データ集合格納部に格納された格納データ集合51と、最新バージョンID情報格納部に格納されたバージョンID情報52と、バージョンID/データ対応情報格納部に格納されたバージョンID/データ対応情報53と、区間ID/データ対応情報格納部に格納された区間ID/データ対応情報54とを含む。
【0017】
検索要求集合格納部、検索要求/バージョンID対応情報格納部、検索要求/区間ID対応情報格納部、次の一括検索実施区間情報格納部は、検索制御部3に設けられる。格納データ集合格納部、最新バージョンID情報格納部、バージョンID/データ対応情報格納部、区間ID/データ対応情報格納部は、データ格納部5に設けられる。
【0018】
検索要求集合31、検索要求/バージョンID対応情報32、検索要求/区間ID対応情報33、次の一括検索実施区間情報34、格納データ集合51、バージョンID情報52、バージョンID/データ対応情報53、区間ID/データ対応情報54については後述する。
【0019】
検索装置1は、データベースであるデータ格納部5に複数のデータ(レコード)を格納するデータベースサーバである。データ格納部5において、実際のデータは、格納データ集合51に格納される。検索装置1は、クライアント200から送信された更新要求に従って、更新制御部2の制御の下で、更新実行部4により、データベースであるデータ格納部5に格納されたデータを更新する。検索装置1は、クライアント200から送信された検索要求に従って、検索制御部3の制御の下で、一括検索実行部6により、データベースであるデータ格納部5に格納されたデータを一括検索する。
【0020】
要求受付部1は、クライアント200のアプリケーション201から送信された検索要求を受信、換言すれば、受付けて、検索要求を受信した順に検索要求キュー12に繋ぐ。検索要求は、例えば、要求の種別「検索」と、検索するデータのバージョンと、検索条件とを含む。検索条件は、例えば検索するデータのデータ名(レコードID)である。
【0021】
検索制御部3は、検索要求キュー12を参照して、検索要求キュー12に存在する1又は複数の検索要求を取り出し、取り出した1又は複数の検索要求を一括検索のための検索要求集合31に追加する。また、検索制御部3は、一括検索を実行する対象の区間である一括検索実施区間、換言すれば、次の一括検索実施区間を決定する。そして、検索制御部3は、一括検索実行部6を呼び出して、呼び出した一括検索実行部6に検索要求集合31を渡して、決定した一括検索実施区間についての一括検索を依頼する。
【0022】
検索要求集合31は、例えば、複数の検索要求をOR(論理和)結合した1個の検索式(クエリ)であるが、これに限られない。検索要求集合31は、複数の検索要求から新たに生成した検索式等であっても良い。複数の検索要求から新たに生成した検索式は、例えば、ハイトラフィック技術などの一括検索技術を適用するために生成した検索要求のグループである。
【0023】
一括検索実行部6は、検索制御部3から一括検索の依頼を受けると、依頼された一括検索実施区間についての一括検索を実行する。換言すれば、一括検索実行部6は、データベースであるデータ格納部5の格納データ集合51に格納された複数のデータを一括検索する。一括検索実行部6は、一括検索を実行した結果である検索結果を、一括検索の依頼に対する応答として、検索制御部3に返す。
【0024】
一括検索処理では、検索対象のデータから取り出したデータについて、複数の検索要求をまとめた「検索要求集合」を用いて照合が行なわれるので、検索対象のデータを取り出すのは1回ずつでよい。これにより、データをスキャンする回数を大きく減らすことができ、その結果、複数の検索要求に応じた検索処理の処理速度が向上する。本実施形態では、決定された実施区間のデータに対して一括検索処理を行なう。
【0025】
検索制御部3は、一括検索実行部6から検索結果を返されると、返された検索結果を結果返却部7へ送る。結果返却部7は、検索要求の要求元であるクライアント200のアプリケーション201へ、検索結果を送信、換言すれば、返却する。検索制御部3は、格納データ集合51に格納された複数のデータについての検索を終了した検索要求を、検索要求集合31から削除する。
【0026】
また、要求受付部1は、クライアント200のアプリケーション201から送信された更新要求を受信して、更新要求を受信した順に更新要求キュー11に繋ぐ。更新要求は、例えば、要求の種別「更新」と、更新前のデータのバージョンと、更新前のデータと更新後のデータとの差分とを含む。
【0027】
更新制御部2は、更新要求キュー11を参照して、更新要求キュー11に存在する1又は複数の更新要求を取り出す。また、更新制御部2は、データの新たなバージョン、換言すれば、最新バージョンIDを決定する。これにより、データの最新のバージョンが決定される。そして、更新制御部2は、更新実行部4を呼び出して、呼び出した更新実行部4に取り出した1又は複数の更新要求及び最新バージョンIDを渡して、データの更新を依頼する。
【0028】
更新実行部4は、更新制御部2からデータの更新の依頼を受けると、依頼されたデータの更新を実行する。換言すれば、更新実行部4は、1又は複数の更新要求に従って、データベースであるデータ格納部5の格納データ集合51に格納されたデータを更新する。これにより、更新要求の実行の都度、格納データ集合51において、データの新しいバージョンが生成される。
【0029】
複数の検索要求の実行の詳細、及び、更新要求の実行の詳細については、後述する。
【0030】
図3は、図2の検索装置のハードウェア構成の一例を示す図である。
【0031】
CPU101は、ROM102に格納された制御プログラムに従って、検索装置100を制御する。CPU101は、例えば主メモリであるRAM103上の検索プログラムを実行する。これにより、要求受付部1、更新制御部2、検索制御部3、更新実行部4、一括検索実行部6、結果返却部7が実現される。検索プログラムは、例えば、CD−ROMやDVD等の記録媒体109に格納され、記録媒体109からハードディスク106に入力され、ハードディスク106からRAM103にロードされる。
【0032】
データ格納部5は、例えばハードディスク106に設けられる。換言すれば、データは、例えばハードディスク106に格納される。データは、例えば、CD−ROMやDVD等の記録媒体109に格納され、記録媒体109からハードディスク106に入力され、必要に応じてハードディスク106からRAM103にロードされ、更新実行部4又は一括検索実行部6により処理される。
【0033】
入力装置104は、例えばキーボードであり、マウス等を含んでも良い。出力装置105は、例えばディスプレイであり、プリンタ等の出力装置を含んでも良い。CPU101、ROM102、RAM103、入力装置104、出力装置105、及び、ハードディスク106、ネットワーク接続部107は、バス108を介して、相互に接続される。
【0034】
ネットワーク接続部107は、例えば、送受信装置であり、ネットワーク300に接続され、ネットワーク300を介して他のコンピュータ、例えばクライアント200に接続される。これにより、検索装置100は、クライアント200との間で通信を行う。
【0035】
なお、データ格納部5が、検索装置100とネットワークを介して接続された他の情報処理装置に設けられるようにしても良い。この場合、データ格納部5は、他の情報処理装置の例えばハードディスクに設けられる。データは、例えば、CD−ROMやDVD等の記録媒体に格納され、記録媒体から他の情報処理装置のハードディスクに入力され、必要に応じて他の情報処理装置のハードディスクからRAMにロードされ、ネットワーク接続部から検索装置100のネットワーク接続部107へ送信され、検索装置100の更新実行部4又は一括検索実行部6により処理される。
【0036】
以下、説明の便宜上、最初に、図4及び図5を参照して、検索装置100におけるデータ構造について詳細に説明する。
【0037】
図4は、データ構造説明図である。図4は、特に、格納データ集合51と、格納データ集合51を一括検索するための種々の制御情報について示す。
【0038】
格納データ集合51は、データベースであるデータ格納部5に格納されたデータそれ自体である。格納データ集合51は、「レコード#1」「レコード#2」等のように、複数のデータを含む。各々のデータは、「レコード#1」のようなデータ名、例えばレコードIDを持ち、レコードIDにより表される。レコードIDは、データを一意に定める識別情報である。
【0039】
格納データ集合51は、「レコード#2」「レコード#2’」等のように、あるデータについての複数のバージョンを含む。「レコード#2’」は、「レコード#2」が1回更新されたデータ、換言すれば、「レコード#2」のバージョンIDに1を加えたバージョンIDを持つデータである。これにより、検索要求毎に異なるバージョンのデータを検索対象とする場合でも、複数回の一括検索処理ではなく、一回の一括検索処理で検索を完了することができる。
【0040】
バージョンID情報52は、格納データ集合51に格納されたデータにおける、現在の最も新しいバージョンを表す。データのバージョンは、バージョンIDにより表される。バージョンIDは、データのバージョンを一意に定める識別情報である。従って、バージョンID情報52は、格納データ集合51に格納されたデータの最新のバージョンIDである。
【0041】
バージョンIDは、図4において、格納データ集合51の右側に数字「1」〜「3」で表される。従って、図4に示す例においては、格納データ集合51には、バージョン「1」〜「3」のデータが格納されている。
【0042】
バージョンID/データ対応情報53は、「バージョンIDとデータとの対応」を示す情報であり、更新処理によって生成されるバージョン(版)と、そのバージョンに含まれるデータの対応関係を表す。図4において、例えば「レコード#1」とバージョンID「1」とが、バージョンID/データ対応情報53の一部である「線分」で結ばれている。これにより、例えば「レコード#1」が更新処理によってバージョンID「1」として生成されたこと、換言すれば、「レコード#1」はバージョンID「1」を持つことが表される。
【0043】
なお、実際には、バージョンID/データ対応情報53は、例えばバージョンID/データ対応テーブルに格納される。この場合、バージョンID/データ対応テーブルには、「レコード#1」等のデータに対応して、当該データのバージョンIDが格納される。
【0044】
区間ID/データ対応情報54は、「区間IDとデータとの対応」を示す情報であり、格納データ集合をいくつかに分割したそれぞれを示す区間IDと、その区間に分割されたデータの対応関係を表す。
【0045】
区間IDは、図4において、格納データ集合51の左側にアルファベット「A」〜「C」で表される。従って、図4に示す例においては、格納データ集合51は、区間「A」〜「C」に分割されている。区間「A」〜「C」には、各々、複数のデータ(レコード)が含まれる。従って、図4に示す例の格納データ集合51は、区間「A」〜「C」に属する複数のレコード群を含む。
【0046】
図4において、例えば「レコード#1」と区間ID「A」とが、区間ID/データ対応情報54の一部である「線分」で結ばれている。これにより、例えば「レコード#1」が更新処理によって区間「A」に分割されたこと、換言すれば、「レコード#1」は区間ID「A」を持つことが表される。
【0047】
なお、実際には、区間ID/データ対応情報54は、例えば区間ID/データ対応テーブルに格納される。この場合、区間ID/データ対応テーブルには、「レコード#1」等のデータに対応して、当該データの区間IDが格納される。
【0048】
データベースであるデータ格納部5は、更新実行部4から更新要求の実行を依頼されると、更新要求を実行する。これにより、データ格納部5は、更新要求の実行の都度に、格納データ集合51、バージョンID情報52、バージョンID/データ対応情報53、区間ID/データ対応情報54を作成又は更新し、各々の格納部に格納する。
【0049】
検索要求集合31は、受付けられた検索要求であって、かつ、まだ検索処理が終了していない検索要求の集合を表す。検索要求集合31は、「検索要求#1」「検索要求#2」等のように、複数の検索要求を含む。各々の検索要求は、「#1」のような検索要求IDを持ち、検索要求IDにより表される。検索要求IDは、検索要求を一意に定める識別情報である。
【0050】
検索要求/バージョンID対応情報32は、「検索要求と検索対象データバージョンIDの対応」を示す情報であり、検索要求が検索対象とするデータのバージョンを表す。図4において、例えば「検索要求#1」とバージョンID「1」とが、検索要求/バージョンID対応情報32の一部である「点線」で結ばれている。これにより、例えば「検索要求#1」がバージョンID「1」を持つデータを検索対象とすることが表される。
【0051】
なお、実際には、検索要求/バージョンID対応情報32は、例えば検索要求/バージョンID対応テーブルに格納される。この場合、検索要求/バージョンID対応テーブルには、「検索要求#1」等の検索要求に対応して、当該検索要求が検索対象とするデータのバージョンIDが格納される。
【0052】
検索要求/区間ID対応情報33は、「検索要求と検索開始区間IDの対応」を示す情報であり、当該検索要求の検索が開始された区間の区間IDを表す。図4において、例えば「検索要求#1」と区間ID「A」とが、検索要求/区間ID対応情報33の一部である「点線」で結ばれている。これにより、例えば「検索要求#1」が区間ID「A」から開始されたことが表される。
【0053】
なお、実際には、検索要求/区間ID対応情報33は、例えば検索要求/区間ID対応テーブルに格納される。この場合、検索要求/区間ID対応テーブルには、「検索要求#1」等の検索要求に対応して、当該検索要求が開始された区間IDが格納される。
【0054】
次の一括検索実施区間情報34は、「次の一括検索実施区間ID」を示す情報であり、一括検索実行部6が、次に検索対象とする区間を表す。詳しくは後述するように、一括検索実行部6は、格納データ集合51を複数の区間に分割し、分割した複数の区間を予め定められた所定の順番で巡回しながら一括検索を行う。従って、次の一括検索実施区間情報34は、一括検索実行部6により次に一括検索される区間の区間IDである。
【0055】
検索制御部3は、検索要求キュー12から検索要求を取り出すと、一括検索を実行するために、検索要求の取出しの都度に、検索要求集合31、検索要求/バージョンID対応情報32、検索要求/区間ID対応情報33、次の一括検索実施区間情報34を作成又は更新し、各々の格納部に格納する。
【0056】
図5は、データ構造説明図である。図5は、特に、格納データ集合51におけるデータ(レコード)の追加、更新、削除について示す。
【0057】
格納データ集合51において、バージョンIDが「1」であるデータは、「レコード#1」〜「レコード#4」である。従って、更新実行部4は、最初に、「レコード#1」〜「レコード#4」を格納データ集合51に格納する。この格納処理において、更新実行部4は、区間「A」に「レコード#1」及び「レコード#2」を割当て、区間「B」に「レコード#3」及び「レコード#4」を割当てる。これにより、各区間に属するレコードIDの数を等しくすることができる。
【0058】
次に、更新実行部4は、更新要求に従ってデータの一部を更新することにより、バージョンIDが「2」であるデータを生成する。図5の例においては、「レコード#3」が更新(置換)されることにより「レコード#3’」とされ、「レコード#5」が追加される。「レコード#3」の更新要求は置換要求であり、「レコード#5」の更新要求は追加要求である。
【0059】
「レコード#3’」は、区間「B」に属する「レコード#3」を更新したデータであるので、区間「B」に属するようにされる。また、「レコード#3’」は、現在における最新のバージョンIDが「1」であるので、バージョンID「2」を持つ。なお、最新のバージョンIDが「2」にインクリメントされる。一方、「レコード#5」は、新たに追加されたデータであるので、新たな区間「C」に属するようにされる。また、「レコード#5」は、バージョンID「2」を持つ。
【0060】
次に、更新実行部4は、新たな更新要求に従ってデータの一部を更新することにより、バージョンIDが「3」であるデータを生成する。図5の例においては、「レコード#2」が更新(置換)されることにより「レコード#2’」とされ、「レコード#6」が追加され、「レコード#4」が削除される。「レコード#2」の更新要求は置換要求であり、「レコード#6」の更新要求は追加要求であり、「レコード#4」の更新要求は削除要求である。
【0061】
「レコード#2’」は、区間「A」に属する「レコード#2」を更新したデータであるので、区間「A」に属するようにされる。また、「レコード#2’」は、現在における最新のバージョンIDが「2」であるので、バージョンID「3」を持つ。なお、最新のバージョンIDが「3」にインクリメントされる。一方、「レコード#6」は、新たに追加されたデータであるので、区間「C」に属するようにされる。また、「レコード#6」は、バージョンID「3」を持つ。
【0062】
次に、図6を参照して、検索装置100における一括検索について説明する。
【0063】
図6は、検索処理の説明図である。なお、図6において、例えば検索要求#1を「q1」と表わすこととする。
【0064】
一括検索実行部6は、複数の区間A〜Cに分割された格納データ集合51を、予め定められた所定の順番で巡回しながら、サイクリックに、一括検索を行う。換言すれば、一括検索実行部6は、区間A、区間B、区間Cの順で一括検索を実行し、これを繰り返す。例えば、ポイントA1で区間Aの一括検索を開始して、ポイントB1で区間Aの一括検索を終了する。ポイントB1で区間Bの一括検索を開始して、ポイントC1で区間Bの一括検索を終了する。ポイントC1で区間Cの一括検索を開始して、ポイントA2で区間Cの一括検索を終了する。そして、ポイントA2以後も、同様に、以上の順番で一括検索を繰り返す。ポイントA1からポイントB1までが区間Aであり、ポイントB1からポイントC1までが区間Bであり、ポイントC1からポイントA2までが区間Cである。
【0065】
検索制御部3は、新たな検索要求が到着すると、到着した検索要求を検索要求集合31に追加する。例えば、ポイントA1以前に「q1」が検索要求キュー12に到着しているので、「q1」が検索要求集合31とされる。これにより、一括検索実行部6は、検索要求集合「q1」により、区間Aについて、一括検索を実行する。検索要求集合「q1」は、1個の検索要求しか含まないが、検索要求集合である。また、区間Aの一括検索中に、「q2」が検索要求キュー12に到着するので、新たに「q2」が検索要求集合31に追加される。従って、一括検索実行部6は、検索要求集合「q1,q2」により、区間Bについて、一括検索を実行する。
【0066】
ある検索要求についての一括検索が終了した場合、換言すれば、格納データ集合51の複数の区間A〜Cの全てについてある検索要求を含む一括検索が終了した場合、検索制御部3は、当該検索要求を検索要求集合31から削除する。例えば、「q1」の検索はポイントA1から開始されるので、ポイントA2において、複数の区間A〜Cの全てについて検索が終了する。そこで、検索制御部3は、ポイントA2において、「q1」を検索要求集合31から削除する。また、「q2」の検索はポイントB1から開始されるので、検索制御部3は、ポイントB2において、「q2」を検索要求集合31から削除する。
【0067】
従って、検索要求が検索要求キュー12に到着するタイミングに依存して、異なるポイント及び異なる区間から一括検索が開始される。これにより、一括検索の途中で、新たに検索要求キュー12に到着した検索要求を検索要求集合31に加えることができる。
【0068】
一方、一括検索が複数の区間A〜Cについて連続して繰り返し実行されると、一括検索の途中で、新たに更新要求キュー11に到着した更新要求を実行することができない。そこで、検索処理が途切れるまで更新処理を待たせると共に、検索処理が途切れるポイントが設けられる。具体的には、ポイントA1、B1、C1等において、換言すれば、格納データ集合51の複数の区間A〜Cの各々についての一括検索が終了する都度に、更新要求キュー11に到着している1又は複数の更新要求が実行される。
【0069】
従って、ポイントを通過する都度、ポイントの各々において、終了した一括検索の後処理、更新要求の処理、開始される一括検索の前処理が実行される。終了した一括検索の後処理は、例えば、一括検索の結果が一括検索実行部6から検索制御部3へ返される処理、全ての区間について検索を終了した検索要求を削除する処理である。更新要求の処理は、例えば、更新実行部4が更新要求を実行する処理である。開始される一括検索の前処理は、例えば、新たな検索要求に基づいて検索要求集合31、検索要求/バージョンID対応情報32、検索要求/区間ID対応情報33、次の一括検索実施区間情報34等を生成し、一括検索を一括検索実行部6に依頼する処理である。
【0070】
以上により、一括検索を実行しつつ更新要求を実行することができる。これにより、一括検索において、1個のバージョンのデータだけを検索するのではなく、検索要求集合31に含まれる複数の検索要求が検索対象とする複数のバージョンのデータの和集合を検索することができる。これにより、検索するデータからいずれかのバージョンが漏れることを防止することができる。
【0071】
なお、検索要求集合31に含まれるある検索要求からみると、当該検索要求自体の検索対象でないバージョンに対する検索結果が含まれることになる。そこで、後述するように、検索結果から、他の検索要求の検索対象であるバージョンを除く。これにより、検索結果に不要な結果が含まれないようにすることができる。
【0072】
以上の図2〜図6から判るように、複数の検索要求を含む一括検索及び更新要求は、以下のように実行される。
【0073】
データベースであるデータ格納部5は、図4及び図5に示すように、データの追加、更新、削除の都度に、格納データ集合51、バージョンID情報52、バージョンID/データ対応情報53、区間ID/データ対応情報54を、データの追加、更新、削除を反映した内容に更新する。
【0074】
具体的には、データ格納部5は、更新実行部4からの更新要求に従って、格納データ集合51のデータ(レコード)を追加、更新、削除する。この時、データ格納部5は、図4及び図5に示すように、格納データ集合51におけるレコードIDが定まる。これにより、データ格納部5は、格納データ集合格納部に格納された格納データ集合51に含まれる複数のデータ、換言すれば、複数のレコードを、複数の区間「A」〜「C」、換言すれば、複数のレコード群に分割する。
【0075】
データ格納部5は、格納データ集合51のデータの追加又は更新の都度に、最新バージョンIDを生成して、最新バージョンID情報に格納する。バージョンID情報52は、現在のバージョンID情報52を+1だけインクリメントすることにより生成される。
【0076】
データ格納部5は、格納データ集合51のデータの追加又は更新の都度に、バージョンID/データ対応情報53を生成して、バージョンID/データ対応情報格納部に追加する。バージョンID/データ対応情報53は、追加又は更新されたデータ(レコード)に、当該追加又は更新に応じて生成された最新バージョンIDを対応付けることにより生成される。
【0077】
データ格納部5は、格納データ集合51のデータの追加又は更新の都度に、追加又は更新されたデータ(レコード)が検索を開始する区間IDとの対応を示す区間ID/データ対応情報54を生成して、区間ID/データ対応情報格納部に追加する。区間ID/データ対応情報54は、追加又は更新されたデータに、当該追加又は更新されたデータが属する区間IDを対応付けることにより生成される。追加又は更新されたデータが属する区間IDは、前述したように、データの追加又は更新の際に定まる。
【0078】
一方、検索制御部3は、図6に示すように、格納データ集合51の複数の区間、換言すれば、複数のレコード群について、一括検索を、予め定められた順序で繰り返し実行させる。一括検索は、検索要求集合31、換言すれば、複数の検索要求を満たすか否かの検索を一括して実行する検索処理である。ここで、複数の検索要求は、検索対象の区間の直前の区間について、換言すれば、検索対象のレコード群の直前のレコード群についての検索の実行中に受付けた検索要求を含む。
【0079】
検索制御部3は、図4及び図6に示すように、検索要求キュー12からの検索要求の取出しの都度に、換言すれば、図6に示すポイントの各々において、検索要求集合31、検索要求/バージョンID対応情報32、検索要求/区間ID対応情報33、次の一括検索実施区間情報34を、取出した検索要求を反映した内容に更新する。
【0080】
ここで、検索要求キュー12からの検索要求の取出しは、前述したように、1個の区間についての一括検索が終了したポイントにおいて実行される。従って、以下に説明する、検索要求集合31、検索要求/バージョンID対応情報32、検索要求/区間ID対応情報33、次の一括検索実施区間情報34の更新も、1個の区間についての一括検索が終了したポイントにおいて実行される。
【0081】
具体的には、検索制御部3は、検索要求キュー12から取出した1又は複数の検索要求を、検索要求集合31に追加する。換言すれば、検索制御部3は、現在の検索要求集合31に含まれる1又は複数の検索要求に、検索要求キュー12から取出した1又は複数の検索要求を追加した、新たな検索要求集合31を生成する。
【0082】
この時、複数の検索要求の各々が検索対象とするデータのバージョンは、互いに異なっていても良い。換言すれば、異なるバージョンのデータについても一括検索を実行することができる。これにより、複数の検索要求の間における分離レベルを向上することができる。
【0083】
検索制御部3は、検索要求集合31への検索要求の追加の都度に、検索要求/バージョンID対応情報32を生成して、検索要求/バージョンID対応情報格納部に追加する。検索要求/バージョンID対応情報32は、検索要求集合31における検索要求に、当該検索要求が検索対象とするデータのバージョンIDを対応付けることにより生成される。検索要求が検索対象とするデータのバージョンIDは、例えば、当該検索要求において定められる。
【0084】
なお、後述するように、検索制御部3が、検索要求が検索対象とするデータのバージョンIDを決定するようにしても良い。
【0085】
検索制御部3は、検索要求集合31への検索要求の追加の都度に、検索要求/区間ID対応情報33を生成して、検索要求/区間ID対応情報格納部に追加する。検索要求/区間ID対応情報33は、検索要求集合31における検索要求に、当該検索要求が検索を開始する区間IDを対応付けることにより生成される。検索要求が検索を開始する区間IDとしては、以下に説明するように、新たに生成された次の一括検索実施区間情報34が用いられる。
【0086】
検索制御部3は、検索要求集合31への検索要求の追加の都度に、次の一括検索実施区間情報34を生成して、次の一括検索実施区間情報格納部に格納する。次の一括検索実施区間情報34は、現在の次の一括検索実施区間情報34が示す区間IDの次の区間IDを求めることにより生成される。
【0087】
この後、検索制御部3は、一括検索実行部6を呼び出して、呼び出した一括検索実行部6に一括検索を依頼する。
【0088】
一括検索実行部6は、検索要求集合31に含まれる複数の検索要求が検索対象とする1又は複数のバージョンのデータの和集合を求める。そして、一括検索実行部6は、求めたデータの和集合を、検索要求集合31を用いて一括検索する。一括検索実行部6は、一括検索による検索結果から、検索対象でないバージョンを除く。
【0089】
図6に示す1個の検索要求「q1」についての検索は、格納データ集合51に格納された複数のレコードの一部分である1個の区間から、換言すれば、第1のレコード群からレコードを順次読み出し、読み出したレコードが検索要求「q1」を満たすか否かを判定し、判定の結果に応じて検索要求「q1」を満たす1又は複数のレコードを取得する処理である。
【0090】
ここで、例えば、第1の検索要求「q1」を受け付けた場合に、格納データ集合51の第1のレコード群について、第1の検索要求「q1」を満たすレコードを取得する、第1の検索が実行される。また、例えば、第1の検索要求「q1」の実行中に第2の検索要求「q2」を受け付けた場合に、第1のレコード群とは異なる第2のレコード群について、第1の検索要求「q1」を満たすレコード及び第2の検索要求「q2」を満たすレコードを取得する、第2の検索が実行される。
【0091】
従って、例えば、図6に示す第1の検索要求「q1」及び第2の検索要求「q2」を含む検索要求集合31による一括検索は、格納データ集合51に格納された複数のレコードの一部分である1個の区間からレコードを順次読み出し、読み出したレコードが第1の検索要求「q1」又は第2の検索要求「q2」を満たすか否かを判定し、判定の結果に応じて第1の検索要求「q1」を満たすレコード及び第2検索要求「q2」を満たすレコードを取得する処理である。例えば、第1の区間について第1の検索要求「q1」の実行中に第2の検索要求「q2」を受け付けた場合、第1の区間とは異なり第1の区間に続く第2の区間について、第1の検索要求「q1」及び第2の検索要求「q2」を含む検索要求集合31による一括検索が実行される。これにより、検索要求を実行するまでの待ち時間を削減することができ、また、検索要求に対するレスポンスのばらつきを小さくすることができる。
【0092】
この後、検索制御部3は、格納データ集合51の全ての区間、換言すれば、複数のレコード群の全てについて例えば検索要求「q1」が実行された後に、図6に示すポイントA2において、検索要求「q1」を、検索要求集合31に含まれる複数の検索要求から除く。検索要求「q1」についての検索処理は、一括検索のための検索要求集合31に含まれるので、検索要求集合31についての検索処理に含まれる。検索要求集合31についての検索処理の実行に応じて、検索制御部3は、検索要求/バージョンID対応情報32と、検索要求/区間ID対応情報33と、の検索要求「q1」に関する情報を更新する。
【0093】
一方、複数の区間のいずれかの区間について、換言すれば、複数のレコード群のいずれかのレコード群について一括検索を実行中に、格納データ集合51の複数のレコードのいずれかについての更新要求が受け付けられる場合がある。この場合、更新制御部2は、当該区間について実行中の一括検索が終了した後であって、実行中の一括検索の対象である区間の次の区間が開始される前に、更新要求を実行させる。換言すれば、更新制御部2は、実行中の一括検索の対象であるレコード群の次に一括検索の対象となるレコード群についての一括検索が開始される前に、図6に示すポイントの各々において、更新要求を実行させる。これにより、更新要求を実行するまでの待ち時間を削減することができ、また、更新要求に対するレスポンスのばらつきを小さくすることができる。
【0094】
ここで、例えば、図6に示す第1の検索要求「q1」を受け付けてから第2の検索要求「q2」を受け付けるまでの間に、前述の第2のレコード群に含まれるレコードについての更新要求を受け付ける場合がある。この場合、更新実行部4は、更新要求に応じて更新を行なう。これに応じて、データ格納部5は、更新前のレコード及び更新後のレコードのそれぞれと、それぞれを識別するバージョンID(版情報)とを関連付けて記憶する。また、データ格納部5は、第1の検索要求「q1」と更新前のレコードのバージョンIDとを対応付け、第2の検索要求「q2」と更新後のレコードのバージョンIDとを対応付けて記憶する。
【0095】
この後、一括検索実行部6は、第1の検索要求「q1」及び第2の検索要求「q2」を含む検索要求集合31による一括検索を実行して、第1の検索要求「q1」を満たすレコード及び第2検索要求「q2」を満たすレコードを取得する。更に、検索制御部3は、取得したレコードのうち、更新前のレコード及び更新後のレコードのいずれかであるレコードについて、第1の検索要求「q1」を満たすレコードであるか否かの判定を行い、第2の検索要求「q2」を満たすレコードであるか否かの判定を行う。
【0096】
また、複数の区間のいずれかの区間について、換言すれば、複数のレコード群のいずれかのレコード群について一括検索を実行中に、格納データ集合51の複数のレコードのいずれかについての削除要求が受け付けられる場合がある。この場合、更新制御部2は、当該区間について実行中の一括検索が終了した後において、更に、全ての区間、換言すれば、複数のレコード群の全てについて、予め定められた順序に従って、少なくとも1回の一括検索が実行された後に、削除要求を実行させる。
【0097】
次に、処理フローを参照して、検索処理及び更新処理について説明する。
【0098】
図7は、要求受付処理フローを示す。
【0099】
要求受付部1は、クライアント200のアプリケーション201からの要求(実行要求)を受信するまで待つ(S11)。要求受付部1は、要求を受信すると、受信した要求が検索要求であるか更新要求であるかを判定する(S12)。受信した要求が検索要求である場合、要求受付部1は、受信した検索要求を検索要求キュー12に追加し(S13)、S11を繰り返す。受信した要求が更新要求である場合、要求受付部1は、受信した更新要求を更新要求キュー11に追加し(S14)、S11を繰り返す。換言すれば、要求受付部1は、受信した要求を検索要求と更新要求とに分類して、各々のキューに追加する。
【0100】
なお、受信した要求を検索要求と更新要求とに分類することなく、1個のキューに到着順に追加するようにしても良い。
【0101】
図8は、実行要求処理フローを示す。
【0102】
更新制御部2は、要求受付部1の更新要求キュー11をチェックして(S21)、新たな更新要求が更新要求キュー11に存在するか否かを判定する(S22)。新たな更新要求が更新要求キュー11に存在する場合(S22 Yes)、更新実行部4は、更新要求キュー11から新たな更新要求を取り出して、取り出した新たな更新要求に基づいて新しいデータの版を作成して、データベースであるデータ格納部5に格納された旧版のデータの更新処理を実行する(S23)。新たな更新要求が更新要求キュー11に存在しない場合(S22 No)、更新実行部4は、S23の実行を省略する。
【0103】
この後、検索制御部3は、要求受付部1の検索要求キュー12をチェックして(S24)、新たな検索要求が検索要求キュー12に存在するか否かを判定する(S25)。新たな検索要求が検索要求キュー12に存在する場合(S25 Yes)、検索制御部3は、更新要求キュー11から新たな検索要求を取り出して、取り出した新たな検索要求を検索要求集合に加える(S26)。新たな検索要求が検索要求キュー12に存在しない場合(S25 No)、検索制御部3は、S26の実行を省略する。
【0104】
この後、一括検索実行部6は、現在の検索対象である区間を検索要求集合を用いて一括検索することにより、検索要求集合による検索結果(一括検索結果)であるデータの和集合を求め、求めたデータの和集合から不要な検索結果を除く(S27)。
【0105】
この後、検索制御部3は、検索対象区間を現在の区間の次の区間に設定し(S28)、一括検索結果から検索対象でないバージョンのデータを除いた残りを、検索の結果として、結果返却部7に送る(S29)。結果返却部7は、受取った検索の結果を、要求元であるクライアント200のアプリケーション201に返信する。この後、検索制御部3は、全区間の検索を終了した検索要求を、検索要求集合から除き(S210)、S21を繰り返す。
【0106】
なお、S21〜S210の処理は、いずれの処理を先に実行するようにしても良い。
【0107】
図8の実行要求処理フローにおいて、図9に示すように、一括検索実行部6は、区間A、区間B、区間Cの順に、サイクリックに一括検索を実行する。次の一括検索実施区間情報34は、区間Aの一括検索時にはBとされ、区間Bの一括検索時にはCとされ、区間Cの一括検索時にはAとされる。従って、次の一括検索実施区間情報34は、一括検索の実行に1区間分だけ先行して、所定の順で、サイクリックに変化する。
【0108】
また、バージョンID情報52は、更新処理を実行する都度に追加される。また、バージョンID/データ対応情報53も、更新処理を実行する都度に追加される。
【0109】
また、検索要求集合31は、検索要求キュー12から検索要求が取出される都度に増加し、検索要求が全ての区間の検索を終了する都度に減少する。
【0110】
図10は、更新要求処理フローを示す。
【0111】
更新制御部2は、要求受付部1の更新要求キュー11をチェックして(S31)、新たな更新要求が更新要求キュー11に存在するか、又は、更新要求キュー11が空であるかを判定する(S32)。なお、S31及びS32は、図8のS21及びS22と同一であり、図10と図8との関係を明確に示すために、再度、図10に示される。一方、以下のS33〜S38は、図8のS23に相当する。
【0112】
新たな更新要求が更新要求キュー11に存在する場合、更新実行部4は、更新要求キュー11に存在する全ての更新要求を取り出して(S33)、現在のデータバージョンIDに基づいて、新しいデータバージョンIDを取得する(S34)。例えば、更新実行部4は、バージョンID情報52、換言すれば、現在のデータバージョンIDを参照し、参照したデータバージョンIDを+1だけインクリメントすることにより、新しいデータバージョンIDを取得する。次に、更新実行部4は、現在のバージョンに対する「バージョンIDとデータの対応」に基づいて、新しいバージョンに対する「バージョンIDとデータの対応」を作成する(S35)。例えば、更新実行部4は、バージョンID/データ対応情報53、換言すれば、現在のバージョンに対する「バージョンIDとデータの対応」をコピーする。そして、更新実行部4は、コピーした「バージョンIDとデータの対応」における「バージョンID」を新しいバージョンIDに置換する。これにより、新しいバージョンに対する「バージョンIDとデータの対応」が作成される。
【0113】
この後、更新実行部4は、格納データ集合51について更新処理を実行した後(S36)、ループが終了したか、又は、ループがその途中であるかを判定する(S37)。ループがその途中である場合、更新実行部4は、S36を繰り返す。ループが終了した場合、更新実行部4は、バージョンID情報52、換言すれば、「最新データバージョンID」を、S34において取得した新しいデータバージョンIDに更新する(S38)。また、S38において、更新実行部4は、バージョンID/データ対応情報53、換言すれば、「バージョンIDとデータの対応」に、S35において作成した新しいバージョンに対する「バージョンIDとデータの対応」を追加する。
【0114】
S32において、更新要求キュー11が空である場合、以下のS33〜S38は、省略される。換言すれば、更新実行部4は、処理を実行しない。
【0115】
なお、図10の例においては、更新要求キュー11から取り出した全ての更新要求について1個のバージョンを生成しているが、更新要求キュー11から取り出した複数の更新要求の各々について、異なるバージョンを生成するようにしても良い。
【0116】
図11は、更新実行処理フローを示す。
【0117】
更新実行部4は、更新要求の種別をチェックし(S41)、更新要求が追加要求、更新(置換)要求、削除要求のいずれであるかを判定する(S42)。
【0118】
更新要求が追加要求である場合、更新実行部4は、追加要求に従って、新しいデータ、換言すれば、追加データを作成して、作成した追加データを格納データ集合51、換言すれば、「データ集合」に追加する(S43)。次に、更新実行部4は、新しいバージョンに対する「バージョンIDとデータ」に、追加データについてのバージョンID及びデータを加える(S44)。次に、更新実行部4は、追加データの区間IDを決定し、当該決定に基づいて、「区間IDとデータの対応」に、追加データについての区間ID及びデータを加える(S45)。
【0119】
更新要求が更新要求である場合、更新実行部4は、更新要求に従って、データの新しいバージョン、換言すれば、置換後のデータを作成して、作成した置換後のデータを格納データ集合51、換言すれば、「データ集合」に追加する(S46)。次に、更新実行部4は、新しいバージョンに対する「バージョンIDとデータ」に、置換後のデータについてのバージョンID及びデータを加える(S47)。次に、更新実行部4は、「区間IDとデータの対応」に、置換後のデータについての区間ID及びデータを加える(S48)。更に、更新実行部4は、新しいバージョンに対する「バージョンIDとデータ」から、置換前のデータを除く(S49)。
【0120】
更新要求が削除要求である場合、更新実行部4は、削除要求に従って、新しいバージョンに対する「バージョンIDとデータ」から、削除データを除く(S410)。
【0121】
なお、図11の例においては、更新要求が追加要求である場合には、追加されるデータの持つ属性に従って、追加される区間が決定される。例えば、図5を参照して前述したように、「レコード#3’」は区間Bに属する「レコード#3」を更新したデータであるので区間Bに属するようにされ、「レコード#5」は新たに追加されるデータであるので新たな区間Cに属するようにされる。しかし、例えば、追加されるデータの順に追加先の区間を、区間A、区間B、区間Cのように、順番に変更するようにしても良い。この場合、1個の区間に属するデータの数を予め定めるようにしても良い。
【0122】
図11の更新実行処理フローにおいては、図12に示すように、バージョンIDとデータ(レコード)との対応関係は、新しいバージョンID(例では3)の1つ前のバージョンIDとデータと(例では2)の対応関係に基づいて生成される。
【0123】
例えば、図12に示すように、現在のバージョンID「2」には、バージョンID/データ対応情報53により、レコード#1、#2、#3’、#4、#5が対応付けられている。これは、図5に示すバージョンID「2」の状態である。新しいバージョンIDは「3」である。新しいバージョンID「3」とデータ(レコード)との対応関係は、バージョンID「2」とデータとの対応関係に基づいて生成される。新しいバージョンID「3」の状態が、図5に示す状態であるとする。
【0124】
この場合、最初に、新しいバージョンID「3」には、バージョンID「2」とデータとの対応関係をコピーすることにより、レコード#1、#2、#3’、#4、#5が対応付けられる。次に、レコード#2の更新要求によってレコード#2がレコード#2’に置換されるので、レコード#2との対応が削除され、レコード#2’との対応が追加される。更に、レコード#4の削除要求によってレコード#4との対応が削除され、レコード#6の追加要求によってレコード#6との対応が追加される。
【0125】
図13は、検索要求処理フローを示す。
【0126】
検索制御部3は、要求受付部1の検索要求キュー12をチェックして(S51)、新たな検索要求が検索要求キュー12に存在するか、又は、検索要求キュー12が空であるかを判定する(S52)。なお、S51及びS52は、図8のS24及びS25と同一であり、図13と図8との関係を明確に示すために、再度、図13に示される。一方、以下のS53〜S512は、図8のS26〜S210に相当する。
【0127】
新たな検索要求が検索要求キュー12に存在する場合、検索要求の実行の開始処理が実行される。具体的には、検索制御部3は、検索要求キュー12に存在する全ての検索要求を取り出して(S53)、取り出した検索要求を、検索要求集合31、換言すれば、検索要求出力へ加える(S54)。また、検索制御部3は、取り出した検索要求の検索対象バージョンを、検索要求/バージョンID対応情報32、換言すれば、「検索要求と検索対象データバージョンIDの対応」に追加し(S55)、また、取り出した検索要求に対する「検索要求と検索開始区間IDの対応」を、「次の一括検索実施区間ID」にする(S56)。
【0128】
S52において、検索要求キュー12が空である場合、検索制御部3は、S53〜S56を省略する。
【0129】
この後、一括検索実行部6は、「次の一括検索実施区間ID」の指す区間に対して一括検索処理を実施する(S57)。これにより、検索要求キュー12に新たな検索要求があるか否かに拘らず、1個の区間について一括検索が実行される。
【0130】
この後、検索制御部3は、「次の一括検索実施区間」を次の区間に変更する(S58)。更に、検索制御部3は、「検索要求と検索開始区間IDの対応」を参照し、検索開始区間が「次の一括検索実施区間」に一致するものがあるかチェックし(S59)、検索開始区間が「次の一括検索実施区間」に一致するものがあるか否かを判定する(S510)。検索開始区間が「次の一括検索実施区間」に一致するものがない場合、検索制御部3は、S51を繰り返す。
【0131】
検索開始区間が「次の一括検索実施区間」に一致するものがある場合、検索要求の実行の終了処理が行われる。このように、検索制御部3の処理は、検索要求の実行の開始処理、一括検索処理、検索要求の実行の終了処理を含む。具体的には、検索制御部3は、一致する検索要求に対する検索結果を、結果返却部7へ送る(S511)。更に、検索制御部3は、一致する検索要求を検索要求集合31から除き(S512)、S51を繰り返す。ここで、検索制御部3は、S512において、一致する検索要求とバージョンIDとの対応を示す情報を検索要求/バージョンID対応情報32から除き、一致する検索要求と区間IDとの対応を示す情報を検索要求/区間ID対応情報33から除く。
【0132】
なお、S511においては、検索結果をまとめて結果返却部7へ送るが、これに代えて、1個の区間についての一括検索を終了する都度に、1個の区間における検索結果を結果返却部7に送るようにしてもよい。
【0133】
図13の検索要求処理フローにおいては、図14に示すように、例えば、次の一括検索実施区間情報34により示される「次の一括検索実施区間」が区間Bである時点で、最新バージョンID情報により示される最新のデータのバージョンIDは「2」である。換言すれば、バージョンID「3」のデータである、レコード#2’及びレコード6は存在しない。また、「次の一括検索実施区間」が区間Bである時点で、バージョンID「3」のデータにおいて、レコード#4は削除されていない。
【0134】
一方、「次の一括検索実施区間」が区間Bである時点で、換言すれば、区間Aの一括検索の実行中の時点で、検索要求#2及び検索要求#3が、検索要求キュー21に到着する。そこで、検索要求#2及び検索要求#3は、区間Aの一括検索の終了後、区間Bの一括検索から検索要求集合31に追加される。
【0135】
また、区間Aの一括検索の実行中の時点で、レコード#2’の更新要求、レコード#6の追加要求、レコード#4の削除要求が更新要求キュー11に到着する。そこで、図15に示すように、区間Aの一括検索の終了後、区間Bの一括検索の開始前に、バージョンID「3」のデータが作成される。これにより、レコード#2’が更新され、レコード#6が追加され、レコード#4が削除される。
【0136】
この後、図15に示すように、「次の一括検索実施区間」が区間Cに変更されると共に、区間Bの一括検索が開始される。この後、「次の一括検索実施区間」が、図15に示すように、区間A、区間B、区間Cの順で変更され、更に、これが繰り返される。これにより、例えば区間Aから検索が開始される検索要求#1が一巡して、再度「次の一括検索実施区間」が区間Aになると、検索要求#1は、全ての区間A〜区間Cについて検索されたことになる。そこで、検索結果が結果返却部7に送られ、検索要求#1が検索要求集合31から除かれる。
【0137】
図16は、一括検索実行処理フローを示す。
【0138】
一括検索実行部6は、検索要求集合31に含まれる複数の検索要求をグループ化する、換言すれば、一括検索のための検索式を生成する(S61)。次に、一括検索実行部6は、「検索要求と検索対象データバージョンIDの対応」を参照し、検索要求集合31に含まれる複数の検索要求の全てについて、検索対象とするデータのバージョンIDの和集合を取得する(S62)。次に、一括検索実行部6は、「バージョンIDとデータ集合の対応」を参照し、S62において取得した全てのバージョンIDに対するデータの和集合を取得する(S63)。次に、一括検索実行部6は、「次の一括検索実施区間」に対する「区間IDとデータ集合の対応」を参照し、次の一括検索実施区間に対するデータを取得する(S64)。
【0139】
この後、一括検索実行部6は、「一括検索対象バージョン集合に対するデータ」と「次の一括検索実施区間に対するデータ」の共通部分(積集合)に含まれるデータを、 一括検索する(S65)。
【0140】
この後、一括検索実行部6は、一括検索処理の結果を検索要求ごとの結果に振り分ける(S66)。次に、一括検索実行部6は、「検索要求と検索対象データバージョンIDの対応」と「バージョンIDとデータ集合の対応」を参照し、検索要求ごとの検索結果から、 検索対象データ集合に含まれないデータに対する検索結果を除く(S67)。次に、一括検索実行部6は、ループが終了したか、又は、ループがその途中であるかを判定する(S68)。ループがその途中である場合、一括検索実行部6は、S67を繰り返す。ループが終了した場合、一括検索実行部6は、処理を終了する。
【0141】
図16の一括検索実行処理において、図13と同様に、前処理、一括検索処理、後処理の3個の処理が実行される。前処理は、S61〜S64であり、検索結果から漏れがないようにするために一括検索処理の入力となる一括検索の対象であるデータ集合を求める処理である。一括検索処理は、S65であり、一括検索の対象であるデータ集合について、実際の一括検索を実行する処理である。後処理は、S66〜S68であり、一括検索の結果から各検索要求にとっての不要な検索結果を除く処理である。
【0142】
なお、図16の例においては、前処理、一括検索処理、後処理が順番に実行されているが、前処理、一括検索処理、後処理を別のプロセス又はスレッドで実行して、並行に実行するようにしても良い。
【0143】
ここで、前処理について、図4を参照して説明する。例えば、図4において、区間Bについて一括検索を実行するとする。この場合の前処理は、以下のようになる。
【0144】
検索要求集合31に含まれる各々の検索要求が検索対象とするデータのバージョンIDの和集合は、{バージョンID「1」, バージョンID「2」}である(S62)。従って、バージョンID「1」に対応するデータとバージョンID「2」に対応するデータの和集合は、{レコード#1, レコード#2, レコード#3, レコード#3’, レコード#4, レコード#5}である(S63)。一方、区間Bについての「次の一括検索実施区間に対するデータの和集合」は、{レコード#3, レコード#3’, レコード#4}である(S64)。従って、以上に述べた2個の和集合の共通部分は{レコード#3, レコード#3’, レコード#4}であり、この共通部分について一括検索が実行される。
【0145】
次に、後処理について、前処理と同様に、図4を参照して説明する。例えば、図4において、以上の前処理の後に区間Bについて一括検索を実行したとする。この場合の後処理は、以下のようになる。
【0146】
一括検索の結果において、例えば検索要求#1にとって、レコード#3’ は検索要求#1の検索対象バージョン1に含まれないデータである。そこで、検索要求#1に対して返却される検索結果から、レコード#3’が除かれる。検索要求#2、#3についても、同様に、各々に返却される検索結果から、各々にとって不要なレコードが除かれる。
【0147】
なお、一括検索により得られた検索結果に含まれるデータ(レコード)がある検索要求にとって不要か否かを、以下のように判定するようにしても良い。
【0148】
例えば、データ毎の検索結果に、そのデータが含まれるバージョンIDの一覧を付加するようにしても良い。例えば、図4のレコード#1の検索結果に対しては、{バージョンID「1」, バージョンID「2」, バージョンID「3」}を、レコード#2の検索結果に対しては、{バージョンID「1」, バージョンID「2」}という情報を付加する。なお、バージョンIDが番号で表現される場合には、データ毎の検索結果に、「バージョンID「1」からバージョンID「3」まで」のように「バージョンIDの範囲」を示す情報を付加するようにしても良い。
【0149】
また、検索結果に対するバージョンの判定を、検索要求のクエリ(検索式)の一部と見なすようにしても良い。この場合、検索結果が、検索対象であるバージョンに含まれるかどうかを、元の検索要求のクエリに対するAND条件(論理積)として追加することができる。例えば、図4の検索要求#2についてのクエリは「 (検索要求#2の本来の検索式) AND(バージョンID「2」) 」のようにクエリに追加する。これにより、一括検索と同時に、不要な検索結果を除去することができる。
【0150】
次に、検索要求処理の他の例について説明する。図17〜図19は、検索要求処理の他の例の説明図である。
【0151】
図13の検索要求処理においては、検索要求が検索対象とするデータのバージョンはクライアント200のアプリケーション201から送信され、従って、一括検索実行部6は、受信したバージョンを検索対象とする。しかし、検索要求が検索要求キュー12に到着した時点における最新のデータのバージョンを、当該検索要求の検索対象のバージョンとするようにしても良い。
【0152】
この場合、検索要求は常に最新のバージョンを検索するので、古いバージョンにしか含まれないデータは削除することができる。しかし、新しいバージョンのデータが生成され古いバージョンが最新バージョンで無くなった瞬間においては、まだ古いバージョンに対する検索処理が行われている。従って、最新バージョンで無くなった瞬間に、古いバージョンを削除することはできない。換言すれば、削除要求を実行するまで古いバージョンは削除されない。しかし、古いバージョンのデータは、最新バージョンに更新された後に検索を開始した検索処理が全てのデータ、換言すれば、全ての区間について一巡して検索を実行すれば、それ以後、検索対象になることはない。
【0153】
そこで、図17に示すように、検索制御部3は、一括検索のための制御情報として、バージョンID/区間ID対応情報35を保持する。バージョンID/区間ID対応情報35は、検索制御部3のバージョンID/区間ID対応情報格納部に格納される。バージョンID/区間ID対応情報35は、「バージョンIDと検索終了区間の区間IDとの対応」を示す情報であり、データのバージョン(版)と、そのバージョンのデータが最後に検索される区間IDの対応関係を表す。
【0154】
なお、実際には、バージョンID/区間ID対応情報35は、例えばバージョンID/区間ID対応テーブルに格納される。この場合、バージョンID/区間ID対応テーブルには、「バージョンID」に対応して、当該バージョンのデータが最後に検索される区間IDが格納される。
【0155】
図17において、例えば、バージョンID「1」と区間ID「B」、及び、バージョンID「2」と区間ID「B」が、バージョンID/区間ID対応情報35の一部である「点線」で結ばれている。これにより、例えばバージョンID「1」及び「2」のデータが、最終的には、区間「B」まで検索対象とされることが表される。
【0156】
図18及び図19は、一体となって、検索要求処理フローの他の例を示す。
【0157】
検索制御部3は、図13のS51〜S56と同様に、S71〜S76を実行する。換言すれば、検索制御部3は、要求受付部1の検索要求キュー12をチェックして(S71)、新たな検索要求が検索要求キュー12に存在するかを判定する(S72)。新たな検索要求が検索要求キュー12に存在する場合、検索制御部3は、検索要求キュー12に存在する全ての検索要求を取り出して(S73)、取り出した検索要求を検索要求集合31へ加え(S74)、取り出した検索要求の検索対象バージョンを検索要求/バージョンID対応情報32に追加し(S75)、取り出した検索要求に対する「検索要求と検索開始区間IDの対応」を「次の一括検索実施区間ID」にする(S76)。
【0158】
この後、検索制御部3は、各々の検索要求に対し、「検索要求と検索終了区間IDの対応」、換言すれば、検索対象であるデータのバージョンIDに対応する検索終了区間IDを、「次の一括検索実施区間ID」に変更する(S77)。
【0159】
S72において、検索要求キュー12が空である場合、検索制御部3は、S73〜S77を省略する。
【0160】
この後、一括検索実行部6は、図13のS57と同様に、「次の一括検索実施中区間ID」の指す区間に対して一括検索処理を実施する(S78)。
【0161】
この後、検索制御部3は、図13のS58〜S512と同様に、S79〜S713を実行する。換言すれば、検索制御部3は、「次の一括検索実施区間」を次の区間に変更し(S79)、「検索開始区間が「次の一括検索実施区間」に一致するものがあるかチェックし(S710)、判定する(S711)。検索開始区間が「次の一括検索実施区間」に一致するものがない場合、検索制御部3は、S71を繰り返す。検索開始区間が「次の一括検索実施区間」に一致するものがある場合、検索制御部3は、一致する検索要求に対する検索結果を、結果返却部7へ送り(S712)、一致する検索要求を検索要求集合31から除く(S713)。
【0162】
この後、検索制御部3は、「バージョンIDと検索終了区間IDの対応」を参照し、検索終了区間IDが「次の一括検索実施区間ID」と等しいバージョンIDを求め(S714)、求めたバージョンIDが最新バージョンであるか否かを判定する(S715)。
【0163】
求めたバージョンIDが最新バージョンである場合(S715 Yes)、検索制御部3は、S71を繰り返す。これにより、求めたバージョンIDが最新バージョンである場合には、当該バージョンIDのデータは、検索を終了したバージョンであっても、削除されない。これは、当該バージョンIDのデータは、最新バージョンであるので、その後に発行される新たな検索要求の検索対象となるためである。
【0164】
求めたバージョンIDが最新バージョンでない場合(S715 No)、検索制御部3は、求めたバージョンIDについての「バージョンIDとデータ集合の対応」を削除する(S716)。更に、検索制御部3は、以上の処理によりどのバージョンIDとも対応しなくなったデータのレコードを、格納データ集合51から削除し(S717)、S71を繰り返す。
【0165】
以上の処理、特に、S77、S714〜S717によれば、検索の開始により、「バージョンIDと検索終了区間IDの対応」は、 当該バージョンIDについての検索が開始されるたびに上書きされ、かつ、そのときの区間IDが設定される。ここで、「検索を開始するときの区間」は「検索を終了するときの区間」であるので、設定した区間IDは、検索終了のタイミングを示す。また、「バージョンIDと検索終了区間IDの対応」は当該バージョンIDについての検索の開始の都度に上書きされるので、当該バージョンIDについての最も遅い検索が検索を終了する区間IDが設定される。これにより、あるバージョンIDを持つデータについて、当該データの検索が終了した時点で、直ちに、当該データを削除することができ、格納データ集合51を効率よく使用することができる。
【0166】
なお、クライアント200のアプリケーション201毎の一連の処理の情報(検索要求の情報)をシステム内に保持し、例えばその一連の処理が開始した時点のバージョンを検索対象とするようにしても良い。この場合も、検索要求は常に最新のバージョンを検索する訳ではないので、あるバージョンが最新バージョンで無くなった瞬間に古いバージョンを削除することはできない。しかし、この場合にも、検索要求が検索要求キュー12に到着した時点における最新のデータのバージョンを検索対象のバージョンとする場合と同様に、図17〜図19を適用することができる。
【0167】
次に、検索要求処理の更に他の例について説明する。図20〜図25は、検索要求処理の更に他の例の説明図である。
【0168】
図13の実施例では、検索要求キュー12に新たに到着した検索要求は、そのまま検索要求集合31に追加される。しかし、検索要求キュー12に新たに到着した検索要求を検索要求集合31に追加するかどうかを判定し、予め定められた条件に該当する場合に追加するようにしても良い。
【0169】
そこで、追加の判定の条件として、以下に述べる「コストC」と「ベネフィットB」とを用いる。ここで、検索要求集合31に新しいバージョンを検索する検索要求を加える場合におけるコストCは、当該新しいバージョンだけにしか含まれないデータを検索する時間である。例えば、図21を参照して後述するように、複数のバージョンに対して一括検索処理を行うと、不要なデータを検索することになる。検索要求集合31に新しいバージョンを検索する検索要求を加える場合におけるベネフィットBは、追加しようとする検索要求の待ち時間の削減分である。
【0170】
ベネフィットBがコストCを上回る場合には、新しいバージョンを検索する検索要求を検索要求集合31に追加する。これにより、検索装置100の全体として、平均の検索性能が向上することができる。ベネフィットBがコストC以下である場合には、新しいバージョンを検索する検索要求を検索要求集合31に追加しない。これにより、検索装置100の全体として、平均の検索性能が低下することを防止することができる。
【0171】
以下、検索要求の検索対象を、検索を開始する時点の最新バージョンとして検索を実行する場合における、コストCとベネフィットBとを計算する。なお、ここで、更新要求及び検索要求は時間的に均等な間隔で更新要求キュー11及び検索要求キュー12に到着するものとし、更新要求によってあるデータが他のデータに置換されるものとし、合計のデータ件数は変わらないものとする。
【0172】
例えば、図20に示すように、データは、区間「A」〜区間「E」に分割される。検索対象の区間は、「A」から「E」までこの順に一括検索され、これを繰り返す。1回目の区間「A」の一括検索をA[1]と表し、2回目の区間「A」の一括検索をA[2]と表し、他の区間についても同様に表すとする。更に、図20において、区間「A」〜区間「E」の各々について一括検索を開始する都度に、新たなバージョンの検索要求が加えられる。データのバージョンは、「0」から「9」まで更新される。結果として、図20は、一括検索の対象であるデータのバージョンの変化を示す。
【0173】
具体的には、図20において、左右に延びる「太線」は、各々、あるバージョンについての検索処理の実施区間を示す。「点線で囲まれた部分」は、各々、ある区間における検索体操であるデータのバージョンの集合を示す。左右に延びる「区間に対応する矢印」は、各々、ある区間の検索中に検索要求キュー12に到着した検索要求の集合を示す。「区間に対応する矢印」と「太線」とを結ぶ上下に延びる「矢印」は、各々、当該「矢印で表される区間」、換言すれば、検索要求の集合についての検索開始区間及び検索対象であるバージョンを示す。
【0174】
例えば、最初のバージョン番号(バージョンID)「0」に対する一括検索は、区間A[1]から開始される。バージョン番号「0」に対する検索処理は、その後、区間E[1]の一括検索が終了するまで続く。
【0175】
区間A[1]の一括検索が終了すると、区間A[1]の一括検索中に到着した更新要求が実行される。これにより、最新バージョンが「1」に更新される。従って、区間A[1]の一括検索中に到着して区間B[1]から検索を開始する第2の検索要求集合の検索対象であるバージョンも「1」になる。第2の検索要求集合による検索は、その後、区間A[2]に対する一括検索が終了するまで続く。以上ように、あるバージョンに対する検索要求はオーバラップしながら続いていく。
【0176】
ここで、検索要求のオーバラップについて、ある区間に着目すると以下の通りである。例えば、区間A[2]に着目してみると、区間A[2]に対する一括検索において、検索対象となるバージョンの集合は、バージョン番号「1」〜「5」の5個である。同様に、区間B[2]に着目してみると、区間B[2]に対する一括検索において、検索対象となるバージョンの集合は、バージョン番号「2」〜「6」の5個である。
【0177】
そこで、ある区間において一括検索するデータに着目すると、図21のようになる。図21は、例えば区間A[2]に着目して、当該区間A[2]において一括検索されるデータのバージョンを示す。図21において、U(1,2)はバージョンが「1」から「2」へ変更された際に更新された部分であり、U(2,3)はバージョンが「2」から「3」へ変更された際に更新された部分であり、U(3,4)はバージョンが「3」から「4」へ変更された際に更新された部分であり、U(4,5)はバージョンが「4」から「5」へ変更された際に更新された部分である。なお、図21において、図21における更新を図23における更新と区別するために、添え字「−1」を付している。
【0178】
例えば、U(1,2)−1がレコード#2であるとすると、レコード#2は、バージョンが「1」から「2」へ変更された際に更新された部分「2〜5」と、更新されていない部分「1」とを含む。また、例えば、U(2,3)−1がレコード#4であるとすると、レコード#4は、バージョンが「2」から「3」へ変更された際に更新された部分「3〜5」と、更新されていない部分「1〜2」とを含む。
【0179】
図21において、ある1個の区間についての検索を実行しバージョンが変更される都度に、Δn1件のデータが更新される。従って、バージョン番号「1」〜「5」のデータを検索する場合、元のデータに加えて、Δn1 ×4件のデータを追加して検索することになる。
【0180】
ある1個の区間で変更されるデータ量Δn1は、図21により示されるように、データの全体件数N(件)、平均検索時間L(秒)、更新頻度r(件/秒)から求めることができる。最初に、区間の数をM個とすると、区間の検索中に更新される件数Δn1は、Δn1=L×r/Mで求められる。また、区間の平均検索件数n1は、n1=N/M+Δn1×(M−1)で求められる。この後、検索速度v(件/秒)が、v=n1×M/Lで求められる。
【0181】
次に、図20の例において、新たな検索要求を、2回目の区間Aの検索処理を開始するタイミングであるA[2]では追加せずに、次の区間B[2]で追加する場合について、図22に示す。
【0182】
この場合、バージョン番号「5」のデータは検索されない。従って、2回目の区間A[2]での最新バージョンであるバージョン番号「5」のデータを検索する検索要求が、図22に示すように、存在しなくなる。このため、区間A[2]及びそれ以降の区間B[2]、区間C[2]、区間D[2]、区間E[2]の5区間において、検索対象となるバージョンの集合が変化する。一方、バージョン番号「5」のデータは検索されない代わりに、区間B[2]からバージョン番号「6」のデータが検索される。従って、区間B[2]から検索を開始する、換言すれば、次のバージョンを検索する検索要求の数は2倍になる。
【0183】
検索対象となるバージョンの集合の変化を、図23に示す。図23(A)に示すように、影響のある最初の区間A[2]においては、バージョン番号「5」のデータを検索する検索要求が存在しない。このため、バージョン番号「5」だけに含まれるデータを検索しなくてもよい。換言すれば、U(4,5)−2において、部分「5」は、バージョン番号「5」にしか含まれないので、検索されない。このため、検索データ量がΔn1分減少する。
【0184】
しかし、次の区間B[2]においてはバージョン6を検索する検索要求が存在する。このため、図23(B)に示すように、バージョン番号「5」だけに含まれるデータが存在しない。換言すれば、U(4,5)−3において、部分「5〜6」は、バージョン番号「6」のデータの検索において検索される。このため、検索データ量は減少しない。
【0185】
バージョン番号「5」のデータを検索しないことによる検索データ量は、バージョン番号「5」が最も新しいバージョンである区間A[2]を検索する場合と、バージョン番号「5」が最も古いバージョンである区間E[2]を検索する場合について、合わせて2×Δn1件の減少となる。
【0186】
バージョン番号「5」のデータを検索しない場合において、検索のレスポンスに対する影響を図24に示す。図24において、前述したように、検索データ量が減少する区間はA[2]及びE[2]である。これにより、バージョン番号「1」〜「4」を検索する検索要求の実行の時間と、バージョン番号「6」〜「9」を検索する検索要求の実行の時間とが減少する。以上から、区間A[2]でバージョン番号「5」のデータの検索を行わない場合のレスポンスの総減少量、換言すれば、区間A[2]でバージョン番号「5」のデータの検索を行う場合の検索要求を追加する場合のコストCが求められる。
【0187】
例えば、対象区間の検索時間の減少時間Δl(秒)は、Δl=Δn1/vで求められる。検索要求の到着頻度をs(個/秒)とすると、各々の区間で検索を開始する検索要求の数q1(個)は、q1=s×L/Mで求められる。従って、検索のレスポンスの総減少量C(個×s)は、C=Δl×(2×M−1)×q1で求められる。
【0188】
一方、バージョン番号「5」のデータを検索する場合のベネフィットBは、区間E[1]に到着したq1個の検索要求の検索開始までの待ち時間が1区間分減少することである。
【0189】
そこで、コストCとベネフィットBとが、図25に示すように、比較される。具体的には、コストCは、図25(A)に示すように求められる。ベネフィットBは、図25(B)に示すように求められる。ここで、コストCとベネフィットBとの比較式は、図25(C)に示すように、簡単化することができ、v/r>2M−1となる。換言すれば、コストCとベネフィットBとの比較結果は、更新頻度rと検索速度vの比と、区間の数Mとから求まる定数によって定まることが判る。例えば、更新頻度rが多くなると、v/r>2M−1が成立しなくなる、換言すれば、コストCがベネフィットBよりも小さくなくなる。
【0190】
従って、検索制御部3は、更新頻度rと検索速度vと区間の数Mとに基づいて、式v/r>2M−1が成立するか否かを判定する。式v/r>2M−1が成立する場合、検索制御部3は、コストCよりベネフィットBが大きいと判定して、検索要求を途中で追加する。これにより、検索装置100全体として、レスポンスを向上させることができる。式v/r>2M−1が成立しない場合、検索制御部3は、コストCよりベネフィットBが小さいと判定して、検索要求を途中で追加しない。これにより、検索装置100全体として、レスポンスが低下することを防止することができる。
【符号の説明】
【0191】
1 要求受付部
2 更新制御部
3 検索制御部
4 更新実行部
5 データ格納部
6 一括検索実行部
7 結果返却部
11 更新要求キュー
12 検索要求キュー
31 検索要求集合
32 検索要求/バージョンID対応情報
33 検索要求/区間ID対応情報
34 次の一括検索実施区間情報
51 格納データ集合
52 バージョンID
53 バージョンID/データ対応情報
54 区間ID/データ対応情報
100 検索装置
200 クライアント
201 アプリケーション
300 ネットワーク
【技術分野】
【0001】
本発明は、検索制御プログラム、検索方法、検索システムに関する。
【背景技術】
【0002】
データベースシステムにおいて、複数の検索要求についての検索処理を行なう場合に、データベースから順次データを読み出し、順次読み出されたデータのそれぞれに対して複数の検索要求を用いた検索を実行する検索(一括検索)技術がある。
【0003】
なお、データベースの排他制御方法において、データの参照のみを行う検索トランザクションとデータの更新を新たな版の生成により実行する更新トランザクションを混在して実行する場合において、版管理表を設けて、多版実行することが提案されている。
【0004】
また、データベースへの問い合わせに対するフロントエンドの役割をするデータベースサーバと、データベースに対する操作を行う役割をする複数のデータベース操作サーバで構成され、フロントエンドのデータベースサーバと、データベース操作サーバとはネットワークで繋がる。SQL文などの複数のデータベース操作文を含んだ、データベースへの問い合わせを、フロントエンドのデータベースサーバで解析して、同じデータベース操作サーバで一回の起動要求で実行できる1つ以上のデータベース操作文を判定してグループ化し、グループ化したデータベース操作文をデータベース操作サーバにまとめて転送し、転送した複数のデータベース操作文を一回の起動要求で起動することが提案されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2002−222194号公報
【特許文献2】特開平03−123946号公報
【特許文献3】特開平10−040146号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
一括検索処理を実行した場合に、一括検索処理の実行中にデータベースに到着する新たな検索要求は、一括検索処理が終了するまで、その実行を待たされる。この場合、新たな検索要求の待ち時間は、最大で一括検索処理に要する時間に及ぶ。このため、例えば、一括検索処理の実行の開始直後にデータベースに到着する新たな検索要求に応じた処理のレスポンスは、およそ一括検索処理に要する時間の2倍となる。一方、一括検索処理の実行の終了直前にデータベースに到着する新たな検索要求に応じた処理のレスポンスは、およそ一括検索処理に要する時間となる。従って、検索要求に応じた処理のレスポンスは、検索要求が到着するタイミングに依存して、最大で2倍と大きくばらつく。更新要求についても、同様である。
【0007】
本発明は、検索要求に応じた処理のレスポンスの遅れを抑制することを目的とする。
【課題を解決するための手段】
【0008】
開示される検索制御プログラムは、コンピュータに、格納部に格納された複数のレコードの一部分である第1のレコード群のうち、第1の検索条件を満たすレコードを抽出する第1の検索処理を実行させ、第1の検索処理の実行中に第2の検索条件を受け付けた場合に、格納部に格納された複数のレコードの第1のレコード群とは異なる一部分である第2のレコード群に含まれるレコードのうち、第1の検索条件を満たすレコード及び第2の検索条件を満たすレコードを抽出する第2の検索処理を実行させる。
【発明の効果】
【0009】
開示される検索制御プログラムによれば、データベースシステムにおいて実行される一括検索処理の制御において、検索要求に応じた処理のレスポンスの遅れを抑制することができる。
【図面の簡単な説明】
【0010】
【図1】検索システムの一例を示す図である。
【図2】図1の検索システムに設けられる検索装置の一例を示す図である。
【図3】図2の検索装置のハードウェア構成の一例を示す図である。
【図4】データ構造の説明図である。
【図5】データ構造の説明図である。
【図6】検索処理の説明図である。
【図7】要求受付け処理フローを示す。
【図8】実行要求処理フローを示す。
【図9】実行要求処理の説明図である。
【図10】更新要求処理フローを示す。
【図11】更新実行処理フローを示す。
【図12】更新要求処理の説明図である。
【図13】検索要求処理フローを示す。
【図14】検索要求処理の説明図である。
【図15】検索要求処理の説明図である。
【図16】一括検索実行処理フローを示す。
【図17】検索要求処理の他の例の説明図である。
【図18】検索要求処理フローの他の例を示す。
【図19】検索要求処理フローの他の例を示す。
【図20】検索要求処理の更に他の例の説明図である。
【図21】検索要求処理の更に他の例の説明図である。
【図22】検索要求処理の更に他の例の説明図である。
【図23】検索要求処理の更に他の例の説明図である。
【図24】検索要求処理の更に他の例の説明図である。
【図25】検索要求処理の更に他の例の説明図である。
【発明を実施するための形態】
【0011】
図1は、検索システムの一例を示す図である。
【0012】
検索システムは、検索装置100と、複数のクライアント200と、検索装置100と複数のクライアント200との間を接続するネットワーク300とを含む。検索装置100は、例えばデータベースサーバである。
【0013】
複数のクライアント200は、各々、アプリケーション201を含む。各々のアプリケーション201は、実行要求を発行する実行要求部であり、ネットワーク300を介して、実行要求を検索装置100へ送信する。実行要求は、例えば、検索要求、更新要求である。検索要求は、データの参照のみを行う要求である。更新要求は、データの更新を新たな版の生成により実行する要求である。
【0014】
検索装置100は、検索要求を受信すると、受信した検索要求を実行して、検索要求に対する応答として、検索結果であるデータを、ネットワーク300を介して、要求元であるクライアント200へ返信する。要求元であるクライアント200は、検索結果であるデータを受信する。検索装置100は、更新要求を受信すると、受信した更新要求を実行して、データを更新する。
【0015】
図2は、図1の検索システムに設けられる検索装置の一例を示す図である。
【0016】
検索装置100は、要求受付部1と、更新制御部2と、検索制御部3と、更新実行部4と、データ格納部5と、一括検索実行部6と、結果返却部7とを含む。要求受付部1は、更新要求キュー11と、検索要求キュー12とを含む。検索制御部3は、一括検索のための制御情報、具体的には、検索要求集合格納部に格納された検索要求集合31と、検索要求/バージョンID対応情報格納部に格納された検索要求/バージョンID対応情報32と、検索要求/区間ID対応情報格納部に格納された検索要求/区間ID対応情報33と、次の一括検索実施区間情報格納部に格納された次の一括検索実施区間情報34とを含む。データ格納部5は、一括検索のための制御情報、具体的には、格納データ集合格納部に格納された格納データ集合51と、最新バージョンID情報格納部に格納されたバージョンID情報52と、バージョンID/データ対応情報格納部に格納されたバージョンID/データ対応情報53と、区間ID/データ対応情報格納部に格納された区間ID/データ対応情報54とを含む。
【0017】
検索要求集合格納部、検索要求/バージョンID対応情報格納部、検索要求/区間ID対応情報格納部、次の一括検索実施区間情報格納部は、検索制御部3に設けられる。格納データ集合格納部、最新バージョンID情報格納部、バージョンID/データ対応情報格納部、区間ID/データ対応情報格納部は、データ格納部5に設けられる。
【0018】
検索要求集合31、検索要求/バージョンID対応情報32、検索要求/区間ID対応情報33、次の一括検索実施区間情報34、格納データ集合51、バージョンID情報52、バージョンID/データ対応情報53、区間ID/データ対応情報54については後述する。
【0019】
検索装置1は、データベースであるデータ格納部5に複数のデータ(レコード)を格納するデータベースサーバである。データ格納部5において、実際のデータは、格納データ集合51に格納される。検索装置1は、クライアント200から送信された更新要求に従って、更新制御部2の制御の下で、更新実行部4により、データベースであるデータ格納部5に格納されたデータを更新する。検索装置1は、クライアント200から送信された検索要求に従って、検索制御部3の制御の下で、一括検索実行部6により、データベースであるデータ格納部5に格納されたデータを一括検索する。
【0020】
要求受付部1は、クライアント200のアプリケーション201から送信された検索要求を受信、換言すれば、受付けて、検索要求を受信した順に検索要求キュー12に繋ぐ。検索要求は、例えば、要求の種別「検索」と、検索するデータのバージョンと、検索条件とを含む。検索条件は、例えば検索するデータのデータ名(レコードID)である。
【0021】
検索制御部3は、検索要求キュー12を参照して、検索要求キュー12に存在する1又は複数の検索要求を取り出し、取り出した1又は複数の検索要求を一括検索のための検索要求集合31に追加する。また、検索制御部3は、一括検索を実行する対象の区間である一括検索実施区間、換言すれば、次の一括検索実施区間を決定する。そして、検索制御部3は、一括検索実行部6を呼び出して、呼び出した一括検索実行部6に検索要求集合31を渡して、決定した一括検索実施区間についての一括検索を依頼する。
【0022】
検索要求集合31は、例えば、複数の検索要求をOR(論理和)結合した1個の検索式(クエリ)であるが、これに限られない。検索要求集合31は、複数の検索要求から新たに生成した検索式等であっても良い。複数の検索要求から新たに生成した検索式は、例えば、ハイトラフィック技術などの一括検索技術を適用するために生成した検索要求のグループである。
【0023】
一括検索実行部6は、検索制御部3から一括検索の依頼を受けると、依頼された一括検索実施区間についての一括検索を実行する。換言すれば、一括検索実行部6は、データベースであるデータ格納部5の格納データ集合51に格納された複数のデータを一括検索する。一括検索実行部6は、一括検索を実行した結果である検索結果を、一括検索の依頼に対する応答として、検索制御部3に返す。
【0024】
一括検索処理では、検索対象のデータから取り出したデータについて、複数の検索要求をまとめた「検索要求集合」を用いて照合が行なわれるので、検索対象のデータを取り出すのは1回ずつでよい。これにより、データをスキャンする回数を大きく減らすことができ、その結果、複数の検索要求に応じた検索処理の処理速度が向上する。本実施形態では、決定された実施区間のデータに対して一括検索処理を行なう。
【0025】
検索制御部3は、一括検索実行部6から検索結果を返されると、返された検索結果を結果返却部7へ送る。結果返却部7は、検索要求の要求元であるクライアント200のアプリケーション201へ、検索結果を送信、換言すれば、返却する。検索制御部3は、格納データ集合51に格納された複数のデータについての検索を終了した検索要求を、検索要求集合31から削除する。
【0026】
また、要求受付部1は、クライアント200のアプリケーション201から送信された更新要求を受信して、更新要求を受信した順に更新要求キュー11に繋ぐ。更新要求は、例えば、要求の種別「更新」と、更新前のデータのバージョンと、更新前のデータと更新後のデータとの差分とを含む。
【0027】
更新制御部2は、更新要求キュー11を参照して、更新要求キュー11に存在する1又は複数の更新要求を取り出す。また、更新制御部2は、データの新たなバージョン、換言すれば、最新バージョンIDを決定する。これにより、データの最新のバージョンが決定される。そして、更新制御部2は、更新実行部4を呼び出して、呼び出した更新実行部4に取り出した1又は複数の更新要求及び最新バージョンIDを渡して、データの更新を依頼する。
【0028】
更新実行部4は、更新制御部2からデータの更新の依頼を受けると、依頼されたデータの更新を実行する。換言すれば、更新実行部4は、1又は複数の更新要求に従って、データベースであるデータ格納部5の格納データ集合51に格納されたデータを更新する。これにより、更新要求の実行の都度、格納データ集合51において、データの新しいバージョンが生成される。
【0029】
複数の検索要求の実行の詳細、及び、更新要求の実行の詳細については、後述する。
【0030】
図3は、図2の検索装置のハードウェア構成の一例を示す図である。
【0031】
CPU101は、ROM102に格納された制御プログラムに従って、検索装置100を制御する。CPU101は、例えば主メモリであるRAM103上の検索プログラムを実行する。これにより、要求受付部1、更新制御部2、検索制御部3、更新実行部4、一括検索実行部6、結果返却部7が実現される。検索プログラムは、例えば、CD−ROMやDVD等の記録媒体109に格納され、記録媒体109からハードディスク106に入力され、ハードディスク106からRAM103にロードされる。
【0032】
データ格納部5は、例えばハードディスク106に設けられる。換言すれば、データは、例えばハードディスク106に格納される。データは、例えば、CD−ROMやDVD等の記録媒体109に格納され、記録媒体109からハードディスク106に入力され、必要に応じてハードディスク106からRAM103にロードされ、更新実行部4又は一括検索実行部6により処理される。
【0033】
入力装置104は、例えばキーボードであり、マウス等を含んでも良い。出力装置105は、例えばディスプレイであり、プリンタ等の出力装置を含んでも良い。CPU101、ROM102、RAM103、入力装置104、出力装置105、及び、ハードディスク106、ネットワーク接続部107は、バス108を介して、相互に接続される。
【0034】
ネットワーク接続部107は、例えば、送受信装置であり、ネットワーク300に接続され、ネットワーク300を介して他のコンピュータ、例えばクライアント200に接続される。これにより、検索装置100は、クライアント200との間で通信を行う。
【0035】
なお、データ格納部5が、検索装置100とネットワークを介して接続された他の情報処理装置に設けられるようにしても良い。この場合、データ格納部5は、他の情報処理装置の例えばハードディスクに設けられる。データは、例えば、CD−ROMやDVD等の記録媒体に格納され、記録媒体から他の情報処理装置のハードディスクに入力され、必要に応じて他の情報処理装置のハードディスクからRAMにロードされ、ネットワーク接続部から検索装置100のネットワーク接続部107へ送信され、検索装置100の更新実行部4又は一括検索実行部6により処理される。
【0036】
以下、説明の便宜上、最初に、図4及び図5を参照して、検索装置100におけるデータ構造について詳細に説明する。
【0037】
図4は、データ構造説明図である。図4は、特に、格納データ集合51と、格納データ集合51を一括検索するための種々の制御情報について示す。
【0038】
格納データ集合51は、データベースであるデータ格納部5に格納されたデータそれ自体である。格納データ集合51は、「レコード#1」「レコード#2」等のように、複数のデータを含む。各々のデータは、「レコード#1」のようなデータ名、例えばレコードIDを持ち、レコードIDにより表される。レコードIDは、データを一意に定める識別情報である。
【0039】
格納データ集合51は、「レコード#2」「レコード#2’」等のように、あるデータについての複数のバージョンを含む。「レコード#2’」は、「レコード#2」が1回更新されたデータ、換言すれば、「レコード#2」のバージョンIDに1を加えたバージョンIDを持つデータである。これにより、検索要求毎に異なるバージョンのデータを検索対象とする場合でも、複数回の一括検索処理ではなく、一回の一括検索処理で検索を完了することができる。
【0040】
バージョンID情報52は、格納データ集合51に格納されたデータにおける、現在の最も新しいバージョンを表す。データのバージョンは、バージョンIDにより表される。バージョンIDは、データのバージョンを一意に定める識別情報である。従って、バージョンID情報52は、格納データ集合51に格納されたデータの最新のバージョンIDである。
【0041】
バージョンIDは、図4において、格納データ集合51の右側に数字「1」〜「3」で表される。従って、図4に示す例においては、格納データ集合51には、バージョン「1」〜「3」のデータが格納されている。
【0042】
バージョンID/データ対応情報53は、「バージョンIDとデータとの対応」を示す情報であり、更新処理によって生成されるバージョン(版)と、そのバージョンに含まれるデータの対応関係を表す。図4において、例えば「レコード#1」とバージョンID「1」とが、バージョンID/データ対応情報53の一部である「線分」で結ばれている。これにより、例えば「レコード#1」が更新処理によってバージョンID「1」として生成されたこと、換言すれば、「レコード#1」はバージョンID「1」を持つことが表される。
【0043】
なお、実際には、バージョンID/データ対応情報53は、例えばバージョンID/データ対応テーブルに格納される。この場合、バージョンID/データ対応テーブルには、「レコード#1」等のデータに対応して、当該データのバージョンIDが格納される。
【0044】
区間ID/データ対応情報54は、「区間IDとデータとの対応」を示す情報であり、格納データ集合をいくつかに分割したそれぞれを示す区間IDと、その区間に分割されたデータの対応関係を表す。
【0045】
区間IDは、図4において、格納データ集合51の左側にアルファベット「A」〜「C」で表される。従って、図4に示す例においては、格納データ集合51は、区間「A」〜「C」に分割されている。区間「A」〜「C」には、各々、複数のデータ(レコード)が含まれる。従って、図4に示す例の格納データ集合51は、区間「A」〜「C」に属する複数のレコード群を含む。
【0046】
図4において、例えば「レコード#1」と区間ID「A」とが、区間ID/データ対応情報54の一部である「線分」で結ばれている。これにより、例えば「レコード#1」が更新処理によって区間「A」に分割されたこと、換言すれば、「レコード#1」は区間ID「A」を持つことが表される。
【0047】
なお、実際には、区間ID/データ対応情報54は、例えば区間ID/データ対応テーブルに格納される。この場合、区間ID/データ対応テーブルには、「レコード#1」等のデータに対応して、当該データの区間IDが格納される。
【0048】
データベースであるデータ格納部5は、更新実行部4から更新要求の実行を依頼されると、更新要求を実行する。これにより、データ格納部5は、更新要求の実行の都度に、格納データ集合51、バージョンID情報52、バージョンID/データ対応情報53、区間ID/データ対応情報54を作成又は更新し、各々の格納部に格納する。
【0049】
検索要求集合31は、受付けられた検索要求であって、かつ、まだ検索処理が終了していない検索要求の集合を表す。検索要求集合31は、「検索要求#1」「検索要求#2」等のように、複数の検索要求を含む。各々の検索要求は、「#1」のような検索要求IDを持ち、検索要求IDにより表される。検索要求IDは、検索要求を一意に定める識別情報である。
【0050】
検索要求/バージョンID対応情報32は、「検索要求と検索対象データバージョンIDの対応」を示す情報であり、検索要求が検索対象とするデータのバージョンを表す。図4において、例えば「検索要求#1」とバージョンID「1」とが、検索要求/バージョンID対応情報32の一部である「点線」で結ばれている。これにより、例えば「検索要求#1」がバージョンID「1」を持つデータを検索対象とすることが表される。
【0051】
なお、実際には、検索要求/バージョンID対応情報32は、例えば検索要求/バージョンID対応テーブルに格納される。この場合、検索要求/バージョンID対応テーブルには、「検索要求#1」等の検索要求に対応して、当該検索要求が検索対象とするデータのバージョンIDが格納される。
【0052】
検索要求/区間ID対応情報33は、「検索要求と検索開始区間IDの対応」を示す情報であり、当該検索要求の検索が開始された区間の区間IDを表す。図4において、例えば「検索要求#1」と区間ID「A」とが、検索要求/区間ID対応情報33の一部である「点線」で結ばれている。これにより、例えば「検索要求#1」が区間ID「A」から開始されたことが表される。
【0053】
なお、実際には、検索要求/区間ID対応情報33は、例えば検索要求/区間ID対応テーブルに格納される。この場合、検索要求/区間ID対応テーブルには、「検索要求#1」等の検索要求に対応して、当該検索要求が開始された区間IDが格納される。
【0054】
次の一括検索実施区間情報34は、「次の一括検索実施区間ID」を示す情報であり、一括検索実行部6が、次に検索対象とする区間を表す。詳しくは後述するように、一括検索実行部6は、格納データ集合51を複数の区間に分割し、分割した複数の区間を予め定められた所定の順番で巡回しながら一括検索を行う。従って、次の一括検索実施区間情報34は、一括検索実行部6により次に一括検索される区間の区間IDである。
【0055】
検索制御部3は、検索要求キュー12から検索要求を取り出すと、一括検索を実行するために、検索要求の取出しの都度に、検索要求集合31、検索要求/バージョンID対応情報32、検索要求/区間ID対応情報33、次の一括検索実施区間情報34を作成又は更新し、各々の格納部に格納する。
【0056】
図5は、データ構造説明図である。図5は、特に、格納データ集合51におけるデータ(レコード)の追加、更新、削除について示す。
【0057】
格納データ集合51において、バージョンIDが「1」であるデータは、「レコード#1」〜「レコード#4」である。従って、更新実行部4は、最初に、「レコード#1」〜「レコード#4」を格納データ集合51に格納する。この格納処理において、更新実行部4は、区間「A」に「レコード#1」及び「レコード#2」を割当て、区間「B」に「レコード#3」及び「レコード#4」を割当てる。これにより、各区間に属するレコードIDの数を等しくすることができる。
【0058】
次に、更新実行部4は、更新要求に従ってデータの一部を更新することにより、バージョンIDが「2」であるデータを生成する。図5の例においては、「レコード#3」が更新(置換)されることにより「レコード#3’」とされ、「レコード#5」が追加される。「レコード#3」の更新要求は置換要求であり、「レコード#5」の更新要求は追加要求である。
【0059】
「レコード#3’」は、区間「B」に属する「レコード#3」を更新したデータであるので、区間「B」に属するようにされる。また、「レコード#3’」は、現在における最新のバージョンIDが「1」であるので、バージョンID「2」を持つ。なお、最新のバージョンIDが「2」にインクリメントされる。一方、「レコード#5」は、新たに追加されたデータであるので、新たな区間「C」に属するようにされる。また、「レコード#5」は、バージョンID「2」を持つ。
【0060】
次に、更新実行部4は、新たな更新要求に従ってデータの一部を更新することにより、バージョンIDが「3」であるデータを生成する。図5の例においては、「レコード#2」が更新(置換)されることにより「レコード#2’」とされ、「レコード#6」が追加され、「レコード#4」が削除される。「レコード#2」の更新要求は置換要求であり、「レコード#6」の更新要求は追加要求であり、「レコード#4」の更新要求は削除要求である。
【0061】
「レコード#2’」は、区間「A」に属する「レコード#2」を更新したデータであるので、区間「A」に属するようにされる。また、「レコード#2’」は、現在における最新のバージョンIDが「2」であるので、バージョンID「3」を持つ。なお、最新のバージョンIDが「3」にインクリメントされる。一方、「レコード#6」は、新たに追加されたデータであるので、区間「C」に属するようにされる。また、「レコード#6」は、バージョンID「3」を持つ。
【0062】
次に、図6を参照して、検索装置100における一括検索について説明する。
【0063】
図6は、検索処理の説明図である。なお、図6において、例えば検索要求#1を「q1」と表わすこととする。
【0064】
一括検索実行部6は、複数の区間A〜Cに分割された格納データ集合51を、予め定められた所定の順番で巡回しながら、サイクリックに、一括検索を行う。換言すれば、一括検索実行部6は、区間A、区間B、区間Cの順で一括検索を実行し、これを繰り返す。例えば、ポイントA1で区間Aの一括検索を開始して、ポイントB1で区間Aの一括検索を終了する。ポイントB1で区間Bの一括検索を開始して、ポイントC1で区間Bの一括検索を終了する。ポイントC1で区間Cの一括検索を開始して、ポイントA2で区間Cの一括検索を終了する。そして、ポイントA2以後も、同様に、以上の順番で一括検索を繰り返す。ポイントA1からポイントB1までが区間Aであり、ポイントB1からポイントC1までが区間Bであり、ポイントC1からポイントA2までが区間Cである。
【0065】
検索制御部3は、新たな検索要求が到着すると、到着した検索要求を検索要求集合31に追加する。例えば、ポイントA1以前に「q1」が検索要求キュー12に到着しているので、「q1」が検索要求集合31とされる。これにより、一括検索実行部6は、検索要求集合「q1」により、区間Aについて、一括検索を実行する。検索要求集合「q1」は、1個の検索要求しか含まないが、検索要求集合である。また、区間Aの一括検索中に、「q2」が検索要求キュー12に到着するので、新たに「q2」が検索要求集合31に追加される。従って、一括検索実行部6は、検索要求集合「q1,q2」により、区間Bについて、一括検索を実行する。
【0066】
ある検索要求についての一括検索が終了した場合、換言すれば、格納データ集合51の複数の区間A〜Cの全てについてある検索要求を含む一括検索が終了した場合、検索制御部3は、当該検索要求を検索要求集合31から削除する。例えば、「q1」の検索はポイントA1から開始されるので、ポイントA2において、複数の区間A〜Cの全てについて検索が終了する。そこで、検索制御部3は、ポイントA2において、「q1」を検索要求集合31から削除する。また、「q2」の検索はポイントB1から開始されるので、検索制御部3は、ポイントB2において、「q2」を検索要求集合31から削除する。
【0067】
従って、検索要求が検索要求キュー12に到着するタイミングに依存して、異なるポイント及び異なる区間から一括検索が開始される。これにより、一括検索の途中で、新たに検索要求キュー12に到着した検索要求を検索要求集合31に加えることができる。
【0068】
一方、一括検索が複数の区間A〜Cについて連続して繰り返し実行されると、一括検索の途中で、新たに更新要求キュー11に到着した更新要求を実行することができない。そこで、検索処理が途切れるまで更新処理を待たせると共に、検索処理が途切れるポイントが設けられる。具体的には、ポイントA1、B1、C1等において、換言すれば、格納データ集合51の複数の区間A〜Cの各々についての一括検索が終了する都度に、更新要求キュー11に到着している1又は複数の更新要求が実行される。
【0069】
従って、ポイントを通過する都度、ポイントの各々において、終了した一括検索の後処理、更新要求の処理、開始される一括検索の前処理が実行される。終了した一括検索の後処理は、例えば、一括検索の結果が一括検索実行部6から検索制御部3へ返される処理、全ての区間について検索を終了した検索要求を削除する処理である。更新要求の処理は、例えば、更新実行部4が更新要求を実行する処理である。開始される一括検索の前処理は、例えば、新たな検索要求に基づいて検索要求集合31、検索要求/バージョンID対応情報32、検索要求/区間ID対応情報33、次の一括検索実施区間情報34等を生成し、一括検索を一括検索実行部6に依頼する処理である。
【0070】
以上により、一括検索を実行しつつ更新要求を実行することができる。これにより、一括検索において、1個のバージョンのデータだけを検索するのではなく、検索要求集合31に含まれる複数の検索要求が検索対象とする複数のバージョンのデータの和集合を検索することができる。これにより、検索するデータからいずれかのバージョンが漏れることを防止することができる。
【0071】
なお、検索要求集合31に含まれるある検索要求からみると、当該検索要求自体の検索対象でないバージョンに対する検索結果が含まれることになる。そこで、後述するように、検索結果から、他の検索要求の検索対象であるバージョンを除く。これにより、検索結果に不要な結果が含まれないようにすることができる。
【0072】
以上の図2〜図6から判るように、複数の検索要求を含む一括検索及び更新要求は、以下のように実行される。
【0073】
データベースであるデータ格納部5は、図4及び図5に示すように、データの追加、更新、削除の都度に、格納データ集合51、バージョンID情報52、バージョンID/データ対応情報53、区間ID/データ対応情報54を、データの追加、更新、削除を反映した内容に更新する。
【0074】
具体的には、データ格納部5は、更新実行部4からの更新要求に従って、格納データ集合51のデータ(レコード)を追加、更新、削除する。この時、データ格納部5は、図4及び図5に示すように、格納データ集合51におけるレコードIDが定まる。これにより、データ格納部5は、格納データ集合格納部に格納された格納データ集合51に含まれる複数のデータ、換言すれば、複数のレコードを、複数の区間「A」〜「C」、換言すれば、複数のレコード群に分割する。
【0075】
データ格納部5は、格納データ集合51のデータの追加又は更新の都度に、最新バージョンIDを生成して、最新バージョンID情報に格納する。バージョンID情報52は、現在のバージョンID情報52を+1だけインクリメントすることにより生成される。
【0076】
データ格納部5は、格納データ集合51のデータの追加又は更新の都度に、バージョンID/データ対応情報53を生成して、バージョンID/データ対応情報格納部に追加する。バージョンID/データ対応情報53は、追加又は更新されたデータ(レコード)に、当該追加又は更新に応じて生成された最新バージョンIDを対応付けることにより生成される。
【0077】
データ格納部5は、格納データ集合51のデータの追加又は更新の都度に、追加又は更新されたデータ(レコード)が検索を開始する区間IDとの対応を示す区間ID/データ対応情報54を生成して、区間ID/データ対応情報格納部に追加する。区間ID/データ対応情報54は、追加又は更新されたデータに、当該追加又は更新されたデータが属する区間IDを対応付けることにより生成される。追加又は更新されたデータが属する区間IDは、前述したように、データの追加又は更新の際に定まる。
【0078】
一方、検索制御部3は、図6に示すように、格納データ集合51の複数の区間、換言すれば、複数のレコード群について、一括検索を、予め定められた順序で繰り返し実行させる。一括検索は、検索要求集合31、換言すれば、複数の検索要求を満たすか否かの検索を一括して実行する検索処理である。ここで、複数の検索要求は、検索対象の区間の直前の区間について、換言すれば、検索対象のレコード群の直前のレコード群についての検索の実行中に受付けた検索要求を含む。
【0079】
検索制御部3は、図4及び図6に示すように、検索要求キュー12からの検索要求の取出しの都度に、換言すれば、図6に示すポイントの各々において、検索要求集合31、検索要求/バージョンID対応情報32、検索要求/区間ID対応情報33、次の一括検索実施区間情報34を、取出した検索要求を反映した内容に更新する。
【0080】
ここで、検索要求キュー12からの検索要求の取出しは、前述したように、1個の区間についての一括検索が終了したポイントにおいて実行される。従って、以下に説明する、検索要求集合31、検索要求/バージョンID対応情報32、検索要求/区間ID対応情報33、次の一括検索実施区間情報34の更新も、1個の区間についての一括検索が終了したポイントにおいて実行される。
【0081】
具体的には、検索制御部3は、検索要求キュー12から取出した1又は複数の検索要求を、検索要求集合31に追加する。換言すれば、検索制御部3は、現在の検索要求集合31に含まれる1又は複数の検索要求に、検索要求キュー12から取出した1又は複数の検索要求を追加した、新たな検索要求集合31を生成する。
【0082】
この時、複数の検索要求の各々が検索対象とするデータのバージョンは、互いに異なっていても良い。換言すれば、異なるバージョンのデータについても一括検索を実行することができる。これにより、複数の検索要求の間における分離レベルを向上することができる。
【0083】
検索制御部3は、検索要求集合31への検索要求の追加の都度に、検索要求/バージョンID対応情報32を生成して、検索要求/バージョンID対応情報格納部に追加する。検索要求/バージョンID対応情報32は、検索要求集合31における検索要求に、当該検索要求が検索対象とするデータのバージョンIDを対応付けることにより生成される。検索要求が検索対象とするデータのバージョンIDは、例えば、当該検索要求において定められる。
【0084】
なお、後述するように、検索制御部3が、検索要求が検索対象とするデータのバージョンIDを決定するようにしても良い。
【0085】
検索制御部3は、検索要求集合31への検索要求の追加の都度に、検索要求/区間ID対応情報33を生成して、検索要求/区間ID対応情報格納部に追加する。検索要求/区間ID対応情報33は、検索要求集合31における検索要求に、当該検索要求が検索を開始する区間IDを対応付けることにより生成される。検索要求が検索を開始する区間IDとしては、以下に説明するように、新たに生成された次の一括検索実施区間情報34が用いられる。
【0086】
検索制御部3は、検索要求集合31への検索要求の追加の都度に、次の一括検索実施区間情報34を生成して、次の一括検索実施区間情報格納部に格納する。次の一括検索実施区間情報34は、現在の次の一括検索実施区間情報34が示す区間IDの次の区間IDを求めることにより生成される。
【0087】
この後、検索制御部3は、一括検索実行部6を呼び出して、呼び出した一括検索実行部6に一括検索を依頼する。
【0088】
一括検索実行部6は、検索要求集合31に含まれる複数の検索要求が検索対象とする1又は複数のバージョンのデータの和集合を求める。そして、一括検索実行部6は、求めたデータの和集合を、検索要求集合31を用いて一括検索する。一括検索実行部6は、一括検索による検索結果から、検索対象でないバージョンを除く。
【0089】
図6に示す1個の検索要求「q1」についての検索は、格納データ集合51に格納された複数のレコードの一部分である1個の区間から、換言すれば、第1のレコード群からレコードを順次読み出し、読み出したレコードが検索要求「q1」を満たすか否かを判定し、判定の結果に応じて検索要求「q1」を満たす1又は複数のレコードを取得する処理である。
【0090】
ここで、例えば、第1の検索要求「q1」を受け付けた場合に、格納データ集合51の第1のレコード群について、第1の検索要求「q1」を満たすレコードを取得する、第1の検索が実行される。また、例えば、第1の検索要求「q1」の実行中に第2の検索要求「q2」を受け付けた場合に、第1のレコード群とは異なる第2のレコード群について、第1の検索要求「q1」を満たすレコード及び第2の検索要求「q2」を満たすレコードを取得する、第2の検索が実行される。
【0091】
従って、例えば、図6に示す第1の検索要求「q1」及び第2の検索要求「q2」を含む検索要求集合31による一括検索は、格納データ集合51に格納された複数のレコードの一部分である1個の区間からレコードを順次読み出し、読み出したレコードが第1の検索要求「q1」又は第2の検索要求「q2」を満たすか否かを判定し、判定の結果に応じて第1の検索要求「q1」を満たすレコード及び第2検索要求「q2」を満たすレコードを取得する処理である。例えば、第1の区間について第1の検索要求「q1」の実行中に第2の検索要求「q2」を受け付けた場合、第1の区間とは異なり第1の区間に続く第2の区間について、第1の検索要求「q1」及び第2の検索要求「q2」を含む検索要求集合31による一括検索が実行される。これにより、検索要求を実行するまでの待ち時間を削減することができ、また、検索要求に対するレスポンスのばらつきを小さくすることができる。
【0092】
この後、検索制御部3は、格納データ集合51の全ての区間、換言すれば、複数のレコード群の全てについて例えば検索要求「q1」が実行された後に、図6に示すポイントA2において、検索要求「q1」を、検索要求集合31に含まれる複数の検索要求から除く。検索要求「q1」についての検索処理は、一括検索のための検索要求集合31に含まれるので、検索要求集合31についての検索処理に含まれる。検索要求集合31についての検索処理の実行に応じて、検索制御部3は、検索要求/バージョンID対応情報32と、検索要求/区間ID対応情報33と、の検索要求「q1」に関する情報を更新する。
【0093】
一方、複数の区間のいずれかの区間について、換言すれば、複数のレコード群のいずれかのレコード群について一括検索を実行中に、格納データ集合51の複数のレコードのいずれかについての更新要求が受け付けられる場合がある。この場合、更新制御部2は、当該区間について実行中の一括検索が終了した後であって、実行中の一括検索の対象である区間の次の区間が開始される前に、更新要求を実行させる。換言すれば、更新制御部2は、実行中の一括検索の対象であるレコード群の次に一括検索の対象となるレコード群についての一括検索が開始される前に、図6に示すポイントの各々において、更新要求を実行させる。これにより、更新要求を実行するまでの待ち時間を削減することができ、また、更新要求に対するレスポンスのばらつきを小さくすることができる。
【0094】
ここで、例えば、図6に示す第1の検索要求「q1」を受け付けてから第2の検索要求「q2」を受け付けるまでの間に、前述の第2のレコード群に含まれるレコードについての更新要求を受け付ける場合がある。この場合、更新実行部4は、更新要求に応じて更新を行なう。これに応じて、データ格納部5は、更新前のレコード及び更新後のレコードのそれぞれと、それぞれを識別するバージョンID(版情報)とを関連付けて記憶する。また、データ格納部5は、第1の検索要求「q1」と更新前のレコードのバージョンIDとを対応付け、第2の検索要求「q2」と更新後のレコードのバージョンIDとを対応付けて記憶する。
【0095】
この後、一括検索実行部6は、第1の検索要求「q1」及び第2の検索要求「q2」を含む検索要求集合31による一括検索を実行して、第1の検索要求「q1」を満たすレコード及び第2検索要求「q2」を満たすレコードを取得する。更に、検索制御部3は、取得したレコードのうち、更新前のレコード及び更新後のレコードのいずれかであるレコードについて、第1の検索要求「q1」を満たすレコードであるか否かの判定を行い、第2の検索要求「q2」を満たすレコードであるか否かの判定を行う。
【0096】
また、複数の区間のいずれかの区間について、換言すれば、複数のレコード群のいずれかのレコード群について一括検索を実行中に、格納データ集合51の複数のレコードのいずれかについての削除要求が受け付けられる場合がある。この場合、更新制御部2は、当該区間について実行中の一括検索が終了した後において、更に、全ての区間、換言すれば、複数のレコード群の全てについて、予め定められた順序に従って、少なくとも1回の一括検索が実行された後に、削除要求を実行させる。
【0097】
次に、処理フローを参照して、検索処理及び更新処理について説明する。
【0098】
図7は、要求受付処理フローを示す。
【0099】
要求受付部1は、クライアント200のアプリケーション201からの要求(実行要求)を受信するまで待つ(S11)。要求受付部1は、要求を受信すると、受信した要求が検索要求であるか更新要求であるかを判定する(S12)。受信した要求が検索要求である場合、要求受付部1は、受信した検索要求を検索要求キュー12に追加し(S13)、S11を繰り返す。受信した要求が更新要求である場合、要求受付部1は、受信した更新要求を更新要求キュー11に追加し(S14)、S11を繰り返す。換言すれば、要求受付部1は、受信した要求を検索要求と更新要求とに分類して、各々のキューに追加する。
【0100】
なお、受信した要求を検索要求と更新要求とに分類することなく、1個のキューに到着順に追加するようにしても良い。
【0101】
図8は、実行要求処理フローを示す。
【0102】
更新制御部2は、要求受付部1の更新要求キュー11をチェックして(S21)、新たな更新要求が更新要求キュー11に存在するか否かを判定する(S22)。新たな更新要求が更新要求キュー11に存在する場合(S22 Yes)、更新実行部4は、更新要求キュー11から新たな更新要求を取り出して、取り出した新たな更新要求に基づいて新しいデータの版を作成して、データベースであるデータ格納部5に格納された旧版のデータの更新処理を実行する(S23)。新たな更新要求が更新要求キュー11に存在しない場合(S22 No)、更新実行部4は、S23の実行を省略する。
【0103】
この後、検索制御部3は、要求受付部1の検索要求キュー12をチェックして(S24)、新たな検索要求が検索要求キュー12に存在するか否かを判定する(S25)。新たな検索要求が検索要求キュー12に存在する場合(S25 Yes)、検索制御部3は、更新要求キュー11から新たな検索要求を取り出して、取り出した新たな検索要求を検索要求集合に加える(S26)。新たな検索要求が検索要求キュー12に存在しない場合(S25 No)、検索制御部3は、S26の実行を省略する。
【0104】
この後、一括検索実行部6は、現在の検索対象である区間を検索要求集合を用いて一括検索することにより、検索要求集合による検索結果(一括検索結果)であるデータの和集合を求め、求めたデータの和集合から不要な検索結果を除く(S27)。
【0105】
この後、検索制御部3は、検索対象区間を現在の区間の次の区間に設定し(S28)、一括検索結果から検索対象でないバージョンのデータを除いた残りを、検索の結果として、結果返却部7に送る(S29)。結果返却部7は、受取った検索の結果を、要求元であるクライアント200のアプリケーション201に返信する。この後、検索制御部3は、全区間の検索を終了した検索要求を、検索要求集合から除き(S210)、S21を繰り返す。
【0106】
なお、S21〜S210の処理は、いずれの処理を先に実行するようにしても良い。
【0107】
図8の実行要求処理フローにおいて、図9に示すように、一括検索実行部6は、区間A、区間B、区間Cの順に、サイクリックに一括検索を実行する。次の一括検索実施区間情報34は、区間Aの一括検索時にはBとされ、区間Bの一括検索時にはCとされ、区間Cの一括検索時にはAとされる。従って、次の一括検索実施区間情報34は、一括検索の実行に1区間分だけ先行して、所定の順で、サイクリックに変化する。
【0108】
また、バージョンID情報52は、更新処理を実行する都度に追加される。また、バージョンID/データ対応情報53も、更新処理を実行する都度に追加される。
【0109】
また、検索要求集合31は、検索要求キュー12から検索要求が取出される都度に増加し、検索要求が全ての区間の検索を終了する都度に減少する。
【0110】
図10は、更新要求処理フローを示す。
【0111】
更新制御部2は、要求受付部1の更新要求キュー11をチェックして(S31)、新たな更新要求が更新要求キュー11に存在するか、又は、更新要求キュー11が空であるかを判定する(S32)。なお、S31及びS32は、図8のS21及びS22と同一であり、図10と図8との関係を明確に示すために、再度、図10に示される。一方、以下のS33〜S38は、図8のS23に相当する。
【0112】
新たな更新要求が更新要求キュー11に存在する場合、更新実行部4は、更新要求キュー11に存在する全ての更新要求を取り出して(S33)、現在のデータバージョンIDに基づいて、新しいデータバージョンIDを取得する(S34)。例えば、更新実行部4は、バージョンID情報52、換言すれば、現在のデータバージョンIDを参照し、参照したデータバージョンIDを+1だけインクリメントすることにより、新しいデータバージョンIDを取得する。次に、更新実行部4は、現在のバージョンに対する「バージョンIDとデータの対応」に基づいて、新しいバージョンに対する「バージョンIDとデータの対応」を作成する(S35)。例えば、更新実行部4は、バージョンID/データ対応情報53、換言すれば、現在のバージョンに対する「バージョンIDとデータの対応」をコピーする。そして、更新実行部4は、コピーした「バージョンIDとデータの対応」における「バージョンID」を新しいバージョンIDに置換する。これにより、新しいバージョンに対する「バージョンIDとデータの対応」が作成される。
【0113】
この後、更新実行部4は、格納データ集合51について更新処理を実行した後(S36)、ループが終了したか、又は、ループがその途中であるかを判定する(S37)。ループがその途中である場合、更新実行部4は、S36を繰り返す。ループが終了した場合、更新実行部4は、バージョンID情報52、換言すれば、「最新データバージョンID」を、S34において取得した新しいデータバージョンIDに更新する(S38)。また、S38において、更新実行部4は、バージョンID/データ対応情報53、換言すれば、「バージョンIDとデータの対応」に、S35において作成した新しいバージョンに対する「バージョンIDとデータの対応」を追加する。
【0114】
S32において、更新要求キュー11が空である場合、以下のS33〜S38は、省略される。換言すれば、更新実行部4は、処理を実行しない。
【0115】
なお、図10の例においては、更新要求キュー11から取り出した全ての更新要求について1個のバージョンを生成しているが、更新要求キュー11から取り出した複数の更新要求の各々について、異なるバージョンを生成するようにしても良い。
【0116】
図11は、更新実行処理フローを示す。
【0117】
更新実行部4は、更新要求の種別をチェックし(S41)、更新要求が追加要求、更新(置換)要求、削除要求のいずれであるかを判定する(S42)。
【0118】
更新要求が追加要求である場合、更新実行部4は、追加要求に従って、新しいデータ、換言すれば、追加データを作成して、作成した追加データを格納データ集合51、換言すれば、「データ集合」に追加する(S43)。次に、更新実行部4は、新しいバージョンに対する「バージョンIDとデータ」に、追加データについてのバージョンID及びデータを加える(S44)。次に、更新実行部4は、追加データの区間IDを決定し、当該決定に基づいて、「区間IDとデータの対応」に、追加データについての区間ID及びデータを加える(S45)。
【0119】
更新要求が更新要求である場合、更新実行部4は、更新要求に従って、データの新しいバージョン、換言すれば、置換後のデータを作成して、作成した置換後のデータを格納データ集合51、換言すれば、「データ集合」に追加する(S46)。次に、更新実行部4は、新しいバージョンに対する「バージョンIDとデータ」に、置換後のデータについてのバージョンID及びデータを加える(S47)。次に、更新実行部4は、「区間IDとデータの対応」に、置換後のデータについての区間ID及びデータを加える(S48)。更に、更新実行部4は、新しいバージョンに対する「バージョンIDとデータ」から、置換前のデータを除く(S49)。
【0120】
更新要求が削除要求である場合、更新実行部4は、削除要求に従って、新しいバージョンに対する「バージョンIDとデータ」から、削除データを除く(S410)。
【0121】
なお、図11の例においては、更新要求が追加要求である場合には、追加されるデータの持つ属性に従って、追加される区間が決定される。例えば、図5を参照して前述したように、「レコード#3’」は区間Bに属する「レコード#3」を更新したデータであるので区間Bに属するようにされ、「レコード#5」は新たに追加されるデータであるので新たな区間Cに属するようにされる。しかし、例えば、追加されるデータの順に追加先の区間を、区間A、区間B、区間Cのように、順番に変更するようにしても良い。この場合、1個の区間に属するデータの数を予め定めるようにしても良い。
【0122】
図11の更新実行処理フローにおいては、図12に示すように、バージョンIDとデータ(レコード)との対応関係は、新しいバージョンID(例では3)の1つ前のバージョンIDとデータと(例では2)の対応関係に基づいて生成される。
【0123】
例えば、図12に示すように、現在のバージョンID「2」には、バージョンID/データ対応情報53により、レコード#1、#2、#3’、#4、#5が対応付けられている。これは、図5に示すバージョンID「2」の状態である。新しいバージョンIDは「3」である。新しいバージョンID「3」とデータ(レコード)との対応関係は、バージョンID「2」とデータとの対応関係に基づいて生成される。新しいバージョンID「3」の状態が、図5に示す状態であるとする。
【0124】
この場合、最初に、新しいバージョンID「3」には、バージョンID「2」とデータとの対応関係をコピーすることにより、レコード#1、#2、#3’、#4、#5が対応付けられる。次に、レコード#2の更新要求によってレコード#2がレコード#2’に置換されるので、レコード#2との対応が削除され、レコード#2’との対応が追加される。更に、レコード#4の削除要求によってレコード#4との対応が削除され、レコード#6の追加要求によってレコード#6との対応が追加される。
【0125】
図13は、検索要求処理フローを示す。
【0126】
検索制御部3は、要求受付部1の検索要求キュー12をチェックして(S51)、新たな検索要求が検索要求キュー12に存在するか、又は、検索要求キュー12が空であるかを判定する(S52)。なお、S51及びS52は、図8のS24及びS25と同一であり、図13と図8との関係を明確に示すために、再度、図13に示される。一方、以下のS53〜S512は、図8のS26〜S210に相当する。
【0127】
新たな検索要求が検索要求キュー12に存在する場合、検索要求の実行の開始処理が実行される。具体的には、検索制御部3は、検索要求キュー12に存在する全ての検索要求を取り出して(S53)、取り出した検索要求を、検索要求集合31、換言すれば、検索要求出力へ加える(S54)。また、検索制御部3は、取り出した検索要求の検索対象バージョンを、検索要求/バージョンID対応情報32、換言すれば、「検索要求と検索対象データバージョンIDの対応」に追加し(S55)、また、取り出した検索要求に対する「検索要求と検索開始区間IDの対応」を、「次の一括検索実施区間ID」にする(S56)。
【0128】
S52において、検索要求キュー12が空である場合、検索制御部3は、S53〜S56を省略する。
【0129】
この後、一括検索実行部6は、「次の一括検索実施区間ID」の指す区間に対して一括検索処理を実施する(S57)。これにより、検索要求キュー12に新たな検索要求があるか否かに拘らず、1個の区間について一括検索が実行される。
【0130】
この後、検索制御部3は、「次の一括検索実施区間」を次の区間に変更する(S58)。更に、検索制御部3は、「検索要求と検索開始区間IDの対応」を参照し、検索開始区間が「次の一括検索実施区間」に一致するものがあるかチェックし(S59)、検索開始区間が「次の一括検索実施区間」に一致するものがあるか否かを判定する(S510)。検索開始区間が「次の一括検索実施区間」に一致するものがない場合、検索制御部3は、S51を繰り返す。
【0131】
検索開始区間が「次の一括検索実施区間」に一致するものがある場合、検索要求の実行の終了処理が行われる。このように、検索制御部3の処理は、検索要求の実行の開始処理、一括検索処理、検索要求の実行の終了処理を含む。具体的には、検索制御部3は、一致する検索要求に対する検索結果を、結果返却部7へ送る(S511)。更に、検索制御部3は、一致する検索要求を検索要求集合31から除き(S512)、S51を繰り返す。ここで、検索制御部3は、S512において、一致する検索要求とバージョンIDとの対応を示す情報を検索要求/バージョンID対応情報32から除き、一致する検索要求と区間IDとの対応を示す情報を検索要求/区間ID対応情報33から除く。
【0132】
なお、S511においては、検索結果をまとめて結果返却部7へ送るが、これに代えて、1個の区間についての一括検索を終了する都度に、1個の区間における検索結果を結果返却部7に送るようにしてもよい。
【0133】
図13の検索要求処理フローにおいては、図14に示すように、例えば、次の一括検索実施区間情報34により示される「次の一括検索実施区間」が区間Bである時点で、最新バージョンID情報により示される最新のデータのバージョンIDは「2」である。換言すれば、バージョンID「3」のデータである、レコード#2’及びレコード6は存在しない。また、「次の一括検索実施区間」が区間Bである時点で、バージョンID「3」のデータにおいて、レコード#4は削除されていない。
【0134】
一方、「次の一括検索実施区間」が区間Bである時点で、換言すれば、区間Aの一括検索の実行中の時点で、検索要求#2及び検索要求#3が、検索要求キュー21に到着する。そこで、検索要求#2及び検索要求#3は、区間Aの一括検索の終了後、区間Bの一括検索から検索要求集合31に追加される。
【0135】
また、区間Aの一括検索の実行中の時点で、レコード#2’の更新要求、レコード#6の追加要求、レコード#4の削除要求が更新要求キュー11に到着する。そこで、図15に示すように、区間Aの一括検索の終了後、区間Bの一括検索の開始前に、バージョンID「3」のデータが作成される。これにより、レコード#2’が更新され、レコード#6が追加され、レコード#4が削除される。
【0136】
この後、図15に示すように、「次の一括検索実施区間」が区間Cに変更されると共に、区間Bの一括検索が開始される。この後、「次の一括検索実施区間」が、図15に示すように、区間A、区間B、区間Cの順で変更され、更に、これが繰り返される。これにより、例えば区間Aから検索が開始される検索要求#1が一巡して、再度「次の一括検索実施区間」が区間Aになると、検索要求#1は、全ての区間A〜区間Cについて検索されたことになる。そこで、検索結果が結果返却部7に送られ、検索要求#1が検索要求集合31から除かれる。
【0137】
図16は、一括検索実行処理フローを示す。
【0138】
一括検索実行部6は、検索要求集合31に含まれる複数の検索要求をグループ化する、換言すれば、一括検索のための検索式を生成する(S61)。次に、一括検索実行部6は、「検索要求と検索対象データバージョンIDの対応」を参照し、検索要求集合31に含まれる複数の検索要求の全てについて、検索対象とするデータのバージョンIDの和集合を取得する(S62)。次に、一括検索実行部6は、「バージョンIDとデータ集合の対応」を参照し、S62において取得した全てのバージョンIDに対するデータの和集合を取得する(S63)。次に、一括検索実行部6は、「次の一括検索実施区間」に対する「区間IDとデータ集合の対応」を参照し、次の一括検索実施区間に対するデータを取得する(S64)。
【0139】
この後、一括検索実行部6は、「一括検索対象バージョン集合に対するデータ」と「次の一括検索実施区間に対するデータ」の共通部分(積集合)に含まれるデータを、 一括検索する(S65)。
【0140】
この後、一括検索実行部6は、一括検索処理の結果を検索要求ごとの結果に振り分ける(S66)。次に、一括検索実行部6は、「検索要求と検索対象データバージョンIDの対応」と「バージョンIDとデータ集合の対応」を参照し、検索要求ごとの検索結果から、 検索対象データ集合に含まれないデータに対する検索結果を除く(S67)。次に、一括検索実行部6は、ループが終了したか、又は、ループがその途中であるかを判定する(S68)。ループがその途中である場合、一括検索実行部6は、S67を繰り返す。ループが終了した場合、一括検索実行部6は、処理を終了する。
【0141】
図16の一括検索実行処理において、図13と同様に、前処理、一括検索処理、後処理の3個の処理が実行される。前処理は、S61〜S64であり、検索結果から漏れがないようにするために一括検索処理の入力となる一括検索の対象であるデータ集合を求める処理である。一括検索処理は、S65であり、一括検索の対象であるデータ集合について、実際の一括検索を実行する処理である。後処理は、S66〜S68であり、一括検索の結果から各検索要求にとっての不要な検索結果を除く処理である。
【0142】
なお、図16の例においては、前処理、一括検索処理、後処理が順番に実行されているが、前処理、一括検索処理、後処理を別のプロセス又はスレッドで実行して、並行に実行するようにしても良い。
【0143】
ここで、前処理について、図4を参照して説明する。例えば、図4において、区間Bについて一括検索を実行するとする。この場合の前処理は、以下のようになる。
【0144】
検索要求集合31に含まれる各々の検索要求が検索対象とするデータのバージョンIDの和集合は、{バージョンID「1」, バージョンID「2」}である(S62)。従って、バージョンID「1」に対応するデータとバージョンID「2」に対応するデータの和集合は、{レコード#1, レコード#2, レコード#3, レコード#3’, レコード#4, レコード#5}である(S63)。一方、区間Bについての「次の一括検索実施区間に対するデータの和集合」は、{レコード#3, レコード#3’, レコード#4}である(S64)。従って、以上に述べた2個の和集合の共通部分は{レコード#3, レコード#3’, レコード#4}であり、この共通部分について一括検索が実行される。
【0145】
次に、後処理について、前処理と同様に、図4を参照して説明する。例えば、図4において、以上の前処理の後に区間Bについて一括検索を実行したとする。この場合の後処理は、以下のようになる。
【0146】
一括検索の結果において、例えば検索要求#1にとって、レコード#3’ は検索要求#1の検索対象バージョン1に含まれないデータである。そこで、検索要求#1に対して返却される検索結果から、レコード#3’が除かれる。検索要求#2、#3についても、同様に、各々に返却される検索結果から、各々にとって不要なレコードが除かれる。
【0147】
なお、一括検索により得られた検索結果に含まれるデータ(レコード)がある検索要求にとって不要か否かを、以下のように判定するようにしても良い。
【0148】
例えば、データ毎の検索結果に、そのデータが含まれるバージョンIDの一覧を付加するようにしても良い。例えば、図4のレコード#1の検索結果に対しては、{バージョンID「1」, バージョンID「2」, バージョンID「3」}を、レコード#2の検索結果に対しては、{バージョンID「1」, バージョンID「2」}という情報を付加する。なお、バージョンIDが番号で表現される場合には、データ毎の検索結果に、「バージョンID「1」からバージョンID「3」まで」のように「バージョンIDの範囲」を示す情報を付加するようにしても良い。
【0149】
また、検索結果に対するバージョンの判定を、検索要求のクエリ(検索式)の一部と見なすようにしても良い。この場合、検索結果が、検索対象であるバージョンに含まれるかどうかを、元の検索要求のクエリに対するAND条件(論理積)として追加することができる。例えば、図4の検索要求#2についてのクエリは「 (検索要求#2の本来の検索式) AND(バージョンID「2」) 」のようにクエリに追加する。これにより、一括検索と同時に、不要な検索結果を除去することができる。
【0150】
次に、検索要求処理の他の例について説明する。図17〜図19は、検索要求処理の他の例の説明図である。
【0151】
図13の検索要求処理においては、検索要求が検索対象とするデータのバージョンはクライアント200のアプリケーション201から送信され、従って、一括検索実行部6は、受信したバージョンを検索対象とする。しかし、検索要求が検索要求キュー12に到着した時点における最新のデータのバージョンを、当該検索要求の検索対象のバージョンとするようにしても良い。
【0152】
この場合、検索要求は常に最新のバージョンを検索するので、古いバージョンにしか含まれないデータは削除することができる。しかし、新しいバージョンのデータが生成され古いバージョンが最新バージョンで無くなった瞬間においては、まだ古いバージョンに対する検索処理が行われている。従って、最新バージョンで無くなった瞬間に、古いバージョンを削除することはできない。換言すれば、削除要求を実行するまで古いバージョンは削除されない。しかし、古いバージョンのデータは、最新バージョンに更新された後に検索を開始した検索処理が全てのデータ、換言すれば、全ての区間について一巡して検索を実行すれば、それ以後、検索対象になることはない。
【0153】
そこで、図17に示すように、検索制御部3は、一括検索のための制御情報として、バージョンID/区間ID対応情報35を保持する。バージョンID/区間ID対応情報35は、検索制御部3のバージョンID/区間ID対応情報格納部に格納される。バージョンID/区間ID対応情報35は、「バージョンIDと検索終了区間の区間IDとの対応」を示す情報であり、データのバージョン(版)と、そのバージョンのデータが最後に検索される区間IDの対応関係を表す。
【0154】
なお、実際には、バージョンID/区間ID対応情報35は、例えばバージョンID/区間ID対応テーブルに格納される。この場合、バージョンID/区間ID対応テーブルには、「バージョンID」に対応して、当該バージョンのデータが最後に検索される区間IDが格納される。
【0155】
図17において、例えば、バージョンID「1」と区間ID「B」、及び、バージョンID「2」と区間ID「B」が、バージョンID/区間ID対応情報35の一部である「点線」で結ばれている。これにより、例えばバージョンID「1」及び「2」のデータが、最終的には、区間「B」まで検索対象とされることが表される。
【0156】
図18及び図19は、一体となって、検索要求処理フローの他の例を示す。
【0157】
検索制御部3は、図13のS51〜S56と同様に、S71〜S76を実行する。換言すれば、検索制御部3は、要求受付部1の検索要求キュー12をチェックして(S71)、新たな検索要求が検索要求キュー12に存在するかを判定する(S72)。新たな検索要求が検索要求キュー12に存在する場合、検索制御部3は、検索要求キュー12に存在する全ての検索要求を取り出して(S73)、取り出した検索要求を検索要求集合31へ加え(S74)、取り出した検索要求の検索対象バージョンを検索要求/バージョンID対応情報32に追加し(S75)、取り出した検索要求に対する「検索要求と検索開始区間IDの対応」を「次の一括検索実施区間ID」にする(S76)。
【0158】
この後、検索制御部3は、各々の検索要求に対し、「検索要求と検索終了区間IDの対応」、換言すれば、検索対象であるデータのバージョンIDに対応する検索終了区間IDを、「次の一括検索実施区間ID」に変更する(S77)。
【0159】
S72において、検索要求キュー12が空である場合、検索制御部3は、S73〜S77を省略する。
【0160】
この後、一括検索実行部6は、図13のS57と同様に、「次の一括検索実施中区間ID」の指す区間に対して一括検索処理を実施する(S78)。
【0161】
この後、検索制御部3は、図13のS58〜S512と同様に、S79〜S713を実行する。換言すれば、検索制御部3は、「次の一括検索実施区間」を次の区間に変更し(S79)、「検索開始区間が「次の一括検索実施区間」に一致するものがあるかチェックし(S710)、判定する(S711)。検索開始区間が「次の一括検索実施区間」に一致するものがない場合、検索制御部3は、S71を繰り返す。検索開始区間が「次の一括検索実施区間」に一致するものがある場合、検索制御部3は、一致する検索要求に対する検索結果を、結果返却部7へ送り(S712)、一致する検索要求を検索要求集合31から除く(S713)。
【0162】
この後、検索制御部3は、「バージョンIDと検索終了区間IDの対応」を参照し、検索終了区間IDが「次の一括検索実施区間ID」と等しいバージョンIDを求め(S714)、求めたバージョンIDが最新バージョンであるか否かを判定する(S715)。
【0163】
求めたバージョンIDが最新バージョンである場合(S715 Yes)、検索制御部3は、S71を繰り返す。これにより、求めたバージョンIDが最新バージョンである場合には、当該バージョンIDのデータは、検索を終了したバージョンであっても、削除されない。これは、当該バージョンIDのデータは、最新バージョンであるので、その後に発行される新たな検索要求の検索対象となるためである。
【0164】
求めたバージョンIDが最新バージョンでない場合(S715 No)、検索制御部3は、求めたバージョンIDについての「バージョンIDとデータ集合の対応」を削除する(S716)。更に、検索制御部3は、以上の処理によりどのバージョンIDとも対応しなくなったデータのレコードを、格納データ集合51から削除し(S717)、S71を繰り返す。
【0165】
以上の処理、特に、S77、S714〜S717によれば、検索の開始により、「バージョンIDと検索終了区間IDの対応」は、 当該バージョンIDについての検索が開始されるたびに上書きされ、かつ、そのときの区間IDが設定される。ここで、「検索を開始するときの区間」は「検索を終了するときの区間」であるので、設定した区間IDは、検索終了のタイミングを示す。また、「バージョンIDと検索終了区間IDの対応」は当該バージョンIDについての検索の開始の都度に上書きされるので、当該バージョンIDについての最も遅い検索が検索を終了する区間IDが設定される。これにより、あるバージョンIDを持つデータについて、当該データの検索が終了した時点で、直ちに、当該データを削除することができ、格納データ集合51を効率よく使用することができる。
【0166】
なお、クライアント200のアプリケーション201毎の一連の処理の情報(検索要求の情報)をシステム内に保持し、例えばその一連の処理が開始した時点のバージョンを検索対象とするようにしても良い。この場合も、検索要求は常に最新のバージョンを検索する訳ではないので、あるバージョンが最新バージョンで無くなった瞬間に古いバージョンを削除することはできない。しかし、この場合にも、検索要求が検索要求キュー12に到着した時点における最新のデータのバージョンを検索対象のバージョンとする場合と同様に、図17〜図19を適用することができる。
【0167】
次に、検索要求処理の更に他の例について説明する。図20〜図25は、検索要求処理の更に他の例の説明図である。
【0168】
図13の実施例では、検索要求キュー12に新たに到着した検索要求は、そのまま検索要求集合31に追加される。しかし、検索要求キュー12に新たに到着した検索要求を検索要求集合31に追加するかどうかを判定し、予め定められた条件に該当する場合に追加するようにしても良い。
【0169】
そこで、追加の判定の条件として、以下に述べる「コストC」と「ベネフィットB」とを用いる。ここで、検索要求集合31に新しいバージョンを検索する検索要求を加える場合におけるコストCは、当該新しいバージョンだけにしか含まれないデータを検索する時間である。例えば、図21を参照して後述するように、複数のバージョンに対して一括検索処理を行うと、不要なデータを検索することになる。検索要求集合31に新しいバージョンを検索する検索要求を加える場合におけるベネフィットBは、追加しようとする検索要求の待ち時間の削減分である。
【0170】
ベネフィットBがコストCを上回る場合には、新しいバージョンを検索する検索要求を検索要求集合31に追加する。これにより、検索装置100の全体として、平均の検索性能が向上することができる。ベネフィットBがコストC以下である場合には、新しいバージョンを検索する検索要求を検索要求集合31に追加しない。これにより、検索装置100の全体として、平均の検索性能が低下することを防止することができる。
【0171】
以下、検索要求の検索対象を、検索を開始する時点の最新バージョンとして検索を実行する場合における、コストCとベネフィットBとを計算する。なお、ここで、更新要求及び検索要求は時間的に均等な間隔で更新要求キュー11及び検索要求キュー12に到着するものとし、更新要求によってあるデータが他のデータに置換されるものとし、合計のデータ件数は変わらないものとする。
【0172】
例えば、図20に示すように、データは、区間「A」〜区間「E」に分割される。検索対象の区間は、「A」から「E」までこの順に一括検索され、これを繰り返す。1回目の区間「A」の一括検索をA[1]と表し、2回目の区間「A」の一括検索をA[2]と表し、他の区間についても同様に表すとする。更に、図20において、区間「A」〜区間「E」の各々について一括検索を開始する都度に、新たなバージョンの検索要求が加えられる。データのバージョンは、「0」から「9」まで更新される。結果として、図20は、一括検索の対象であるデータのバージョンの変化を示す。
【0173】
具体的には、図20において、左右に延びる「太線」は、各々、あるバージョンについての検索処理の実施区間を示す。「点線で囲まれた部分」は、各々、ある区間における検索体操であるデータのバージョンの集合を示す。左右に延びる「区間に対応する矢印」は、各々、ある区間の検索中に検索要求キュー12に到着した検索要求の集合を示す。「区間に対応する矢印」と「太線」とを結ぶ上下に延びる「矢印」は、各々、当該「矢印で表される区間」、換言すれば、検索要求の集合についての検索開始区間及び検索対象であるバージョンを示す。
【0174】
例えば、最初のバージョン番号(バージョンID)「0」に対する一括検索は、区間A[1]から開始される。バージョン番号「0」に対する検索処理は、その後、区間E[1]の一括検索が終了するまで続く。
【0175】
区間A[1]の一括検索が終了すると、区間A[1]の一括検索中に到着した更新要求が実行される。これにより、最新バージョンが「1」に更新される。従って、区間A[1]の一括検索中に到着して区間B[1]から検索を開始する第2の検索要求集合の検索対象であるバージョンも「1」になる。第2の検索要求集合による検索は、その後、区間A[2]に対する一括検索が終了するまで続く。以上ように、あるバージョンに対する検索要求はオーバラップしながら続いていく。
【0176】
ここで、検索要求のオーバラップについて、ある区間に着目すると以下の通りである。例えば、区間A[2]に着目してみると、区間A[2]に対する一括検索において、検索対象となるバージョンの集合は、バージョン番号「1」〜「5」の5個である。同様に、区間B[2]に着目してみると、区間B[2]に対する一括検索において、検索対象となるバージョンの集合は、バージョン番号「2」〜「6」の5個である。
【0177】
そこで、ある区間において一括検索するデータに着目すると、図21のようになる。図21は、例えば区間A[2]に着目して、当該区間A[2]において一括検索されるデータのバージョンを示す。図21において、U(1,2)はバージョンが「1」から「2」へ変更された際に更新された部分であり、U(2,3)はバージョンが「2」から「3」へ変更された際に更新された部分であり、U(3,4)はバージョンが「3」から「4」へ変更された際に更新された部分であり、U(4,5)はバージョンが「4」から「5」へ変更された際に更新された部分である。なお、図21において、図21における更新を図23における更新と区別するために、添え字「−1」を付している。
【0178】
例えば、U(1,2)−1がレコード#2であるとすると、レコード#2は、バージョンが「1」から「2」へ変更された際に更新された部分「2〜5」と、更新されていない部分「1」とを含む。また、例えば、U(2,3)−1がレコード#4であるとすると、レコード#4は、バージョンが「2」から「3」へ変更された際に更新された部分「3〜5」と、更新されていない部分「1〜2」とを含む。
【0179】
図21において、ある1個の区間についての検索を実行しバージョンが変更される都度に、Δn1件のデータが更新される。従って、バージョン番号「1」〜「5」のデータを検索する場合、元のデータに加えて、Δn1 ×4件のデータを追加して検索することになる。
【0180】
ある1個の区間で変更されるデータ量Δn1は、図21により示されるように、データの全体件数N(件)、平均検索時間L(秒)、更新頻度r(件/秒)から求めることができる。最初に、区間の数をM個とすると、区間の検索中に更新される件数Δn1は、Δn1=L×r/Mで求められる。また、区間の平均検索件数n1は、n1=N/M+Δn1×(M−1)で求められる。この後、検索速度v(件/秒)が、v=n1×M/Lで求められる。
【0181】
次に、図20の例において、新たな検索要求を、2回目の区間Aの検索処理を開始するタイミングであるA[2]では追加せずに、次の区間B[2]で追加する場合について、図22に示す。
【0182】
この場合、バージョン番号「5」のデータは検索されない。従って、2回目の区間A[2]での最新バージョンであるバージョン番号「5」のデータを検索する検索要求が、図22に示すように、存在しなくなる。このため、区間A[2]及びそれ以降の区間B[2]、区間C[2]、区間D[2]、区間E[2]の5区間において、検索対象となるバージョンの集合が変化する。一方、バージョン番号「5」のデータは検索されない代わりに、区間B[2]からバージョン番号「6」のデータが検索される。従って、区間B[2]から検索を開始する、換言すれば、次のバージョンを検索する検索要求の数は2倍になる。
【0183】
検索対象となるバージョンの集合の変化を、図23に示す。図23(A)に示すように、影響のある最初の区間A[2]においては、バージョン番号「5」のデータを検索する検索要求が存在しない。このため、バージョン番号「5」だけに含まれるデータを検索しなくてもよい。換言すれば、U(4,5)−2において、部分「5」は、バージョン番号「5」にしか含まれないので、検索されない。このため、検索データ量がΔn1分減少する。
【0184】
しかし、次の区間B[2]においてはバージョン6を検索する検索要求が存在する。このため、図23(B)に示すように、バージョン番号「5」だけに含まれるデータが存在しない。換言すれば、U(4,5)−3において、部分「5〜6」は、バージョン番号「6」のデータの検索において検索される。このため、検索データ量は減少しない。
【0185】
バージョン番号「5」のデータを検索しないことによる検索データ量は、バージョン番号「5」が最も新しいバージョンである区間A[2]を検索する場合と、バージョン番号「5」が最も古いバージョンである区間E[2]を検索する場合について、合わせて2×Δn1件の減少となる。
【0186】
バージョン番号「5」のデータを検索しない場合において、検索のレスポンスに対する影響を図24に示す。図24において、前述したように、検索データ量が減少する区間はA[2]及びE[2]である。これにより、バージョン番号「1」〜「4」を検索する検索要求の実行の時間と、バージョン番号「6」〜「9」を検索する検索要求の実行の時間とが減少する。以上から、区間A[2]でバージョン番号「5」のデータの検索を行わない場合のレスポンスの総減少量、換言すれば、区間A[2]でバージョン番号「5」のデータの検索を行う場合の検索要求を追加する場合のコストCが求められる。
【0187】
例えば、対象区間の検索時間の減少時間Δl(秒)は、Δl=Δn1/vで求められる。検索要求の到着頻度をs(個/秒)とすると、各々の区間で検索を開始する検索要求の数q1(個)は、q1=s×L/Mで求められる。従って、検索のレスポンスの総減少量C(個×s)は、C=Δl×(2×M−1)×q1で求められる。
【0188】
一方、バージョン番号「5」のデータを検索する場合のベネフィットBは、区間E[1]に到着したq1個の検索要求の検索開始までの待ち時間が1区間分減少することである。
【0189】
そこで、コストCとベネフィットBとが、図25に示すように、比較される。具体的には、コストCは、図25(A)に示すように求められる。ベネフィットBは、図25(B)に示すように求められる。ここで、コストCとベネフィットBとの比較式は、図25(C)に示すように、簡単化することができ、v/r>2M−1となる。換言すれば、コストCとベネフィットBとの比較結果は、更新頻度rと検索速度vの比と、区間の数Mとから求まる定数によって定まることが判る。例えば、更新頻度rが多くなると、v/r>2M−1が成立しなくなる、換言すれば、コストCがベネフィットBよりも小さくなくなる。
【0190】
従って、検索制御部3は、更新頻度rと検索速度vと区間の数Mとに基づいて、式v/r>2M−1が成立するか否かを判定する。式v/r>2M−1が成立する場合、検索制御部3は、コストCよりベネフィットBが大きいと判定して、検索要求を途中で追加する。これにより、検索装置100全体として、レスポンスを向上させることができる。式v/r>2M−1が成立しない場合、検索制御部3は、コストCよりベネフィットBが小さいと判定して、検索要求を途中で追加しない。これにより、検索装置100全体として、レスポンスが低下することを防止することができる。
【符号の説明】
【0191】
1 要求受付部
2 更新制御部
3 検索制御部
4 更新実行部
5 データ格納部
6 一括検索実行部
7 結果返却部
11 更新要求キュー
12 検索要求キュー
31 検索要求集合
32 検索要求/バージョンID対応情報
33 検索要求/区間ID対応情報
34 次の一括検索実施区間情報
51 格納データ集合
52 バージョンID
53 バージョンID/データ対応情報
54 区間ID/データ対応情報
100 検索装置
200 クライアント
201 アプリケーション
300 ネットワーク
【特許請求の範囲】
【請求項1】
コンピュータに、
格納部に格納された複数のレコードの一部分である第1のレコード群のうち、第1の検索条件を満たすレコードを抽出する第1の検索処理を実行させ、
前記第1の検索処理の実行中に第2の検索条件を受け付けた場合に、前記格納部に格納された前記複数のレコードの前記第1のレコード群とは異なる一部分である第2のレコード群に含まれるレコードのうち、前記第1の検索条件を満たすレコード及び前記第2の検索条件を満たすレコードを抽出する第2の検索処理を実行させる、
ことを特徴とする検索制御プログラム。
【請求項2】
前記コンピュータに、更に、
前記第2の検索条件を受け付ける前に受け付けた前記第2のレコード群に含まれるレコードを更新対象とする更新要求に応じて、更新対象のレコードの更新前のレコードと更新後のレコードを前記格納部に格納し、
前記第2の検索処理を行なう際に、さらに、前記更新前のレコードが前記第1の検索条件を満たす場合に前記更新前のレコードを抽出し、前記更新後のレコードが前記第2の検索条件を満たす場合に、前記更新後のレコードを抽出する、
ことを実行させることを特徴とする請求項1に記載の検索制御プログラム。
【請求項3】
前記コンピュータに、さらに、
前記更新前のレコード及び前記更新後のレコードを前記格納部に格納する場合に、前記更新前のレコード及び前記更新後のレコードのそれぞれを識別する版情報を、それぞれのレコードに付加し、
前記更新前のレコード及び前記更新後のレコードを抽出する場合に、それぞれのレコードに付加された版情報に応じて抽出するか否かを判断する、
ことを実行させることを特徴とする請求項2に記載の検索制御プログラム。
【請求項4】
コンピュータに、
格納部に格納された複数のレコードを複数のレコード群に分割し、
分割された前記複数のレコード群のそれぞれについて、複数の検索要求に基づく一括検索処理を実行する、
ことを実行させる検索制御プログラムであって、
前記複数の検索要求は、検索対象のレコード群についての一括検索処理の実行前に受け付けた検索要求を含む
ことを特徴とする検索制御プログラム。
【請求項5】
前記コンピュータに、更に、
受け付けた検索要求に基づく検索処理を、前記複数のレコード群のそれぞれについて少なくとも1回実行させる
ことを特徴とする請求項4に記載の検索制御プログラム。
【請求項6】
前記コンピュータに、更に、
前記複数のレコード群のうちの第1のレコード群について前記一括検索処理を実行中に、前記複数のレコード群のうちの第2のレコード群に含まれるレコードについての更新要求を受け付けた場合に、前記第1のレコード群についての前記一括検索処理の終了後であって、前記第2のレコード群についての一括検索処理の開始前に、前記更新要求に応じた更新処理を実行させる
ことを特徴とする請求項4に記載の検索制御プログラム。
【請求項7】
前記コンピュータに、更に、
前記第1のレコード群について前記一括検索処理を実行中に、前記第2のレコード群に含まれるレコードについての削除要求を受け付けた場合に、第1のレコード群についての前記一括検索処理の終了後までに受け付けた検索要求に応じた一括検索処理を、前記複数のレコード群に少なくとも1回実行した後に、前記削除要求に応じた削除処理を実行させる
ことを特徴とする請求項4に記載の検索制御プログラム。
【請求項8】
格納部に格納された複数のレコードの一部分である第1のレコード群のうち、第1の検索条件を満たすレコードを抽出する第1の検索処理を実行し、
前記第1の検索処理の実行中に第2の検索条件を受け付けた場合に、前記格納部に格納された前記複数のレコードの前記第1のレコード群とは異なる一部分である第2のレコード群に含まれるレコードのうち、前記第1の検索条件を満たすレコード及び前記第2の検索条件を満たすレコードを抽出する第2の検索処理を実行する、
ことを特徴とする検索方法。
【請求項9】
前記第2の検索条件を受け付ける前に受け付けた前記第2のレコード群に含まれるレコードを更新対象とする更新要求に応じて、更新対象のレコードの更新前のレコードと更新後のレコードを前記格納部に格納し、
前記第2の検索処理を行なう際に、さらに、前記更新前のレコードが前記第1の検索条件を満たす場合に前記更新前のレコードを抽出し、前記更新後のレコードが前記第2の検索条件を満たす場合に、前記更新後のレコードを抽出する、
ことを特徴とする請求項8に記載の検索方法。
【請求項10】
複数のレコードを格納する格納部と、
検索要求を受付ける要求受付け部と、
前記要求受付け部が第1の検索要求を受け付けた場合に、前記格納部に格納された複数のレコードの一部分である第1のレコード群のうち、第1の検索条件を満たすレコードを抽出する第1の検索処理を実行し、前記第1の検索要求の実行中に前記要求受付け部が第2の検索要求を受け付けた場合に、前記格納部に格納された前記複数のレコードの前記第1のレコード群とは異なる一部分である第2のレコード群に含まれるレコードのうち、前記第1の検索条件を満たすレコード及び前記第2の検索条件を満たすレコードを抽出する第2の検索処理を実行する検索制御部とを含む、
ことを特徴とする検索システム。
【請求項11】
前記検索制御部が、
前記第2の検索条件を受け付ける前に受け付けた前記第2のレコード群に含まれるレコードを更新対象とする更新要求に応じて、更新対象のレコードの更新前のレコードと更新後のレコードを前記格納部に格納し、
前記第2の検索処理を行なう際に、さらに、前記更新前のレコードが前記第1の検索条件を満たす場合に前記更新前のレコードを抽出し、前記更新後のレコードが前記第2の検索条件を満たす場合に、前記更新後のレコードを抽出する、
ことを特徴とする請求項10に記載の検索システム。
【請求項1】
コンピュータに、
格納部に格納された複数のレコードの一部分である第1のレコード群のうち、第1の検索条件を満たすレコードを抽出する第1の検索処理を実行させ、
前記第1の検索処理の実行中に第2の検索条件を受け付けた場合に、前記格納部に格納された前記複数のレコードの前記第1のレコード群とは異なる一部分である第2のレコード群に含まれるレコードのうち、前記第1の検索条件を満たすレコード及び前記第2の検索条件を満たすレコードを抽出する第2の検索処理を実行させる、
ことを特徴とする検索制御プログラム。
【請求項2】
前記コンピュータに、更に、
前記第2の検索条件を受け付ける前に受け付けた前記第2のレコード群に含まれるレコードを更新対象とする更新要求に応じて、更新対象のレコードの更新前のレコードと更新後のレコードを前記格納部に格納し、
前記第2の検索処理を行なう際に、さらに、前記更新前のレコードが前記第1の検索条件を満たす場合に前記更新前のレコードを抽出し、前記更新後のレコードが前記第2の検索条件を満たす場合に、前記更新後のレコードを抽出する、
ことを実行させることを特徴とする請求項1に記載の検索制御プログラム。
【請求項3】
前記コンピュータに、さらに、
前記更新前のレコード及び前記更新後のレコードを前記格納部に格納する場合に、前記更新前のレコード及び前記更新後のレコードのそれぞれを識別する版情報を、それぞれのレコードに付加し、
前記更新前のレコード及び前記更新後のレコードを抽出する場合に、それぞれのレコードに付加された版情報に応じて抽出するか否かを判断する、
ことを実行させることを特徴とする請求項2に記載の検索制御プログラム。
【請求項4】
コンピュータに、
格納部に格納された複数のレコードを複数のレコード群に分割し、
分割された前記複数のレコード群のそれぞれについて、複数の検索要求に基づく一括検索処理を実行する、
ことを実行させる検索制御プログラムであって、
前記複数の検索要求は、検索対象のレコード群についての一括検索処理の実行前に受け付けた検索要求を含む
ことを特徴とする検索制御プログラム。
【請求項5】
前記コンピュータに、更に、
受け付けた検索要求に基づく検索処理を、前記複数のレコード群のそれぞれについて少なくとも1回実行させる
ことを特徴とする請求項4に記載の検索制御プログラム。
【請求項6】
前記コンピュータに、更に、
前記複数のレコード群のうちの第1のレコード群について前記一括検索処理を実行中に、前記複数のレコード群のうちの第2のレコード群に含まれるレコードについての更新要求を受け付けた場合に、前記第1のレコード群についての前記一括検索処理の終了後であって、前記第2のレコード群についての一括検索処理の開始前に、前記更新要求に応じた更新処理を実行させる
ことを特徴とする請求項4に記載の検索制御プログラム。
【請求項7】
前記コンピュータに、更に、
前記第1のレコード群について前記一括検索処理を実行中に、前記第2のレコード群に含まれるレコードについての削除要求を受け付けた場合に、第1のレコード群についての前記一括検索処理の終了後までに受け付けた検索要求に応じた一括検索処理を、前記複数のレコード群に少なくとも1回実行した後に、前記削除要求に応じた削除処理を実行させる
ことを特徴とする請求項4に記載の検索制御プログラム。
【請求項8】
格納部に格納された複数のレコードの一部分である第1のレコード群のうち、第1の検索条件を満たすレコードを抽出する第1の検索処理を実行し、
前記第1の検索処理の実行中に第2の検索条件を受け付けた場合に、前記格納部に格納された前記複数のレコードの前記第1のレコード群とは異なる一部分である第2のレコード群に含まれるレコードのうち、前記第1の検索条件を満たすレコード及び前記第2の検索条件を満たすレコードを抽出する第2の検索処理を実行する、
ことを特徴とする検索方法。
【請求項9】
前記第2の検索条件を受け付ける前に受け付けた前記第2のレコード群に含まれるレコードを更新対象とする更新要求に応じて、更新対象のレコードの更新前のレコードと更新後のレコードを前記格納部に格納し、
前記第2の検索処理を行なう際に、さらに、前記更新前のレコードが前記第1の検索条件を満たす場合に前記更新前のレコードを抽出し、前記更新後のレコードが前記第2の検索条件を満たす場合に、前記更新後のレコードを抽出する、
ことを特徴とする請求項8に記載の検索方法。
【請求項10】
複数のレコードを格納する格納部と、
検索要求を受付ける要求受付け部と、
前記要求受付け部が第1の検索要求を受け付けた場合に、前記格納部に格納された複数のレコードの一部分である第1のレコード群のうち、第1の検索条件を満たすレコードを抽出する第1の検索処理を実行し、前記第1の検索要求の実行中に前記要求受付け部が第2の検索要求を受け付けた場合に、前記格納部に格納された前記複数のレコードの前記第1のレコード群とは異なる一部分である第2のレコード群に含まれるレコードのうち、前記第1の検索条件を満たすレコード及び前記第2の検索条件を満たすレコードを抽出する第2の検索処理を実行する検索制御部とを含む、
ことを特徴とする検索システム。
【請求項11】
前記検索制御部が、
前記第2の検索条件を受け付ける前に受け付けた前記第2のレコード群に含まれるレコードを更新対象とする更新要求に応じて、更新対象のレコードの更新前のレコードと更新後のレコードを前記格納部に格納し、
前記第2の検索処理を行なう際に、さらに、前記更新前のレコードが前記第1の検索条件を満たす場合に前記更新前のレコードを抽出し、前記更新後のレコードが前記第2の検索条件を満たす場合に、前記更新後のレコードを抽出する、
ことを特徴とする請求項10に記載の検索システム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【公開番号】特開2012−198709(P2012−198709A)
【公開日】平成24年10月18日(2012.10.18)
【国際特許分類】
【出願番号】特願2011−61732(P2011−61732)
【出願日】平成23年3月18日(2011.3.18)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成24年10月18日(2012.10.18)
【国際特許分類】
【出願日】平成23年3月18日(2011.3.18)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]