説明

ファイル検索システム

【課題】大規模なファイル群を対象とした検索用インデクスの効率的な生成・更新・管理を実現する。
【解決手段】大規模なファイルシステムを検索対象とするファイル検索システムを、各検索サーバに割り当てる分割インデクスの生成対象となるファイルパスのリストを生成する第1の処理機能部と、前記リストに基づいて分割インデクスを生成する第2の処理機能部と、生成された分割インデクスを検索サーバに配置する第3の処理機能部と、前記第1〜第3の処理機能部間における処理動作をパイプライン処理により実現する第4の処理機能部とで構成する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、大規模なファイル群を対象とした検索用インデクスの効率的な生成・更新・管理技術に関する。
【背景技術】
【0002】
近年におけるアプリケーションの多様化やストレージコストの低価格化に伴い、ストレージに保存されるデータ量は爆発的に増加している。これに伴い、企業内で扱うドキュメントデータのデータ量も膨大になっている。このため、大量に存在するデータを有効活用するための検索システムの重要性が増している。
【0003】
通常、検索対象とするドキュメントの数が膨大である場合、検索インデクス(索引データ)の事前の生成により、検索パフォーマンスの向上が図られている。この他、同じ検索インデクスを複数の検索サーバに設置して負荷を分散する方法や、複数の検索サーバ上に検索インデクスを分割配置し、検索処理を分散する方法等も、検索パフォーマンスの向上を図る方法として一般に採用されている。
【0004】
このような技術背景において、検索インデクスの生成方法についても、様々な技術が提案されている。例えば特許文献1には、分割された検索インデクスのサイズの偏りをなるべく低減する手法が開示されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2011−70257号公報
【非特許文献】
【0006】
【非特許文献1】Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Webhttp://www.akamai.com/dl/technical_publications/ConsistenHashingandRandomTreesDistributedCachingprotocolsforrelievingHotSpotsontheworldwideweb.pdf
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかし、現在のIT情勢を考慮すると、検索対象となるデータ量は、今後ますます肥大化すると考えられる。また、検索サーバ数や分割インデクス数も膨大になることが容易に予想される。従って、今後は、分割インデクスを高速に生成できる仕組みが必要になると発明者らは考える。
【課題を解決するための手段】
【0008】
そこで、発明者らは、前述した課題のうち分割インデクスの高速生成を目的として、各検索サーバに割り当てる分割インデクスの生成対象となるファイルパスのリストを生成する第1の処理機能部と、前記リストに基づいて分割インデクスを生成する第2の処理機能部と、生成された分割インデクスを検索サーバに配置する第3の処理機能部と、前記第1〜第3の処理機能部間における処理動作をパイプライン処理により実現する第4の処理機能部とを有するファイル検索システムを提案する。
【発明の効果】
【0009】
本発明によれば、分割インデクスを高速に生成することができる。上述した以外の課題、構成及び効果は、以下の実施の形態の説明により明らかにされる。
【図面の簡単な説明】
【0010】
【図1】実施の形態に係る検索システムの概念構成を示す図。
【図2】検索サーバの機能構成例を示す図。
【図3】分散処理サーバの機能構成例を示す図。
【図4】管理サーバの機能構成例を示す図。
【図5】インデクスIDテーブルのデータ構造例を示す図。
【図6】検索サーバ管理テーブルのデータ構造例を示す図。
【図7】ファイル管理テーブルのデータ構造例を示す図。
【図8】システムの初期化フローを示す図。
【図9】インデクスIDテーブルの初期化フローを示す図。
【図10】初期化が終了したインデクスIDテーブル例を説明する図。
【図11】スキャナモジュールによるインデクスリストの生成フローを示す図。
【図12】インデクス生成モジュールによる分割インデクスの生成フローを示す図。
【図13】検索サーバへの分割インデクスの配置フローを示す図。
【図14】検索サーバの追加時の処理フローを示す図。
【図15】検索サーバの削除時の処理フローを示す図。
【発明を実施するための形態】
【0011】
以下の実施の形態においては、複数のセクションに分割して、実施の形態に係る検索システムの実現に必要な処理機能を説明する。以下の実施の形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。以下の実施の形態において、その構成要素(要素ステップ等も含む)は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。
【0012】
また、以下の実施の形態において、各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路その他のハードウェアとして実現しても良い。また、前述した各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することにより実現しても良い。すなわち、ソフトウェアとして実現しても良い。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリやハードディスク、SSD(Solid State Drive)等の記憶装置、ICカード、SDカード、DVD等の記憶媒体に格納することができる。
【0013】
また、制御線や情報線は、説明上必要と考えられるものを示すものであり、製品上必要な全ての制御線や情報線を表すものでない。実際にはほとんど全ての構成が相互に接続されていると考えて良い。
【0014】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の機能を有する部材には同一または関連する符号を付し、その繰り返しの説明は省略する。また、以下の実施の形態では、特に必要なとき以外は同一または同様な部分の説明を原則として繰り返さない。
【0015】
[検索システムの全体構成]
図1に、本形態例に係る検索システムの構成例を示す。本形態例に係る検索システムは、検索クライアント100、検索サーバ101、ファイルサーバ102、分散処理サーバ103、管理サーバ104から構成され、それらがネットワーク105を通じて互いに接続されている。ネットワーク105は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)等として一般に知られるネットワークを用いて実現することができる。なお、ネットワーク105は、有線ネットワークでも無線ネットワークでも構わない。また、検索システムは、1つの領域・国内に構築される必要は無く、複数の地域・国間を跨いで構築されてもよい。
【0016】
[検索クライアントの構成]
検索クライアント100は、Webブラウザを動作させることができる環境がインストールされたコンピュータであり、据え置き型に限らず、携帯型のコンピュータ、携帯情報端末、携帯電話機の端末を含む。検索クライアント100は、HTTP(Hypertext Transfer Protocol)等を使用して検索サーバ101に対して検索クエリを送信する機能と、検索サーバ101から検索結果を取得する機能と、取得した検索結果を利用者に表示する機能とを有している。検索クライアント100は、検索システム上に複数存在する。
【0017】
[検索サーバの構成]
図2に、検索サーバ101の内部構成例を示す。検索サーバ101は、検索クライアント100から検索クエリを受信して検索処理を実行し、検索結果を返信するサーバである。検索サーバ101は、検索システム内に複数台存在し、それぞれがローカルストレージ201を保持している。ローカルストレージ201内には、ファイルサーバ102に保存されるファイル群に基づいて生成された検索用の分割インデクス202が保存されている。
【0018】
検索サーバ101には、インデクス管理モジュール203と検索モジュール204がインストールされている。インデクス管理モジュール203は、分割インデクス202の管理・更新用のプログラムである。検索モジュール204は、検索用の分割インデクスを用いて検索処理を実行するプログラムである。因みに、インデクス管理モジュール203と検索モジュール204は、検索サーバ101のそれぞれにインストールされている。
【0019】
分割インデクス202は、ファイルサーバ102上に保存されているファイル群に基づいて、管理サーバ104上のインデクス生成モジュール403及び分散処理サーバ103により生成される検索用のインデクスである。後述するように、分割インデクス202は、コンシステントハッシュ法に基づいて、インデクスID毎に分割されたインデクスである。なお、インデクスIDには分割インデクス202が紐付けられており、この紐付きを通じ、検索サーバ101に分割インデクス202が配置される。検索サーバ101上に配置させる分割インデクス202の数(インデクスの分割数)は、あらかじめ管理者が決定する。
【0020】
インデクス管理モジュール203は、分割インデクス202を、検索サーバ101に配置・管理するモジュールである。分割インデクス202が新たに生成された場合、インデクス管理モジュール203は、分割インデクス202を検索サーバ101のローカルディスク201にダウンロードして保存する。
【0021】
検索サーバ101に分割インデクス202が既に存在し、その分割インデクス202の更新操作を実行する場合、インデクス管理モジュール203は、既存の分割インデクス202に対して、新規に生成された分割インデクスをマージして最新の分割インデクスを生成する。
【0022】
検索サーバ101の追加により、システム全体で保持している分割インデクスの数が増加した場合、インデクス管理モジュール203は、それぞれの検索サーバ101に保存されている既存の分割インデクス202をさらに分割する機能を有する。なお、新たに追加された検索サーバ101のインデクス管理モジュール203は、他の検索サーバ101で新規に分割されたインデクスを集約して1つの分割インデクス202を生成する機能を有する。
【0023】
削除対象の検索サーバ101におけるインデクス管理モジュール203は、自サーバに保持されていた分割インデクス202をインデクスIDに従って再度分割し、他の検索サーバ101の分割インデクス202に割り振る機能を有する。
【0024】
検索モジュール204は、検索サーバ101に配置された分割インデクス202を使用して、検索クライアント100から受け取った検索クエリに対する検索結果を生成し、検索クライアント100に検索結果を返信する機能を有する検索エンジンである。検索モジュール204は、他の検索サーバ群にインストールされているそれぞれの検索モジュール204と連携し、検索処理を分散的に実行する機能も有している。
【0025】
[ファイルサーバの構成]
ファイルサーバ102は、企業内等において作成された大量のドキュメントデータを保存するサーバである。ファイルサーバ102は、検索システム内に複数台存在する。各ファイルサーバ102は、分散処理サーバ103及び管理サーバ104と、NFS(Network File System)やCIFS(Common Internet File System)等のプロトコルを通じて接続されている。これにより、分散処理サーバ103及び管理サーバ104上の各モジュールは、ファイルサーバ102上に存在するファイルへのアクセス及びファイル情報の取得が可能である。
【0026】
[分散処理サーバの構成]
図3に、分散処理サーバ103の内部構成例を示す。分散処理サーバ103は、検索システム内に複数台存在する。これら複数の分散処理サーバ103は、一つの処理命令を他のサーバとの連携により分散的に処理する機能を有するサーバ群である。
【0027】
分散処理サーバ103には、分散ファイルシステム302と分散処理モジュール303がインストールされている。分散処理サーバ103には、ローカルストレージ301が設けられている。分散ファイルシステム302は、ローカルストレージ301を用い、共通する一つのファイルシステムを全ての分散処理サーバ103から利用可能とするモジュールである。分散処理モジュール303は、管理サーバ104のインデクス生成モジュール402から命令を受けた場合、他の分散処理サーバ103と連携し、分割インデクス202を分散的に生成する機能を有するモジュールである。
【0028】
[管理サーバの構成]
図4に、管理サーバ104の内部構成例を示す。管理サーバ104は、検索システムを構成する検索サーバ101、ファイルサーバ102、分散処理サーバ103等のサーバ管理機能を有するサーバである。管理サーバ104のローカルストレージ401には、分割インデクスの生成を制御するためのスキャナモジュール402、インデクス生成モジュール403、パイプライン制御モジュール404、システム管理モジュール405、インデクスIDテーブル406、検索サーバ管理テーブル407、ファイル管理テーブル408がインストールされている。これらのモジュールは、管理サーバ104以外に存在してもよい。例えばこれらのモジュールの全部又は一部は、分散処理サーバ103上で直接動作可能であってもよい。
【0029】
スキャナモジュール402は、ファイルサーバ102上のファイル・ディレクトリをスキャンして、ファイル・フォルダパス名の一覧とそれらの属性情報を取得する機能と、それらのファイル・フォルダが新規生成・更新・削除のいずれの状態であるかを判定し、インデクスのターゲットとなるファイルパスが記述されたインデクスリストを生成する機能とを有するモジュールである。
【0030】
スキャナモジュール402の機能は、以下の処理機能の実行を通じ実現することができる。例えばLinuxのFindコマンドを利用し、ファイルサーバ102上のファイル・ディレクトリパスの一覧とそれらの属性情報を取得する。この後、取得したファイル属性情報のハッシュ値を計算する。次に、任意のタイミングに取得しておいたファイル管理テーブル408(後述)に格納されているファイル属性情報のハッシュ値702(図7)と計算されたハッシュ値を比較し、その一致・不一致により、インデクス対象となるか否かを判定する。
【0031】
ハッシュ値が同じであった場合、スキャナモジュール402は、該当するファイル・ディレクトリに更新が無いと判定し、インデクシングの対象外とする。ハッシュ値が異なる場合、スキャナモジュール402は、ファイル・ディレクトリに更新があったと判定し、インデクシング対象に設定する。
【0032】
ファイル管理テーブル408にファイル・フォルダパス701が存在するにもかかわらず、Findコマンドによって取得できない場合、スキャナモジュール402は、当該ファイルパスがファイル削除を示すように、インデクスリストに情報を書き出す。
【0033】
なお、インデクスリストは、インデクス処理対象のファイルパス、処理ステータスが記述されたテキストファイルである。インデクスリストに記載されるファイルパスと処理ステータスは、スキャナモジュール402がファイル管理テーブル408から抜き出して生成する一時ファイルであり、後述するインデクス生成モジュール403により利用される。
【0034】
スキャナモジュール402は、各ファイルサーバ102上のファイルシステムのルートから最深部までを一度にスキャンするのでなく、1フォルダ階層毎又は任意のフォルダ階層毎にインデクスリストを出力し、インデクス生成モジュール403及びインデクス管理モジュール203の間でパイプライン処理を実行する。これにより、スキャナモジュール402がファイルサーバ102のスキャンを完全に終える前に、インデクス生成モジュール403及びインデクス管理モジュール203がインデクスの生成・更新処理を開始することが可能となり、インデクス生成速度の高速化を実現することが可能となる。
【0035】
インデクス生成モジュール403は、スキャナモジュール402が出力したインデクスリストに基づいて、分散処理サーバ103にインデクスを分散的に生成させる機能を有するモジュールである。インデクス生成モジュール403は、コンシステントハッシュ法に基づいてファイルパスに対応するハッシュ値を算出し、当該ハッシュ値から対応するインデクスIDを求める。また、インデクス生成モジュール403は、インデクスID毎に分割インデクスを生成する。
【0036】
インデクス生成モジュール403の処理は、タスクと呼ばれる処理単位に分割され、複数の分散処理サーバ103に分散される。なお、タスクは、分散処理サーバ103上において、第一の分散処理と第二の分散処理に分けて実行される。これらの処理は、大規模分散処理の技術として知られるMapReduceを使用することでも実現できる。その場合、第一の分散処理をMap処理、第二の分散処理をReduce処理として実現する。詳細動作については後述する。
【0037】
パイプライン制御モジュール404は、インデクスの生成を高速化するために、スキャナモジュール402、インデクス生成モジュール403、インデクス管理モジュール203の処理を多重化制御するためのモジュールである。各モジュールのパイプライン制御に関する詳細動作は後述する。
【0038】
システム管理モジュール405は、検索システム上に存在するサーバ群の管理や各種テーブルを初期化を実行する機能と、システムの初期化に係るパラメータを管理者が入力するためのユーザインターフェースを提供する機能とを有するモジュールである。
【0039】
インデクスIDテーブル406の例を図5に示す。インデクスIDテーブル406は、仮想インデクスID501とインデクスID502を格納するテーブルであり、ファイルパスからインデクスIDを取得するために用いられる。インデクスIDテーブル406は、コンシステントハッシュ法の実現手段として利用される。
【0040】
以下、コンシステントハッシュ法について解説する。コンシステントハッシュ法は、0〜2^128−1(2^128はMD5ハッシュ法に基づく値。MD5は一例であって、任意のハッシュアルゴリズムを利用することが可能である)の整数の目盛りが振られた円周上にインデクスIDのハッシュ値を求めて配置し、円周上の範囲を分割する。なお、インデクスIDのハッシュ値を取得するとは、インデクスIDを文字列としてMD5等のハッシュ関数を適用することを意味する。
【0041】
ファイルパスからインデクスIDを取得するには、ファイルパスから同じハッシュ関数(この例ではMD5)を利用してハッシュ値を求めて円周上に配置し、その位置から反時計回りに回って最初に遭遇するハッシュ値に対応するインデクスIDが、ファイルパスに紐付けるインデクスIDとなる。以上が基本的なコンシステントハッシュの概念である。ただし、単純なコンシステントハッシュ法は、各インデクスIDに割り当てられるファイル数は、円周上で分割される間隔に依存する。
【0042】
このため、インデクスIDのハッシュ値だけで分割すると、インデクスIDの追加・削除を行った場合に、各インデクスIDに割り当てられるファイル数に偏りが生じてしまう。これは、インデクスサイズが各分割インデクス間で偏ることを意味し、検索パフォーマンスの劣化を招くことになる。このため、インデクスサイズを平準化する必要がある。
【0043】
平準化を行うには、円周上に配置されるインデクスIDに対応する点の間隔を短くすることが必要となる。そこで、コンシステントハッシュ法の仮想ノードに相当する仮想インデクスIDを生成する。仮想インデクスIDは、インデクスIDに紐付けられるハッシュ値であり、1インデクスIDあたりn個の仮想インデクスIDを生成し、システム上に存在するそれぞれの分割インデクス間でサイズを平準化させる。仮想インデクスIDの生成と使用方法については後述する。
【0044】
検索サーバ管理テーブル407の例を図6に示す。検索サーバ管理テーブル407は、インデクスID601と、そのインデクスIDが紐付けられている分割インデクスが配置されている配置先検索サーバ名602、分割インデクスの保存先のパス603、削除インデクスリストの保存先のパス604が格納されたテーブルである。削除インデクスリスト604は、インデクス生成モジュール403により生成される一時ファイルであり、検索サーバ101上に既に配置されている分割インデクス202において、削除すべきファイルパスが1行毎に書かれたテキストファイルである。
【0045】
ファイル管理テーブル408の例を図7に示す。ファイル管理テーブル408は、ファイルサーバ102上に存在するファイル・フォルダパス名701の一覧と、それらの属性情報及びその属性情報から生成したハッシュ値702を保存・管理するためのテーブルである。このテーブルに保存されているハッシュ値702と、スキャナモジュール402のスキャン実行時に取得したファイルの属性情報から生成されるハッシュ値702を比較し、ファイルの更新状態(処理ステータス)703をチェックする。
【0046】
[検索サーバ管理テーブルの初期化フロー]
図8に、検索サーバ管理テーブル407の初期化フローを示す。ここでは、検索サーバ101が2台存在し、各検索サーバ101上に2つ分割インデクス202を配置する場合を想定する。すなわち、検索システム全体におけるインデクスの分割数は4(=2×2)である場合を想定する。また、2台の検索サーバ名は、”Search1”と”Search2”であるものとする。
【0047】
まず、管理者は、検索サーバ管理テーブル407の初期化を行うために、検索サーバ101の台数、及び、各検索サーバ101上に配置する分割インデクス202の数からインデクスの分割数を設定する(S801)。
【0048】
前述したように、この説明では、2台の検索サーバ101上に2つずつ分割インデクス202が配置されている。このため、全体のインデクス分割数は4である。この情報をシステム管理モジュール405に入力すると、システム管理モジュール405は、各分割インデクス202に対して割り振るインデクスIDを決定する(S802)。本明細書の場合、インデクスIDは0から始まる昇順の数字とする。すなわち、システム管理モジュール405は、「0」、「1」、「2」、「3」の順番にインデクスIDを割り振る。
【0049】
次に、システム管理モジュール405は、各インデクスIDと検索サーバ101との紐付けを実行し(S803)、その結果を検索サーバ管理テーブル407に格納する(S804)。本実施例に場合、システム管理モジュール405が自動的にインデクスIDと検索サーバの紐付けを実行するが、管理者が手動で設定してもよい。
【0050】
例えば本実施例の場合、検索サーバ管理テーブル407のエントリは、「インデクスID=0,配置先検索サーバ名=Search1」、「インデクスID=1,配置先検索サーバ名=Search1」、「インデクスID=2,配置先検索サーバ名=Search2」、「インデクスID=3,配置先検索サーバ名=Search2」の4つとなる。なお、初期化後の段階において、分割インデクス保存先パス603、削除インデクスリスト保存先パス604は空欄である。以上で、検索サーバ管理テーブル407の初期化が完了する。
【0051】
[インデクスIDテーブルの初期化フロー]
図9に、インデクスIDテーブル406の初期化フローを示す。インデクスIDテーブル406の初期化も検索サーバ管理テーブル407の初期化と同様のタイミングで実行される。
【0052】
まず、管理者が検索サーバ101の台数と各検索サーバ101上に配置する分割インデクスの数に基づいてインデクスの分割数を設定し(S901)、インデクスIDを決定する(S902)。
【0053】
ここでも、インデクスIDは、「0」、「1」、「2」、「3」の4つであるものとする。なお、仮想インデクスIDの数は、一つのインデクスIDに対して2であるものとする。仮想インデクスIDの数は、最終的にインデクスIDに紐付けられるファイル数が平準化されるように定められる任意の固定値である。
【0054】
次に、システム管理モジュール405は、1つのインデクスIDに対して任意の仮想インデクスIDを生成する(S903)。例えばインデクスID「0」に紐付ける仮想インデクスIDを「0−0」、「0−1」、インデクスID「1」に紐付ける仮想インデクスIDを「1−0」、「1−1」、インデクスID「2」に紐付ける仮想インデクスIDを「2−0」、「2−1」、インデクスID「3」に紐付ける仮想インデクスIDを「3−0」、「3−1」とする。
【0055】
続いて、システム管理モジュール405は、仮想インデクスIDの文字列からハッシュ値を取得する(S904)。この後、システム管理モジュール405は、取得されたハッシュ値をインデクスIDテーブル406の仮想インデクスID501のカラムに格納し、そのエントリのインデクスID502のカラムにこの仮想インデクスIDが紐付けられるインデクスIDを格納する(S905)。
【0056】
図10に、初期化が終了したインデクスIDテーブル406の例を示す。このテーブルを利用することにより、ファイルパスが与えられたとき、そのファイルパスがどのインデクスIDに紐付けるかを知ることが可能となる。例えばファイルパス「/FileServer1/test.txt」のハッシュ値を求めたところ「29999999999」であった場合、このハッシュ値は、項番3と項番4の点の間に配置され、項番3のエントリの点にヒットする(コンシステントハッシュの円周上で左に回る場合)。項番3のインデクスIDは「3」であるので、ファイルパス「/FileServer1/test.tx」”のインデクスIDは「3」となることが分かる。
【0057】
このテーブルはコンシステントハッシュ法の実現方式であり、このテーブルを元にしてファイルパスからインデクスIDを取得し、インデクスID毎に分割インデクスを生成すると、各々の分割インデクスのサイズ又は紐付けられるファイル数の平準化が実現される。
【0058】
[インデクスリストの生成フロー]
図11に、スキャナモジュール402によるインデクスリストの生成フローを示す。まず、パイプライン制御モジュール404は、スキャナモジュール402に対し、フォルダツリーの1階層目のインデクスリストの生成開始を指示する(S1101)。前述したように、インデクスリストの生成は、1階層ずつに限らず、任意の階層数毎に実行してもよい。
【0059】
次に、スキャナモジュール402は、ファイル管理テーブル408にアクセスし、指定された階層のファイル群が存在するか否かをチェックする(S1102)。指定された階層のファイルパスにエントリが存在する場合、スキャナモジュール402は、処理ステータスのカラムに削除を示す「−1」を設定する(S1103)。なお、指定された階層のファイルパスにエントリが存在しない場合、スキャナモジュール402は、S1103をスキップする。
【0060】
その後、スキャナモジュール402は、ファイル検索の階層指定オプションを付与してFindコマンドを実行する(S1104)。これは、実際のLinuxOS上では、Findコマンドに、maxdepth=1(階層深度が1の場合)を設定することで実施できる。
【0061】
指定した階層のファイル・フォルダパスとその属性情報を取得すると、スキャナモジュール402は、各々の属性情報に基づいてハッシュ値を取得する(S1105)。
【0062】
続いて、スキャナモジュール402は、Findにより取得したファイルパスをキーに使用し、ファイルパスの有無をファイル管理テーブル408に問い合わせる(S1106)。
【0063】
ファイルパスがファイル管理テーブル408に存在しない場合(S1106で否定結果)、当該ファイルは新規作成であることを意味する。従って、この場合、スキャナモジュール402は、ファイル管理テーブル408に新たにそのファイルパス701をキーとするエントリを生成し、ファイルハッシュ702と処理ステータス703に新規生成を示す「1」を追加する(S1107)。
【0064】
一方、ファイルパス701がファイル管理テーブル408に存在する場合(S1106で肯定結果)、当該ファイルは既にファイル管理テーブル408に登録されているファイルであることを意味する。この場合、スキャナモジュール402は、ハッシュ値のチェックを実行する(S1108)。具体的には、スキャナモジュール402は、ファイル管理テーブル408からファイルパス701が一致するエントリのファイルハッシュ702を取得し、Findコマンドにより取得したハッシュ値と比較する。
【0065】
ハッシュ値が一致した場合(S1108で肯定結果)、ファイル更新がなかったことを意味する。従って、この場合、スキャナモジュール402は、ファイルパスが一致するエントリの処理ステータスに「0」を設定する(S1109)。
【0066】
ハッシュ値が一致しなかった場合(S1108で否定結果)、ファイル更新がなかったことを意味する。従って、この場合、スキャナモジュール402は、ファイルハッシュ702を新たなハッシュ値で上書きし、処理ステータス703にファイル更新があったことを示す「2」を上書きする(S1110)。
【0067】
以上の処理により、指定された階層のファイル処理(「0」=処理なし、「1」=インデクス新規生成、「2」=インデクス更新、「−1」=インデクスから削除)が確定する。
【0068】
次に、スキャナモジュール402は、ファイル管理テーブル408にアクセスし、指定されたフォルダ階層のエントリ内で処理ステータス703が、「1」、「2」、「−1」であるエントリを取得してインデクスリストに書き出し、分散ファイルシステム302上に保存する(S1111)。すなわち、何らかの変化があったファイルだけを抽出する。なお、インデクスリストは、インデクス処理対象のファイルパス、処理ステータスが記述されたテキストファイルである。
【0069】
その後、スキャナモジュール402は、パイプライン制御モジュール404にインデクスリストの保存先パスと生成終了を通知する(S1112)。
【0070】
以後、スキャナモジュール402は、パイプライン制御モジュール404に指示されたディレクトリのエントリをファイル管理テーブル408から取得し、フォルダ深度を2、3…と深めながらインデクスリストを生成する。
【0071】
[分割インデクス生成のフロー]
図12に、インデクス生成モジュール403による分割インデクス202の生成フローを示す。インデクス生成モジュール403は、スキャナモジュール402から与えられるインデクスリストに基づいて分割インデクス202を生成する。インデクス生成モジュール403の処理は、1つのインデクスリストに対して、タスクと呼ばれる複数の処理単位に分割され、複数の分散処理サーバ103上で分散的に処理される。以下、タスク生成及び分散処理サーバ上での処理を示す。
【0072】
まず、スキャナモジュール402がインデクスリストの生成終了をパイプライン制御モジュール404に通知する(S1201)。このとき、パイプライン制御モジュール404は、分散処理サーバ103上でインデクスの生成を開始可能か否かをチェックする(S1202)。
【0073】
分散処理サーバ103上でインデクスの生成が開始可能な場合(S1202で肯定結果)、パイプライン制御モジュール404は、インデクス生成モジュール403に対し、分割インデクスの生成開始とインデクスリストの保存先パスを通知する(S1203)。なお、インデクスの生成が開始可能でない場合(S1202で否定結果)の場合、パイプライン制御モジュール404は、一定時間の待機時間の後(S12021)、再び、S1202の判定処理に戻る。
【0074】
先の通知を受けたインデクス生成モジュール403は、分散ファイルシステム302上からインデクスリストを取得する(S1204)。インデクス生成モジュール403は、第一の分散処理として、以下に示すS1205〜S1207までの処理を行う。
【0075】
まず、インデクス生成モジュール403は、インデクスリストを任意の数に分割する(S1205)。ここでの数は、分散処理サーバ103の台数及び処理性能から決定される数である。インデクスリストは、インデクス処理対象のファイルパス、処理ステータスが記述されたテキストファイルであり、このファイルを分割する際には、分割数に応じて単純に任意の行で区切って複数のインデクスリストが生成されることとなる。
【0076】
分割された各々のインデクスリストは、それぞれが、分散処理サーバ103上で複数のタスクとして処理される。第一の分散処理における各々のタスク処理は、分割されたインデクスリストに記述されているファイルパスを取得し(S1206)、インデクスIDテーブルに問い合わせ、インデクスIDを取得する(S1207)。
【0077】
第一のタスク処理が全て完了すると、インデクス生成モジュール403は、分散処理サーバ103上でインデクスIDによるグルーピングを行い、インデクスIDをキーとするインデクスリストを生成する(S1208)。
【0078】
次に、第二の分散処理として、インデクス生成モジュール403は、以下に示すS1209〜S1212までの処理を行う。
【0079】
まず、インデクス生成モジュール403は、インデクスIDをキーとするインデクスリスト(インデクスID分だけリストが存在する)に対し、分散処理サーバ103上で複数のタスクとして処理を開始する。
【0080】
第二の分散処理におけるタスク処理は、インデクスIDをキーとするインデクスリストからファイルパスと処理ステータスを取得する(S1209)。
【0081】
次に、タスク処理は、処理ステータスをチェックする(S1210)。ここで、処理ステータスが、「1」(=ファイル新規生成)又は「2」(=ファイル更新)の場合、各タスクは、ファイルサーバ102からファイルをダウンロードした後、分割インデクスを生成する(S1211)。なお、このとき生成される分割インデクスは、分散処理サーバ103のローカルストレージ301上に一時的に生成される。
【0082】
これに対し、処理ステータスが「−1」(=インデクスから削除)の場合、各タスクは、削除インデクスリストとしてファイルパスを削除インデクスリストとして出力する(S1212)。なお、削除インデクスリストは、検索サーバ101上に既に配置されている分割インデクスから削除すべきファイルパスが1行毎に書かれたテキストファイルである。
【0083】
この後、インデクス生成モジュール403は、第二のタスク処理により生成された分割インデクスと削除インデクスリストをセットとして、分散ファイルサーバ103上にアップロードする(S1213)。
【0084】
その後、インデクス生成モジュール403は、アップロードした保存先を分割インデクス保存先パス603と削除インデクスリスト保存先パス604に格納し(S1214)、パイプライン制御モジュール404に対し、分割インデクスの生成完了を通知する(S1215)。
【0085】
以上のように、分散処理サーバ103上では、第一の分散処理と第二の分散処理が実行され、タスク処理が同時並列的に実行される。これにより、分割インデクスの生成速度が向上する。なお、コンシステントハッシュ法における仮想インデクスIDを利用して第二のタスク処理を実行することにより、分散処理数をさらに調整することもできる。
【0086】
さらに、スキャナモジュール402とインデクス生成モジュール403は非同期に動作する。このため、スキャナモジュール402によるインデクスリストの生成が複数完了した場合には、S1201〜S1213の処理は多重化することが可能となり、分割インデクスの生成速度が向上する。
【0087】
[検索サーバへの分割インデクスの配置フロー]
図13に、インデクス生成モジュール403により生成された分割インデクス(この時点では、分割インデクスは、検索サーバ101ではなく、分散ファイルシステム302上に保存されている)を、インデクス管理モジュール203が、検索サーバ101に配置するフローである。
【0088】
図13に示すフローは、パイプライン制御モジュール404が、インデクス生成モジュール403から分割インデクス202の生成終了通知を受けることで開始する(S1301)。この通知の受けたパイプライン制御モジュール404は、検索サーバ管理テーブル407に問い合わせを行い、インデクスIDをキーとして、配置先検索サーバ名602を取得する(S1302)。
【0089】
次に、パイプライン制御モジュール404は、特定された検索サーバ101上のインデクス管理モジュール203に対し、インデクス処理が可能か否かの問い合わせを行う(S1303)。インデクス処理が可能な場合(S1303で肯定結果)、パイプライン制御モジュール404は、インデクス管理モジュール203に対し、インデクス処理の開始を命令する(S1304)。なお、インデクス管理モジュール203が他の処理を実行中の場合、パイプライン制御モジュール404は、一定の時間待機する(S1305)。
【0090】
次に、インデクス管理モジュール203は、既に分割インデクスが存在するか否かをチェックする(S1306)。既に分割インデクス202が同じ検索サーバ101上に存在する場合(S1306で肯定結果)、インデクス管理モジュール203は、分散ファイルシステム302上からインデクスIDに対応する分割インデクス202と削除インデクスリストをダウンロードする(S1307)。
【0091】
インデクス管理モジュール203は、検索サーバ101上に存在する既存の分割インデクス202に対して、削除インデクスリストに基づいてインデクスを削除する(S1308)。次に、インデクス管理モジュール203は、ダウンロードした分割インデクス202を既存の分割インデクス202にマージし、最新の分割インデクス202を生成する(S1309)。
【0092】
一方、分割インデクス202が同じ検索サーバ101上に存在しなかった場合(S1306で否定結果)、インデクス管理モジュール203は、分散ファイルシステム302上からインデクスIDに対応する分割インデクス202をダウンロードする(S1310)。
【0093】
続いて、インデクス管理モジュール203は、検索モジュール204に分割インデクス202のマウントを要求する(S1311)。これにより、検索モジュール204に分割インデクスがマウントされ、検索の実行が可能となる。
【0094】
最後に、インデクス管理モジュール203は、パイプライン制御モジュール404に対し、分割インデクスの配置終了を通知し、処理を完了する(S1312)。
【0095】
[検索サーバの追加フロー]
図14に、検索システムに検索サーバ101が追加された場合に実行される処理フローを示す。
【0096】
この処理フローは、システム管理モジュール405に対し、管理者が、検索サーバ101の追加を入力することで開始される(S1401)。
【0097】
検索サーバ101が追加されたことを受け付けると、システム管理モジュール405は、新規に追加された検索サーバ101に対し、新規にインデクスIDを割り当てる(S1402)。例えば2台の検索サーバ101が配置された検索システムに、1台の検索サーバ101が新たに追加される場合にあって、1台の検索サーバ101に2つの分割インデクス202が配置されるとき、新たに追加される検索サーバ101にはインデクスID4,5が割り当てられる。
【0098】
次に、システム管理モジュール405は、検索サーバ管理テーブル407に、新規に生成されたインデクスID601のエントリを作成し、そのエントリに配置先検索サーバ名602を設定する(S1403)。すなわち、検索サーバ管理テーブル407の初期化を実行する。
【0099】
その後、システム管理モジュール405は、新規に生成されたインデクスID502に対応付ける仮想インデクスID501のハッシュ値をインデクスIDテーブル406に格納する(S1404)。すなわち、インデクスIDテーブルを初期化する。
【0100】
新規の仮想インデクスIDがインデクスIDテーブル406に追加されると、パイプライン制御モジュール404は、再配置のターゲットとなる全ての検索サーバ101上のインデクス管理モジュール203に対し、分割インデクスの再配置開始を命令する(S1405)。すなわち、再配置に関係する既存の検索サーバ101に対し、分割インデクスの再配置を命じる。
【0101】
再配置命令を受けた検索サーバ101のインデクス管理モジュール203は、既存の分割インデクス202の先頭からファイルパスを順々に取得する(S1406)。
【0102】
次に、インデクス管理モジュール203は、ファイルパスからハッシュ値を計算してインデクスIDテーブル406に問い合わせ、インデクスIDを取得する(S1407)。
【0103】
次に、インデクス管理モジュール203は、取得したインデクスIDが新規に追加されたインデクスIDか否か判定する(S1408)。インデクスIDが新規でなかった場合(S1408で否定結果)、インデクス管理モジュール203は、そのファイルパスについて何も処理を行わない。インデクスIDが新規であった場合(S1408で肯定結果)、インデクス管理モジュール203は、分割インデクスからそのエントリを抜き出し、新規インデクスIDに紐付けられている分割インデクスを生成・追加する(S1409)。
【0104】
なお、S1406〜S1409の操作は分割インデクス202に登録されている全てのファイルパスに対して処理される。また、分割インデクスは、一時的に検索サーバ101のローカルストレージ201上に生成されるものとする。
【0105】
その後、新規に生成された分割インデクスを分散ファイルシステム302にアップロードし(S1410)、パイプライン制御モジュール404に分割終了を通知する(S1411)。
【0106】
パイプライン制御モジュール404は、各々の検索サーバ101上のインデクス管理モジュール203から終了通知を受けた順番に、新規に追加された検索サーバ101のインデクス管理モジュール203に対し、インデクス配置処理の開始を指示する(S1412)。
【0107】
新規に追加された検索サーバ101のインデクス管理モジュール203は、分散ファイルシステム302から分割インデクスをダウンロードし、分割インデクスのマージ処理を繰り返す(S1413)。以上により、新規追加された検索サーバ101上に分散インデクス202を生成することが可能となる。
【0108】
[検索サーバ削除フロー]
図15に、検索システムから検索サーバ101が削減された場合の処理フローを示す。この処理フローは、管理者が、検索サーバ101の削減をシステム管理モジュール405に入力することで開始される(S1501)。
【0109】
検索サーバ101が削除されたことを受け付けると、システム管理モジュール405は、削減対象である検索サーバ101が配置先ファイルサーバ名になっているエントリのインデクスID601を検索サーバ管理テーブル407から取得し、そのインデクスIDに紐付けられている仮想インデクスIDを計算して取得する(S1502)。
【0110】
その後、システム管理モジュール405は、S1502で取得した仮想インデクスIDを、インデクスIDテーブル406から削除する(S1503)。
【0111】
次に、システム管理モジュール405は、パイプライン制御モジュール404に対し、削減される検索サーバ101のインデクス管理モジュール203にインデクス削除の指示を出す(S1504)。
【0112】
指示を受けたインデクス管理モジュール203は、分割インデクス202に登録されているファイルパスを先頭から終端まで順に取得する(S1505)。
【0113】
次に、インデクス管理モジュール203は、取得したファイルパスからハッシュ値を計算し、計算されたハッシュ値に対応するインデクスIDをインデクスIDテーブルに問い合わせる(S1506)。
【0114】
その後、インデクス管理モジュール203は、分割インデクス202からファイルパスのエントリのインデクスIDを抜き出し、取得したインデクスIDに紐付けられた新規の分割インデクスを生成し、又は、その分割インデクスにインデクスデータを追加する。その後、インデクス管理モジュール203は、再配置先にマージするための分割インデクスを生成する(S1507)。この分割処理が終わった時、削除ターゲットである検索サーバ101のローカルストレージ201に、インデクスID毎の分割インデクスが複数存在する。
【0115】
次に、インデクス管理モジュール203は、S1507で生成したインデクスID毎の分割インデクスを分散ファイルシステム302上にアップロードする(S1508)。
【0116】
続いて、インデクス管理モジュール203は、システム管理モジュール405に対し、(1) インデクスID毎の分割インデクス生成が完了したこと、(2) 分散ファイルシステム302上の保存先情報を通知する(S1509)。
【0117】
この通知を受けて、システム管理モジュール405は、パイプライン制御モジュール404に指示を出し、再配置のターゲットとなる全ての検索サーバ101上のインデクス管理モジュール203に対してインデクスのマージを命じる指示を出す(S1510)。
【0118】
指示を受けた各々のインデクス管理モジュール203は、分割インデクスのダウンロードとマージ処理を行い、最新の分割インデクス202を生成する(S1511)。
【0119】
以上の完了後、インデクス管理モジュール203は、削除ターゲットの検索サーバ101をシステム上から削除する(S1512)。
【0120】
[まとめ]
本実施の形態によれば、検索インデクスに対応するハッシュ値をマッピングするコンシステントハッシュ空間に仮想ノード(仮想インデクスID)を設定することにより、分割インデクスのサイズの平準化と偏りの抑制とを同時に実現することができる。これにより、検索パフォーマンスの向上を実現することができる。
【0121】
また、本実施の形態によれば、検索サーバ101の物理的な追加又は削除に伴う分割インデクスの追加又は削除に関しても、仮想ノード(仮想インデクスID)の再配置により柔軟に対応することができる。結果的に、各検索サーバ101に対応付けられる複数の分割インデクス202の管理を簡素化することができる。
【0122】
また、本実施の形態によれば、パイプライン処理による分割インデクスの生成を、複数台の分散処理サーバ103に分散して実行することができる。これにより、分割インデクスの生成速度を向上させることができる。さらに、分散処理サーバ103上における分割インデクスの生成をインデクスID毎に実行することにより、分割インデクスの生成時における分散処理サーバ間の無駄なネットワークトラフィック及びディスクI/Oを軽減することができる。これにより、分割インデクスの生成をより効率的にかつ高速化することができる。
【0123】
また、本実施の形態によれば、分割リストの生成対象とするファイルパスを与えるインデクスリストの生成処理を、ファイルサーバ内のフォルダツリーの任意の階層数毎に実行することにより、分割インデクスの生成をより効率的にかつ高速化することができる。
【符号の説明】
【0124】
100…検索クライアント
101…検索サーバ
102…ファイルサーバ
103…分散処理サーバ
104…管理サーバ
105…ネットワーク
201…ローカルストレージ
202…分割インデクス
203…インデクス管理モジュール
204…検索モジュール
301…ローカルストレージ
302…分散ファイルシステム
303…分散処理モジュール
401…ローカルストレージ
402…スキャナモジュール
403…インデクス生成モジュール
404…パイプライン制御モジュール
405…システム管理モジュール
406…インデクスIDテーブル
407…検索サーバ管理テーブル
408…ファイル管理テーブル

