JP2013210698A - ファイル検索システム及びプログラム - Google Patents

ファイル検索システム及びプログラム Download PDF

Info

Publication number
JP2013210698A
JP2013210698A JP2012078668A JP2012078668A JP2013210698A JP 2013210698 A JP2013210698 A JP 2013210698A JP 2012078668 A JP2012078668 A JP 2012078668A JP 2012078668 A JP2012078668 A JP 2012078668A JP 2013210698 A JP2013210698 A JP 2013210698A
Authority
JP
Japan
Prior art keywords
index
file
search
split
server
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2012078668A
Other languages
English (en)
Inventor
Koji Nakayama
晃治 中山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Solutions Ltd
Original Assignee
Hitachi Solutions Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Solutions Ltd filed Critical Hitachi Solutions Ltd
Priority to JP2012078668A priority Critical patent/JP2013210698A/ja
Publication of JP2013210698A publication Critical patent/JP2013210698A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】複数の検索サーバを有するファイル検索システムに対し、新たな検索サーバを追加してインデクスの再配置を実行する際、分割インデクスの再配置の迅速化実現する手法を提供する。
【解決手段】ファイル検索システムを構成する管理用サーバに、ファイル・ディレクトリパスに対し、コンシステントハッシュ空間上にマッピングするハッシュ値を算出する処理部と、前記テーブルを参照し、前記ファイル・ディレクトリパスに対応付ける仮想インデクスIDとインデクスIDを決定する処理部と、インデクスID毎に、ファイル・ディレクトリパスと仮想インデクスIDの情報を含む分割インデクスを生成する処理部と、生成された分割インデクスを対応する検索サーバに転送する処理部とを設ける。
【選択図】図1

Description

