(58)【調査した分野】(Int.Cl.,DB名)
検索対象ファイルについて作成済みのインデクス情報を第1の記憶手段に記憶するステップと、前記第1の記憶手段に記憶されたインデクス情報から検索対象ファイルのディレクトリURLを取得し、そのディレクトリURLを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分散サーバ群によって分割して行う分割方針を決定するステップと、決定された分割方針に従い検索対象ファイルのディレクトリを分割するステップと、走査対象ファイルの現在ディレクトリツリーのスナップショットを取得して第2の記憶手段に格納するステップと、前記現在ディレクトリツリーのスナップショットと前記分割方針を決定する前に取得して第3の記憶手段に格納しておいた検索対象ファイルのディレクトリツリーのスナップショットについて前記分割方針を決定するステップで決定した分割した単位で各ディレクトリ上の検索対象ファイルを前記分散サーバ群によって分散走査するステップと、当該分散走査結果を比較し、前記インデクス情報作成後に追加、削除、変更されたファイルの一覧を作成して出力するステップとを備え、
前記分割方針を決定するステップは、検索対象ファイルのディレクトリの最上位階層から数えたディレクトリ数が所定数未満であれば検索対象ディレクトリの走査処理を行う分割数を1とする分割方針を決定し、所定数を越えた場合には最上位階層のディレクトリから所定階層までの階層を1つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度1階層を分割単位として走査する分割方針を決定するものであることを特徴とするファイルリスト生成方法。
検索対象ファイルについて作成済みのインデクス情報を第1の記憶手段に記憶するステップと、検索対象ファイルの現在のディレクトリツリーをコピーしてバックアップディレクトリとして第2の記憶手段に格納するステップと、前記第1の記憶手段に記憶されたインデクス情報から検索対象ファイルのディレクトリURLを取得し、そのディレクトリURLを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分散サーバ群によって分割して行う分割方針を決定するステップと、決定された分割方針に従い検索対象ファイルのバックアップディレクトリを分割するステップと、前記現在のディレクトリツリーのバックアップディレクトリと前記分割方針を決定する前に取得して第3の記憶手段に格納しておいた検索対象ファイルのバックアップディレクトリツリーについて前記分割方針を決定するステップで決定した分割した単位で各ディレクトリ上の検索対象ファイルを前記分散サーバ群によって分散走査するステップと、当該分散走査結果を比較し、前記インデクス情報作成後に追加、削除、変更されたファイルの一覧を作成して出力するステップとを備え、
前記分割方針を決定するステップは、検索対象ファイルのディレクトリの最上位階層から数えたディレクトリ数が所定数未満であれば検索対象ディレクトリの走査処理を行う分割数を1とする分割方針を決定し、所定数を越えた場合には最上位階層のディレクトリから所定階層までの階層を1つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度1階層を分割単位として走査する分割方針を決定するものであることを特徴とするファイルリスト生成方法。
【発明を実施するための形態】
【0014】
以下、本発明を実施する場合の第一の実施形態について、図面に基づき詳細に説明する。
図1は、本発明に係る第一の実施形態におけるシステム構成図である。
図1において示したファイルリスト生成システムは、ファイルリスト作成サーバ1、分散処理サーバ群2およびファイルサーバ3(以下「サーバ等」という)を、LAN(Local Area Network)4等の有線又は無線の通信回線により互いに通信可能に接続したシステムである。
【0015】
図1においては、サーバ等はLAN4によって互いに通信可能に接続されているが、接続方法はLANに限定されるものではなく、例えばWAN(Wide Area Network)やインターネットによって接続されていてもよい。また、
図1においては、サーバ等が同一LANセグメント上で接続されているが、この構成は一例に過ぎず、どのような構成になっていてもよい。さらに、
図1においては、ファイルリスト作成サーバ1、分散処理サーバ群2、およびファイルサーバ3はそれぞれ1台ずつ存在しているが、それぞれ2台以上存在しても構わない。また、ファイルリスト作成サーバ1、分散処理サーバ群2、およびファイルサーバ3はそれぞれ異なる装置である必要はなく、例えば、ファイルリスト作成サーバ1、分散処理サーバ群2、およびファイルサーバ3の機能を1台の装置によって実現することも可能である。
【0016】
以上のような構成により、ファイルリスト作成サーバ1は分散処理サーバ群2を利用してファイルサーバ3上のファイルデータのうち、前回インデクスを作成した以降に追加、更新、削除されたファイルデータの一覧を作成する。
【0017】
ファイルリスト作成サーバ1はPC等の装置であり、記憶装置16と通信可能に接続されている。記憶装置16は磁気ディスク等の装置であり、ファイルリスト作成サーバ1に内蔵され又は外部接続される。記憶装置16と、ファイルリスト作成サーバ1の主記憶装置等は、ファイルリスト作成サーバ1の記憶手段として機能する。
【0018】
記憶装置16には、検索インデクス17が記憶されている。検索インデクス17には、既に検索インデクスを作成したことのある、ファイルサーバ3上の検索対象ファイルのURLを含む属性情報が1以上記憶されている。サーバ等と通信可能に接続されている検索用インデクス作成サーバ5によって検索用インデクス17は更新される。
ファイルリスト作成サーバ1はスケジューラ11、ファイル走査処理分割方針決定手段12、スナップショット作成処理実行手段13、ファイル走査実行手段14、およびファイルリスト比較手段15を備えている。
【0019】
また、ファイルリスト作成サーバ1はCPU、主記憶装置等を備えており、CPUは記憶装置16に記憶されているファイルリスト比較手段15等のプログラムを主記憶装置上にローディングし、その命令コードを実行することで各種の処理を実行する。
【0020】
スケジューラ11は追加、更新、削除されたファイルデータの一覧を定期的に作成するにあたり、記憶装置16に記憶されている一覧作成処理実行間隔を参照してファイル走査処理分割方針決定手段12を実行した後、スナップショット作成処理実行手段13を実行してファイルサーバ3の記憶装置31内にスナップショットを作成し、その後、ファイルサーバ走査実行手段14、ファイルリスト比較手段15を実行して、追加、更新、削除されたファイルデータの一覧を作成する。
【0021】
ファイル走査処理分割方針決定手段12は記憶装置16に記憶されている検索インデクス17を分析し、ファイル走査処理をどのように分割して並列分散実行させるかの方針を決定する。この動作については、ファイル走査処理分割方針決定処理(S401等)として後述する。
【0022】
スナップショット作成処理実行手段13はファイルサーバ3に対してスナップショット作成命令を発行し、ファイルサーバ3の記憶装置31内に検索インデクス更新対象ファイル群のスナップショットを作成する。
ファイル走査実行手段14はファイル走査処理分割方針決定手段12によって決定されたファイルデータ走査処理の分割方針に基づいて、ファイルサーバ3上の前回インデクス更新時に取得した検索対象ファイル群のスナップショットディレクトリ、および今回のファイル走査で取得した検索対象ファイル群のスナップショットディレクトリ内にあるファイルデータを取得し、それぞれのスナップショットディレクトリにあるファイルデータの一覧を作成する。
【0023】
ファイルリスト比較手段15はファイル走査実行手段14によって作成された前回インデクス更新時に取得した検索対象ファイル群のスナップショットディレクトリにあるファイルデータの一覧と、今回取得した検索対象ファイル群のスナップショットディレクトリ内にあるファイルの一覧を比較し、追加、更新、削除されたファイルデータの一覧を作成する。
この動作については、ファイルサーバ内データ走査処理(S501等)として後述する。
【0024】
図2は検索インデクス17の構成要素であるファイルレコード170のデータ構成図である。
検索インデクス17は、1以上のインデクス済みファイルレコード170から構成される。インデクス済みファイルレコード170には、少なくともファイルのURL171を含む、検索対象ファイルの属性情報(ファイル名、最終アクセス時刻、最終更新時刻、インデクス作成時刻等が記憶されている。
ファイルURL171には、具体的にはファイルサーバ上のファイルを一意に識別するためのパスが設定される。例えばファイルサーバの識別名が”server1”であり、共有名がshare1である共有ディレクトリの直下にあるetcという名前のディレクトリにあるfile2.xmlを示すURLはhttp://server1/share1/etc/file2.xmlとなる。
【0025】
図3はファイルサーバ内のディレクトリ構成を、具体例を用いて示した概念図である。
この概念図に示すファイルサーバ3のディレクトリ構成においては、あるファイルサーバ3の識別名が“server1”である。“server1”では2つのディレクトリが共有されており、それぞれ”share1”、”share2”という共有名により一意に識別可能である。“server1”の”share1”、”share2”には、図示したようなディレクトリおよびファイルが存在する。例えば、“server1”の“share1”には、“etc”、“doc”の2つのディレクトリが存在し、“etc”ディレクトリには“file1.doc”、“file2.xml”の2つのファイルが、“doc”ディレクトリには“file3.doc”の1つのファイルが存在する。同様に、“server1”の“share2”には、1つのディレクトリ“pjt”が存在し、“pjt”ディレクトリには“pjt1”、“pjt2”、“pjt3”の3つのディレクトリが存在し、そのうち“pjt1”ディレクトリには“file4.txt”、“file5.doc”の2つのファイルが存在する。
【0026】
また、“share1”には、ファイルサーバ3の持つスナップショット作成インタフェースをファイルリスト作成サーバ1が持つスナップショット作成処理実行手段13が呼び出すことによって作成されたスナップショットディレクトリが2つあり“~snapshot”というディレクトリの配下に存在している。
1つは“.IDX01”という名称で作成されており、もう1つは“.IDX02”という名称で作成されている。それぞれのスナップショットディレクトリの配下には、スナップショットを作成した時点の“share1”配下のディレクトリおよびファイル群が存在する。なお、追加、更新、削除されたファイルデータの一覧を作成することを主な目的として作成したスナップショットディレクトリの配下のファイルについては、原本ファイル群が上位ディレクトリに存在することもあり、検索インデクスを作成しなくともよい。以下の説明では、“~snapshot”配下については検索インデクスを作成しなかったものとして説明する。
なお、スナップショットにはファイルサイズの情報が付随しているので、これによりファイルが変更されているかどうかを検出することができる。
【0027】
図4はファイル走査処理分割方針決定手段12の動作を示すフローチャートである。
ファイル走査処理分割方針決定手段12は、走査対象のファイルツリー構造を複数に分割して走査処理を並列に行うことで高速化するという本発明の目的に対し、分割された範囲があまりに小さかった場合には並列処理を行うことによるオーバーヘッドが並列処理による高速化のメリットを上回ってしまうことを避けるために、既にインデクス済みのファイルからディレクトリ構造を分析することにより、最初に行う走査処理の範囲が適切な大きさになるように判断する処理である。
このような判断処理は、走査対象のファイルツリー構造が、走査処理開始ディレクトリに近い上位階層ほどディレクトリ数が少なく、下位階層ほどディレクトリ数が多い三角形構造の場合に適している。三角形構造の中でも特に、階層間のディレクトリ数の増加の割合が一定ではなく途中の階層で増加の割合が急激に大きくなるような場合、最上位階層から増加割合が急激に大きくなる直前の階層までを最初の初回走査範囲に設定する。
【0028】
図15は途中の階層で増加の割合が急激に大きくなるようなファイルツリーの概念図である。図中の丸1506は1つのディレクトリを表す。なお、各ディレクトリの下にはファイルがある。また、下位階層のディレクトリは上位階層のいずれかのディレクトリに属している。
この概念図に示すファイルサーバ3のファイルツリーの構造においては、第一階層1501に1ディレクトリが属し、第二階層1502には3ディレクトリが属し、第三階層1503には6ディレクトリが属し、第四階層1504には12ディレクトリが属し、第五階層1505には10000ディレクトリが属している。このようなファイルツリー構造を持つファイルサーバとしては企業組織のヒエラルキーに即して構築された企業内ファイルサーバが考えられる。例えば第一階層1501を”本部”とし、第二階層1502を”部”、第三階層1503を”課”、第四階層1504を”各従業員”用のディレクトリとする場合、このようなディレクトリ数の比率を持つファイルツリー構造になる。
各階層間のディレクトリ数の増加の割合は階層間のディレクトリ数の2階差分値によって近似的に算出できる。
【0029】
2階差分値とは
図16の説明図に示すように、各階層のディレクトリ数について上位階層と直下の下位階層のディレクトリ数の差を1階差分値としたとき、さらに下位階層のディレクトリ数と1階差分値との差を2階差分値とするものである。微分演算を近似したものに相当する。
【0030】
図16の説明図においては、第4階層と第5階層のディレクトリ数の2階差分値1603が急変しているために、第5階層でディレクトリ数が急変していることを近似的に検出することができる。
図15の例においては、第一階層1501、第二階層1502、第三階層1503間の2階差分値は1となり、第二階層1502、第三階層1503、第四階層1504間の2階差分値は3となり、第三階層1503、第四階層1504、第五階層1505間の2階差分値は9982となる。これらの2階差分値の比較から第四階層1504と第五階層1505の間で増加の割合が急激に大きくなっていることが判断できる。ファイル走査処理分割方針決定手段12はこの手法によって、最上位階層1501から第4階層1504までを1つの分割深度とする初回走査範囲として設定する。
【0031】
初回走査範囲に設定した第4階層の以下の下位階層については、ディレクトリ数が多いため、その下位のディレクトリ階層を1深度単位として1階層単位で走査し、当該ディレクトリ上のファイルリストを作成する。
なお、ディレクトリ数が多い第5階層以下の階層においては、当該階層に属するディレクトリの走査を複数の分散処理サーバで分担して走査する。この場合、分担の仕方については任意である。
また、最下位階層までのディレクトリ数の集計結果が非常に少なく所定数未満であった場合には、分割して走査しても高速化の目的に反するので、分割数を1として走査する。
【0032】
本実施形態では、検索対象ファイルについて現在のディレクトリ構造を反映したファイルサーバのディレクトリのスナップショットを記憶装置内に保持しておくことを前提とする。これは
図4の処理でディレクトリの分割方針を決定した後、
図5の処理を起動する前に、スナップショット取得命令を発行することにより実現されるものである。
【0033】
そこでこのことを前提に、本実施形態では、まず、検索対象ファイルについて作成済みの検索インデクス情報により、インデクス作成直後の検索対象ファイルのディレクトリ構造を反映したディレクトリツリーを解明する。そして、その後、検索対象ファイルのリストから各をディレクトリのディレクトリ数を集計し、その集計結果からファイル走査を分散処理サーバ群で分散処理するためのディレクトリの分割方針を決定し、その決定した分割方針に従ってディレクトリを分割し、全てのディレクトリを走査(初回走査、次回走査、次々回走査・・・)しながらスナップショット取得命令をスナップショット作成処理実行手段13宛に発行することにより、ファイルサーバ3の記憶装置31内に、追加、削除されたファイルについての現在のファイルディレクトリ構造を反映したディレクトリツリーのスナップショットを取得する。そこで、ファイル走査の分割方針決定前に取得しておいたディレクトリツリーのスナップショットと、追加、削除されたファイルを反映したディレクトリーのスナップショットとを比較する。これにより、ディレクトリツリーの新規追加、または削除の状態により、追加されたファイル、削除されたファイルが判明する。また、ディレクトリは追加されていないが、内容が更新されたファイルがあればスナップショットに存在するファイルサイズ同士を比較することにより、更新されたファイルが判明する。
【0034】
したがって、本実施形態においては、スナップショット同士の比較によりファイルの追加、削除、変更を検出するので、従来のように検索対象ファイルのハッシュ値を記憶しておく必要がなくなり、大規模容量の記憶手段を必要としない。
図4のS401に至るまでの処理は、前述のように、スケジューラ11が、追加、更新、削除されたファイルデータの一覧を定期的に作成するにあたり、記憶装置16に記憶されている一覧作成処理実行間隔を参照して、処理を開始させる。
【0035】
まず、走査対象となるファイルサーバ3の共有ディレクトリに関わる全てのファイルのURL171レコードを記憶装置16に格納された検索インデクス17から取得する(S401)。
次に取得した各ファイルURL171を文字”/”でファイルパス上の各階層のディレクトリ名に分割する(S402)。例えば、前述の例でいうと、”http://server1/share1/etc/file2.xml”は、”http:”、””(空字列)、”server1”、”share1”、”etc”、“file2.xml”に分割される。末尾の要素はファイル名でありディレクトリ構造解析には用いないため破棄する。前述の例では“file2.xml”は用いずに破棄する。
【0036】
次に、分割したディレクトリ名がそれぞれ、ファイルパス上の何階層目に所属しているか階層数を算出する(S403)。例えば前述の例で言うと、”http://server1/share1/etc/file2.xml”の”share1”は第一階層となり、“etc”は第二階層となる。
次に、階層ごとにディレクトリ数を集計する。例えば
図3に示したファイルツリーの場合、共有ディレクトリ”share1”に係る第一階層は”share1”一つであると算出される。
同様に第二階層は”etc”と”doc”の二つであると算出される。ここで“~snapshot”配下のディレクトリは検索インデクスを作成していないため“~snapshot”は集計対象外となる。
【0037】
S402とS403は分散処理サーバ群2において分散処理実行手段21を利用して並列に分散処理する。例えば、ディレクトリURL171を5000行ずつ各分散処理サーバに分配し、各分散処理サーバは割り当てられたディレクトリURL171一つずつに対して、S402とS403の処理を行う。
次に、階層ごとにユニークなディレクトリ名がいくつあるかを数えることにより、階層ごとのディレクトリ数を集計する(S404)。S404は分散処理サーバ群2において分散処理実行手段21を利用して並列に分散処理する。S403で算出した階層数ごとに、ディレクトリ名を各分散処理サーバに分配し、各分散処理サーバは割り当てられた階層についてS404のユニークなディレクトリ数を集計する処理を行う。
【0038】
次に、集計が完了した階層のうち、第一階層について処理を進める(S405)。
次に、第一階層の推定ファイル数を算出して、推定総ファイル数に加算する(S406)。なお、推定ファイル数は、S404で算出した第一階層のディレクトリ数に一定の数をかけることで算出する。一定の数とは例えば100といった値である。この値はファイルリスト作成サーバ1上の設定ファイルなどに記憶している値を参照する。この値は、1ディレクトリが保持するファイルの平均の数に近い値を推定して設定することが望ましい。
【0039】
次に推定総ファイル数が最高推定総ファイル数以上かどうかを決定する(S407)。
なお、最高推定総ファイル数はファイルリスト作成サーバ1上の設定ファイルなどに記憶している値を参照する。この値は、例えば2000000といった値であり、一台のファイルリスト作成サーバ1が1度のファイル走査によって少なくとも数時間以内に走査完了できる数字を推定して設定することが望ましい。推定総ファイル数が最高推定総ファイル数以上だった場合は、最初の階層から今階層までをまとめて走査する対象として判断する(S412)。
【0040】
すなわちこの場合は、第一階層のみを走査対象として判断する。最高推定総ファイル数は、まとめて走査する対象の範囲が際限なく拡大することを防ぐ目的で設定している。
推定総ファイル数が最高推定総ファイル数より少なかった場合は、次に、前々階層、前階層、今階層のディレクトリ数の2階差分値を計算する(S408)。第一階層の場合は、前々階層、前階層が無いため、第一階層のディレクトリ数そのものを2階差分値とする。
【0041】
次に、2階差分値が階層数2階差分閾値以上かどうかを決定する(S409)。なお、階層数2階差分閾値はファイルリスト作成サーバ1上の設定ファイルなどに記憶している値を参照する。この値は階層間のディレクトリ数の増加の割合がどの程度急激であるかを近似的に示す値であり、例えば5000といった値を設定する。
2階差分値が2階差分閾値以上である場合は、次に推定総ファイル数が最低推定総ファイル数以上であるかどうかを決定する(S410)。
【0042】
なお、最低推定総ファイル数はファイルリスト作成サーバ1上の設定ファイルなどに記憶している値を参照する。この値は、例えば1000000と言った値であり、一台のファイルリスト作成サーバ1が1度のファイル走査によって少なくとも数分以上走査にかけるファイル数を推定して、その数を設定することが望ましい。
【0043】
推定総ファイル数が最低推定総ファイル数以上である場合は、最初の階層から今階層までをまとめて走査する対象として判断する(S412)。
S410の判断で推定総ファイル数が最低推定総ファイル数より少なかった場合は、次の階層に進む(S411)。
図4の処理はあまりに小さな範囲を走査範囲として設定しないようにするための処理であるため、一定数のファイルは走査範囲に含まれるようにS410の判断処理を加えている。
S409の判断で2階差分値が2階差分閾値より小さかった場合は、次の階層に進む(S411)。
S411で次の階層に進んだ後は、S406の処理に戻る。S407かS409とS410のどちらかの判断によって走査範囲が決まるまでS406からS411の処理を繰り返し実行する。
これらの処理により、ファイル走査実行手段14が最初に行う走査処理の範囲として、適切な範囲が決定される。
【0044】
図5はファイル走査実行手段14とファイルリスト比較手段15によって追加、更新、削除されたファイルデータの一覧を作成する処理の動作を示すフローチャートである。
図4のフローチャートに示した処理の終了後、スケジューラ11はスナップショット作成処理実行手段13を用いてファイルサーバ3の記憶装置31内に検索対象ファイル群のスナップショットを作成し、その後に
図5の処理を起動させる。このスナップショットが前述の前提となるスナップショットである。
図4のフローチャートで示された分割方針決定手段によって決定された範囲を走査範囲に設定する(S501)。
次に、今回取得した検索対象ファイル群のスナップショットディレクトリにおける走査範囲について走査し、ファイルとディレクトリのURLを列挙する(S502)。ファイルサーバ内の一部範囲を走査してファイルとディレクトリを列挙することは周知の技術であるため、ファイルサーバ走査実行手段13がどのように走査を行うかについてはここでは詳細には記載しないが、例えばファイルリスト作成サーバ1がファイルサーバ3の記憶装置31の検索対象ファイルのスナップショット32を、ネットワークファイルシステムを通じてアクセス可能な状態にし、ファイルリスト作成サーバ1のローカルファイル用のファイルツリー探索プログラムを使用して各ファイルデータのファイルシステム上のファイルパスの一覧を出力するなどさせればよい。ファイルシステム上のファイルパスが求まれば、ファイルパスにファイルサーバ3の識別名などをファイルパスに付け加えることでURLを作成することができる。
【0045】
次に、
図5の処理を開始する直前または前回インデクス更新時に取得しておいた検索対象ファイルのスナップショット走査範囲について走査し、ファイルとディレクトリのURLを列挙する(S503)。
次に、ファイルリストを作成し、次回走査範囲を設定する(S504)。この次回走査範囲は、S502で走査された範囲の最下層のディレクトリが設定され、そのディレクトリの直下1階層分を走査範囲として設定する。すなわちS501で設定された初回の走査より後の走査では1階層ずつファイルツリーを走査する。この処理の詳細はファイルリスト作成と走査範囲設定処理(S601等)として後述する。
【0046】
次に、次回走査範囲が空かどうかを判断する(S505)。
もし次回走査範囲が空であれば、ファイルツリーを全て探索し終えたので、処理を終了する。
次回走査範囲が空でなければ、S502に戻って次の走査範囲について走査し、ファイルとディレクトリのURLを列挙する。
【0047】
図6はファイルリスト作成と走査範囲設定処理の動作を示すフローチャートである。これは
図5のS504の処理の詳細なフローである。
最初に、S502とS503で列挙されたファイルとディレクトリのURLを合わせて反転文字列順にソートする(S601)。ここで反転文字列とは、文字列の表記順序を前後で反転(入れ替えた)させたものを言う。例えば「あいうえお」という文字列に対する反転文字列は「おえういあ」である。
【0048】
S601で両スナップショットディレクトリから列挙されたファイルとディレクトリのURLを反転文字列順にソートした理由は、分散処理サーバ群2に追加、変更、削除されたファイルデータの一覧の作成を分散処理させるために、両スナップショットディレクトリに同一ファイルまたは同一ディレクトリが存在する場合、反転文字列順でソートすることによりファイルリスト内で両スナップショットディレクトリの同一ファイルまたは同一ディレクトリのURLを隣接させるためである。
【0049】
図17は
図3で示したスナップショットディレクトリ32とスナップショットディレクトリ33の配下にあるファイルのURLを例にして、反転文字列順ソートの例を示したものである。
ファイルリスト1701では通常の文字列順に両スナップショットディレクトリ内のファイルURLをソートした場合を示している。ファイルリスト1702では反転文字列順にファイルURLをソートした場合を示している。ファイルリスト1703は見易さのためにファイルリスト1702を、並び順をそのままに文字列を再反転させたものである。
【0050】
反転文字列順にソートすることにより1704で示すように、同一ファイルの両スナップショットのURLが隣接する。これは、同一ファイルのURLでは、スナップショットディレクトリ名の部分で初めて差異が生じるためである。
この特徴を利用することで、1705で示すような隣接する2行の比較によって前回更新インデクス時に取得したスナップショットディレクトリと、今回取得したスナップショットディレクトリにどのような差異があるかを判断することができる。
このようにURLリスト全体を意識せずに、隣接する2行のみを見れば追加、変更、削除されたファイルデータの一覧が作成できる状態にすることにより、追加、変更、削除されたファイルデータの一覧の作成処理を分散処理サーバ群2に分散させることが可能になる。
【0051】
この反転文字列順にソートされたURLリストから追加、変更、削除されたファイルデータの一覧を作成する処理について、
図6のS602以降で説明する。
S602でURLリストの先頭2行をとりだす。
次に、先頭2行のURL同士を文字列として比較する(S603)。
次に、S603の比較の結果、URLのスナップショットディレクトリ以下が文字列として一致しているかどうかを判断する(S604)。
【0052】
もし一致していた場合は、前回更新インデクス時に取得したスナップショットディレクトリ配下にあるファイルまたはディレクトリと、今回取得したスナップショットディレクトリ配下のファイルまたはディレクトリのURLが一致しているということなので、このファイルまたはディレクトリは、新規にファイルサーバ3上に追加されたファイルまたはディレクトリや、前回インデクスされたファイルまたはディレクトリが削除されたものではなく、変更が無かった、または更新があったファイルまたはディレクトリだと判断できる。このファイルまたはディレクトリは更新の可能性があるファイルまたはディレクトリであるとして、追加、更新、削除されたファイルデータの一覧に追加する処理(S605)を行う。この処理の詳細は更新ファイル追加処理(S901等)として後述する。
【0053】
次に、URLリストに次の行があるかどうかを判断する(
図7のS606)。
もしURLリストに次の行がある場合は、次に、URLリストに更に次の行があるかを判断する(S607)。
もしURLリストに更に次の行がある場合、すなわちURLリストに次の2行がある場合は、次の2行を取り出す(S608)。
次に、
図6のS603に戻り、次のURL同士を比較する。URLリストの全てのURLについて処理を終えるまで、これらの処理を繰り返し実行する。
【0054】
もしS606の判断で、URLリストに次の行が無かった場合は、URLリストの全てのURLについて処理を終えたとして処理を終了する。
もしS607の判断でURLリストに更に次の行が無かった場合、すなわち、URLリストに1行しか残っていなかった場合は、その最終行について追加、更新、削除ファイル一覧に追加する処理を行う(S609)。この処理の詳細はURLリストの最終行処理(S701等)として後述する。
【0055】
もしS604の判断で、URLのスナップショットディレクトリ以下が文字列として一致していなかった場合は、ファイルサーバ3上にファイルまたはディレクトリが追加された、または、前回インデクスされたファイルまたはディレクトリが削除されたと判断できるので、ファイルが新規に追加されたのか、あるいはファイルが削除されたのかを決定し、追加、更新、削除ファイル一覧に追加する処理を行う(S610)。この処理の詳細は追加削除ファイル追加処理(S801等)として後述する。
次にURLリストに次の行があるかどうかを判断する(S611)。
もしURLリストに次の行がある場合は、今取り出している1行目を判断済みの行として破棄し、今取り出している2行目を1行目にシフトし、次の行を取り出して2行目とする(S612)。
【0056】
もしURLリストに次の行が無い場合は、今取り出している2行目を最終行としてURLリストの最終行処理(S609)をおこなう。
【0057】
このような方法でURLリストのURLを先頭から最後尾まで比較していくことで、該当範囲について追加、更新、削除されたファイルを全て追加、更新、削除されたファイルデータの一覧に追加することができる。
これらの処理により、今回の走査範囲についての追加、更新、削除されたファイルデータの一覧が作成され、次回の走査範囲が決定される。
【0058】
図8、
図9はURLリストの最終行処理の動作を示すフローチャートである。これは
図6のS609の処理の詳細なフローである。
最初に最終行のURLが今回取得したスナップショットディレクトリのものかどうかを判断する(S801)。
もし最終行のURLが今回取得したスナップショットディレクトリのものだった場合は次にURLがディレクトリのものかどうかを判断する(S802)。
もしURLがディレクトリのものだった場合は、走査範囲の最下層のディレクトリかどうかを判断する(S803)。例えば、
図15のファイルツリーで第一階層1501から第五階層1505までを走査範囲に設定した場合は、第五階層1505に属するディレクトリのURLが最下層のディレクトリと判断される。
【0059】
もしURLが示すディレクトリが最下層のディレクトリだった場合は、そのディレクトリは次回走査範囲における起点ディレクトリの一つとして含まれるため、次回走査範囲に追加する(S804)。この次回走査範囲はファイルリスト作成サーバ1の主記憶装置上に保持してもよいし、次回走査範囲に追加されるディレクトリ数が多い場合は記憶装置15に一時的に記憶して次回処理の際にロードするようにしてもよい。
【0060】
もしS803の判断でURLが走査範囲の最下層のディレクトリではなかった場合は、そのディレクトリは次回走査範囲に追加する必要はないので、そのまま
図8の処理を終了する。
もしS802の処理でURLがディレクトリではなく、ファイルのものだった場合は、そのファイルは前回インデクス更新時には存在していなかったが、今回インデクス時には存在しているファイル、すなわちファイルサーバ3に追加されたファイルと判断できるため、追加ファイルとして追加、更新、削除ファイル一覧に追加する(S805)。
【0061】
もしS801の処理で、最終行のURLが今回取得したスナップショットディレクトリのものではなく、前回インデクス更新時に取得したスナップショットディレクトリのものだった場合は、次にURLがディレクトリのものかどうかを判断する(S806)。
【0062】
もしURLがディレクトリのものだった場合、そのディレクトリは前回インデクス更新時には存在していたが、今回インデクス時には存在していなかったディレクトリ、すなわちファイルサーバ3から削除されたディレクトリと判断できる。この場合、検索インデクスにインデクスされている、そのディレクトリ以下のファイルを全て削除することが必要である。そのため、まず検索インデクスからディレクトリ以下のファイルの一覧を取得する(S807)。
【0063】
次にS807で得られた一覧のファイル全てを削除ファイルとして追加、更新、削除ファイル一覧に追加する(S808)。
もしS806の処理でURLがディレクトリではなく、ファイルのものだった場合は、そのファイルは前回インデクス更新時には存在していたが、今回インデクス時には存在していなかったファイル、すなわちファイルサーバ3から削除されたファイルと判断できるため、削除ファイルとして追加、更新、削除ファイル一覧に追加する(S809)。
これらの処理により、URLリストの最終行のURLが、追加、更新、削除ファイル一覧または次回走査範囲に追加される。
【0064】
図10は追加削除ファイルを追加、更新、削除ファイル一覧または次回走査範囲に追加する処理の動作を示すフローチャートである。
最初に取り出した2つのURLがディレクトリのものかファイルのものかを判断し、1行目のURLがファイル、2行目のURLがファイルの組み合わせか、1行目のURLがファイル、2行目のURLがディレクトリの組み合わせか、1行目のURLがディレクトリ、2行目のURLがファイルの組み合わせか、1行目のURLがディレクトリ、2行目のURLがディレクトリの組み合わせか、のいずれであるかを判断する(S1001)。この処理の詳細は、ディレクトリまたはファイルに係るURL組み合わせ決定処理(S1001等)として後述する。
【0065】
次に取り出した2つのURLについて、1行目と2行目のURLがそれぞれ前回インデクス更新時に取得したスナップショットディレクトリのものか、今回取得したスナップショットディレクトリのものかを判断し、組み合わせを求める(S1002)。この組み合わせの詳細は、前回取得または今回取得スナップショットディレクトリに係るURL組み合わせ決定表(1201等)として後述する。
【0066】
次にS1001、S1002の判断結果から、取り出したURLが示すディレクトリまたはファイルについて追加、更新、削除ファイル一覧または次回走査範囲に追加する(S1003)。この判断の詳細はURLが示すディレクトリまたはファイルの追加、更新、削除ファイル一覧または次回走査範囲への追加処理判断表(1301等)として後述する。
【0067】
図11は取り出した2つのURLそれぞれについて、ディレクトリまたはファイルURLかを判断し、組み合わせを決定する処理の動作を示すフローチャートである。
最初に1行目のURLがディレクトリのものかどうかを判断する(S1101)。
もしS1101の判断で、1行目のURLがディレクトリのものではなく、ファイルだった場合は、次に2行目のURLがディレクトリのものかどうかを判断する(S1102)。
もしS1102の判断で、2行目のURLがディレクトリのものではなく、ファイルだった場合は、この2行のURLはファイル、ファイルの組み合わせと判断される。
図10のS1003の決定処理の説明の便宜上、この組み合わせをA(1104)と名づける。
もしS1102の判断で、2行目のURLがディレクトリのものだった場合は、この2行のURLはファイル、ディレクトリの組み合わせと判断される。この組み合わせも同様に便宜上B(1105)と名づける。
【0068】
もしS1101の判断で、1行目のURLがディレクトリのものだった場合は、次に2行目のURLがディレクトリのものかどうかを判断する(S1103)。
もしS1103の判断で、2行目のURLがディレクトリのものではなく、ファイルだった場合は、この2行のURLはディレクトリ、ファイルの組み合わせと判断される。この組み合わせも同様に便宜上C(1106)と名づける。
【0069】
もしS1103の判断で、2行目のURLがディレクトリのものだった場合は、この2行のURLはディレクトリ、ディレクトリの組み合わせと判断される。この組み合わせも同様に便宜上D(1107)と名づける。
【0070】
図10のS1003において、取り出した2つのURLそれぞれについて、前回インデクス更新時に取得したスナップショットディレクトリ配下のものか、今回取得したスナップショットディレクトリ配下のものかを判断する処理があった。この判断自体は周知の技術を用いることで容易に実現可能であるため詳細はここでは記述しないが、例えば文字列中に前回インデクス更新時に取得したスナップショットディレクトリを示す文字列が含まれているか否かを決定するなどの手法が考えられる。
【0071】
図12は2つのURLそれぞれを判断した結果を表1201として示したものである。
ここでURLの前半部分の「http://server1/share1/」は見易さのため省略してある。また、<A>や<B>はスナップショットディレクトリ以下の適当なファイルパスを示す記号として用いている。すなわち表で「.IDX01/<A>」と表記しているものは例えば「http://server1/share1/.IDX01/etc/file1.doc」というファイルURLを示している。
表1201において、1207のような「(※1)」が記述されている組み合わせは同一URLが2行並んでいる場合を示しており、今まで述べてきた方法でURLリストを作成した場合、決して現れない。
【0072】
同様に、1208のような「(※2)」が記述されている組み合わせは、
図6のS601で反転文字列ソート処理を行っているため、これも現れない。
出現しうるURLの組み合わせは表の1202から1207に示す6種類である。これらの組み合わせに説明の便宜上1から6という名をつける。
【0073】
組み合わせ1から6のうち、5(1206)と6(1207)については取り出した2行が同一URLの場合であり、
図6のS604の判断処理によってS605に進む場合である。よって、S610の処理について述べている
図12、および次の
図13では無視できるケースである。
【0074】
図10のS1003において、S1001とS1002の判断結果から取り出したURLを追加、更新、削除ファイル一覧または次回走査範囲に追加する処理があった。S1001の判断結果AからDとS1002の判断結果のうち取り扱うべきケース1から4の組み合わせによって、取り出したURLをどのように扱うべきかを表1301として
図13に示す。
例えばS1001の判断結果がA(1104)であり、S1002の判断結果が1(1202)だった場合は、取り出したURLの1行目のURLが示すファイルを削除ファイルとして追加、更新、削除ファイル一覧に追加する(1302)。
【0075】
なお、1003では全て取り出したURLの1行目のみを追加、更新、削除ファイル一覧または次回走査範囲に追加する。表1301で1303、1304として示したS1002の判断結果が2だった場合、および4だった場合は、もし次の行があった場合、その2行の判断結果はS1002の判断結果が3だった場合もしくは4だった場合にしかなりえない。更に、これらの処理は
図8に示した次の行が最終行だった場合のフローチャートで行われる処理と同一の結果になる。よって1303、1304の場合については、この時点で2行目のURLが示すディレクトリもしくはファイルもどのように処理すればよいか決定可能である。この実施形態では1行目のURLについてのみ処理し、2行目のURLについては
図6の繰り返し処理の次の回で処理するものとして説明を続ける。
【0076】
図14は更新ファイル追加処理の動作を示すフローチャートである。これは
図6のS605の処理の詳細なフローである。
最初に、URLがディレクトリのものであるかどうか判断する(S1401)。スナップショットディレクトリ以下のURLは同一であるため、判断に使用するURLは1行目でもよいし、2行目でもよい。
【0077】
もしURLがディレクトリのものである場合は、次に走査範囲の最下層のディレクトリであるかどうかを判断する(S1402)。走査範囲については今回取得したスナップショットディレクトリに係るURLを用いて判断する。
もしURLが示すディレクトリが走査範囲の最下層のディレクトリだった場合は、そのディレクトリは次回走査範囲における起点ディレクトリの一つとして含まれるため、次回走査範囲に追加する(S1403)。
【0078】
もしS1402の判断で走査範囲の最下層のディレクトリではなかった場合は、現走査範囲に下位のディレクトリが含まれているため、そのディレクトリは次回走査範囲に含める必要は無い。また、ディレクトリについての検索インデクスは作成する必要がないため、追加、更新、削除ファイル一覧に追加する処理も必要ない。よって処理を終了する。
もしS1401の判断で、URLがディレクトリのものではなくファイルのものだった場合は、取り出した2行のURLが表すファイルについて、ファイルの更新時刻やサイズなどのメタデータからファイル情報ハッシュ値を算出し、2つのハッシュ値を比較する(S1404)。
【0079】
次に、比較したハッシュ値に差があるかどうかを判断する(S1405)。
S1405の判断でハッシュ値に差がある場合は、そのファイルが更新されていることを示すので、次にそのURLを更新ファイルとして追加、更新、削除ファイル一覧にURLを追加する(S1406)。
S1405の判断でハッシュ値に差が無い場合は、そのファイルが更新されていないことを示すので、そのファイルについては追加、更新、削除ファイル一覧に追加する必要は無い。そのため、これで処理を終了する。
【0080】
これらの処理により、URLがファイルであり、かつ更新されていた場合は、更新ファイルであるとして追加、更新、削除されたファイルデータの一覧に追加され、また、走査範囲の最下層のディレクトリの場合は次回走査範囲に追加される。
【0081】
図18は、本発明の他の実施形態を示すシステム構成図である。この実施形態は、通常のバックアップ目的で作成したスナップショットを流用して追加、更新、削除されたファイルデータの一覧を生成するものである。
すなわち、スナップショットは、ストレージ管理者が“簡単”に(ボタン1クリックで)「すばやく」「少ない容量で」対象とするファイルの「バックアップを取得する」機能である。ストレージ管理者が手動のコピー&ペーストで取得したバックアップディレクトリと、スナップショットディレクトリは、ほぼ同じのものである。
本実施形態では、ファイルサーバ3の記憶装置1831に、2つのバックアップディレクトリを格納し、これらのバックアップディレクトリに格納した今回インデクス対象とする検索対象ファイル群のバックアップディレクトリ1832と、前記インデクス更新時に対象とした検索対象ファイル群のバックアップディレクトリ1833とを、
図1の今回取得した検索対象ファイル群のスナップショット32と前回インデクス更新時に取得した検索対象ファイル群のスナップショットとの代わりに使用し、前回インデクス更新時(作成時)より新たに追加、更新、削除されたファイルデータの一覧を生成するものである。
ファイルリスト作成サーバ1は、ファイル走査処理分割方針決定手段12、スナップショット作成処理手段12、ファイル走査実行手段14、ファイルリスト比較手段15、分散処理サーバ群2を
図1の実施形態と同様に用い、前回インデクス更新時(作成時)より新たに追加、更新、削除されたファイルデータの一覧を生成する。
したがって、詳細な説明は省略する。
なお、本実施形態においては、スナップショット作成処理手段に代えて、ストレージ管理者が検索対象ファイルの現在のディレクトリツリーを手動でコピー&ペーストしてバックアップディレクトリとして記憶手段に記憶させる点が前述の実施形態の動作と異なる。