【特許請求の範囲】
【請求項1】
大規模なファイルシステムを検索対象とするファイル検索システムにおいて、
各検索サーバに割り当てる分割インデクスの生成対象となるファイルパスのリストを生成する第1の処理機能部と、
前記リストに基づいて分割インデクスを生成する第2の処理機能部と、
生成された分割インデクスを検索サーバに配置する第3の処理機能部と、
前記第1〜第3の処理機能部間における処理動作をパイプライン処理により実現する第4の処理機能部とを有するファイル検索システム。
【請求項2】
請求項1に記載のファイル検索システムにおいて、
前記第2の処理機能部は、ファイルパスから一意に算出されるハッシュ値をマッピングするコンシステントハッシュ空間上に設定された仮想インデクスIDのハッシュ値とインデクスIDとの対応関係を定めたテーブルに基づいてファイルパスに対応付けるインデクスIDを決定する機能と、前記インデクスID毎に分割インデクスを生成する機能とを有する
ことを特徴とするファイル検索システム。
【請求項3】
請求項1又は2に記載のファイル検索システムにおいて、
前記第2の処理機能部は、前記リストを任意の数に分割し、分割後の各リストに対する分割インデクスの生成処理を複数の分散処理システムに分散させる
ことを特徴とするファイル検索システム。
【請求項4】
請求項3に記載のファイル検索システムにおいて、
前記第2の処理機能部は、前記リストをインデクスID毎に分割する
ことを特徴とするファイル検索システム。
【請求項5】
請求項1に記載のファイル検索システムにおいて、
前記第1の処理機能部は、ファイルシステム上の任意のフォルダ階層毎に前記ファイルパスのリストを生成し、その生成のたび、生成されたリストを前記第2の処理機能部に与える
ことを特徴とするファイル検索システム。
【請求項6】
請求項1に記載のファイル検索システムにおいて、
検索サーバの追加時、ファイルパスから一意に算出されるハッシュ値をマッピングするコンシステントハッシュ空間上に設定された仮想インデクスIDのハッシュ値とインデクスIDとの対応関係を更新する第5の処理機能部と、
更新後の前記対応関係を用い、分割インデクスの再配置を実行する第6の処理機能部と
を有することを特徴とするファイル検索システム。
【請求項7】
請求項1に記載のファイル検索システムにおいて、
検索サーバの削除時、削除対象とする検索サーバに割り当てられている分割インデクスに登録されているファイルパスから対応するインデクスIDを算出し、各インデクスIDに対応する再配置先の検索サーバ別のマージ用分割インデクスを生成する第7の処理機能部と
を有することを特徴とするファイル検索システム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate


【公開番号】特開2013−77233(P2013−77233A)
【公開日】平成25年4月25日(2013.4.25)
【国際特許分類】
【出願番号】特願2011−217881(P2011−217881)
【出願日】平成23年9月30日(2011.9.30)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(000233055)株式会社日立ソリューションズ (1,610)