本発明は、ファイル検索システム及びそのプログラムに関し、特に検索用インデクスの効率的な管理技術に関する。
近年におけるアプリケーションの多様化やストレージの低価格化に伴い、ストレージに保存されるデータ量は爆発的に増加している。これに伴い、企業内で扱うデータ量も膨大になっている。このため、大量に存在するデータを有効活用するためのファイル検索システムの重要性が増大している。
通常、検索対象とするファイル数が膨大である場合、検索インデクス(索引データ)を事前に生成して、検索パフォーマンスの向上を図る手法が用いられる。この他、同じ検索インデクスを複数の検索サーバに設置して負荷を分散する方法、複数の検索サーバ上に検索インデクスを分割して配置し、検索処理を分散する方法等も、検索パフォーマンスの向上を図る方法として一般に採用されている。
このような技術背景において、検索インデクスの生成方法についても、様々な技術が提案されている。例えば特許文献1には、分割された検索インデクスのサイズの偏りをなるべく低減する手法が開示されている。
特開2011−70257号公報
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
しかし、IT(Information Technology)技術の発展に伴い、現在、NAS(Network Attached Storage)上で管理されるファイル数が急増している。この状況に対応するため、迅速な検索サーバの追加が求められている。
本出願人は、このような認識の下、NASをクローリングして得た更新用のファイル・ディレクトリパスに対してハッシュ値を計算し、当該ハッシュ値に対してコンシステントハッシュ法を適用して検索インデクスを複数の検索サーバに分散配置する手法を提案している(特願2011−217881号)。
ところで、この先行方式は、検索サーバの追加時に、分割インデクスを構成する全てのファイル・ディレクトリパスについてハッシュ値を計算して、それらをコンシステントハッシュ空間にマッピングし、各ファイル・ディレクトリパスの配置先となるインデクスIDを計算する必要がある。
しかし、分割インデクスを構成する全てのファイル・ディレクトリパスに対応するハッシュ値の計算は、計算機に与える演算負荷が大きい。そして、分割インデクスのサイズが大きいほど、再配置に必要な計算時間が長くなる。
本発明は、以上の技術的課題を考慮してなされたものであり、少なくとも、新規の検索サーバをファイル検索システムに追加する場合における分割インデクスの再配置の迅速化実現する手法を提供する。
このような技術的課題を解決するために、本発明者は、例えば特許請求の範囲に記載のシステム構成やプログラムを提案する。
その一例として、複数の検索サーバを有するファイル検索システムであって、(1) コンシステントハッシュ空間上に設定される仮想インデクスIDと、検索サーバに対応付けられるインデクスIDとの対応関係を記憶するテーブルと、(2) ファイル・ディレクトリパスに対し、前記コンシステントハッシュ空間上にマッピングするハッシュ値を算出する処理部と、前記テーブルを参照し、前記ファイル・ディレクトリパスに対応付ける仮想インデクスIDとインデクスIDを決定する処理部と、インデクスID毎に、ファイル・ディレクトリパスと仮想インデクスIDの情報を含む分割インデクスを生成する処理部と、生成された分割インデクスを対応する検索サーバに転送する処理部とを有する管理用サーバとを有するものを提案する。
また、他の一例として、複数の検索サーバを有するファイル検索システムであって、(1) コンシステントハッシュ空間上に設定される仮想インデクスIDと、検索サーバに対応付けられるインデクスIDとの対応関係を記憶するテーブルと、(2) ファイル・ディレクトリパスに対し、前記コンシステントハッシュ空間上にマッピングするハッシュ値を算出する処理部と、前記テーブルを参照し、前記ファイル・ディレクトリパスに対応付ける仮想インデクスIDとインデクスIDを決定する処理部と、インデクスID毎に、ファイル・ディレクトリパスとそのハッシュ値の情報を含む分割インデクスを生成する処理部と、生成された分割インデクスを対応する検索サーバに転送する処理部とを有する管理用サーバとを有するものを提案する。
本発明によれば、既存の検索サーバ内における分割インデクスの再分割に際し、計算負荷の大きい演算処理を一部のレコードに限定することができる、又は、そのような演算処理を無くすことができる。このため、分割インデクスの再配置を大幅に効率化することができる。なお、前述した以外の課題、構成及び効果は、以下の実施の形態の説明により明らかにされる。
実施の形態に係る検索システムの概念構成を示す図。 検索サーバの機能構成例を示す図。 分散処理サーバの機能構成例を示す図。 管理サーバの機能構成例を示す図。 インデクスIDテーブルのデータ構造例を示す図。 検索サーバ管理テーブルのデータ構造例を示す図。 ファイル管理テーブルのデータ構造例を示す図。 インデクスリストのデータ構造例を示す図。 インデクススキーマのデータ構造例を示す図(第一の形態例)。 システムの初期化フローを示す図。 インデクスIDテーブルの初期化フローを示す図。 初期化が終了したインデクスIDテーブルの例を説明する図。 スキャナモジュールによるインデクスリストの生成フローを示す図。 インデクス生成モジュールによる分割インデクスの生成フローを示す図。 検索サーバへの分割インデクスの配置フローを示す図。 検索サーバ追加時の処理フローを示す図(第一の形態例)。 検索サーバ追加時の初期化が終了したインデクスIDテーブルの例を示す図(第一の形態例)。 検索サーバ追加により影響を受ける仮想インデクスIDとインデクスIDを格納した一時テーブルの例を示す図(第一の形態例)。 検索サーバの削除時の処理フローを示す図(第一の形態例)。 検索サーバの追加時の処理フローを示す図(第二の形態例)。 検索サーバの追加時に利用されるインデクススキーマのデータ構造例を示す図(第二の形態例)。 検索サーバ追加時に利用される一時テーブルの例を示す図(第二の形態例)。 検索サーバ削除時に実行される処理フローを示す図(第二の形態例)。 検索サーバ削除時の初期化が終了したインデクスIDテーブルの例を示す図(第二の形態例)。 検索サーバ削除時に利用される一時テーブルの例を示す図(第二の形態例)。
以下の実施の形態においては、複数のセクションに分割して、実施の形態に係る検索システムの実現に必要な処理機能を説明する。以下の実施の形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。以下の実施の形態において、その構成要素(要素ステップ等も含む)は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。
また、以下の実施の形態において、各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路その他のハードウェアとして実現しても良い。また、前述した各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することにより実現しても良い。すなわち、ソフトウェアとして実現しても良い。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリやハードディスク、SSD(Solid State Drive)等の記憶装置、ICカード、SDカード、DVD等の記憶媒体に格納することができる。
また、制御線や情報線は、説明上必要と考えられるものを示すものであり、製品上必要な全ての制御線や情報線を表すものでない。実際にはほとんど全ての構成が相互に接続されていると考えて良い。
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の機能を有する部材には同一または関連する符号を付し、その繰り返しの説明は省略する。また、以下の実施の形態では、特に必要なとき以外は同一または同様な部分の説明を原則として繰り返さない。
[形態例1]
[検索システムの全体構成]
図1に、形態例1に係るファイル検索システム(以下「検索システム」という)の構成例を示す。本形態例に係る検索システムは、検索クライアント100、検索サーバ101、ファイルサーバ102、分散処理サーバ103、管理サーバ104から構成され、それらがネットワーク105を通じて互いに接続されている。本明細書では、分散処理サーバ103、管理サーバ104を管理用サーバともいう。
ネットワーク105は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)等として一般に知られるネットワークを用いて実現することができる。なお、ネットワーク105は、有線ネットワークでも無線ネットワークでも構わない。また、検索システムは、1つの領域・国内に構築される必要は無く、複数の地域・国間を跨いで構築されてもよい。なお、図1に示す検索システムの構成は、形態例2に係る検索システムでも共通である。
[検索クライアントの構成]
検索クライアント100は、Webブラウザを動作させることができる環境がインストールされたコンピュータであり、据え置き型に限らず、携帯型のコンピュータ、携帯情報端末、携帯電話機などの端末を含む。検索クライアント100は、HTTP(Hypertext Transfer Protocol)等を使用して検索サーバ101に対して検索クエリを送信する機能と、検索サーバ101から検索結果を取得する機能と、取得した検索結果を利用者に表示する機能とを有している。検索クライアント100は、検索システム上に複数存在する。
[検索サーバの構成]
図2に、検索サーバ101の内部構成例を示す。検索サーバ101は、検索クライアント100から検索クエリを受信して検索処理を実行し、検索結果を返信するサーバである。検索サーバ101は、コンピュータを基本構成とする。検索サーバ101は、検索システム内に複数台存在し、それぞれがローカルストレージ201を保持している。ローカルストレージ201内には、ファイルサーバ102に保存されるファイル群に基づいて生成された検索用の分割インデクス202が保存されている。
検索サーバ101には、インデクス管理モジュール203と検索モジュール204がインストールされている。インデクス管理モジュール203は、分割インデクス202の管理・更新用のプログラムである。検索モジュール204は、検索用の分割インデクスを用いて検索処理を実行するプログラムである。因みに、インデクス管理モジュール203と検索モジュール204は、検索サーバ101のそれぞれにインストールされている。
分割インデクス202は、ファイルサーバ102上に保存されているファイル群に基づいて、管理サーバ104上のインデクス生成管理モジュール402及び分散処理サーバ103のインデクス生成モジュール305により生成される検索用のインデクスである。後述するように、分割インデクス202は、コンシステントハッシュ法に基づいて、インデクスID毎に分割されたインデクスである。なお、インデクスIDには分割インデクス202が紐付けられており、この紐付きを通じ、検索サーバ101に分割インデクス202が配置される。検索サーバ101上に配置させる分割インデクス202の数(インデクスの分割数)は、あらかじめ管理者が決定する。また、分割インデクス202は、図9に示すインデクススキーマにより定義される検索インデクスである。
インデクス管理モジュール203は、分割インデクス202を、検索サーバ101に配置・管理するモジュールである。検索サーバ101に分割インデクス202が既に存在し、その分割インデクス202の更新操作を実行する場合、インデクス管理モジュール203は、既存の分割インデクス202に対して、新規に生成された分割インデクスをマージし、最新の分割インデクスを生成する。
検索サーバ101の追加により、システム全体で保持している分割インデクスの数が増加した場合、インデクス管理モジュール203は、それぞれの検索サーバ101に保存されている既存の分割インデクス202をさらに分割する機能を有する。なお、新たに追加された検索サーバ101のインデクス管理モジュール203は、他の検索サーバ101で新規に分割されたインデクスを集約して1つの分割インデクス202を生成する機能を有する。
削除対象の検索サーバ101におけるインデクス管理モジュール203は、自サーバに保持されていた分割インデクス202をインデクスIDに従って再度分割し、他の検索サーバ101の分割インデクス202に対して割り振る機能を有する。
検索モジュール204は、検索サーバ101に配置された分割インデクス202を使用して、検索クライアント100から受け取った検索クエリに対する検索結果を生成し、検索クライアント100に検索結果を返信する機能を有する検索エンジンである。検索モジュール204は、他の検索サーバ群にインストールされているそれぞれの検索モジュール204と連携し、検索処理を分散的に実行する機能も有している。
[ファイルサーバの構成]
ファイルサーバ102は、企業内等において作成された大量のドキュメントデータを保存するサーバである。ファイルサーバ102は、コンピュータを基本構成とする。ファイルサーバ102は、検索システム内に複数台存在する。各ファイルサーバ102は、分散処理サーバ103及び管理サーバ104と、NFS(Network File System)やCIFS(Common Internet File System)等のプロトコルを通じて接続されている。これにより、分散処理サーバ103及び管理サーバ104上の各モジュールは、ファイルサーバ102上に存在するファイルへのアクセス及びファイル情報の取得が可能である。
[分散処理サーバの構成]
図3に、分散処理サーバ103の内部構成例を示す。分散処理サーバ103は、コンピュータを基本構成とする。分散処理サーバ103は、検索システム内に複数台存在する。これら複数の分散処理サーバ103は、一つの処理命令を他の分散処理サーバとの連携により分散的に処理する機能を有するサーバ群である。
分散処理サーバ103には、分散ファイルシステム302と分散処理モジュール303と分割インデクスの生成を制御するためのスキャナモジュール304、インデクス生成モジュール305がインストールされている。分散処理サーバ103には、ローカルストレージ301が設けられている。
分散ファイルシステム302は、ローカルストレージ301を用い、共通する一つのファイルシステムを全ての分散処理サーバ103から利用可能とするモジュールである。
分散処理モジュール303は、管理サーバ104のインデクス生成管理モジュール402から命令を受けた場合、他の分散処理サーバ103上のスキャナモジュール304及びインデクス生成モジュール305と連携し、分割インデクス202を分散的に生成する機能を有するモジュールである。
スキャナモジュール304は、ファイルサーバ102上のファイル・ディレクトリをスキャンして、ファイル・ディレクトリパス名の一覧とそれらの属性情報を取得する機能と、それらのファイル・ディレクトリが新規生成・更新・削除のいずれの状態であるかを判定し、インデクスリスト306を生成する機能とを有するモジュールである。なお、スキャナモジュール304は、管理サーバ104上のインデクス生成管理モジュール403からの命令により動作する。
インデクスリスト306は、スキャナモジュール304がファイル管理テーブル406から、インデクス処理対象のファイル・ディレクトリパス、処理ステータスを抜き出して生成する一時ファイルであり、後述するインデクス生成モジュール305により利用される。
スキャナモジュール304の機能は、以下の処理機能の実行を通じ実現することができる。例えばLinuxのFindコマンドを利用し、ファイルサーバ102上のファイル・ディレクトリパスの一覧とそれらの属性情報を取得する。この後、取得したファイル属性情報のハッシュ値を計算する。次に、任意のタイミングに取得しておいたファイル管理テーブル406(後述)に格納されているファイル属性情報のハッシュ値702(図7)と計算されたハッシュ値を比較し、その一致・不一致により、インデクス対象となるか否かを判定する。
ハッシュ値が同じであった場合、スキャナモジュール304は、該当するファイル・ディレクトリに更新が無いと判定し、インデクシングの対象外とする。ハッシュ値が異なる場合、スキャナモジュール304は、ファイル・ディレクトリに更新があったと判定し、インデクスリスト306に情報を書き出す。
ファイル管理テーブル406にファイル・ディレクトリパス701(図7)が存在するにもかかわらず、Findコマンドによって該当する情報を取得できない場合、スキャナモジュール304は、当該ファイル・ディレクトリパスが「ファイル削除」を示すように、インデクスリスト306に情報を書き出す。
インデクス生成モジュール305は、スキャナモジュール304が出力したインデクスリスト306に基づいて、分散処理サーバ103上でインデクスを分散的に生成する機能を有するモジュールである。インデクス生成モジュール305は、コンシステントハッシュ法に基づいてファイル・ディレクトリパスに対応するハッシュ値を算出し、当該ハッシュ値から対応するインデクスIDを求める。また、インデクス生成モジュール305は、インデクスID毎に分割インデクスを生成する。なお、インデクス生成モジュール305は、スキャナモジュール304と同様に、管理サーバ104上のインデクス生成管理モジュール402からの命令により動作するモジュールである。
インデクス生成モジュール305の処理は、タスクと呼ばれる処理単位に分割され、複数の分散処理サーバ103に分散される。なお、タスクは、分散処理サーバ103上において、第一の分散処理と第二の分散処理と第三の分散処理に分けて実行される。これらの処理は、大規模分散処理の技術として知られるMapReduceを使用することでも実現できる。その場合、第一の分散処理をMap処理、第二の分散処理をShuffle処理、第三の分散処理をReduce処理として実現する。詳細動作については後述する。
[管理サーバの構成]
図4に、管理サーバ104の内部構成例を示す。管理サーバ104は、コンピュータを基本構成とする。管理サーバ104は、検索システムを構成する検索サーバ101、ファイルサーバ102、分散処理サーバ103等のサーバ管理機能を有するサーバである。管理サーバ104のローカルストレージ401には、分割インデクスの生成を制御するためのインデクス生成管理モジュール402、システム管理モジュール403、インデクスIDテーブル404、検索サーバ管理テーブル405、ファイル管理テーブル406がインストールされている。これらのモジュールは、管理サーバ104以外に存在してもよい。例えばこれらのモジュールの全部又は一部は、分散処理サーバ103上で直接動作可能であってもよい。
インデクス生成管理モジュール402は、分散処理サーバ103上における分散処理モジュール303、スキャナモジュール304、及び、インデクス生成モジュール305による分割インデクスの生成処理の開始・終了を管理するモジュールである。
システム管理モジュール403は、検索システム上に存在するサーバ群の管理や各種テーブルの初期化を実行する機能と、システムの初期化に係るパラメータを管理者が入力するためのユーザインターフェースを提供する機能とを有するモジュールである。
インデクスIDテーブル404の例を図5に示す。インデクスIDテーブル404は、仮想インデクスID501とインデクスID502を格納するテーブルであり、ファイル・ディレクトリパスからインデクスIDを取得する際に参照される。インデクスIDテーブル404は、コンシステントハッシュ法の実現手段として利用される。
以下、コンシステントハッシュ法について解説する。コンシステントハッシュ法は、0〜2^128−1(2^128はMD5ハッシュ法に基づく値。MD5は一例であって、任意のハッシュアルゴリズムを利用することが可能である)の整数の目盛りが振られた円周上にインデクスIDのハッシュ値を配置し、円周上を複数の範囲に分割する方法をいう。なお、インデクスIDのハッシュ値は、インデクスIDを文字列としてMD5等のハッシュ関数を適用することにより求めることができる。
ファイル・ディレクトリパスからインデクスIDを取得するには、ファイル・ディレクトリパスから同じハッシュ関数(この例ではMD5)を利用してハッシュ値を求めて円周上に配置し、その位置から反時計回りに回って最初に遭遇するハッシュ値に対応するインデクスIDが、ファイル・ディレクトリパスに紐付けるインデクスIDとなる。以上が基本的なコンシステントハッシュの概念である。ただし、単純なコンシステントハッシュ法は、各インデクスIDに割り当てられるファイル数は、円周上で分割される間隔に依存する。
このため、インデクスIDのハッシュ値だけで分割すると、インデクスIDの追加・削除を行った場合に、各インデクスIDに割り当てられるファイル数に偏りが生じてしまう。これは、インデクスサイズが分割インデクス間で偏ることを意味し、検索パフォーマンスの劣化を招くことになる。このため、インデクスサイズを平準化する必要がある。
インデクスサイズの平準化を行うには、円周上に配置されるインデクスIDに対応する点の間隔を短くすることが必要となる。そこで、コンシステントハッシュ法の仮想ノードに相当する仮想インデクスIDを生成する。仮想インデクスIDは、インデクスIDに紐付けられるハッシュ値である。1インデクスID当たりn(nは自然数。好ましくは2個以上)個の仮想インデクスIDを生成することにより、システム上に存在する分割インデクスのサイズを平準化させる。仮想インデクスIDの生成と使用方法については後述する。
検索サーバ管理テーブル405の例を図6に示す。検索サーバ管理テーブル405は、インデクスID601と、そのインデクスIDが紐付けられている分割インデクスが配置されている配置先検索サーバ名602が格納されたテーブルである。
ファイル管理テーブル406の例を図7に示す。ファイル管理テーブル406は、ファイルサーバ102上に存在するファイル・ディレクトリパス名701の一覧と、それらの属性情報及びその属性情報から生成したファイルハッシュ値702を保存・管理するためのテーブルである。スキャナモジュール304は、このテーブルに保存されているファイルハッシュ値702と、スキャナモジュール304のスキャン実行時に取得したファイルの属性情報から生成されるファイルハッシュ値とを比較し、ファイルの更新状態をチェックして、処理ステータス703のフィールドに格納する。
インデクスリスト306の例を図8に示す。インデクスリスト306は、スキャナモジュール304が、ファイルサーバのスキャン後にファイル管理テーブル406へ処理ステータス703を格納し終えた時、インデクス処理対象のファイル・ディレクトリパス、処理ステータスを抜き出すことで生成される。生成後は、インデクス生成モジュール305に渡され、分割インデクス202の生成に利用される。
図9は、分割インデクス202のインデクススキーマ900の例を示す図である。インデクススキーマ900には、ファイル・ディレクトリパス901をユニークキーとして、ファイルメタ情報902、コンテンツデータ903、仮想インデクスID904が定義されている。ファイルメタ情報902は、ファイルの構成情報に関するデータであり、ファイル固有のメタ情報、及び、OSにより管理されるメタ情報の両方を含む複数の情報である。コンテンツデータ902は、ファイル内の本文にあたるデータである。仮想インデクスID904は、コンシステントハッシュ法により得られる仮想インデクスIDの値である。仮想インデクスID904をインデクススキーマ900内で管理することにより、検索サーバ101の追加に伴う分割インデクスの再配置を実行する場合にも、再配置に必要なレコード情報のみを既存の分割インデクスの中から効率的に抜き出すことが可能になる。具体的な使い方については後述する。このデータ構造が、本形態例に特徴の一つである。
[検索サーバ管理テーブルの初期化フロー]
図10に、検索サーバ管理テーブル405の初期化フローを示す。ここでは、検索サーバ101が2台存在し、各検索サーバ101上に2つ分割インデクス202を配置する場合を想定する。すなわち、検索システム全体におけるインデクスの分割数は4(=2×2)である場合を想定する。また、2台の検索サーバ名は、”Search1”と”Search2”であるものとする。
まず、管理者は、検索サーバ管理テーブル405の初期化を行うために、検索サーバ101の台数、及び、各検索サーバ101上に配置する分割インデクス202の数からインデクスの分割数を設定する(S1001)。
前述したように、この説明では、2台の検索サーバ101上に2つずつ分割インデクス202を配置する。このため、検索システム全体におけるインデクスの分割数は「4」である。この分割数は、システム管理モジュール403に入力される。分割数が入力されると、システム管理モジュール403は、各分割インデクス202に割り当てるインデクスIDを決定する(S1002)。本形態例の場合、インデクスIDは「0」から始まる昇順の数字とする。すなわち、システム管理モジュール403は、「0」、「1」、「2」、「3」の順番にインデクスIDを割り振る。
次に、システム管理モジュール403は、各インデクスIDと検索サーバ101との紐付けを実行し(S1003)、その結果を検索サーバ管理テーブル405に格納する(S1004)。本形態例の場合、システム管理モジュール403が自動的にインデクスIDと検索サーバの紐付けを実行するが、管理者が手動で設定してもよい。
例えば本実施例の場合、検索サーバ管理テーブル405のエントリは、「インデクスID=0,配置先検索サーバ名=Search1」、「インデクスID=1,配置先検索サーバ名=Search1」、「インデクスID=2,配置先検索サーバ名=Search2」、「インデクスID=3,配置先検索サーバ名=Search2」の4つとなる。以上で、検索サーバ管理テーブル405の初期化が完了する。
[インデクスIDテーブルの初期化フロー]
図11に、インデクスIDテーブル404の初期化フローを示す。インデクスIDテーブル404の初期化も検索サーバ管理テーブル405の初期化と同様のタイミングで実行される。
まず、管理者が検索サーバ101の台数と各検索サーバ101上に配置する分割インデクスの数に基づいてインデクスの分割数を設定し(S1101)、インデクスIDを決定する(S1102)。
ここでも、インデクスIDは、「0」、「1」、「2」、「3」の4つであるものとする。なお、仮想インデクスIDの数は、一つのインデクスIDに対して2つであるものとする。仮想インデクスIDの数は、インデクスIDに紐付けられるファイルの数が、最終的に平準化するように定められる任意の固定値である。
次に、システム管理モジュール403は、1つのインデクスIDに対して任意の仮想インデクスIDを生成する(S1103)。例えばインデクス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」とする。
続いて、システム管理モジュール403は、仮想インデクスIDの文字列からハッシュ値を取得する(S1104)。この後、システム管理モジュール403は、取得されたハッシュ値をインデクスIDテーブル404の仮想インデクスID501のフィールドに格納し、そのエントリのインデクスID502のフィールドにこの仮想インデクスIDが紐付けられるインデクスIDを格納する(S1105)。
図12に、初期化が終了したインデクスIDテーブル404(図5)の例を示す。このテーブルを利用することにより、与えられたファイル・ディレクトリパスを、どのインデクスIDに紐付けるかを知ることが可能となる。
例えばファイル・ディレクトリパス「/FileServer1/test.txt」のハッシュ値を求めたところ「29999999999」であった場合、このハッシュ値は、項番3と項番4の間の点に配置される。ここで、コンシステントハッシュ法によるインデクスIDの紐付けを、円周上のハッシュ値から反時計周りに最初に遭遇するエントリ点により行うとすると、項番3のエントリの点がヒットする。項番3のインデクスIDは「3」であるので、ファイル・ディレクトリパス「/FileServer1/test.tx」”のインデクスIDは「3」となる。
このテーブルはコンシステントハッシュ法の実現方式であり、このテーブルに基づいてファイル・ディレクトリパスからインデクスIDを取得し、インデクスID毎に分割インデクスを生成すると、各々の分割インデクスのサイズ又は紐付けられるファイル数を平準化することができる。
[インデクスリストの生成フロー]
図13に、スキャナモジュール304によるインデクスリストの生成フローを示す。まず、インデクス生成管理モジュール402は、スキャナモジュール304に対し、インデクスリスト生成開始を指示する(S1301)。
次に、スキャナモジュール304は、ファイル管理テーブル406にアクセスし、処理ステータスのフィールドに削除を示す「−1」を設定する(S1302)。
その後、スキャナモジュール304は、ファイルサーバ102に対してFindコマンドを実行する(S1303)。すなわち、スキャンを開始する。
Findコマンドにより取得したファイル・ディレクトリパスとその属性情報を取得すると、スキャナモジュール304は、各々の属性情報に基づいてハッシュ値を取得する(S1304)。
続いて、スキャナモジュール304は、Findコマンドにより取得したファイル・ディレクトリパスをキーに使用し、ファイル・ディレクトリパスの有無をファイル管理テーブル406に問い合わせる(S1305)。
ファイル・ディレクトリパスがファイル管理テーブル406に存在しない場合(S1305で否定結果)、当該ファイルは新規作成であることを意味する。従って、この場合、スキャナモジュール304は、ファイル管理テーブル406に新たにそのファイル・ディレクトリパス701をキーとするエントリを生成し、ファイルハッシュ値702と処理ステータス703を追加する(S1306)。処理ステータス703には、新規生成を示す「1」を追加する。
一方、ファイル・ディレクトリパス701がファイル管理テーブル406に存在する場合(S1305で肯定結果)、当該ファイルは既にファイル管理テーブル406に登録されていることを意味する。この場合、スキャナモジュール304は、ハッシュ値のチェックを実行する(S1307)。具体的には、スキャナモジュール304は、ファイル管理テーブル406からファイル・ディレクトリパス701が一致するエントリのファイルハッシュ値702を取得し、Findコマンドにより取得したハッシュ値と比較する。
ハッシュ値が一致した場合(S1307で肯定結果)、ファイルの更新がなかったことを意味する。従って、この場合、スキャナモジュール304は、ファイル・ディレクトリパスが一致するエントリの処理ステータスに「0」を設定する(S1308)。
ハッシュ値が一致しなかった場合(S1307で否定結果)、ファイル更新があったことを意味する。従って、この場合、スキャナモジュール304は、ファイルハッシュ値702を新たなハッシュ値で上書きし、処理ステータス703にファイル更新があったことを示す「2」を上書きする(S1309)。
以上の処理により、指定された階層のファイル処理(「0」=処理なし、「1」=インデクス新規生成、「2」=インデクス更新、「−1」=インデクスから削除)が確定する。
次に、スキャナモジュール304は、ファイル管理テーブル406の全てのレコードからファイル・ディレクトリパスと処理ステータスを取得し、インデクスリスト306へ書き出す(S1310)。このとき、インデクスリスト306には、スキャナモジュール304で処理した全てのファイル・ディレクトリパスとファイル処理(「0」、「1」、「2」、「−1」)が書かれている。なお、上記の処理は、Findコマンドのオプションパラメータでファイルツリーの階層の範囲を特定して実行することも可能である。
この後、スキャナモジュール304は、生成されたインデクスリスト306をインデクス生成モジュール305に転送すると共に、スキャニングの終了をインデクス生成管理モジュール402に通知する(S1311)。インデクス生成モジュール305は、インデクスリスト306を受け取った後、インデクス生成を開始する。
[分割インデクスの生成フロー]
図14に、インデクス生成モジュール305による分割インデクス202の生成フローを示す。なお、図14に示す処理は、初回実行時の動作である。
インデクス生成モジュール305は、スキャナモジュール304から転送を受けたインデクスリスト306に基づいて、分割インデクス202を生成する。インデクス生成モジュール305によるインデクスリスト306に対する処理は、タスクと呼ばれる複数の処理単位に分割され、複数の分散処理サーバ103において分散的に実行される。以下、タスクの生成と、分散処理サーバ103で実行される処理動作について説明する。
インデクス生成モジュール305は、スキャナモジュール304からインデクスリスト306を取得する(S1401)。次に、インデクス生成モジュール305は、第一の分散処理として、以下に示すS1403とS1404の処理をインデクスリスト306のエントリ数だけ行う。
まず、インデクス生成モジュール305は、インデクスリスト306を任意の数に分割する(S1402)。ここでの数は、分散処理サーバ103の台数及び処理性能に基づいて決定される。インデクスリスト306は、処理対象であるファイル・ディレクトリパス801と処理ステータス802を記述したテキストファイルである。従って、このファイルを分割する際には、分割数に応じ、単純に任意の行で区切れば、複数のインデクスリストを生成することができる。
分割後のインデクスリスト306は、それぞれが、分散処理サーバ103上における複数のタスクとして処理される。第一の分散処理における各々のタスク処理では、分割後のインデクスリストに記述されているファイル・ディレクトリパスが取得され、それぞれについてハッシュ値が計算される(S1403)。その後、インデクス生成モジュール305は、インデクスIDテーブル(図5)への問い合わせにより、計算されたハッシュ値に対応する仮想インデクスIDとインデクスIDを取得する(S1404)。この際、コンシステントハッシュ法に基づいて、計算されたハッシュ値に対応する仮想インデクスIDとインデクスIDを決定する。以上で第一のタスク処理が完了する。
第一のタスク処理が全て完了すると、第二のタスク処理が開始される。第二のタスク処理において、インデクス生成モジュール305は、インデクスIDによるグルーピングを行う。すなわち、インデクス生成モジュール305は、インデクスIDをキーとし、ファイル・ディレクトリパスと仮想インデクスIDと処理ステータスをレコードにもつインデクスリスト306に変換する(S1405)。
次に、第三の分散処理において、インデクス生成モジュール305は、以下に示すS1406〜S1409までの処理を実行する。
まず、インデクス生成モジュール305は、インデクスIDをキーとするインデクスリスト(インデクスID分だけリストが存在する)に対し、分散処理サーバ103上での複数のタスク処理を開始する。
第三の分散処理におけるタスク処理として、インデクス生成モジュール305は、インデクスIDをキーとするインデクスリストからファイル・ディレクトリパス、仮想インデクスID、処理ステータスを取得する(S1406)。
次のタスク処理として、インデクス生成モジュール305は、処理ステータスをチェックする(S1407)。ここで、処理ステータスが、「1」(=ファイル新規生成)又は「2」(=ファイル更新)の場合、各インデクス生成モジュール305は、ファイルサーバ102からファイルをダウンロードし、コンテンツデータとファイル固有のメタ情報を各ファイルから抽出する(S1408)。
この後、インデクス生成モジュール305は、インデクスIDをキーとするインデクスリストから取得した仮想インデクスIDと共に、ファイル・ディレクトリパスをユニークキーとする各フィールドのデータを登録し、分割インデクスを生成する(S1409)。なお、このとき生成される分割インデクスは、分散処理サーバ103のローカルストレージ301上に一時的に生成される。
その後、インデクス生成モジュール305は、第三のタスク処理により生成された分割インデクスと、インデクスIDをキーとするインデクスリストとを1組とし、検索サーバ101上のインデクス管理モジュール203に転送する(S1410)。最後に、インデクス生成モジュール305は、インデクス生成管理モジュール402に分割インデクス生成完了通知を出力する(S1411)。この後、インデクス生成モジュール305は、処理を終了する。
[検索サーバへの分割インデクスの配置フロー]
図15に、インデクス生成モジュール305により生成された分割インデクスを、検索サーバ101上のインデクス管理モジュール203が、検索サーバ101に配置する際に実行する処理フローを示す。
図15に示す処理フローは、検索サーバ101のインデクス管理モジュール203が、インデクス生成モジュール305から分割インデクスの転送を受けることで開始される(S1501)。
インデクス管理モジュール203は、同じ検索サーバ101内に、既に分割インデクスが存在するか否かをチェックする(S1502)。既に分割インデクス202が同じ検索サーバ101上に存在する場合(S1502で肯定結果)、インデクス管理モジュール203は、受信したインデクスリストからレコードを取得し、処理ステータスをチェックする。処理ステータスが、更新、または、削除の場合、既存の分割インデクスから該当するレコードを削除する(S1503)。処理ステータスが更新の場合に、既存の分割インデクスから該当レコードを削除する理由は、分割インデクス202上に重複するレコードが存在しないようにするためである。
次に、インデクス管理モジュール203は、インデクス生成モジュール305から転送されてきた新規の分割インデクス202を、既存の分割インデクス202にマージし(S1504)、その後、マウントする(S1505)。
一方、分割インデクス202が同じ検索サーバ101上に存在しなかった場合(S1502で否定結果)、インデクス管理モジュール203は、インデクス生成モジュール305から転送されてきた分割インデクスを、モジュール204にマウントするように要求する(S1505)。これにより、検索モジュール204に分割インデクスがマウントされ、検索の実行が可能となる。最後に、インデクス管理モジュール203は、インデクス生成管理モジュール402に対してマウントの完了を通知する(S1506)。これにより、インデクス管理モジュール203による検索サーバ101への分割インデクスの配置処理を終了する。
[検索サーバ追加時のフロー]
図16に、検索システム(図1)に対し、新たな検索サーバ101が追加された場合に実行される処理フローを示す。
この処理フローは、システム管理モジュール403に対し、管理者が、検索サーバ101の追加を入力することで開始される(S1601)。
検索サーバ101の追加の入力を受けたシステム管理モジュール403は、新規に追加された検索サーバ101に対し、新規にインデクスIDを割り当てる(S1602)。例えば図10に示す検索サーバ管理テーブル407の初期化フローの状況において、新たに1台の検索サーバ101を追加する場合、システム管理モジュール403は、インデクスID「4」、「5」を割り当てる。
次に、システム管理モジュール403は、検索サーバ管理テーブル405(図6)に、新規に生成されたインデクスID601に対応するエントリを作成し、そのエントリに配置先検索サーバ名602を設定する(S1603)。すなわち、検索サーバ管理テーブル405の初期化を実行する。
次に、システム管理モジュール403は、インデクスIDテーブル404(図5)に、新規に生成されたインデクスID502に対応付ける仮想インデクスID501のハッシュ値を格納する(S1604)。すなわち、インデクスIDテーブル404を初期化する。
図17に、検索サーバ追加時における初期化後のインデクスIDテーブル404の例を示す。なお、網掛けを付して示すレコードが新たに追加されるレコードであり、白抜きで示すレコードは既存のレコードである。
例えば新たに追加される検索サーバ101の検索サーバ名に「Search3」が付与されるものとし、その検索サーバにはインデクスID「4」、「5」が紐付けられるものとする。このとき、システム管理モジュール403は、ID「4」に紐付けられる文字列「4−0」と「4−1」と、ID「5」に紐付けられる文字列「5−0」と「5−1」のそれぞれについてハッシュ値を計算する。
図17は、文字列「4−0」と「4−1」のハッシュ値が例えば「14567890000」と「70123456789」で与えられ、文字列「5−0」と「5−1」のハッシュ値が例えば「04567890000」と「40123456789」で与えられる場合を示している。
このことは、項番3の仮想インデクスID「12344566789」、項番5の仮想インデクスID「23456788000」、項番8の仮想インデクスID「45678900000」、項番12の仮想インデクスID「73819123292」の仮想インデクスIDに紐付けられていたファイルが、検索サーバの追加により登録先の変更対象ファイルになることを意味する。
システム管理モジュール403は、このS1604においてインデクスIDテーブルを初期化する際、検索サーバの追加により影響を受ける仮想インデクスIDとインデクスIDの情報を保存し、インデクスIDをキーとして、仮想インデクスIDを対応付けた図18に示す一時的なテーブルを生成する(S1605)。図18の例では、インデクスIDに対する仮想インデクスIDは一つであるが、実際は複数存在する。このため、実際には、マルチバリュー形式のテーブルとなる。
次に、システム管理モジュール403は、検索サーバの追加により影響を受けるインデクスIDに対応する検索サーバ上のインデクス管理モジュール203に対し、図18のテーブルで関連付けられている仮想インデクスIDの情報を送信し、インデクス管理モジュール203が管理する分割インデクスの分割処理の開始を命令する(S1606)。ここで通知される仮想インデクスIDは、新たな検索サーバ(すなわち「Search3」)が追加される前の対応付けによる仮想インデクスIDである。
システム管理モジュール403から仮想インデクスIDの情報の通知を受けたインデクス管理モジュール203は、受け取った仮想インデクスIDの情報に基づいて、既存の分割インデクスを検索する(S1607)。例えばインデクスID「1」に対し、インデクス管理モジュール203は、仮想インデクスID「12344566780」を検索し、登録先の変更対象となるファイル・ディレクトリパス、コンテンツデータ、及び、ファイルメタ情報を取得する(S1608)。
さらに、インデクス管理モジュール203は、取得したファイル・ディレクトリパスからハッシュ値を計算する(S1609)。また、インデクス管理モジュール203は、検索サーバの追加に伴い変化したインデクスID、及び、仮想インデクスIDの情報を、インデクスIDテーブル404(図5)から取得する(S1610)。このように、本形態例の場合、ファイル・ディレクトリパスに対するハッシュ値の計算は、登録先の変更対象となるファイル・ディレクトリパスについてのみ実行される。
この後、インデクス管理モジュール203は、S1608で取得したファイル・ディレクトリパス、ファイルメタ情報、コンテンツデータ、及び、S1610で取得した更新後の仮想インデクスIDに基づいて、ローカルストレージ201上でインデクスID毎の分割インデクスを生成する(S1611)。すなわち、ローカルな分割インデクスを生成する。
その後、インデクス管理モジュール203は、ローカルストレージ201上で生成された分割インデクスを、インデクス生成モジュール305を経由して、新たに追加された検索サーバに転送する(S1612)。
この後、インデクス管理モジュール203は、新たに追加された検索サーバに転送した分割インデクスに対応するレコード(すなわち、既存の分割インデクスから抜き出したレコード)を既存の分割レコードから削除する(S1613)。削除後、インデクス管理モジュール203は、分割インデクスの再分割と転送の完了をインデクス生成管理モジュール402に通知する(S1614)。
インデクス生成管理モジュール402は、全ての検索サーバ上で分割作業が終了したことを確認すると、新規に追加された検索サーバに対し、複数の分割インデクスをマージするように命令する(S1615)。この命令の受信した検索サーバ101においてマージ処理が完了すると、マージされた分散インデクス202による検索が可能な状態になる(S1616)。
[検索サーバ削除時のフロー]
図19に、検索システム(図1)から検索サーバ101が削減された場合の処理フローを示す。
この処理フローは、管理者が、検索サーバ101の削減をシステム管理モジュール403に入力することで開始される(S1901)。なお、削除される検索サーバ上にある分割インデクスは、検索サーバの追加フロー(図16)の場合とは異なり、仮想インデクスIDの全てが変更されるため、全てのレコードに対して仮想インデクスIDの再計算が必要となる。
次に、システム管理モジュール403は、削減対象としての配置先検索サーバ名に対応付けられているインデクスID601を検索サーバ管理テーブル405(図6)から取得し、そのインデクスIDに紐付けられている仮想インデクスIDをインデクスIDテーブル404(図5)から取得する(S1902)。その後、システム管理モジュール403は、S1902で取得した仮想インデクスIDをインデクスIDテーブル404(図5)から削除する(S1903)。
次に、システム管理モジュール403は、削減対象である検索サーバ101上のインデクス管理モジュール203に対し、分割インデクスの再分割を指示する(S1904)。
再分割指示を受けたインデクス管理モジュール203は、分割インデクス202に登録されているファイル・ディレクトリパスを先頭から終端まで順に取得する(S1905)。
次に、インデクス管理モジュール203は、取得したファイル・ディレクトリパスからハッシュ値を計算し(S1906)、検索サーバの削除に伴い更新されるインデクスIDと仮想インデクスIDの情報を、インデクスIDテーブル404(図5)から取得する(S1907)。
その後、削除対象であるインデクス管理モジュール203は、分割インデクス202から、ファイル・ディレクトリパスのエントリのインデクスデータを抜き出し、取得したインデクスIDに紐付ける新規の分割インデクスを生成、または、その分割インデクスにインデクスデータを追加し、再配置先でのマージ用の分割インデクスを生成する(S1908)。
この分割処理が終わった時点において、削除対象である検索サーバ101のローカルストレージ201上には、インデクスID毎のマージ用の分割インデクスが複数存在している。その後、削除対象である検索サーバ101にあるインデクス管理モジュール203は、検索サーバ管理テーブル405に問い合わせを行い、インデクスIDに紐付ける検索サーバ上のインデクス管理モジュール203に対し、マージ用の分割インデクスを転送する(S1909)。
続いて、削除対象である検索サーバ101のインデクス管理モジュール203は、システム管理モジュール403に対し、インデクスID毎の分割インデクスの生成処理が完了したことを通知する(S1910)。
この通知を受信したシステム管理モジュール403は、再配置対象となる全ての検索サーバ101上のインデクス管理モジュール203に対し、インデクスのマージ処理を指示する(S1911)。
指示を受けた各インデクス管理モジュール203は、受信した分割インデクスのマージ処理を実行し、最新の分割インデクス202を生成する(S1912)。以上の処理が全て完了すると、削除対象である検索サーバ101をシステム上から削除する(S1913)。すなわち、削除対象である検索サーバ101を、ネットワーク105から物理的又は電気的に切り離す。
[形態例1の効果]
前述したように、形態例1の場合には、分割インデクス202のデータ構造を規定するインデクススキーマ900として、図9に示すデータ構造のインデクススキーマを使用する。このため、分割インデクス202を構成する各レコードのフィールドには、ファイル・ディレクトリパスと、仮想インデクスIDが含まれる。
従って、既存の検索サーバ101は、システム管理モジュール403から通知を受けた仮想インデクスIDに基づいて自身が管理する各分割インデクスを検索し、再配置対象のファイル・ディレクトリパスを特定することができる。このように、本形態例の場合には、ハッシュ値を計算する前に、再配置の影響を受けるファイル・ディレクトリパスを特定することができる。
このため、分割インデクスの再分割に関連して検索サーバ101で実行されるハッシュ値の計算処理は、分割インデクス202の一部のレコードだけに限定することができる。勿論、本実施例の場合、分割インデクス202の再分割に伴うハッシュ値の計算に必要とされる計算負荷は、分割インデクス202の全レコードについてハッシュ値を計算する場合に比して格段に小さく済む。結果的に、分割インデクスの再配置処理の効率化を実現することができる。
[形態例2]
続いて、形態例2に係る検索システムについて説明する。なお、形態例2に係る検索システムのハードウェア構成は、基本的に、形態例1と同様である。形態例2に係る検索システムと、形態例1に係る検索システムとの違いは、検索サーバ101を検索システムに追加する場合の処理動作と、検索サーバ101を検索システムから削除する(取り外す)場合の処理動作である。以下では、形態例2に特有の処理機能についてのみ説明する。
[検索サーバ追加時のフロー]
形態例1の処理動作の場合(図16)、新たに追加された検索サーバ101に管理を移行するファイル・ディレクトリパスのみに限るものの、分割インデクスの分割元となる各検索サーバ101において、ファイル・ディレクトリパスからハッシュ値を計算する必要があった。
本形態例においては、分割インデクス202の再分割に際し、検索サーバ101におけるハッシュ値の計算を不要とする仕組みを説明する。
図20に、検索システム(図1)に対し、新たな検索サーバ101が追加された場合に実行される本形態例の処理フローを示す。検索サーバ101におけるハッシュ値の計算を不要とするために、本形態例に係る検索サーバ101は、図9に示す構造のインデクススキーマ900に代え、図21に示す構造のインデクススキーマ2100を使用する。ここで、インデクススキーマ2100は、仮想インデクスID904に代え、ファイル・ディレクトリパスから計算したハッシュ値2104を格納する。この点が、図9に示すインデクススキーマ900との違いである。
図20に示す処理フローは、システム管理モジュール403に対し、管理者が、検索サーバ101の追加を入力することで開始される(S2001)。
検索サーバ101の追加の入力を受けたシステム管理モジュール403は、新規に追加された検索サーバ101に対し、新規にインデクスIDを割り当てる(S2002)。例えば図10に示す検索サーバ管理テーブル407の初期化フローの状況において、新たに1台の検索サーバ101を追加する場合、システム管理モジュール403は、インデクスID「4」、「5」を割り当てる。
次に、システム管理モジュール403は、検索サーバ管理テーブル405(図6)に、新規に生成されたインデクスID601のエントリを作成し、そのエントリに配置先検索サーバ名602を設定する(S2003)。すなわち、検索サーバ管理テーブル405の初期化を実行する。
その後、システム管理モジュール403は、インデクスIDテーブル404(図5)に、新規に生成されたインデクスID502に対応付ける仮想インデクスID501のハッシュ値を格納する(S2004)。すなわち、インデクスIDテーブル404を初期化する。この初期化処理により、インデクスIDテーブル404は、図17に示す状態になったものとする。
なお、システム管理モジュール403は、インデクスIDテーブル404の初期化に際し、検索サーバの追加により再配置の対象となるハッシュ空間と、そのハッシュ空間のハッシュ値に紐付けられるインデクスIDと仮想インデクスIDとを、再配置のターゲットとなるインデクスIDをキーとして関連付けた一時的なテーブルを生成する(S2005)。図22に、S2005で生成されるテーブル例2200を示す。
図22に示すテーブル例2200では、検索サーバ101の追加により再配置の対象となるインデクスIDを「再配置ターゲットインデクスID2201」と示し、同じく再配置の対象となるハッシュ空間を「再配置ターゲットハッシュ空間2202」と示し、そのハッシュ空間に紐付ける仮想インデクスIDを「変更後仮想インデクスID2203」と示し、同じくハッシュ空間に紐付けるインデクスIDを「変更後インデクスID2204」と示す。図22の場合、インデクスIDに対する仮想インデクスIDは一つであるが、実際は複数存在する。このため、実際には、マルチバリュー形式のテーブルとなる。
次に、システム管理モジュール403は、再配置ターゲットインデクスIDに対応する検索サーバ上のインデクス管理モジュール203に対し、再配置ターゲットハッシュ空間2202、変更後仮想インデクスID2203、変更後インデクスID2204を1組とする情報を送信し、分割開始命令を出す。(S2006)。
システム管理モジュール403から情報の通知を受けたインデクス管理モジュール203は、受け取った再配置ターゲットハッシュ空間2202の情報に基づいて、既存の分割インデクスのファイル・ディレクトリパスハッシュ値2104のフィールドを数値範囲検索する(S2007)。この際、インデクス管理モジュール203は、受け取った再配置ターゲットハッシュ空間2202に含まれるファイル・ディレクトリパスハッシュ値2104を有するレコードの情報を取得する(S2008)。
次に、インデクス管理モジュール203は、S2008で取得したレコード内のファイル・ディレクトリパス901、ファイルメタ情報902及びコンテンツデータ903と、システム管理モジュール403から取得した変更後仮想インデクスID2203とに基づいて、ローカルストレージ上でインデクスID毎の分割インデクスを生成する(S2009)。この分割処理の終了時点において、削除ターゲットである検索サーバ101のローカルストレージ201上には、インデクスID毎の分割インデクスが複数存在する。
その後、インデクス管理モジュール203は、ローカルストレージ201上で生成された分割インデクスを、インデクス生成モジュール305を経由して、新たに追加された検索サーバに転送する(S2010)。
この後、インデクス管理モジュール203は、新たに追加された検索サーバに転送した分割インデクスに対応するレコード(すなわち、既存の分割インデクスから抜き出したレコード)を既存の分割レコードから削除する(S2011)。削除後、インデクス管理モジュール203は、分割インデクスの再分割と転送の完了をインデクス生成管理モジュール402に通知する(S2012)。
インデクス生成管理モジュール402は、全ての検索サーバ上で分割作業が終了したことを確認すると、新規に追加された検索サーバに対し、複数の分割インデクスをマージするように命令する(S2013)。この命令を受信した検索サーバ101においてマージ処理が完了すると、マージされた分散インデクス202による検索が可能な状態になる(S2014)。
[検索サーバ削除時のフロー]
図23に、検索システム(図1)から検索サーバ101が削減された場合の処理フローを示す。この形態例の場合、検索サーバの削除時にも、ハッシュ値の計算は不要となる。
この処理フローは、管理者が、検索サーバ101の削減をシステム管理モジュール403に入力することで開始される(S2301)。
次に、システム管理モジュール403は、検索サーバ管理テーブル405(図6)から削減される検索サーバが、配置先検索サーバ名になっているエントリのインデクスID601を取得し、そのインデクスIDに紐付けられている仮想インデクスIDを取得する(S2302)。
その後、システム管理モジュール403は、S2302で取得した仮想インデクスIDをインデクスIDテーブル404(図5)から削除する(S2303)。図17に対応する図24に、インデクスIDテーブル404から検索サーバ「Search3」を削除した場合のインデクスIDテーブルの状態を示す。
なお、システム管理モジュール403は、インデクスIDテーブル404の初期化に際し、検索サーバの削除により再配置の対象となるハッシュ空間と、そのハッシュ空間のハッシュ値に紐付けられるインデクスIDと仮想インデクスIDとを、再配置のターゲットとなるインデクスIDをキーとして関連付けた一時的なテーブルを生成する(S2304)。図25に、S2304で生成されるテーブル例2200を示す。このテーブルの構造は、図22と同じである。
次に、システム管理モジュール403は、再配置ターゲットインデクスIDに対応する検索サーバ上のインデクス管理モジュール203に対し、再配置ターゲットハッシュ空間2202、変更後仮想インデクスID2203、変更後インデクスID2204を1組とする情報を送信し、分割開始命令を出す(S2305)。
システム管理モジュール403から情報の通知を受けたインデクス管理モジュール203は、受け取った再配置ターゲットハッシュ空間2202の情報に基づいて、既存の分割インデクスのファイル・ディレクトリパスハッシュ値2104のフィールドを数値範囲検索する(S2306)。この際、インデクス管理モジュール203は、受け取った再配置ターゲットハッシュ空間2202に含まれるファイル・ディレクトリパスハッシュ値2104を有するレコードの情報を取得する(S2307)。
次に、インデクス管理モジュール203は、S2307で取得したレコード内のファイル・ディレクトリパス901、ファイルメタ情報902及びコンテンツデータ903と、システム管理モジュール403から取得した変更後仮想インデクスID2203とに基づいて、ローカルストレージ上でインデクスID毎の分割インデクスを生成する(S2308)。この分割処理の終了時点において、削除ターゲットである検索サーバ101のローカルストレージ201上には、インデクスID毎の分割インデクスが複数存在する。
その後、削除対象である検索サーバ101にあるインデクス管理モジュール203は、検索サーバ管理テーブル405に問い合わせを行い、インデクスIDに紐付ける検索サーバ上のインデクス管理モジュール203に対し、分割インデクスを転送する(S2309)。
続いて、インデクス管理モジュール203は、システム管理モジュール403に対し、インデクスID毎の分割インデクスの生成処理が完了したことを通知する(S2310)。
この通知を受信したシステム管理モジュール403は、再配置対象となる全ての検索サーバ101上のインデクス管理モジュール203に対し、インデクスのマージ処理を指示する(S2311)。
指示を受けた、各インデクス管理モジュール203は、マージ処理を実行し、最新の分割インデクス202を生成する(S2312)。以上の処理が全て完了すると、削除対象である検索サーバ101をシステム上から削除する(S2313)。すなわち、削除対象である検索サーバ101を、ネットワーク105から物理的又は電気的に切り離す。
[形態例2の効果]
前述したように、形態例2の場合には、分割インデクス202のデータ構造を規定するインデクススキーマ2100として、図21に示すデータ構造のインデクススキーマを使用する。このため、分割インデクス202を構成する各レコードのフィールドには、ファイル・ディレクトリパスと、ファイル・ディレクトリパスのハッシュ値が含まれている。
この形態例2の場合、システム管理モジュール403は、仮想インデクスIDではなく、再配置ターゲットハッシュ空間2202の情報を、インデクス管理モジュール203に与える。そして、インデクス管理モジュール203は、受け取った再配置ターゲットハッシュ空間2202に属するファイル・ディレクトリパスハッシュ値を有するレコードを分割インデクス202から検索し、移行対象のファイル・ディレクトリパスを特定する。
このように、本形態例の場合には、分割インデクスの再分割に際し(検索サーバ101の追加時だけでなく、削除時にも)、検索サーバ101におけるハッシュ値の計算処理が不要となる。このため、分割インデクス202の全レコードについてハッシュ値を計算する場合に比して、分割インデクスの再配置処理を一段と効率化することができる。
100…検索クライアント
101…検索サーバ
102…ファイルサーバ
103…分散処理サーバ
104…管理サーバ
105…ネットワーク
201…ローカルストレージ
202…分割インデクス
203…インデクス管理モジュール
204…検索モジュール
301…ローカルストレージ
302…分散ファイルシステム
303…分散処理モジュール
304…スキャナモジュール
305…インデクス生成モジュール
306…インデクスリスト
401…ローカルストレージ
402…インデクス生成管理モジュール
403…システム管理モジュール
404…インデクスIDテーブル
405…検索サーバ管理テーブル
406…ファイル管理テーブル

