【文献】
川上 大輔、外4名,範囲検索と複数属性のデータの処理に適応した分散データストア,情報処理学会研究報告 平成21年度(5),日本,社団法人情報処理学会,2010年 3月15日,p.1−9
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0013】
以下、本発明に係るインデクス分割管理技術の実施形態例を、図面を用いて詳細に説明する。なお、本発明の実施態様は、後述する例に限定されるものではなく、その技術思想の範囲において、種々の変形が可能である。なお、実施の形態を説明するための全図において、同一の機能に関する箇所には同一または関連する符号を付し、その繰り返しの説明は省略する。また、以下の実施の形態では、特に必要なとき以外は同一または同様な部分の説明を原則として繰り返さないものとする。
【0014】
[システム構成]
図1に、各実施形態の説明で共通に使用する情報処理システムの全体構成例を示す。本システムは、利用者端末101、ファイルサーバ102、インデクス生成サーバ103、検索サーバ104、LAN105で構成される。各サーバは、コンピュータと、大規模ストレージ装置と、通信装置で構成される。
【0015】
ファイルサーバ102には、検索対象となるファイル106が格納されている。ファイルサーバ102は、LAN105経由で、インデクス生成サーバ103に接続されている。LAN105は無線方式でも有線方式でもよい。また、LAN105の一部は、インターネットでもよい。
【0016】
インデクス生成サーバ103には、LAN105経由で、検索サーバ104が接続されている。検索サーバ104を用いて検索を実行する利用者端末101も、LAN105経由で検索サーバ104に接続されている。
【0017】
図1に示すシステム図は、インデクス生成サーバ103と検索サーバ104とが物理的に異なるマシン上で稼働する場合を表しているが、これらのサーバが物理的に同一のマシン上で稼働してもよい。
【0018】
インデクス生成サーバ103には、クローリングモジュール107と、インデクス生成モジュール108と、検索エンジン109と、クローリング管理DB110とが配置されている。クローリングモジュール107は、ファイルサーバ102内を探索し、更新されたファイルを発見し、発見されたファイルをダウンロードする処理を実行する。インデクス生成モジュール108は、ダウンロードされたデータから差分インデクスを生成する処理を実行する。検索エンジン109は、インデクス生成・検索機能を提供するモジュールであり、よく知られるオープンソースの検索エンジンとして、Apache LuceneやSennaがある。検索エンジン109は、差分インデクスの生成時に、インデクス生成モジュール108により利用される。クローリング管理DB110は、前回のクローリング時から現在までのファイル・ディレクトリの更新を管理する。
【0019】
検索サーバ104には、検索エンジン109と、検索サービス111と、インデクス管理サービス112と、インデクス113とが配置される。検索サービス111は、利用者端末101から検索要求を受け付けると、検索エンジン109を使用して検索結果を生成して応答する処理を実行する。インデクス管理サービス112は、インデクス生成サーバ103で生成された差分インデクスと削除ファイルリストに基づいて、インデクス113に対する更新処理を実行する。また、インデクス管理サービス112は、LAN105に対する検索サーバ104の追加・削除時に、インデクス113の再構成処理を実行する。ここで、再構成処理は、ノードの追加・削除時に、各インデクスに登録されているドキュメントデータの登録先インデクスを変更する処理を意味する。各ドキュメントがどのインデクスに登録されるかは、マッピング情報により定義される。本明細書では、このマッピング情報を、後述するコンシステントハッシュ仮想ノード方式、又は、改良コンシステントハッシュ仮想ノード方式により定義する。マッピング情報(マッピングテーブル)は、インデクス管理サービス112が管理してもよいし、インデクス生成サーバ103や他のサーバが管理してもよい。
【0020】
ファイルサーバ102に保存されるファイル数の増加に伴い、インデクス113に登録されるドキュメント量も増加し、それに伴って検索時の負荷も増大する。ある一定の検索性能を確保するには、インデクス1個当たりの登録ドキュメント数を一定数以下に抑える必要がある。このため、検索対象となるファイル数が増大するのに伴って、検索サーバ104を追加していく必要がある。
【0021】
検索サーバ104の追加により、各インデクスに登録されているドキュメントの配置を再構成しなければならないが、後述するように、コンシステントハッシュ仮想ノード方式、又は、改良コンシステントハッシュ仮想ノード方式を利用したマッピング手法を利用することにより、ノード間におけるデータ移行コスト(移動量や移動時間)を最小限に抑えることができる。
【0022】
[コンシステントハッシュ仮想ノード方式]
図2に、コンシステントハッシュ仮想ノード方式の概念を示す。本形態例においては、ハッシュ関数としてMD5を想定する。もっとも、ハッシュ関数はMD5に限られず、SHA1その他のハッシュ関数を適用することも可能である。MD5は、128ビットのハッシュ関数であり、0〜2^128-1の値を採り得る。ここでは、0と2^128-1を同一視した円環状のハッシュ値空間202を考える。
【0023】
このように始点と終点を同一視した円環状のハッシュ値空間202に対し、例えばノード数を2、仮想ノード数を3とする場合を考える。2つのノードに対応するノードIDをそれぞれ1及び2とすると、円環状のハッシュ値空間202上には、各ノードに対応する代表点(仮想ノード201)が3つずつプロットされる。
【0024】
この状態で、ドキュメントDの登録先ノードIDを決定するには、まず、ドキュメントDのファイルパスのMD5値を計算し、次に、円環状のハッシュ値空間202に計算値をプロットする。その後、プロット点から反時計回りにポインタを移動させ、最初に到達する仮想ノード201に対応するノードIDを求め、当該ノードIDをドキュメントDの登録先ノードIDに決定する。この手順の繰り返しにより、全てのドキュメントに対し、ノードIDを1対1に対応させるマッピングを実現することができる。本明細書では、この手法を、コンシステントハッシュ仮想ノード方式と呼ぶ。なお、ノードIDを探索する際の探索方向は時計周りでもよい。
【0025】
ノードID=3のノードを情報処理システムに物理的に追加する場合には、ノードID=3のノードに対応する3つの仮想ノード201を円環状のハッシュ値空間202上にランダムにプロットする。仮想ノード201のプロットにより、新しいマッピング情報を定義することができる。この後、前述した手順に従って、ドキュメントに対応付けるノードIDを決定する。なお、本明細書においては、円環状のハッシュ値空間202上に既に存在するノード(この例では、ノードID=1、2のノード)を「既存ノード」と呼び、新たに追加されるノード(この例では、ノードID=3のノード)を「追加ノード」とも呼ぶ。
【0026】
1つのノードに対応付ける仮想ノード201の数を増やすことにより、円環状のハッシュ値空間202上における各ノードの担当範囲を平均化することができ、各ノードにマッピングされるドキュメント数の分散を小さくすることができる。
【0027】
これに対し、ノードID=3のノードを情報処理システムから物理的に削除する場合には、円環状のハッシュ値空間202からノードID=3のノードに対応する3つの仮想ノード201を削除する。この後、前述した手順に従って、ドキュメントに対応付けるノードIDを決定する。
【0028】
このように、本実施形態に係る管理手法を用いれば、大量のデータを取り扱う検索システムにおいて、インデクスを複数の検索ノードに分割して配置する場合にも、分割インデクスに登録されるドキュメント数の平準化を実現できる。また、本発明によれば、分割インデクスを効率的に再構成することができる。
【0029】
[改良コンシステントハッシュ仮想ノード方式(その1)]
図3に、前述したコンシステントハッシュ仮想ノード方式の改良方式の概念を示す。本形態例の場合も、前述の形態例の場合と同様、ハッシュ関数としてMD5を想定する。また、管理空間には、0と2^128-1を同一視した円環状のハッシュ値空間202を考える。
【0030】
ただし、本形態例の場合、円環状のハッシュ値空間202をK個に等分割し、各単位空間をスロット301と定義する。なお、各スロット301には、ハッシュ値0を含むスロットから反時計回りに順番に、スロット番号302を付与する。この形態例の場合、スロット番号302は、0からK−1の値を採る。また、各スロット番号302には対応するノードID303を定義し、その情報をマッピングテーブル304により管理する。
【0031】
この管理手法によれば、前述したコンシステントハッシュ仮想ノード方式と同様、与えられたドキュメントDのファイルパスに対応するノードIDを計算することができる。例えば円環状のハッシュ値空間202をK個に分割する場合、各スロット301が担当する空間サイズは、{2^128}/Kで与えられる。従って、スロット番号Xに対応するスロット301は、{2^128}X/K〜[{2^128}(X+1)/K]-1の空間領域を担当する。
【0032】
この形態例の場合には、以下の手順で、ドキュメントDに対応するノードIDを決定する。まず、ドキュメントDのファイルパスについてMD5ハッシュ値を計算して円環状のハッシュ値空間202上にプロットし、当該プロット点が属するスロット番号Xを求める。次に、求まったスロット番号Xによりマッピングテーブル304を参照し、スロット番号Xに対応するノードIDを求める。これにより、ドキュメントDに対応するノードIDが決定される。
【0033】
本形態例に係る手法のメリットは、形態例1に係るコンシステントハッシュ仮想ノード方式に比べ、マッピング情報の定義に必要なリソース量が少なく済む点である。例えば管理対象とする検索サーバ104の数が1000個であり、各検索サーバ104に登録するドキュメント数の分散を平均値の10%以内に収めたい場合、形態例1の方式(
図2)によると、管理対象とする仮想ノードの数が数千個にも及ぶ。このため、その全ての仮想ノードのマッピング情報を保存するには数GBの記憶領域が必要になる。一方、本形態例に係る改良型のコンシステントハッシュ仮想ノード方式の場合、同様の分散に抑えるために必要な記憶領域は数十MBで済み、リソース効率が非常に高くなる。
【0034】
続いて、情報処理システムを構成する検索サーバ104の数を変更する場合に実行されるスロットの再配分処理を説明する。以下では、
図4に検索サーバ104を追加する場合に実行されるインデクスの再配分処理について、
図5に検索サーバ104を削除する場合に実行されるインデクスの再配分処理について説明する。
【0035】
図4は、N個のノードで構成される情報処理システムに、M個のノードを新たに追加する場合におけるスロットの再配分処理の概念図である。以下に説明する処理は、情報処理システムを構成するいずれかのサーバ上に用意されたインデクス管理サービス112において実行される。
【0036】
ここでは、円環状のハッシュ値空間上に定義された全スロット数をK、既存ノード数をN、追加ノード数をMとする。
【0037】
まず、各ノードからKM/{N(N+M)}個のスロットが抽出され、再配分用に用意されるリスト(記憶領域)に順番に追加される。
図4では、抽出されたスロットに番号を付して表している。リストにスロットを追加する際の採番規則は、(ノードID,シーケンス番号)である。なお、リストは、再配分処理を管理するインデクス管理サービス112に用意される。また、N個のノード全体からは、KM/(N+M)個のスロットが抽出される。
図4では、抽出されるKM/{N(N+M)}個のスロットの範囲を実線により囲んで表している。
【0038】
各ノードからのスロットの抽出は、スロットの再配分後に、各ノードに分配されるスロット番号(
図3)が可能な限り連続した番号になるように、再配分処理の実行時点に各ノードに割り当てられているスロット番号の小さいものから順番に抽出される。
【0039】
各ノードから抽出されたスロットがリスト上に並ぶと、インデクス管理サービス112は、先頭からK/(N+M)個ずつスロットを切り出し、M個の追加ノードに順番に割り当てる。この結果、再配分完了後の各ノードに割り当てられるスロットの数は、全てK/(N+M)個になる。すなわち、分割インデクスに登録されるドキュメント数を平準化することができる。
【0040】
この配分方式の採用により、既存ノードから追加ノードに移行されるデータ(各スロットに属するデータ)を、極力、纏まった塊にすることができる。この結果、既存ノード上でのインデクスの切出し回数を極力減らすことができ、再構築時におけるオーバヘッドを減らすことができる。また、本方式によるデータの移動は、いずれも既存ノードから追加ノードへの移動のみであり、既存ノード間におけるデータ移動を無くすことができる。このため、移動データ量が必要最小限で済み、分割インデクスを効率的に再構成することができる。
【0041】
図5は、N+M個のノードで構成される情報処理システムからM個のノードを削除する場合におけるスロットの再配分処理の概念図である。以下に説明する処理も、情報処理システムを構成するいずれかのサーバ上に用意されたインデクス生成モジュール108において実行される。
【0042】
なお、
図5は、
図4を用いて説明した再配分後のスロット配置と同じである。従って、N+M個のノードには、それぞれK/(N+M)個のスロットが割り当てられている。この状態において、削除対象であるM個の削除ノードから各K/(N+M)個のスロットが抽出され、再配分用に用意されるリスト(記憶領域)に順番に追加される。ここでのリストは、ノードを追加する際に使用するリストと同じでもよいし、異なっていてもよい。
図5も、抽出されるスロットに番号を付して表している。リストにスロットを追加する際の採番規則は、(ノードID,シーケンス番号)である。前述の場合と同様、リストは、再配分処理を管理するインデクス管理サービス112に用意される。また、M個のノード全体からは、KM/(N+M)個のスロットが抽出される。
図5では、抽出されるKM/{N(N+M)}個のスロットの範囲を実線により囲んで表している。
【0043】
各ノードからのスロットの抽出は、スロットの再配分後に、各ノードに分配されるスロット番号(
図3)が可能な限り連続した番号になるように、再配分処理の実行時点に各ノードに割り当てられているシーケンス番号の小さいものから順番に抽出される。
【0044】
各ノードから抽出されたスロットがリスト上に並ぶと、インデクス生成モジュール108は、先頭からKM/{N(N+M)}個ずつスロットを切り出し、削除されないN個の残留ノードに順番に割り当てる。この結果、再配分完了後の各ノードに割り当てられるスロットの数は、全てK/N個になる。すなわち、分割インデクスに登録されるドキュメント数を平準化することができる。
【0045】
この配分方式の採用により、削除ノードから残留ノードに移行されるデータ(各スロットに属するデータ)を、極力、纏まった塊にすることができる。この結果、削除ノード上でのインデクスの切出し回数を極力減らすことができ、再構築時におけるオーバヘッドを減らすことができる。また、本方式によるデータの移動は、いずれも削除ノードから残留ノードへの移動のみであり、残留ノード間におけるデータ移動を無くすことができる。このため、移動データ量が必要最小限で済み、分割インデクスを効率的に再構成することができる。
【0046】
[クローリング管理データベース]
図6に、クローリング管理データベース110のテーブル例を示す。クローリング管理データベース110の利用により、インデクス生成サーバ103は、前回のクローリング時点から現在時点までに変更があったファイルを検出し、差分インデクスを作成する。テーブルの属性値には、パス名601、ハッシュ値602、削除フラグ603が含まれる。パス名601は、ファイルサーバ内におけるファイルのパスである。ハッシュ値602は、各ファイルのメタデータのハッシュ値である。削除フラグ603は、ファイルが削除されたか否かの状態を記録するフラグであり、「0」が残存、「1」が削除済みを表している。
【0047】
削除フラグ603は、クローリングの開始時に「1」にセットされ、クローリングでファイルが存在していることが確認できた段階で「0」にセットされる。最終的に削除フラグ603が「1」のエントリのパス名をリストアップすると、削除ファイルリストを生成することができる。削除ファイルリストは、差分インデクスを検索ノード上のインデクスに適用する際(更新・反映する際)、利用される。
【0048】
[インデクスの生成処理]
図7に、インデクスの生成処理手順の概要を示す。まず、インデクス生成サーバ103は、ファイルサーバ102にアクセスし、差分データのクローリング処理を実行する(ステップ701)。このクローリング処理において、インデクス生成サーバ103は、各ファイルのメタ情報のハッシュ値を計算する。インデクス生成サーバ103は、計算されたハッシュ値とクローリング管理データベース110に記録されている前回クローリング時のハッシュ値との比較により、データ更新の有無を検知する。次に、インデクス生成サーバ103は、更新が確認されたファイルをダウンロードすると共に、削除されたファイル名のリストである削除ファイルリストを生成する。
【0049】
次に、インデクス生成サーバ103は、ダウンロードしたファイルデータに基づいて、差分インデクスを生成する(ステップ702)。インデクス生成サーバ103は、コンシステントハッシュ仮想ノード方式又は改良コンシステントハッシュ仮想ノード方式を利用し、各分割インデクス(検索サーバ104に対応する)に応じた削除ファイルリストの分割生成及び差分インデクスの生成を行う。
【0050】
続いて、インデクス生成サーバ103は、生成された差分インデクスと削除ファイルリストを、マージ対象であるインデクスが格納されている検索サーバ104に転送する(ステップ703)。この転送はLAN105経由で実行される。
【0051】
検索サーバ104は、差分インデクス・削除ファイルリストを使用して、自装置が保持するインデクス113を更新する(ステップ704)。
【0052】
[差分インデクス生成処理]
図8に、ダウンロードデータから差分インデクスを生成する際に実行される差分インデクス生成処理手順を示す。差分インデクスの生成処理は、インデクス生成モジュール108により実行される。インデクス生成モジュール108は、クローリング処理によりダウンロードされた新規作成ファイル群又は更新ファイル群に逐次アクセスし、差分インデクスに登録するループ処理を実行する(ステップ801)。
【0053】
ループ処理が開始されると、まず、インデクス生成モジュール108は、ファイルデータからテキストデータを抽出する(ステップ802)。次に、インデクス生成モジュール108は、ファイルデータからメタデータを抽出し(ステップ803)、差分インデクスに追加登録するデータを作成する。
【0054】
その後、インデクス生成モジュール108は、ファイルパスのハッシュ値を計算し、コンシステントハッシュ仮想方式又は改良コンシステントハッシュ仮想ノード方式を用いて構築されたマッピング情報に基づいて、当該ドキュメントの登録先インデクスを決定する(ステップ804)。
【0055】
決定後、インデクス生成モジュール108は、抽出したメタデータを入力値に使用し、検索エンジン109を利用して差分インデクスにドキュメントを追加登録する(ステップ805)。このループ処理は、全てのダウンロードデータが差分インデクスに登録されるまで繰り返される。
【0056】
本処理において生成される差分インデクスは、前回のインデクス生成・更新処理以降に、新規に作成・更新されたファイル群に関するインデクスである。
【0057】
[ノード追加時の処理]
図9に、N個のノードで構成される情報処理システムに、新たにM個のノードが追加される場合に実行されるスロットの再配分処理手順を示す。当該処理は、インデクス管理サービス112が実行する。
【0058】
M個のノードが追加されると、インデクス管理サービス112は、N個の既存ノードから、KM/{N(N+M)}個ずつスロットを抽出し、ノードIDの昇順にリストに詰める(ステップ901)。
【0059】
次に、インデクス管理サービス112は、リストの先頭から、K/(N+M)個ずつスロットを切出し、新規に追加されたM個のノードに割り当てる(ステップ902)。
【0060】
この後、インデクス管理サービス112は、スロット割り当ての再編に応じ、スロット番号とノードIDのマッピングテーブルを編集し、改良コンシステントハッシュ仮想ノード方式におけるマッピング情報を更新する(ステップ903)。この更新されたマッピング情報を利用して、インデクスの再構成処理を行う。
【0061】
[ノード削除時の処理]
図10に、N+M個のノードで構成される情報処理システムからM個のノードを削除する場合に実行されるスロットの再配分処理手順を示す。N+M個の検索サーバ104からM個の検索サーバ104を削除する場合、インデクス管理サービス112は、削除するM個の検索サーバ104に割り当てられていたスロットを全て抽出し、ノードIDの昇順にリストに詰める(ステップ1001)。
【0062】
次に、インデクス管理サービス112は、リストの先頭から、KM/{N(N+M)}個ずつスロットを切出して、残りN個の残留ノード(検索サーバ104)に割り当てる(ステップ1002)。
【0063】
最後に、インデクス管理サービス112は、スロット割り当ての再編に応じ、スロット番号とノードIDのマッピングテーブルを編集し、マッピング情報を更新する(ステップ1003)。
【0064】
[ノード追加時におけるインデクスの再構築処理]
図11に、ノード追加時に実行されるインデクスの再構成処理手順を示す。インデクス生成モジュール108は、ノードの追加に応じ、各既存ノード(検索サーバ104)に割り当てるスロットの再配分処理を実行する(ステップ1101)。
【0065】
その後、インデクス生成モジュール108は、追加後のノード構成に応じたスロット番号302(
図3)とノードIDのマッピングテーブルを生成する(ステップ1102)。
【0066】
新規マッピングテーブルが生成されると、インデクス生成モジュール108は、検索サーバ104を追加する前の各検索サーバ104から追加ノードに転送すべきドキュメント群のインデクスを、新規マッピングテーブルに応じて切り出す(ステップ1103)。
【0067】
その後、インデクス生成モジュール108は、既存ノード(検索サーバ104)から切り出したインデクスを追加ノード(検索サーバ104)に転送する(ステップ1104)。
【0068】
一方、追加ノード(検索サーバ104)のインデクス管理サービス112は、既存ノードから切り出されて転送されたインデクス群のマージ・最適化処理を行う(ステップ1105)。
【0069】
[ノード削除時におけるインデクスの再構築処理]
図12に、ノード削除時に実行されるインデクスの再構成処理手順を示す。検索サーバ104の削除時、インデクス生成モジュール108は、残留ノード(検索サーバ104)に割り当てるスロットの再配分処理を実行する(ステップ1201)。
【0070】
続いて、インデクス生成モジュール108は、削除後のノード構成に応じたスロット番号とノードIDのマッピングテーブルを生成する(ステップ1202)。
【0071】
その後、インデクス生成モジュール108は、各削除ノード(検索サーバ104)上のインデクス113から残留ノード(検索サーバ104)に移動するドキュメント群のインデクスを、新規マッピングテーブルに応じて切り出す(ステップ1203)。
【0072】
続いて、インデクス生成モジュール108は、切り出したインデクス群を、マージ先となる残留ノード群に送信する(ステップ1204)。
【0073】
一方、残留ノード(検索サーバ104)のインデクス管理サービス112は、削除ノードから切り出されて転送されたインデクス群のマージ・最適化処理を行う(ステップ1205)。
【0074】
[改良コンシステントハッシュ仮想ノード方式(その2)]
次に、2つ目の改良コンシステントハッシュ仮想ノード方式を説明する。本方式は、前述した1つ目のコンシステントハッシュ仮想ノード方式に比して、マッピング情報の定義に必要なリソース量を更に節約できる方式である。
【0075】
図13に、2つ目の改良コンシステントハッシュ仮想ノード方式の概念を示す。
図13は、ノードID=1〜4を有する4つの検索サーバ104について生成されたマッピングテーブル情報の構成を表している。
【0076】
本方式(
図13)も、1つ目の改良コンシステントハッシュ仮想ノード方式(
図3)の場合と同様に、128ビットのハッシュ関数値0と2^128-1を同一視した円環状のハッシュ空間を想定する。また、本方式(
図13)も、円環状のハッシュ空間をK個に等分割し、各単位空間をスロット301と定義する。各スロット301には、ハッシュ値0を含むスロットから反時計回りに順番に、スロット番号302が付与される。
【0077】
ただし、本方式(
図13)は、予めK個に分割されたスロットが、情報処理システムを構成する各ノードにおいて、ほぼ均等個数になるように割り当てを決定するのではなく、各検索サーバ104にほぼ同じサイズの空間が割り当てられるように、円環状のハッシュ空間上に分割ポイントを設定する。
【0078】
ただし、分割ポイントは、スロットの境界に限定する。例えば
図13に示すように、円環状のハッシュ空間を4つの検索サーバ104に割り当てる場合、空間全体をほぼ4等分する空間に分割ポイントを3つ設定する。分割ポイントは、その直前の空間領域に位置するスロット301の番号(スロット番号302)を利用する。
【0079】
このポイント情報をマッピングテーブル304に記録し、割り当て領域に対応するノードIDを記録する。
図13の場合、例えばノードID=1の空間領域は、スロット番号がm1とm2の間の空間領域に対応している。この場合、マッピングテーブル304には、スロット番号としてm2が設定され、更にノードIDとして1が設定される。
【0080】
このように、本方式(
図13)の場合には、円環状のハッシュ空間を分割する空間領域数分の分割ポイントの情報のみがマッピングテーブル304に保持される。
図13の場合は、円環状のハッシュ空間を4つの検索サーバ104に分割する(4分割する)ので、マッピングテーブル304に保持される分割ポイント数は4つで済む。このように、本方式(
図13)では、マッピングテーブル304に必要最低限の分割ポイント情報のみを保持するため、前述した1つ目の改良コンシステントハッシュ仮想ノード方式(
図3)よりもメモリリソース量が少なくて済む。
【0081】
更に、本方式(
図13)では、分割ポイントがスロットの境界に設定されるため、ノードの追加・削除に応じて領域が断片化していった場合でも、マッピングテーブルの大きさの最大値は、高々、1つ目の改良コンシステントハッシュ仮想ノード方式の場合のマッピングテーブル304のサイズに抑制することができる利点がある。
【0082】
続いて、情報処理システムを構成する検索サーバ104の数を変更する場合に実行されるハッシュ値空間の再分割処理を説明する。以下では、
図14に検索サーバ104を追加する場合に実行されるインデクスの再配分処理について、
図15に検索サーバ104を削除する場合に実行されるインデクスの再配分処理について説明する。
【0083】
図14は、N個のノードで構成される情報処理システムに、M個のノードを新たに追加する場合におけるハッシュ値空間の再分割処理の概念図である。以下に説明する処理は、情報処理システムを構成するいずれかのサーバ上に用意されたインデクス管理サービス112において実行される。
【0084】
ここでは、円環状のハッシュ値空間を直線状にした図を用い、再分割処理の内容を説明する。初期状態では、N個のノードのそれぞれに対応する空間領域が、円環状のハッシュ空間上に定義されている。ここでも、円環状のハッシュ値空間上に定義された全スロット数をK、既存ノード数をN、追加ノード数をMとする。
【0085】
図14の場合、ID=1を有するノードに対応する空間領域は、2つに分割されて円環状のハッシュ空間上に配置され、ID=2を有するノードに対応する空間領域は、纏まった1つの空間領域に配置されている。ハッシュ値空間をK個に等分割した場合、各割り当て領域のサイズはK/Nとなる。
【0086】
この状況において、M個のノードを追加することを考える。このとき、インデクス管理サービス112は、各ノードの割り当て領域の中から、アドレスの小さい方から順にKM/{N(N+M)}のサイズの領域を抽出する。例えば
図14の場合、太線で描かれた領域が、抽出領域の部分である。抽出された領域をノードIDが同じもの同士で連結し、更にノードIDの昇順に連結した領域を考える。
【0087】
その連結領域に対し、K/(N+M)のサイズで領域を区切り、追加のM個のノードに対して順次割り当てる。その新しく区切るポイントを、元の円環状のハッシュ空間での対応アドレスに変換し、新しく割り当てたノードIDと共に、マッピングテーブル304を更新する。
【0088】
ここで、対応アドレスとは、分割ポイントの直前のスロット番号とする。この方式により、新規に追加したノードに対して、元のノードから極力纏まった形で領域を移行することができ、1つ目の改良コンシステントハッシュ仮想ノード方式と同様、インデクス再構築時のインデクス切出し処理の回数を削減して、インデクス再構築のオーバヘッドを減らすことができる。
【0089】
図15は、N+M個のノードで構成される情報処理システムからM個のノードを削除する場合におけるハッシュ値空間の再分割処理の概念図である。以下に説明する処理も、情報処理システムを構成するいずれかのサーバ上に用意されたインデクス管理サービス112において実行される。
【0090】
ここで、削除するノードに付されているノードIDを、N+1、N+2、…、N+Mとする。削除するノードに割り当てられた空間領域を抽出し、同じノードIDを有する空間領域群をアドレスの昇順に並べて連結した後、ノードIDの昇順に連結した領域を求める。
【0091】
その領域に対し、KM/{N(N+M)}のサイズずつ切り出して、削除されないN個の残留ノードに順次割り当てを行う。割り当て時に設定した分割ポイントは、円環状のハッシュ空間でのアドレスに変換し、対応づけたノードIDと共に、マッピングテーブル304を更新する。本処理により、1つ目の改良コンシステントハッシュ仮想ノード方式と同様、インデクス再構築時のインデクス切出し処理の回数を削減して、再構築のオーバヘッドを削減する。
【0092】
[ノード追加時の処理]
図16に、N個のノードで構成される情報処理システムに、新たにM個のノードが追加される場合に実行されるハッシュ値空間の再分割処理手順を示す。当該処理は、インデクス管理サービス112が実行する。
【0093】
M個のノードが追加されると、インデクス管理サービス112は、各ノードに割り当てられた空間領域から、スロットサイズでKM/{N(N+M)}ずつ領域を抽出し、同じノードIDの領域同士でアドレスの昇順に結合後、ノードIDの昇順に結合した領域を構成する(ステップ1601)。
【0094】
次に、インデクス管理サービス112は、結合して構成した領域の先頭から、K/(N+M)ずつ領域を切出し、新規に追加されたM個のノードに順次割り当てる(ステップ1602)。
【0095】
この後、インデクス管理サービス112は、領域の割り当てに応じ、マッピングテーブルを更新する(ステップ1603)。この更新されたマッピング情報を利用して、ハッシュ値空間の再分割処理を行う。
【0096】
[ノード削除時の処理]
図17に、N+M個のノードで構成される情報処理システムからM個のノードを削除する場合に実行されるハッシュ値空間の再分割処理手順を示す。N+M個の検索サーバ104からM個の検索サーバ104を削除する場合、インデクス管理サービス112は、削除するM個の検索サーバ104に割り当てられていた領域を抽出し、同じノードIDの領域をアドレスの昇順に結合し、その後、ノードIDの昇順に結合した領域を構成する(ステップ1701)。
【0097】
次に、インデクス管理サービス112は、結合領域の先頭から、スロットサイズでKM/{N(N+M)}ずつ領域を切出して、残りN個の残留ノード(検索サーバ104)に順次割り当てる(ステップ1702)。
【0098】
最後に、インデクス管理サービス112は、領域割り当ての再編に応じ、マッピングテーブル304の更新を行う(ステップ1703)。
【0099】
[まとめ]
以上の提案方式により、各分割インデクスへの登録件数を平準化することができる。また、以上の提案方式によれば、更にノードの追加・削除時においても、既存ノード間における無駄なデータ移行の発生がなく、リソース消費量を節減できる効率的な再構築処理を実現することができる。かくして、ドキュメントを効率的に分割インデクスに登録することが可能となる。
【0100】
[他の形態例]
なお、本発明は上述した形態例に限定されるものでなく、様々な変形例が含まれる。例えば、上述した形態例は、本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある形態例の一部を他の形態例の構成に置き換えることが可能であり、また、ある形態例の構成に他の形態例の構成を加えることも可能である。また、各形態例の構成の一部について、他の構成を追加、削除又は置換することも可能である。
【0101】
また、上述した各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路その他のハードウェアとして実現しても良い。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することにより実現しても良い。すなわち、ソフトウェアとして実現しても良い。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリやハードディスク、SSD(Solid State Drive)等の記憶装置、ICカード、SDカード、DVD等の記憶媒体に格納することができる。
【0102】
また、制御線や情報線は、説明上必要と考えられるものを示すものであり、製品上必要な全ての制御線や情報線を表すものでない。実際にはほとんど全ての構成が相互に接続されていると考えて良い。