(57)【特許請求の範囲】
【請求項１】
ファイルサーバに接続される情報処理システムにおいて、
前記ファイルサーバで新規に生成された、更新された又は前記ファイルサーバから削除されたファイル群を探索する手段と、
新規に生成された又は更新されたファイル群を、前記ファイルサーバからダウンロードする手段と、
削除されたファイル群に関する削除ファイルリストを生成する手段と、
ハッシュ値空間の始点と終点を同一視した円環状のハッシュ値空間を等間隔に分割したスロット領域に検索ノードのＩＤを対応付ける手段と、
前記ファイル群を構成する各ドキュメントのメタ情報についてハッシュ値を計算し、計算されたハッシュ値を前記円環状のハッシュ値空間上に配置することにより、計算されたハッシュ値を含むスロット領域を検出する手段と、
検出されたスロット領域に対応付けられている検索ノードのＩＤをテーブルから読み出す手段と、
読み出された前記検索ノードのＩＤに基づいて、各ドキュメントを登録するインデクスを決定し、その差分インデクスを生成する手段と、
前記差分インデクス及び削除ファイルリストを用い、前記情報処理システム内に格納されているインデクスを更新する手段と
を有することを特徴とする情報処理システム。
【請求項２】
請求項１に記載の情報処理システムにおいて、
Ｎ個の検索ノードに対してＫ個のスロット領域が配置されており、かつ、新たにＭ個の検索ノードが追加されるとき、
既存の前記Ｎ個の検索ノードからKM/{N(N+M)}個のスロット領域をそれぞれ抽出し、抽出されたスロット領域を検索ノード単位でリストの先頭から順番に登録する手段と、
前記リストの先頭からスロット領域をK/(N+M)個ずつ順番に切り出し、新たに追加するＭ個の検索ノードのＩＤに割り当てる手段と
を有することを特徴とする情報処理システム。
【請求項３】
請求項１に記載の情報処理システムにおいて、
Ｎ＋Ｍ個の検索ノードに対してＫ個のスロット領域が配置されている状態で、Ｍ個の検索ノードが削除されるとき、
削除対象の検索ノードからK/(N+M)個のスロット領域を抽出し、抽出されたスロット領域を検索ノード単位でリストの先頭から順番に登録する手段と、
前記リストの先頭からスロット領域をKM/{N(N+M)}個ずつ順番に切り出し、残留するＮ個の検索ノードのＩＤに割り当てる手段と
を有することを特徴とする情報処理システム。
【請求項４】
ファイルサーバに接続される情報処理システムにおいて、
前記ファイルサーバで新規に生成された若しくは更新された又は前記ファイルサーバから削除されたファイル群を探索する手段と、
新規に生成された又は更新されたファイル群を、前記ファイルサーバからダウンロードする手段と、
削除されたファイル群に関する削除ファイルリストを生成する手段と、
ハッシュ値空間の始点と終点を同一視した円環状のハッシュ値空間上に当該空間を等間隔に分割するスロット領域を定義すると共に、前記ハッシュ値空間上に配置される検索ノードに対応付ける各空間領域を隣接領域との一方側の境界に位置するスロット領域により管理する手段と、
前記ファイル群を構成する各ドキュメントのメタ情報についてハッシュ値を計算し、計算されたハッシュ値を前記円環状のハッシュ値空間上に配置することにより、計算されたハッシュ値を含む空間領域を検出する手段と、
検出された空間領域に対応付けられている検索ノードのＩＤをテーブルから読み出す手段と、
読み出された前記検索ノードのＩＤに基づいて、各ドキュメントを登録するインデクスを決定し、その差分インデクスを生成する手段と、
前記差分インデクス及び削除ファイルリストを用い、前記情報処理システム内に格納されているインデクスを更新する手段と
を有することを特徴とする情報処理システム。
【請求項５】
請求項４に記載の情報処理システムにおいて、
Ｎ個の検索ノードに対してＫ個のスロット領域が配置されており、かつ、新たにＭ個の検索ノードが追加されるとき、
既存の前記Ｎ個の検索ノードからスロット領域のKM/{N(N+M)}個分の領域サイズをそれぞれ抽出し、抽出された領域サイズを検索ノード単位でリストの先頭から順番に登録する手段と、
前記リストの先頭からスロット領域のK/(N+M)個分に相当する領域サイズずつ順番に切り出し、新たに追加するＭ個の検索ノードのＩＤに割り当てる手段と
を有することを特徴とする情報処理システム。
【請求項６】
請求項４に記載の情報処理システムにおいて、
Ｎ＋Ｍ個の検索ノードに対してＫ個のスロット領域が配置されている状態で、Ｍ個の検索ノードが削除されるとき、
削除対象の検索ノードからスロット領域のK/(N+M)個分の領域サイズを抽出し、抽出された領域サイズを検索ノード単位でリストの先頭から順番に登録する手段と、
前記リストの先頭からスロット領域のKM/{N(N+M)}個分に相当する領域サイズずつ順番に切り出し、残留するＮ個の検索ノードのＩＤに割り当てる手段と
を有することを特徴とする情報処理システム。
【請求項７】
請求項５又は６に記載の情報処理システムにおいて、
前記領域サイズの割り当てによる各検索ノードに対応する空間領域を、その一方の境界に位置するスロット領域により管理する手段
を有することを特徴とする情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイルサーバに接続された情報処理システムに関し、大量のデータを取り扱う検索システムのインデクスを分割管理する技術に関する。
【背景技術】
【０００２】
情報が爆発的に増加する時代の到来により、組織・企業内において取り扱われるデータ量は指数関数的に増加している。増加の著しいデータの多くは、ファイル等の非構造型データであると言われている。情報の管理及び再利用による業務効率の向上のため、組織・企業内におけるファイル検索技術のニーズは大きく拡大している。こうした背景に加え、近年における大量のデータを処理する技術やファイル検索技術の発展・普及により、企業内におけるエンタープライズサーチの導入が進んでいる。
【０００３】
現在、大規模データを扱う検索システムにおいては、検索性能をある一定レベル以上に保つため、対象インデクスを複数の検索ノードに分割配置し、検索処理を複数の検索ノードに分散する仕組みが用いられている。この仕組みを採用する検索システムでは、まず、検索対象であるドキュメント群のインデクスが複数に分割され、分割後のインデクスが対応する検索ノードに登録される。検索時には、全ての検索ノードに対してクエリが送信され、各検索ノードにおいて各分割インデクスを用いた検索処理が個別に実行される。各検索ノードで得られた検索結果は最後に集計され、対象インデクスに対する検索結果とされる。
【０００４】
検索対象であるドキュメント数が多い場合、インデクスを複数の分割インデクスに分割して登録すると、１つの分割インデクスに対応付けられる登録ドキュメントの数を抑えることができる。また、生成された分割インデクスを複数の検索ノードに分散配置すると、大規模データに対する検索性能をスケールアウトすることができる。
【０００５】
従来、検索対象とするドキュメントをいずれかの分割インデクスに登録する方法として、様々な方法が採られている。１つの方法では、ドキュメントを識別する識別子やファイルパス等に対応するハッシュ値を計算し、当該ハッシュ値に基づいて登録先の分割インデクスを決定する方法が用いられる。例えば、登録対象であるドキュメント（ファイル）のパス名についてのＭＤ５ハッシュ値（ＭＤ５により算出される値）を計算し、その値を分割インデクスの総数で割った剰余が対応するＩＤを有する分割インデクスに対し、該当ドキュメント（ファイル）を振り分ける方法が用いられる。他の方法では、ファイルパスをユニークなＩＤとした場合、より単純に、指定フォルダ毎に登録先とする分割インデクスを決定する方法もある。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】David J. DeWitt, Jim Gray, “Parallel Database Systems: The Future of High Performance Database Processing”, Communications of the ACM, Vol.36, No.6, June 1992, January 1992
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、検索システムを構成する検索ノードは不変でなく、構成ノードに変動が生じることがある。例えば新規の検索ノードが検索システムに追加されることがある。この場合、分割インデクスに登録するドキュメント情報を移動・再構成する必要が生じる。
【０００８】
しかし、ハッシュ値に基づいてドキュメントを分割インデクスに登録する方法を採用する場合、既存ノード群から追加ノード群へのデータ移動だけでなく、既存ノード群の間でもデータの移動が発生し、移動効率が悪くなる問題がある。また、指定フォルダ毎に分割インデクスを決定する場合、フォルダ内のファイル数の差に起因して各分割インデクスに登録されるドキュメント数にもばらつきが生じ、分散検索の実行時に、均等な負荷バランスを確保することができず、検索性能が悪化する問題がある。
【０００９】
そこで、本発明では、分散検索時に使用される各分割インデクスに登録されるドキュメント数を平準化するとともに、検索ノードの追加・削除時における効率的なインデクスの再配置を実現するインデクスの分割管理技術を提案する。
【課題を解決するための手段】
【００１０】
前述した課題を解決する本発明は、様々な変形例を含んでいる。１つの発明では、インデックスの分散管理に、始点と終点を同一視した円環状のハッシュ値空間を使用するコンシステントハッシュ仮想ノード方式を適用する。また、１つの発明では、始点と終点を同一視した円環状のハッシュ値空間を予め等間隔に分割し、分割後の各スロット領域とノードの対応関係を管理する改良コンシステントハッシュ仮想ノード方式を適用する。また、１つの発明では、始点と終点を同一視した円環状のハッシュ値空間を予め等間隔に分割し、各ノードに割り当てる空間領域を当該空間領域間の一方側の境界に相当するスロット領域を用いて管理する改良コンシステントハッシュ仮想ノード方式を適用する。
【発明の効果】
【００１１】
本発明によれば、大量のデータを取り扱う検索システムにおいて、インデクスを複数の検索ノードに分割して配置する場合にも、分割インデクスに登録されるドキュメント数の平準化を実現できる。また、本発明によれば、分割インデクスを効率的に再構成することができる。前述した以外の課題、構成及び効果は、以下の実施の形態の説明により明らかにされる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態に係る情報処理システムの全体構成を示す図。
【図２】コンシステントハッシュ仮想ノード方式の概念を説明する図。
【図３】コンシステントハッシュ仮想ノード方式の第１の改良例を概念的に説明する図。
【図４】図３に示す改良方式において、ＮノードにＭノードを追加する場合におけるスロットの再配分処理の概念を説明する図。
【図５】図３に示す改良方式において、Ｎ＋ＭノードからＭノードを削除する場合におけるスロットの再配分処理の概念を説明する図。
【図６】クローリング管理ＤＢテーブルの構造例を示す図。
【図７】インデクス生成処理を説明するフローチャート。
【図８】ダウンロードデータの差分インデクス生成処理を説明するフローチャート。
【図９】ＮノードにＭノードを追加する時のスロット再配分処理を説明するフローチャート。
【図１０】Ｎ＋ＭノードからＭノードを削除する時のスロット再配分処理を説明するフローチャート。
【図１１】ノード追加時におけるインデクス再構成処理を説明するフローチャート。
【図１２】ノード削除時におけるインデクス再構成処理を説明するフローチャート。
【図１３】コンシステントハッシュ仮想ノード方式の第２の改良例を概念的に説明する図。
【図１４】図１３に示す改良方式において、ＮノードにＭノードを追加する場合におけるハッシュ値空間の再分割処理の概念を説明する図。
【図１５】図１３に示す改良方式において、Ｎ＋ＭノードからＭノードを削除する場合におけるハッシュ値空間の再分割処理の概念を説明する図。
【図１６】ＮノードにＭノードを追加する時のハッシュ値空間の再分割処理を説明するフローチャート。
【図１７】Ｎ＋ＭノードからＭノードを削除する時のハッシュ値空間の再分割処理を説明するフローチャート。
【発明を実施するための形態】
【００１３】
以下、本発明に係るインデクス分割管理技術の実施形態例を、図面を用いて詳細に説明する。なお、本発明の実施態様は、後述する例に限定されるものではなく、その技術思想の範囲において、種々の変形が可能である。なお、実施の形態を説明するための全図において、同一の機能に関する箇所には同一または関連する符号を付し、その繰り返しの説明は省略する。また、以下の実施の形態では、特に必要なとき以外は同一または同様な部分の説明を原則として繰り返さないものとする。
【００１４】
［システム構成］
図１に、各実施形態の説明で共通に使用する情報処理システムの全体構成例を示す。本システムは、利用者端末１０１、ファイルサーバ１０２、インデクス生成サーバ１０３、検索サーバ１０４、ＬＡＮ１０５で構成される。各サーバは、コンピュータと、大規模ストレージ装置と、通信装置で構成される。
【００１５】
ファイルサーバ１０２には、検索対象となるファイル１０６が格納されている。ファイルサーバ１０２は、ＬＡＮ１０５経由で、インデクス生成サーバ１０３に接続されている。ＬＡＮ１０５は無線方式でも有線方式でもよい。また、ＬＡＮ１０５の一部は、インターネットでもよい。
【００１６】
インデクス生成サーバ１０３には、ＬＡＮ１０５経由で、検索サーバ１０４が接続されている。検索サーバ１０４を用いて検索を実行する利用者端末１０１も、ＬＡＮ１０５経由で検索サーバ１０４に接続されている。
【００１７】
図１に示すシステム図は、インデクス生成サーバ１０３と検索サーバ１０４とが物理的に異なるマシン上で稼働する場合を表しているが、これらのサーバが物理的に同一のマシン上で稼働してもよい。
【００１８】
インデクス生成サーバ１０３には、クローリングモジュール１０７と、インデクス生成モジュール１０８と、検索エンジン１０９と、クローリング管理ＤＢ１１０とが配置されている。クローリングモジュール１０７は、ファイルサーバ１０２内を探索し、更新されたファイルを発見し、発見されたファイルをダウンロードする処理を実行する。インデクス生成モジュール１０８は、ダウンロードされたデータから差分インデクスを生成する処理を実行する。検索エンジン１０９は、インデクス生成・検索機能を提供するモジュールであり、よく知られるオープンソースの検索エンジンとして、Apache LuceneやSennaがある。検索エンジン１０９は、差分インデクスの生成時に、インデクス生成モジュール１０８により利用される。クローリング管理ＤＢ１１０は、前回のクローリング時から現在までのファイル・ディレクトリの更新を管理する。
【００１９】
検索サーバ１０４には、検索エンジン１０９と、検索サービス１１１と、インデクス管理サービス１１２と、インデクス１１３とが配置される。検索サービス１１１は、利用者端末１０１から検索要求を受け付けると、検索エンジン１０９を使用して検索結果を生成して応答する処理を実行する。インデクス管理サービス１１２は、インデクス生成サーバ１０３で生成された差分インデクスと削除ファイルリストに基づいて、インデクス１１３に対する更新処理を実行する。また、インデクス管理サービス１１２は、ＬＡＮ１０５に対する検索サーバ１０４の追加・削除時に、インデクス１１３の再構成処理を実行する。ここで、再構成処理は、ノードの追加・削除時に、各インデクスに登録されているドキュメントデータの登録先インデクスを変更する処理を意味する。各ドキュメントがどのインデクスに登録されるかは、マッピング情報により定義される。本明細書では、このマッピング情報を、後述するコンシステントハッシュ仮想ノード方式、又は、改良コンシステントハッシュ仮想ノード方式により定義する。マッピング情報（マッピングテーブル）は、インデクス管理サービス１１２が管理してもよいし、インデクス生成サーバ１０３や他のサーバが管理してもよい。
【００２０】
ファイルサーバ１０２に保存されるファイル数の増加に伴い、インデクス１１３に登録されるドキュメント量も増加し、それに伴って検索時の負荷も増大する。ある一定の検索性能を確保するには、インデクス１個当たりの登録ドキュメント数を一定数以下に抑える必要がある。このため、検索対象となるファイル数が増大するのに伴って、検索サーバ１０４を追加していく必要がある。
【００２１】
検索サーバ１０４の追加により、各インデクスに登録されているドキュメントの配置を再構成しなければならないが、後述するように、コンシステントハッシュ仮想ノード方式、又は、改良コンシステントハッシュ仮想ノード方式を利用したマッピング手法を利用することにより、ノード間におけるデータ移行コスト（移動量や移動時間）を最小限に抑えることができる。
【００２２】
［コンシステントハッシュ仮想ノード方式］
図２に、コンシステントハッシュ仮想ノード方式の概念を示す。本形態例においては、ハッシュ関数としてＭＤ５を想定する。もっとも、ハッシュ関数はＭＤ５に限られず、ＳＨＡ１その他のハッシュ関数を適用することも可能である。ＭＤ５は、１２８ビットのハッシュ関数であり、0〜2^128-1の値を採り得る。ここでは、0と2^128-1を同一視した円環状のハッシュ値空間２０２を考える。
【００２３】
このように始点と終点を同一視した円環状のハッシュ値空間２０２に対し、例えばノード数を２、仮想ノード数を３とする場合を考える。２つのノードに対応するノードＩＤをそれぞれ１及び２とすると、円環状のハッシュ値空間２０２上には、各ノードに対応する代表点（仮想ノード２０１）が３つずつプロットされる。
【００２４】
この状態で、ドキュメントＤの登録先ノードＩＤを決定するには、まず、ドキュメントＤのファイルパスのＭＤ５値を計算し、次に、円環状のハッシュ値空間２０２に計算値をプロットする。その後、プロット点から反時計回りにポインタを移動させ、最初に到達する仮想ノード２０１に対応するノードＩＤを求め、当該ノードＩＤをドキュメントＤの登録先ノードＩＤに決定する。この手順の繰り返しにより、全てのドキュメントに対し、ノードＩＤを１対１に対応させるマッピングを実現することができる。本明細書では、この手法を、コンシステントハッシュ仮想ノード方式と呼ぶ。なお、ノードＩＤを探索する際の探索方向は時計周りでもよい。
【００２５】
ノードＩＤ＝３のノードを情報処理システムに物理的に追加する場合には、ノードＩＤ＝３のノードに対応する３つの仮想ノード２０１を円環状のハッシュ値空間２０２上にランダムにプロットする。仮想ノード２０１のプロットにより、新しいマッピング情報を定義することができる。この後、前述した手順に従って、ドキュメントに対応付けるノードＩＤを決定する。なお、本明細書においては、円環状のハッシュ値空間２０２上に既に存在するノード（この例では、ノードＩＤ＝１、２のノード）を「既存ノード」と呼び、新たに追加されるノード（この例では、ノードＩＤ＝３のノード）を「追加ノード」とも呼ぶ。
【００２６】
１つのノードに対応付ける仮想ノード２０１の数を増やすことにより、円環状のハッシュ値空間２０２上における各ノードの担当範囲を平均化することができ、各ノードにマッピングされるドキュメント数の分散を小さくすることができる。
【００２７】
これに対し、ノードＩＤ＝３のノードを情報処理システムから物理的に削除する場合には、円環状のハッシュ値空間２０２からノードＩＤ＝３のノードに対応する３つの仮想ノード２０１を削除する。この後、前述した手順に従って、ドキュメントに対応付けるノードＩＤを決定する。
【００２８】
このように、本実施形態に係る管理手法を用いれば、大量のデータを取り扱う検索システムにおいて、インデクスを複数の検索ノードに分割して配置する場合にも、分割インデクスに登録されるドキュメント数の平準化を実現できる。また、本発明によれば、分割インデクスを効率的に再構成することができる。
【００２９】
［改良コンシステントハッシュ仮想ノード方式（その１）］
図３に、前述したコンシステントハッシュ仮想ノード方式の改良方式の概念を示す。本形態例の場合も、前述の形態例の場合と同様、ハッシュ関数としてＭＤ５を想定する。また、管理空間には、0と2^128-1を同一視した円環状のハッシュ値空間２０２を考える。
【００３０】
ただし、本形態例の場合、円環状のハッシュ値空間２０２をＫ個に等分割し、各単位空間をスロット３０１と定義する。なお、各スロット３０１には、ハッシュ値０を含むスロットから反時計回りに順番に、スロット番号３０２を付与する。この形態例の場合、スロット番号３０２は、０からＫ−１の値を採る。また、各スロット番号３０２には対応するノードＩＤ３０３を定義し、その情報をマッピングテーブル３０４により管理する。
【００３１】
この管理手法によれば、前述したコンシステントハッシュ仮想ノード方式と同様、与えられたドキュメントＤのファイルパスに対応するノードＩＤを計算することができる。例えば円環状のハッシュ値空間２０２をＫ個に分割する場合、各スロット３０１が担当する空間サイズは、{2^128}/Kで与えられる。従って、スロット番号Ｘに対応するスロット３０１は、{2^128}X/K〜[{2^128}(X+1)/K]-1の空間領域を担当する。
【００３２】
この形態例の場合には、以下の手順で、ドキュメントＤに対応するノードＩＤを決定する。まず、ドキュメントＤのファイルパスについてＭＤ５ハッシュ値を計算して円環状のハッシュ値空間２０２上にプロットし、当該プロット点が属するスロット番号Ｘを求める。次に、求まったスロット番号Ｘによりマッピングテーブル３０４を参照し、スロット番号Ｘに対応するノードＩＤを求める。これにより、ドキュメントＤに対応するノードＩＤが決定される。
【００３３】
本形態例に係る手法のメリットは、形態例１に係るコンシステントハッシュ仮想ノード方式に比べ、マッピング情報の定義に必要なリソース量が少なく済む点である。例えば管理対象とする検索サーバ１０４の数が1000個であり、各検索サーバ１０４に登録するドキュメント数の分散を平均値の10%以内に収めたい場合、形態例１の方式（図２）によると、管理対象とする仮想ノードの数が数千個にも及ぶ。このため、その全ての仮想ノードのマッピング情報を保存するには数ＧＢの記憶領域が必要になる。一方、本形態例に係る改良型のコンシステントハッシュ仮想ノード方式の場合、同様の分散に抑えるために必要な記憶領域は数十ＭＢで済み、リソース効率が非常に高くなる。
【００３４】
続いて、情報処理システムを構成する検索サーバ１０４の数を変更する場合に実行されるスロットの再配分処理を説明する。以下では、図４に検索サーバ１０４を追加する場合に実行されるインデクスの再配分処理について、図５に検索サーバ１０４を削除する場合に実行されるインデクスの再配分処理について説明する。
【００３５】
図４は、Ｎ個のノードで構成される情報処理システムに、Ｍ個のノードを新たに追加する場合におけるスロットの再配分処理の概念図である。以下に説明する処理は、情報処理システムを構成するいずれかのサーバ上に用意されたインデクス管理サービス１１２において実行される。
【００３６】
ここでは、円環状のハッシュ値空間上に定義された全スロット数をＫ、既存ノード数をＮ、追加ノード数をＭとする。
【００３７】
まず、各ノードからKM/{N(N+M)}個のスロットが抽出され、再配分用に用意されるリスト（記憶領域）に順番に追加される。図４では、抽出されたスロットに番号を付して表している。リストにスロットを追加する際の採番規則は、（ノードＩＤ，シーケンス番号）である。なお、リストは、再配分処理を管理するインデクス管理サービス１１２に用意される。また、Ｎ個のノード全体からは、KM/(N+M)個のスロットが抽出される。図４では、抽出されるKM/{N(N+M)}個のスロットの範囲を実線により囲んで表している。
【００３８】
各ノードからのスロットの抽出は、スロットの再配分後に、各ノードに分配されるスロット番号（図３）が可能な限り連続した番号になるように、再配分処理の実行時点に各ノードに割り当てられているスロット番号の小さいものから順番に抽出される。
【００３９】
各ノードから抽出されたスロットがリスト上に並ぶと、インデクス管理サービス１１２は、先頭からK/(N+M)個ずつスロットを切り出し、Ｍ個の追加ノードに順番に割り当てる。この結果、再配分完了後の各ノードに割り当てられるスロットの数は、全てK/(N+M)個になる。すなわち、分割インデクスに登録されるドキュメント数を平準化することができる。
【００４０】
この配分方式の採用により、既存ノードから追加ノードに移行されるデータ（各スロットに属するデータ）を、極力、纏まった塊にすることができる。この結果、既存ノード上でのインデクスの切出し回数を極力減らすことができ、再構築時におけるオーバヘッドを減らすことができる。また、本方式によるデータの移動は、いずれも既存ノードから追加ノードへの移動のみであり、既存ノード間におけるデータ移動を無くすことができる。このため、移動データ量が必要最小限で済み、分割インデクスを効率的に再構成することができる。
【００４１】
図５は、Ｎ＋Ｍ個のノードで構成される情報処理システムからＭ個のノードを削除する場合におけるスロットの再配分処理の概念図である。以下に説明する処理も、情報処理システムを構成するいずれかのサーバ上に用意されたインデクス生成モジュール１０８において実行される。
【００４２】
なお、図５は、図４を用いて説明した再配分後のスロット配置と同じである。従って、Ｎ＋Ｍ個のノードには、それぞれK/(N+M)個のスロットが割り当てられている。この状態において、削除対象であるＭ個の削除ノードから各K/(N+M)個のスロットが抽出され、再配分用に用意されるリスト（記憶領域）に順番に追加される。ここでのリストは、ノードを追加する際に使用するリストと同じでもよいし、異なっていてもよい。図５も、抽出されるスロットに番号を付して表している。リストにスロットを追加する際の採番規則は、（ノードＩＤ，シーケンス番号）である。前述の場合と同様、リストは、再配分処理を管理するインデクス管理サービス１１２に用意される。また、Ｍ個のノード全体からは、KM/(N+M)個のスロットが抽出される。図５では、抽出されるKM/{N(N+M)}個のスロットの範囲を実線により囲んで表している。
【００４３】
各ノードからのスロットの抽出は、スロットの再配分後に、各ノードに分配されるスロット番号（図３）が可能な限り連続した番号になるように、再配分処理の実行時点に各ノードに割り当てられているシーケンス番号の小さいものから順番に抽出される。
【００４４】
各ノードから抽出されたスロットがリスト上に並ぶと、インデクス生成モジュール１０８は、先頭からKM/{N(N+M)}個ずつスロットを切り出し、削除されないＮ個の残留ノードに順番に割り当てる。この結果、再配分完了後の各ノードに割り当てられるスロットの数は、全てK/N個になる。すなわち、分割インデクスに登録されるドキュメント数を平準化することができる。
【００４５】
この配分方式の採用により、削除ノードから残留ノードに移行されるデータ（各スロットに属するデータ）を、極力、纏まった塊にすることができる。この結果、削除ノード上でのインデクスの切出し回数を極力減らすことができ、再構築時におけるオーバヘッドを減らすことができる。また、本方式によるデータの移動は、いずれも削除ノードから残留ノードへの移動のみであり、残留ノード間におけるデータ移動を無くすことができる。このため、移動データ量が必要最小限で済み、分割インデクスを効率的に再構成することができる。
【００４６】
［クローリング管理データベース］
図６に、クローリング管理データベース１１０のテーブル例を示す。クローリング管理データベース１１０の利用により、インデクス生成サーバ１０３は、前回のクローリング時点から現在時点までに変更があったファイルを検出し、差分インデクスを作成する。テーブルの属性値には、パス名６０１、ハッシュ値６０２、削除フラグ６０３が含まれる。パス名６０１は、ファイルサーバ内におけるファイルのパスである。ハッシュ値６０２は、各ファイルのメタデータのハッシュ値である。削除フラグ６０３は、ファイルが削除されたか否かの状態を記録するフラグであり、「０」が残存、「１」が削除済みを表している。
【００４７】
削除フラグ６０３は、クローリングの開始時に「１」にセットされ、クローリングでファイルが存在していることが確認できた段階で「０」にセットされる。最終的に削除フラグ６０３が「１」のエントリのパス名をリストアップすると、削除ファイルリストを生成することができる。削除ファイルリストは、差分インデクスを検索ノード上のインデクスに適用する際（更新・反映する際）、利用される。
【００４８】
［インデクスの生成処理］
図７に、インデクスの生成処理手順の概要を示す。まず、インデクス生成サーバ１０３は、ファイルサーバ１０２にアクセスし、差分データのクローリング処理を実行する（ステップ７０１）。このクローリング処理において、インデクス生成サーバ１０３は、各ファイルのメタ情報のハッシュ値を計算する。インデクス生成サーバ１０３は、計算されたハッシュ値とクローリング管理データベース１１０に記録されている前回クローリング時のハッシュ値との比較により、データ更新の有無を検知する。次に、インデクス生成サーバ１０３は、更新が確認されたファイルをダウンロードすると共に、削除されたファイル名のリストである削除ファイルリストを生成する。
【００４９】
次に、インデクス生成サーバ１０３は、ダウンロードしたファイルデータに基づいて、差分インデクスを生成する（ステップ７０２）。インデクス生成サーバ１０３は、コンシステントハッシュ仮想ノード方式又は改良コンシステントハッシュ仮想ノード方式を利用し、各分割インデクス（検索サーバ１０４に対応する）に応じた削除ファイルリストの分割生成及び差分インデクスの生成を行う。
【００５０】
続いて、インデクス生成サーバ１０３は、生成された差分インデクスと削除ファイルリストを、マージ対象であるインデクスが格納されている検索サーバ１０４に転送する（ステップ７０３）。この転送はＬＡＮ１０５経由で実行される。
【００５１】
検索サーバ１０４は、差分インデクス・削除ファイルリストを使用して、自装置が保持するインデクス１１３を更新する（ステップ７０４）。
【００５２】
［差分インデクス生成処理］
図８に、ダウンロードデータから差分インデクスを生成する際に実行される差分インデクス生成処理手順を示す。差分インデクスの生成処理は、インデクス生成モジュール１０８により実行される。インデクス生成モジュール１０８は、クローリング処理によりダウンロードされた新規作成ファイル群又は更新ファイル群に逐次アクセスし、差分インデクスに登録するループ処理を実行する（ステップ８０１）。
【００５３】
ループ処理が開始されると、まず、インデクス生成モジュール１０８は、ファイルデータからテキストデータを抽出する（ステップ８０２）。次に、インデクス生成モジュール１０８は、ファイルデータからメタデータを抽出し（ステップ８０３）、差分インデクスに追加登録するデータを作成する。
【００５４】
その後、インデクス生成モジュール１０８は、ファイルパスのハッシュ値を計算し、コンシステントハッシュ仮想方式又は改良コンシステントハッシュ仮想ノード方式を用いて構築されたマッピング情報に基づいて、当該ドキュメントの登録先インデクスを決定する（ステップ８０４）。
【００５５】
決定後、インデクス生成モジュール１０８は、抽出したメタデータを入力値に使用し、検索エンジン１０９を利用して差分インデクスにドキュメントを追加登録する（ステップ８０５）。このループ処理は、全てのダウンロードデータが差分インデクスに登録されるまで繰り返される。
【００５６】
本処理において生成される差分インデクスは、前回のインデクス生成・更新処理以降に、新規に作成・更新されたファイル群に関するインデクスである。
【００５７】
［ノード追加時の処理］
図９に、Ｎ個のノードで構成される情報処理システムに、新たにＭ個のノードが追加される場合に実行されるスロットの再配分処理手順を示す。当該処理は、インデクス管理サービス１１２が実行する。
【００５８】
Ｍ個のノードが追加されると、インデクス管理サービス１１２は、Ｎ個の既存ノードから、KM/{N(N+M)}個ずつスロットを抽出し、ノードＩＤの昇順にリストに詰める（ステップ９０１）。
【００５９】
次に、インデクス管理サービス１１２は、リストの先頭から、K/(N+M)個ずつスロットを切出し、新規に追加されたＭ個のノードに割り当てる（ステップ９０２）。
【００６０】
この後、インデクス管理サービス１１２は、スロット割り当ての再編に応じ、スロット番号とノードＩＤのマッピングテーブルを編集し、改良コンシステントハッシュ仮想ノード方式におけるマッピング情報を更新する（ステップ９０３）。この更新されたマッピング情報を利用して、インデクスの再構成処理を行う。
【００６１】
［ノード削除時の処理］
図１０に、Ｎ＋Ｍ個のノードで構成される情報処理システムからＭ個のノードを削除する場合に実行されるスロットの再配分処理手順を示す。Ｎ＋Ｍ個の検索サーバ１０４からＭ個の検索サーバ１０４を削除する場合、インデクス管理サービス１１２は、削除するＭ個の検索サーバ１０４に割り当てられていたスロットを全て抽出し、ノードＩＤの昇順にリストに詰める（ステップ１００１）。
【００６２】
次に、インデクス管理サービス１１２は、リストの先頭から、KM/{N(N+M)}個ずつスロットを切出して、残りＮ個の残留ノード（検索サーバ１０４）に割り当てる（ステップ１００２）。
【００６３】
最後に、インデクス管理サービス１１２は、スロット割り当ての再編に応じ、スロット番号とノードＩＤのマッピングテーブルを編集し、マッピング情報を更新する（ステップ１００３）。
【００６４】
［ノード追加時におけるインデクスの再構築処理］
図１１に、ノード追加時に実行されるインデクスの再構成処理手順を示す。インデクス生成モジュール１０８は、ノードの追加に応じ、各既存ノード（検索サーバ１０４）に割り当てるスロットの再配分処理を実行する（ステップ１１０１）。
【００６５】
その後、インデクス生成モジュール１０８は、追加後のノード構成に応じたスロット番号３０２（図３）とノードＩＤのマッピングテーブルを生成する（ステップ１１０２）。
【００６６】
新規マッピングテーブルが生成されると、インデクス生成モジュール１０８は、検索サーバ１０４を追加する前の各検索サーバ１０４から追加ノードに転送すべきドキュメント群のインデクスを、新規マッピングテーブルに応じて切り出す（ステップ１１０３）。
【００６７】
その後、インデクス生成モジュール１０８は、既存ノード（検索サーバ１０４）から切り出したインデクスを追加ノード（検索サーバ１０４）に転送する（ステップ１１０４）。
【００６８】
一方、追加ノード（検索サーバ１０４）のインデクス管理サービス１１２は、既存ノードから切り出されて転送されたインデクス群のマージ・最適化処理を行う（ステップ１１０５）。
【００６９】
［ノード削除時におけるインデクスの再構築処理］
図１２に、ノード削除時に実行されるインデクスの再構成処理手順を示す。検索サーバ１０４の削除時、インデクス生成モジュール１０８は、残留ノード（検索サーバ１０４）に割り当てるスロットの再配分処理を実行する（ステップ１２０１）。
【００７０】
続いて、インデクス生成モジュール１０８は、削除後のノード構成に応じたスロット番号とノードＩＤのマッピングテーブルを生成する（ステップ１２０２）。
【００７１】
その後、インデクス生成モジュール１０８は、各削除ノード（検索サーバ１０４）上のインデクス１１３から残留ノード（検索サーバ１０４）に移動するドキュメント群のインデクスを、新規マッピングテーブルに応じて切り出す（ステップ１２０３）。
【００７２】
続いて、インデクス生成モジュール１０８は、切り出したインデクス群を、マージ先となる残留ノード群に送信する（ステップ１２０４）。
【００７３】
一方、残留ノード（検索サーバ１０４）のインデクス管理サービス１１２は、削除ノードから切り出されて転送されたインデクス群のマージ・最適化処理を行う（ステップ１２０５）。
【００７４】
［改良コンシステントハッシュ仮想ノード方式（その２）］
次に、２つ目の改良コンシステントハッシュ仮想ノード方式を説明する。本方式は、前述した１つ目のコンシステントハッシュ仮想ノード方式に比して、マッピング情報の定義に必要なリソース量を更に節約できる方式である。
【００７５】
図１３に、２つ目の改良コンシステントハッシュ仮想ノード方式の概念を示す。図１３は、ノードＩＤ＝１〜４を有する４つの検索サーバ１０４について生成されたマッピングテーブル情報の構成を表している。
【００７６】
本方式（図１３）も、１つ目の改良コンシステントハッシュ仮想ノード方式（図３）の場合と同様に、１２８ビットのハッシュ関数値0と2^128-1を同一視した円環状のハッシュ空間を想定する。また、本方式（図１３）も、円環状のハッシュ空間をＫ個に等分割し、各単位空間をスロット３０１と定義する。各スロット３０１には、ハッシュ値０を含むスロットから反時計回りに順番に、スロット番号３０２が付与される。
【００７７】
ただし、本方式（図１３）は、予めＫ個に分割されたスロットが、情報処理システムを構成する各ノードにおいて、ほぼ均等個数になるように割り当てを決定するのではなく、各検索サーバ１０４にほぼ同じサイズの空間が割り当てられるように、円環状のハッシュ空間上に分割ポイントを設定する。
【００７８】
ただし、分割ポイントは、スロットの境界に限定する。例えば図１３に示すように、円環状のハッシュ空間を４つの検索サーバ１０４に割り当てる場合、空間全体をほぼ４等分する空間に分割ポイントを３つ設定する。分割ポイントは、その直前の空間領域に位置するスロット３０１の番号（スロット番号３０２）を利用する。
【００７９】
このポイント情報をマッピングテーブル３０４に記録し、割り当て領域に対応するノードＩＤを記録する。図１３の場合、例えばノードＩＤ＝１の空間領域は、スロット番号がｍ１とｍ２の間の空間領域に対応している。この場合、マッピングテーブル３０４には、スロット番号としてｍ２が設定され、更にノードＩＤとして１が設定される。
【００８０】
このように、本方式（図１３）の場合には、円環状のハッシュ空間を分割する空間領域数分の分割ポイントの情報のみがマッピングテーブル３０４に保持される。図１３の場合は、円環状のハッシュ空間を４つの検索サーバ１０４に分割する（４分割する）ので、マッピングテーブル３０４に保持される分割ポイント数は４つで済む。このように、本方式（図１３）では、マッピングテーブル３０４に必要最低限の分割ポイント情報のみを保持するため、前述した１つ目の改良コンシステントハッシュ仮想ノード方式（図３）よりもメモリリソース量が少なくて済む。
【００８１】
更に、本方式（図１３）では、分割ポイントがスロットの境界に設定されるため、ノードの追加・削除に応じて領域が断片化していった場合でも、マッピングテーブルの大きさの最大値は、高々、１つ目の改良コンシステントハッシュ仮想ノード方式の場合のマッピングテーブル３０４のサイズに抑制することができる利点がある。
【００８２】
続いて、情報処理システムを構成する検索サーバ１０４の数を変更する場合に実行されるハッシュ値空間の再分割処理を説明する。以下では、図１４に検索サーバ１０４を追加する場合に実行されるインデクスの再配分処理について、図１５に検索サーバ１０４を削除する場合に実行されるインデクスの再配分処理について説明する。
【００８３】
図１４は、Ｎ個のノードで構成される情報処理システムに、Ｍ個のノードを新たに追加する場合におけるハッシュ値空間の再分割処理の概念図である。以下に説明する処理は、情報処理システムを構成するいずれかのサーバ上に用意されたインデクス管理サービス１１２において実行される。
【００８４】
ここでは、円環状のハッシュ値空間を直線状にした図を用い、再分割処理の内容を説明する。初期状態では、Ｎ個のノードのそれぞれに対応する空間領域が、円環状のハッシュ空間上に定義されている。ここでも、円環状のハッシュ値空間上に定義された全スロット数をＫ、既存ノード数をＮ、追加ノード数をＭとする。
【００８５】
図１４の場合、ＩＤ＝１を有するノードに対応する空間領域は、２つに分割されて円環状のハッシュ空間上に配置され、ＩＤ＝２を有するノードに対応する空間領域は、纏まった１つの空間領域に配置されている。ハッシュ値空間をＫ個に等分割した場合、各割り当て領域のサイズはK/Nとなる。
【００８６】
この状況において、Ｍ個のノードを追加することを考える。このとき、インデクス管理サービス１１２は、各ノードの割り当て領域の中から、アドレスの小さい方から順にKM/{N(N+M)}のサイズの領域を抽出する。例えば図１４の場合、太線で描かれた領域が、抽出領域の部分である。抽出された領域をノードＩＤが同じもの同士で連結し、更にノードＩＤの昇順に連結した領域を考える。
【００８７】
その連結領域に対し、K/(N+M)のサイズで領域を区切り、追加のＭ個のノードに対して順次割り当てる。その新しく区切るポイントを、元の円環状のハッシュ空間での対応アドレスに変換し、新しく割り当てたノードＩＤと共に、マッピングテーブル３０４を更新する。
【００８８】
ここで、対応アドレスとは、分割ポイントの直前のスロット番号とする。この方式により、新規に追加したノードに対して、元のノードから極力纏まった形で領域を移行することができ、１つ目の改良コンシステントハッシュ仮想ノード方式と同様、インデクス再構築時のインデクス切出し処理の回数を削減して、インデクス再構築のオーバヘッドを減らすことができる。
【００８９】
図１５は、Ｎ＋Ｍ個のノードで構成される情報処理システムからＭ個のノードを削除する場合におけるハッシュ値空間の再分割処理の概念図である。以下に説明する処理も、情報処理システムを構成するいずれかのサーバ上に用意されたインデクス管理サービス１１２において実行される。
【００９０】
ここで、削除するノードに付されているノードＩＤを、Ｎ＋１、Ｎ＋２、…、Ｎ＋Ｍとする。削除するノードに割り当てられた空間領域を抽出し、同じノードＩＤを有する空間領域群をアドレスの昇順に並べて連結した後、ノードＩＤの昇順に連結した領域を求める。
【００９１】
その領域に対し、KM/{N(N+M)}のサイズずつ切り出して、削除されないＮ個の残留ノードに順次割り当てを行う。割り当て時に設定した分割ポイントは、円環状のハッシュ空間でのアドレスに変換し、対応づけたノードＩＤと共に、マッピングテーブル３０４を更新する。本処理により、１つ目の改良コンシステントハッシュ仮想ノード方式と同様、インデクス再構築時のインデクス切出し処理の回数を削減して、再構築のオーバヘッドを削減する。
【００９２】
［ノード追加時の処理］
図１６に、Ｎ個のノードで構成される情報処理システムに、新たにＭ個のノードが追加される場合に実行されるハッシュ値空間の再分割処理手順を示す。当該処理は、インデクス管理サービス１１２が実行する。
【００９３】
Ｍ個のノードが追加されると、インデクス管理サービス１１２は、各ノードに割り当てられた空間領域から、スロットサイズでKM/{N(N+M)}ずつ領域を抽出し、同じノードＩＤの領域同士でアドレスの昇順に結合後、ノードＩＤの昇順に結合した領域を構成する（ステップ１６０１）。
【００９４】
次に、インデクス管理サービス１１２は、結合して構成した領域の先頭から、K/(N+M)ずつ領域を切出し、新規に追加されたＭ個のノードに順次割り当てる（ステップ１６０２）。
【００９５】
この後、インデクス管理サービス１１２は、領域の割り当てに応じ、マッピングテーブルを更新する（ステップ１６０３）。この更新されたマッピング情報を利用して、ハッシュ値空間の再分割処理を行う。
【００９６】
［ノード削除時の処理］
図１７に、Ｎ＋Ｍ個のノードで構成される情報処理システムからＭ個のノードを削除する場合に実行されるハッシュ値空間の再分割処理手順を示す。Ｎ＋Ｍ個の検索サーバ１０４からＭ個の検索サーバ１０４を削除する場合、インデクス管理サービス１１２は、削除するＭ個の検索サーバ１０４に割り当てられていた領域を抽出し、同じノードＩＤの領域をアドレスの昇順に結合し、その後、ノードＩＤの昇順に結合した領域を構成する（ステップ１７０１）。
【００９７】
次に、インデクス管理サービス１１２は、結合領域の先頭から、スロットサイズでKM/{N(N+M)}ずつ領域を切出して、残りＮ個の残留ノード（検索サーバ１０４）に順次割り当てる（ステップ１７０２）。
【００９８】
最後に、インデクス管理サービス１１２は、領域割り当ての再編に応じ、マッピングテーブル３０４の更新を行う（ステップ１７０３）。
【００９９】
［まとめ］
以上の提案方式により、各分割インデクスへの登録件数を平準化することができる。また、以上の提案方式によれば、更にノードの追加・削除時においても、既存ノード間における無駄なデータ移行の発生がなく、リソース消費量を節減できる効率的な再構築処理を実現することができる。かくして、ドキュメントを効率的に分割インデクスに登録することが可能となる。
【０１００】
［他の形態例］
なお、本発明は上述した形態例に限定されるものでなく、様々な変形例が含まれる。例えば、上述した形態例は、本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある形態例の一部を他の形態例の構成に置き換えることが可能であり、また、ある形態例の構成に他の形態例の構成を加えることも可能である。また、各形態例の構成の一部について、他の構成を追加、削除又は置換することも可能である。
【０１０１】
また、上述した各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路その他のハードウェアとして実現しても良い。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することにより実現しても良い。すなわち、ソフトウェアとして実現しても良い。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリやハードディスク、SSD（Solid State Drive）等の記憶装置、ICカード、SDカード、DVD等の記憶媒体に格納することができる。
【０１０２】
また、制御線や情報線は、説明上必要と考えられるものを示すものであり、製品上必要な全ての制御線や情報線を表すものでない。実際にはほとんど全ての構成が相互に接続されていると考えて良い。
【符号の説明】
【０１０３】
１０１…利用者端末
１０２…ファイルサーバ
１０３…インデクス生成サーバ
１０４…検索サーバ
１０５…ＬＡＮ
１０６…ファイル
１０７…クローリングモジュール
１０８…インデクス生成モジュール
１０９…検索エンジン
１１０…クローリング管理ＤＢ
１１１…検索サービス
１１２…インデクス管理サービス
１１３…インデクス
２０１…仮想ノード
２０２…円環状ハッシュ値空間
３０１…スロット
３０２…スロット番号
３０３…ノードＩＤ
３０４…マッピングテーブル
６０１…パス名
６０２…ハッシュ値
６０３…削除フラグ
【図１】
0005759881.tif 000002
【図２】
0005759881.tif 000003
【図３】
0005759881.tif 000004
【図４】
0005759881.tif 000005
【図５】
0005759881.tif 000006
【図６】
0005759881.tif 000007
【図７】
0005759881.tif 000008
【図８】
0005759881.tif 000009
【図９】
0005759881.tif 000010
【図１０】
0005759881.tif 000011
【図１１】
0005759881.tif 000012
【図１２】
0005759881.tif 000013
【図１３】
0005759881.tif 000014
【図１４】
0005759881.tif 000015
【図１５】
0005759881.tif 000016
【図１６】
0005759881.tif 000017
【図１７】
0005759881.tif 000018