Claims (8)

  1. 複数の検索サーバを有するファイル検索システムにおいて、
    コンシステントハッシュ空間上に設定される仮想インデクスIDと、検索サーバに対応付けられるインデクスIDとの対応関係を記憶するテーブルと、
    ファイル・ディレクトリパスに対し、前記コンシステントハッシュ空間上にマッピングするハッシュ値を算出する処理部と、前記テーブルを参照し、前記ファイル・ディレクトリパスに対応付ける仮想インデクスIDとインデクスIDを決定する処理部と、インデクスID毎に、ファイル・ディレクトリパスと仮想インデクスIDの情報を含む分割インデクスを生成する処理部と、生成された分割インデクスを対応する検索サーバに転送する処理部とを有する管理用サーバと
    を有するファイル検索システム。
  2. 請求項1に記載のファイル検索システムにおいて、
    検索サーバの追加時、
    前記管理用サーバが、追加に伴い対応関係に変更が生じる仮想インデクスIDとインデクスIDの情報を取得し、分割インデクスの分割命令と共に既存の検索サーバに通知し、
    分割インデクスの分割命令の通知を受けた前記既存の検索サーバが、通知を受けた仮想インデクスIDに基づいて前記分割インデクスのレコードを検索し、検索にヒットしたレコードについてのみファイル・ディレクトリパスのハッシュ値を計算し、当該ハッシュ値と前記管理用サーバから取得した変更後の仮想インデクスIDとインデクスIDの対応関係に基づいて、更新後のインデクスID用のローカルな分割インデクスを生成する
    ことを特徴とするファイル検索システム。
  3. 複数の検索サーバを有するファイル検索システムにおいて、
    コンシステントハッシュ空間上に設定される仮想インデクスIDと、検索サーバに対応付けられるインデクスIDとの対応関係を記憶するテーブルと、
    ファイル・ディレクトリパスに対し、前記コンシステントハッシュ空間上にマッピングするハッシュ値を算出する処理部と、前記テーブルを参照し、前記ファイル・ディレクトリパスに対応付ける仮想インデクスIDとインデクスIDを決定する処理部と、インデクスID毎に、ファイル・ディレクトリパスとそのハッシュ値の情報を含む分割インデクスを生成する処理部と、生成された分割インデクスを対応する検索サーバに転送する処理部とを有する管理用サーバと
    を有するファイル検索システム。
  4. 請求項3に記載のファイル検索システムにおいて、
    検索サーバの追加時、
    前記管理用サーバが、追加に伴い再配置の対象となるハッシュ空間と、変更後に当該空間に紐付けられる仮想インデクスID及びインデクスIDの情報を取得し、分割インデクスの分割命令と共に既存の検索サーバに通知し、
    分割インデクスの分割命令の通知を受けた前記既存の検索サーバが、通知を受けたハッシュ空間に基づいて前記分割インデクスのレコードを検索し、前記ハッシュ空間に属するハッシュ値を有するレコードの情報と、前記管理用サーバから通知を受けた変更後の仮想インデクスIDとに基づいて、更新後のインデクスID用のローカルな分割インデクスを生成する
    ことを特徴とするファイル検索システム。
  5. 複数の検索サーバと、コンシステントハッシュ空間上に設定される仮想インデクスIDと、検索サーバに対応付けられるインデクスIDとの対応関係を記憶するテーブルとを有するファイル検索システムを構成するコンピュータに、
    ファイル・ディレクトリパスに対し、前記コンシステントハッシュ空間上にマッピングするハッシュ値を算出する処理、
    前記テーブルを参照し、前記ファイル・ディレクトリパスに対応付ける仮想インデクスIDとインデクスIDを決定する処理、
    インデクスID毎に、ファイル・ディレクトリパスと仮想インデクスIDの情報を含む分割インデクスを生成する処理、
    生成された分割インデクスを対応する検索サーバに転送する処理
    を実行させるプログラム。
  6. 請求項5に記載のプログラムにおいて、
    検索サーバの追加時、
    管理用サーバとしてのコンピュータに、追加に伴い対応関係に変更が生じる仮想インデクスIDとインデクスIDの情報を取得し、分割インデクスの分割命令と共に既存の検索サーバに通知する処理を実行させ、
    分割インデクスの分割命令の通知を受けた既存の検索サーバとしてのコンピュータに、通知を受けた仮想インデクスIDに基づいて前記分割インデクスのレコードを検索し、検索にヒットしたレコードについてのみファイル・ディレクトリパスのハッシュ値を計算し、当該ハッシュ値と前記管理用サーバから取得した変更後の仮想インデクスIDとインデクスIDの対応関係に基づいて、更新後のインデクスID用のローカルな分割インデクスを生成する処理を実行させる
    ことを特徴とするプログラム。
  7. 複数の検索サーバと、コンシステントハッシュ空間上に設定される仮想インデクスIDと、検索サーバに対応付けられるインデクスIDとの対応関係を記憶するテーブルとを有するファイル検索システムを構成するコンピュータに、
    ファイル・ディレクトリパスに対し、前記コンシステントハッシュ空間上にマッピングするハッシュ値を算出する処理、
    前記テーブルを参照し、前記ファイル・ディレクトリパスに対応付ける仮想インデクスIDとインデクスIDを決定する処理、
    インデクスID毎に、ファイル・ディレクトリパスとそのハッシュ値の情報を含む分割インデクスを生成する処理、
    生成された分割インデクスを対応する検索サーバに転送する処理
    を実行させるプログラム。
  8. 請求項7に記載のプログラムにおいて、
    検索サーバの追加時、
    管理用サーバとしてのコンピュータに、追加に伴い再配置の対象となるハッシュ空間と、変更後に当該空間に紐付けられる仮想インデクスID及びインデクスIDの情報を取得し、分割インデクスの分割命令と共に既存の検索サーバに通知する処理を実行させ、
    分割インデクスの分割命令の通知を受けた既存の検索サーバとしてのコンピュータに、通知を受けたハッシュ空間に基づいて前記分割インデクスのレコードを検索し、前記ハッシュ空間に属するハッシュ値を有するレコードの情報と、前記管理用サーバから通知を受けた変更後の仮想インデクスIDとに基づいて、更新後のインデクスID用のローカルな分割インデクスを生成する処理を実行させる
    ことを特徴とするプログラム。
JP2012078668A 2012-03-30 2012-03-30 ファイル検索システム及びプログラム Pending JP2013210698A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012078668A JP2013210698A (ja) 2012-03-30 2012-03-30 ファイル検索システム及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012078668A JP2013210698A (ja) 2012-03-30 2012-03-30 ファイル検索システム及びプログラム

Publications (1)

Publication Number Publication Date
JP2013210698A true JP2013210698A (ja) 2013-10-10

Family

ID=49528506

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012078668A Pending JP2013210698A (ja) 2012-03-30 2012-03-30 ファイル検索システム及びプログラム

Country Status (1)

Country Link
JP (1) JP2013210698A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110457128A (zh) * 2019-07-11 2019-11-15 阿里巴巴集团控股有限公司 任务分配方法、装置和系统
CN112559521A (zh) * 2020-12-11 2021-03-26 广州海量数据库技术有限公司 话单查找方法及系统
CN113010477A (zh) * 2021-03-23 2021-06-22 中兴通讯股份有限公司 持久内存文件系统元数据的检索方法和装置、存储结构
CN113392066A (zh) * 2021-06-11 2021-09-14 上海妙一生物科技有限公司 一种通用的目录管理方法、装置、计算机设备
CN113611383A (zh) * 2021-08-20 2021-11-05 平安国际智慧城市科技股份有限公司 医疗信息获取方法、装置、电子设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080123664A1 (en) * 2006-07-07 2008-05-29 Alcatel Lucent Distributed hashing mechanism for self-organizing networks
JP2010028551A (ja) * 2008-07-22 2010-02-04 Brother Ind Ltd コンテンツ分散保存システム、ノード装置、ノード処理プログラム、及びアドレス情報変更通知方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080123664A1 (en) * 2006-07-07 2008-05-29 Alcatel Lucent Distributed hashing mechanism for self-organizing networks
JP2009543237A (ja) * 2006-07-07 2009-12-03 アルカテル−ルーセント 自己統制ネットワークのための分散ハッシュメカニズム
JP2010028551A (ja) * 2008-07-22 2010-02-04 Brother Ind Ltd コンテンツ分散保存システム、ノード装置、ノード処理プログラム、及びアドレス情報変更通知方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
CSND200900248009; 首藤 一幸: '"雲の向こうの未来 クラウドをつかむ [いくぜ1000万台!] スケールアウトの技術"' UNIX magazine 第24巻,第2号, 20090401, p.78-91, 株式会社アスキー・メディアワークス *
CSNG201100704016; 田中 英昭 外2名: '"P2P技術を利用した分散ファイルシステムの実装"' 電子情報通信学会技術研究報告 第111巻,第232号, 20111006, p.99-104, 社団法人電子情報通信学会 *
JPN6015009659; 田中 英昭 外2名: '"P2P技術を利用した分散ファイルシステムの実装"' 電子情報通信学会技術研究報告 第111巻,第232号, 20111006, p.99-104, 社団法人電子情報通信学会 *
JPN6015009663; 首藤 一幸: '"雲の向こうの未来 クラウドをつかむ [いくぜ1000万台!] スケールアウトの技術"' UNIX magazine 第24巻,第2号, 20090401, p.78-91, 株式会社アスキー・メディアワークス *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110457128A (zh) * 2019-07-11 2019-11-15 阿里巴巴集团控股有限公司 任务分配方法、装置和系统
CN110457128B (zh) * 2019-07-11 2023-12-22 创新先进技术有限公司 任务分配方法、装置和系统
CN112559521A (zh) * 2020-12-11 2021-03-26 广州海量数据库技术有限公司 话单查找方法及系统
CN113010477A (zh) * 2021-03-23 2021-06-22 中兴通讯股份有限公司 持久内存文件系统元数据的检索方法和装置、存储结构
WO2022199400A1 (zh) * 2021-03-23 2022-09-29 中兴通讯股份有限公司 持久内存文件系统元数据的检索方法和装置、存储结构
CN113010477B (zh) * 2021-03-23 2023-09-12 中兴通讯股份有限公司 持久内存文件系统元数据的检索方法和装置、存储结构
CN113392066A (zh) * 2021-06-11 2021-09-14 上海妙一生物科技有限公司 一种通用的目录管理方法、装置、计算机设备
CN113611383A (zh) * 2021-08-20 2021-11-05 平安国际智慧城市科技股份有限公司 医疗信息获取方法、装置、电子设备及存储介质
CN113611383B (zh) * 2021-08-20 2024-02-02 深圳平安智慧医健科技有限公司 医疗信息获取方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
JP5759881B2 (ja) 情報処理システム
US9251163B2 (en) File sharing system and file sharing method
CN102317938B (zh) 用于复制内容可寻址存储集群的异步分布式去重
Nicolae et al. BlobSeer: Bringing high throughput under heavy concurrency to Hadoop Map-Reduce applications
CN103020315B (zh) 一种基于主从分布式文件系统的海量小文件存储方法
CN103002027B (zh) 基于键值对系统实现树形目录结构的数据存储系统及方法
US9092290B1 (en) Performing a non-disruptive software upgrade on physical storage processors having access to virtual storage processors
US20210216210A1 (en) Optimized migration of data between file systems of a storage array
CN106030573A (zh) 半结构化数据作为第一等级数据库元素的实现
WO2012114531A1 (ja) 計算機システム及びデータ管理方法
WO2014110266A1 (en) Optimizing snapshot lookups
JP2015530629A (ja) 移行先ファイルサーバ及びファイルシステム移行方法
US11151081B1 (en) Data tiering service with cold tier indexing
JP2013210698A (ja) ファイル検索システム及びプログラム
CN108268614B (zh) 一种森林资源空间数据的分布式管理方法
CN111427847A (zh) 面向用户自定义元数据的索引与查询方法和系统
Shangguan et al. Big spatial data processing with Apache Spark
JP5657498B2 (ja) ファイル検索システム
Goswami et al. Graphmap: Scalable iterative graph processing using nosql
CN116848517A (zh) 使用基于数据指纹的数据地址的高速缓存编索引
Pineda-Morales et al. Managing hot metadata for scientific workflows on multisite clouds
Vernik et al. Stocator: Providing high performance and fault tolerance for apache spark over object storage
CN109753245A (zh) 一种多磁盘负载均衡异步读写调度方法及装置
Tang et al. Tuning object-centric data management systems for large scale scientific applications
JP5898026B2 (ja) 分散検索システムにおけるストレージ容量平準化方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140724

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150205

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150317

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20150811