(58)【調査した分野】(Int.Cl.,DB名)
走査対象ファイルのインデクス作成済みのファイルリストを分散処理サーバによって作成するステップと、前記分散処理サーバによって作成されたインデクス作成済みのファイルリストを記憶装置に記憶させるステップと、前記インデクス作成済みのファイルリストを前記記憶装置から取得し、そのファイルリストから走査対象ファイルのディレクトリURLを取得し、そのディレクトリURLを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分割して行う分割方針を決定するステップと、決定された分割方針に従い走査対象ファイルのディレクトリを分割し、分割した単位で各ディレクトリ上の走査対象ファイルを前記分散処理サーバによって分散走査し、走査対象ファイルのファイルリストを作成するステップと、作成されたファイルリストと前記インデクス作成済みのファイルリストとを比較して前記インデクス作成後に追加、変更、削除されたファイルの一覧を作成して出力するステップとを備え、
前記走査処理の分割方針を決定するステップは、最上位階層から数えたディレクトリ数が所定数未満であれば走査対象ディレクトリの走査処理を行う分割数を1とする分割方針を決定し、所定数を越えた場合には最上位階層のディレクトリから所定階層までの階層を1つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度1階層を分割単位として走査する分割方針を決定するものであることを特徴とするファイルリスト生成方法。
走査対象ファイルのインデクス作成済みのファイルリストを作成する分散処理サーバと、該分散処理サーバによって作成されたインデクス作成済みのファイルリストを記憶した記憶装置と、前記インデクス作成済みのファイルリストを前記記憶装置から取得し、そのファイルリストから走査対象ファイルのディレクトリURLを取得し、そのディレクトリURLを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分割して行う分割単位を決定するファイル走査処理分割方針決定手段と、決定された分割方針に従い走査対象ファイルのディレクトリを分割し、分割した単位で各ディレクトリ上の走査対象ファイルを前記分散処理サーバによって分散走査し、走査対象ファイルのファイルリストを作成するファイル走査手段と、作成されたファイルリストと前記インデクス作成済みのファイルリストとを比較して前記インデクス作成後に追加、変更、削除されたファイルの一覧を作成して出力する比較手段とを備え、
前記ファイル走査処理分割方針決定手段は、最上位階層から数えたディレクトリ数が所定数未満であれば走査対象ディレクトリの走査処理を行う分割数を1とする分割方針を決定し、所定数を越えた場合には最上位階層のディレクトリから所定階層までの階層を1つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度1階層を分割単位として走査する分割方針を決定するものであることを特徴とするファイルリスト生成システム。
走査対象ファイルのインデクス作成済みのファイルリストを取得し、そのファイルリストから走査対象ファイルのディレクトリURLを取得し、そのディレクトリURLを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分割して行う分割単位を決定するファイル走査処理分割方針決定手段と、決定された分割方針に従い走査対象ファイルのディレクトリを分割し、分割した単位で各ディレクトリ上の走査対象ファイルを分散処理サーバによって分散走査し、走査対象ファイルのファイルリストを作成するファイル走査手段と、作成されたファイルリストと前記インデクス作成済みのファイルリストとを比較して前記インデクス作成後に追加、変更、削除されたファイルの一覧を作成して出力する比較手段とを備え、
前記ファイル走査処理分割方針決定手段は、最上位階層から数えたディレクトリ数が所定数未満であれば走査対象ディレクトリの走査処理を行う分割数を1とする分割方針を決定し、所定数を越えた場合には最上位階層のディレクトリから所定階層までの階層を1つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度1階層を分割単位として走査する分割方針を決定するものであることを特徴とするファイルリスト生成装置。
走査対象ファイルのインデクス作成済みのファイルリストを作成する分散処理サーバと、該分散処理サーバによって作成されたインデクス作成済みのファイルリストを記憶した記憶装置と、ファイルリスト作成サーバとから構成されたシステムに使用するプログラムであって、
前記ファイルリスト作成サーバを、
前記インデクス作成済みのファイルリストを前記記憶装置から取得し、そのファイルリストから走査対象ファイルのディレクトリURLを取得し、そのディレクトリURLを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分割して行う分割単位を決定するファイル走査処理分割方針決定手段と、決定された分割方針に従い走査対象ファイルのディレクトリを分割し、分割した単位で各ディレクトリ上の走査対象ファイルを前記分散処理サーバによって分散走査し、走査対象ファイルのファイルリストを作成するファイル走査手段と、作成されたファイルリストと前記インデクス作成済みのファイルリストとを比較して前記インデクス作成後に追加、変更、削除されたファイルの一覧を作成して出力する比較手段として機能させ、
さらに前記ファイル走査処理分割方針決定手段を、最上位階層から数えたディレクトリ数が所定数未満であれば走査対象ディレクトリの走査処理を行う分割数を1とする分割方針を決定し、所定数を越えた場合には最上位ディレクトリから所定階層までの階層を1つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度1階層を分割単位として走査する分割方針を決定する手段として機能させることを特徴とするファイルリスト生成プログラム。
【発明を実施するための形態】
【0014】
以下、本発明を実施する場合の第一の実施形態について、図面に基づき詳細に説明する。
図1は、本発明に係る第一の実施形態におけるシステム構成図である。
図1に示したファイルリスト生成システムは、ファイルリスト作成サーバ1、分散処理サーバ群2、およびファイルサーバ3(以下「サーバ等」という)を、LAN(Local Area Network)4等の有線又は無線の通信回線により互いに通信可能に接続したシステムである。
図1においては、サーバ等はLAN4によって互いに通信可能に接続されているが、接続方法はLANに限定されるものではなく、例えばWAN(Wide Area Network)やインターネットによって接続されていてもよい。また、
図1においては、サーバ等が同一LANセグメント上で接続されているが、この構成は一例に過ぎず、どのような構成になっていてもよい。さらに、
図1においては、ファイルリスト作成サーバ1、分散処理サーバ群2、およびファイルサーバ3はそれぞれ1台ずつ存在しているが、それぞれ2台以上存在しても構わない。また、ファイルリスト作成サーバ1、分散処理サーバ群2、およびファイルサーバ3はそれぞれ異なる装置である必要はなく、例えば、ファイルリスト作成サーバ1、分散処理サーバ群2、およびファイルサーバ3の機能を1台の装置によって実現することも可能である。
【0015】
以上のような構成により、ファイルリスト作成サーバ1は分散処理サーバ群2を利用してファイルサーバ3上のファイルデータのうち、前回のインデクス作成処理以降に追加、更新、削除されたファイルデータの一覧を作成する。
ファイルリスト作成サーバ1はPC等の装置であり、記憶装置15と通信可能に接続されている。
【0016】
記憶装置15は磁気ディスク等の装置であり、ファイルリスト作成サーバ1に内蔵され又は外部接続される。記憶装置15と、ファイルリスト作成サーバ1の主記憶装置等は、ファイルリスト作成サーバ1の記憶手段として機能する。記憶装置15には、インデクス済みファイルリスト16が記憶されている。インデクス済みファイルリスト16には、既に検索インデクスを作成したことのある、ファイルサーバ3上の記憶装置31に格納されている検索対象ファイル32のURLが1以上記憶されている。
【0017】
サーバ等と通信可能に接続されている検索用インデクス作成サーバ5によって検索用インデクスが更新された後、ファイルリスト作成サーバ1が、インデクス済みファイルリスト16に対して、インデクス済みファイルの追加、更新、削除を反映する。
ファイルリスト作成サーバ1はスケジューラ11、ファイル走査処理分割方針決定手段12、ファイル走査実行手段13、およびファイルリスト比較手段14を備えている。
また、ファイルリスト作成サーバ1はCPU、主記憶装置等を備えており、CPUは記憶装置15に記憶されているファイルリスト比較手段等のプログラムを主記憶装置上にローディングし、その命令コードを実行することで各種の処理を実行する。
【0018】
スケジューラ11は追加、更新、削除されたファイルデータの一覧を定期的に作成するにあたり、記憶装置15に記憶されている一覧作成処理実行時間間隔を参照してファイル走査処理分割方針決定手段12を起動した後、ファイル走査実行手段13、ファイルリスト比較手段14を起動して、インデクス済みファイルリスト16の作成後に追加、更新、削除されたファイルデータの一覧を作成する。
ファイル走査処理分割方針決定手段12は記憶装置15に記憶されているインデクス済みファイルリスト16を分析し、ファイル走査処理をどのように分割して並列実行させるかの方針を判定する。この動作については、ファイル走査処理分割方針決定処理(
図4)として後述する。
【0019】
ファイル走査実行手段13はファイル走査処理分割方針判定手段12によって判定されたファイル走査処理の分割方針に基づいて、ファイルサーバ3の記憶装置31に格納された検査対象ファイル32を走査し、現在ファイルサーバ3上にあるファイルデータの一覧を作成する。
ファイルリスト比較手段14はファイル走査実行手段13によって作成された現在ファイルサーバ3上にあるファイルデータの一覧と、記憶装置15に記憶されているインデクス済みファイルリスト16とを比較し、追加、更新、削除されたファイルデータの一覧を作成する。この動作については、ファイル走査処理(
図5)として後述する。
【0020】
図2はインデクス済みファイルリスト16の構成要素であるファイルレコード160のデータ構成図である。
インデクス済みファイルリスト16は、1以上のインデクス済みファイルレコード160から構成される。インデクス済みファイルレコード160には、検索用インデクス作成済みであるファイルに関して、その情報がディレクトリURL161とディレクトリ内ファイル情報162に分けて記憶されている。
【0021】
具体的にはディレクトリURL161はファイルサーバ上のディレクトリを一意に識別するためのパスが設定される。例えばファイルサーバの識別名が”server1”であり、共有名がshare1である共有ディレクトリの直下にあるetcという名前のディレクトリを示すURLはhttp://server1/share1/etc/となる。
ディレクトリ内ファイル情報162は、ファイル名163とファイル情報ハッシュ値164から構成される。ディレクトリ内ファイル情報162は1つのディレクトリURL160に対して、ディレクトリ直下にあるファイルの個数分(n個)情報が記憶される。具体的にはファイル名163はfile1.docやfile2.xmlのようなファイル名が記憶される。
【0022】
ファイル情報ハッシュ値164はそのファイルが更新されたか否かを判定するために用いるファイルのメタデータから作成したハッシュ値を記憶する。例えば、ファイルの最終更新時刻、またはファイルサイズのいずれかが変化している場合にファイルが更新されたと判断する場合は、ファイルの最終更新時刻とファイルサイズを文字列化したものを連結し、そのハッシュ値を算出して記憶する。
ここで、最終更新時刻とファイルサイズは一例であり、例えばファイルや上位ディレクトリのアクセス権情報が管理者等によって変更された場合にファイルが更新されたと判断できるよう、それらのアクセス権情報をもとにハッシュ値を算出することも考えられる。
【0023】
図3はインデクス済みファイルリスト16の具体例を示した概念図である。
この概念図に示すファイルサーバ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つのファイルが存在する。
【0024】
同様に、“server1”の“share2”には、1つのディレクトリ“pjt”が存在し、“pjt”ディレクトリには“pjt1”、“pjt2”、“pjt3”の3つのディレクトリが存在し、そのうち“pjt1”ディレクトリには“file4.txt”、“file5.doc”の2つのファイルが存在する。
例えば、
図3における点線内の部分31に対するインデクス済みファイルリスト16のデータとしては、ディレクトリURL161には”http://server1/share1/etc/”という値が記憶され、ディレクトリ内ファイル情報162のファイル名163が”file1.doc”であり、ファイル情報ハッシュ値164が”5c34a4dd1B46183A58ABC2B2C8F1B1D58EA34FC65DA8EB25B9FFD1A6131308CC”であるレコードと、ファイル名163が”file2.xml”であり、ファイル情報ハッシュ値164が”63b2cda32728C336134A8836A765270710D6712F11B2BEE0FA68715D7FDE74A3”であるレコードが記憶される。
【0025】
図4はファイル走査処理分割方針決定手段12の動作を示すフローチャートである。
ファイル走査処理分割方針決定手段12は、走査対象のファイルツリー構造を複数に分割して走査処理を並列に行うことで高速化するという本発明の目的に対し、分割された範囲があまりに小さかった場合には並列処理を行うことによるオーバーヘッドが並列処理による高速化のメリットを上回ってしまうことを避けるために、既にインデクス済みのファイルの一覧を分析することにより、最初に行う走査処理の範囲が適切な大きさになるように判断する処理である。このような判断処理は、走査対象のファイルツリー構造が、走査処理開始ディレクトリに近い上位階層ほどディレクトリ数が少なく、下位階層ほどディレクトリ数が多い三角形構造の場合に適している。三角形構造の中でも特に、階層間のディレクトリ数の増加の割合が一定ではなく途中の階層で増加の割合が急激に大きくなるような場合、最上位階層から増加割合が急激に大きくなる直前の階層までを最初の走査範囲に設定する。
【0026】
図13は途中の階層で増加の割合が急激に大きくなるようなファイルツリーの概念図である。図中の丸1306は1つのディレクトリを表す。なお、各ディレクトリの下にはファイルがある。また、下位階層のディレクトリは上位階層のいずれかのディレクトリに属している。
この概念図に示すファイルサーバ3のファイルツリーの構造においては、第一階層1301に1ディレクトリが属し、第二階層1302には3ディレクトリが属し、第三階層1303には6ディレクトリが属し、第四階層1304には12ディレクトリが属し、第五階層1305には10000ディレクトリが属している。このようなファイルツリー構造を持つファイルサーバとしては企業組織のヒエラルキーに即して構築された企業内ファイルサーバが考えられる。例えば第一階層1301を”本部”とし、第二階層1302を”部”、第三階層1303を”課”、第四階層1304を”各従業員”用のディレクトリとする場合、このようなディレクトリ数の比率を持つファイルツリー構造になる。各階層間のディレクトリ数の増加の割合は階層間のディレクトリ数の2階差分値によって近似的に算出できる。
2階差分値とは
図14の説明図に示すように、各階層のディレクトリ数について上位階層と直下の下位階層のディレクトリ数の差を1階差分値としたとき、さらに下位階層のディレクトリ数と1階差分値との差を2階差分値とするものである。2階微分演算を近似したものに相当する。
【0027】
図14の説明図においては、第3階層と第4階層のディレクトリ数の2階差分値が急変しているために、第4階層でディレクトリ数が急変していることを近似的に検出することができる。
図13の例においては、第一階層1301、第二階層1302、第三階層1303間の2階差分値は1となり、第二階層1302、第三階層1303、第四階層1304間の2階差分値は3となり、第三階層1303、第四階層1304、第五階層1305間の2階差分値は9982となる。これらの2階差分値の比較から第四階層1304と第五階層1305の間で増加の割合が急激に大きくなっていることが判断できる。ファイル走査処理分割方針決定手段12はこの手法によって、最上位階層1301から第4階層1304までを1つの分割深度として初回走査範囲に設定する。
【0028】
初回走査範囲に設定した第4階層の以下の下位階層については、ディレクトリ数が多いため、その下位のディレクトリ階層を1深度単位として走査し、当該ディレクトリ上のファイルリストを作成する。
なお、ディレクトリ数が多い第5階層以下の階層においては、当該階層に属するディレクトリの走査を複数の分散処理サーバ群2で分担して走査する。この場合、分担の仕方については任意である。
また、最下位階層までのディレクトリ数の集計結果が非常に少なく所定数未満であった場合には、分割して走査しても高速化の目的に反するので、分割数を1として走査する。
【0029】
このように本実施形態では、検索用インデクス作成直後の検索対象ファイルのディレクトリ構造を反映したディレクトリツリーが判明する。そして、その後、検索対象ファイルを全て走査(初回走査、次回走査、次々回走査・・・)することにより、検索用インデクス作成直後のディレクトリツリーを原型ツリーとして、これに追加、削除されたファイルを反映したディレクトリツリーが判明する。また、ディレクトリは追加されていないが、内容が更新されたファイルがあればハッシュ値が更新されたディレクトリが判明する。
【0030】
図15に当初の検索用インデクス作成直後のディレクトリツリーと更新後のディレクトリツリーのイメージ図を示している。
そこで、当初の原型ツリーと追加、削除、更新を反映した最新ツリーとをファイルリスト同士(URLリスト同士)で比較することによって追加、削除、更新のあったファイルリストを抽出することが可能になる。この場合、ファイルリスト同士の比較処理も分散処理サーバ群2の各分散処理実行手段21で分散して実行することにより、高速に追加、削除、更新のあったファイルリストを抽出することが可能になる。
従って、ディレクトリ数が多くない所定数未満の階層までは初回走査で一挙にディレクトリ構造を解明し、ディレクトリ数が多い下位階層では1階層単位で走査してそのディレクトリ構造を解明するという処理を行っていることになる。
【0031】
図4のS401に至るまでの処理は、前述のように、スケジューラ11が、追加、更新、削除されたファイルデータの一覧を定期的に作成するにあたり、記憶装置15に記憶されている一覧作成処理実行間隔を参照して、処理を開始させる。
まず、走査対象となるファイルサーバ3の共有ディレクトリに関わる全てのディレクトリのURL161(全ての走査対象ディレクトリのURL)を記憶装置15に記憶されたインデクス済みファイルリスト16から取得する(S401)。
次に取得した各ディレクトリURL161を文字”/”でファイルパス上の各階層のディレクトリ名に分割する(S402)。例えば、前述の例でいうと、”http://server1/share1/etc/”は、”http:”、””(空字列)、”server1”、
”share1”、”etc”に分割される。
【0032】
次に、分割したディレクトリ名がそれぞれ、ファイルパス上の何階層目に所属しているか階層数を算出する(S403)。例えば前述の例で言うと、”http://server1/share1/etc/”の”share1”は第一階層となり、“etc”は第二階層となる。
次に、階層ごとにディレクトリ数を集計する。例えば
図3に示したファイルツリーの場合、共有ディレクトリ”share1”に係る第一階層は”share1”一つであると算出される。同様に第二階層は”etc”と”doc”の二つであると算出される。S402とS403は複数の分散処理サーバ群2において分散処理実行手段21を利用して並列に処理できる。例えば、ディレクトリURL161を5000行ずつ各分散処理サーバ群2に分配し、各分散処理サーバ群2は割り当てられたディレクトリURL161一つずつに対して、S402とS403の処理を行う。
【0033】
次に、階層ごとにユニークなディレクトリ名がいくつあるかを数えることにより、階層ごとのディレクトリ数を集計する(S404)。S404は複数の分散処理サーバ群2において分散処理実行手段21を利用して並列に処理できる。S403で算出した階層数ごとに、ディレクトリ名を各分散処理サーバ群2に分配し、各分散処理サーバ群2は割り当てられた階層についてS404のユニークなディレクトリ数を集計する処理を行う。
このS402〜S404がファイルツリー構造を解析するする処理に相当する。
【0034】
次に、集計が完了した階層のうち、第一階層について処理を進める(S405)。
次に、第一階層の推定ファイル数を算出して、推定総ファイル数に加算する(S406)。なお、推定ファイル数は、S404で算出した第一階層のディレクトリ数に一定の数をかけることで算出する。一定の数とは例えば100といった値である。この値はファイルリスト作成サーバ1上の設定ファイルなどに記憶している値を参照する。この値は、1ディレクトリが保持するファイルの平均の数に近い値を推定して設定することが望ましい。
【0035】
次に、推定総ファイル数が最高推定総ファイル数以上かどうかを判定する(S407)。なお、最高推定総ファイル数はファイルリスト作成サーバ1上の設定ファイルなどに記憶している値を参照する。この値は、例えば2000000といった値であり、一台のファイルリスト作成サーバ1が1度のファイルサーバ走査によって少なくとも数時間以内に走査完了できる数字を推定して設定することが望ましい。推定総ファイル数が最高推定総ファイル数以上だった場合は、最初の階層から今階層までをまとめて走査する対象として判断する(S412)。すなわちこの場合は、第一階層のみを走査対象として判断する。最高推定総ファイル数は、まとめて走査する対象の範囲が際限なく拡大することを防ぐ目的で設定している。
【0036】
推定総ファイル数が最高推定総ファイル数より少なかった場合は、次に、前々階層、前階層、今階層のディレクトリ数の2階差分値を計算する(S408)。第一階層の場合は、前々階層、前階層が無いため、第一階層のディレクトリ数そのものを2階差分値とする。
次に、2階差分値が階層数2階差分閾値以上かどうかを判定する(S409)。なお、階層数2階差分閾値はファイルリスト作成サーバ1上の設定ファイルなどに記憶している値を参照する。この値は階層間のディレクトリ数の増加の割合がどの程度急激であるかを近似的に示す値であり、例えば5000といった値を設定する。
【0037】
2階差分値が2階差分閾値以上である場合は、次に推定総ファイル数が最低推定総ファイル数以上であるかどうかを判定する(S410)。なお、最低推定総ファイル数はファイルリスト作成サーバ1上の設定ファイルなどに記憶している値を参照する。この値は、例えば1000000と言った値であり、一台のファイルリスト作成サーバ1が1度のファイルサーバ走査によって少なくとも数分以上走査にかけるファイル数を推定して、その数を設定することが望ましい。
推定総ファイル数が最低推定総ファイル数以上である場合は、最初の階層から今階層までをまとめて走査する対象として判断する(S412)。
【0038】
S410の判断で推定総ファイル数が最低推定総ファイル数より少なかった場合は、次の階層に進む(S411)。
図4の処理はあまりに小さな範囲を走査範囲として設定しないようにするための処理であるため、一定数のファイルは走査範囲に含まれるようにS410の判断処理を加えている。
S409の判断で2階差分値が2階差分閾値より小さかった場合は、次の階層に進む(S411)。
S411で次の階層に進んだ後は、S406の処理に戻る。S407かS409とS410のどちらかの判断によって走査範囲が決まるまでS406からS411の処理を繰り返し実行する。
これらの処理により、ファイル走査実行手段13が最初に行う走査処理の範囲として、適切な範囲が決定される。
【0039】
図5はファイル走査実行手段13とファイルリスト比較手段14によって追加、更新、削除されたファイルデータの一覧を作成する処理の動作を示すフローチャートである。
図4のフローチャートに示した処理の終了後、スケジューラ11が
図5の処理を起動させる。
図4のフローチャートで示された分割方針決定手段によって判断された範囲を走査範囲に設定する(S501)。
【0040】
次に走査範囲のファイルを走査し、ファイルとディレクトリのURLを列挙する(S502)。
ファイルサーバ3内の一部範囲を走査してファイルとディレクトリを列挙することは周知の技術であるため、ファイルサーバ走査実行手段13がどのように走査を行うかについてはここでは詳細には記載しないが、例えばファイルリスト作成サーバ1がファイルサーバ3の記憶装置31の検索対象ファイル32を、ネットワークファイルシステムを通じてアクセス可能な状態にし、ファイルリスト作成サーバ1のローカルファイル用のファイルツリー探索プログラムを使用して各ファイルデータのファイルシステム上のファイルパスの一覧を出力するなどさせればよい。ファイルシステム上のファイルパスが求まれば、ファイルパスにファイルサーバ3の識別名などをファイルパスに付け加えることでURLを作成することができる。
【0041】
次に、ファイルリストを作成し、次回走査範囲を設定する(S503)。この次回走査範囲は、S502で走査された範囲の最下層のディレクトリが設定され、そのディレクトリの直下1階層分を走査範囲として設定する。すなわちS501で設定された初回の走査より後の走査では1階層ずつファイルツリーを走査する。この処理の詳細はファイルリスト作成と走査範囲設定処理(S601等)として後述する。
次に、次回走査範囲が空かどうかを判断する(S504)。
もし次回走査範囲が空であれば、ファイルツリーを全て探索し終えたので、処理を終了する。
次回走査範囲が空でなければ、S502に戻って次の走査範囲について走査し、ファイルとディレクトリのURLを列挙する。
【0042】
図6及び
図7は、ファイルリスト作成と走査範囲設定処理の動作を示すフローチャートである。これは
図5のS503の処理の詳細なフローである。
最初に、S502で列挙されたファイルとディレクトリのURLを文字列順にソートする(S601)。
次に、インデクス済みファイルリスト16から走査範囲のインデクス済みファイルのURLリストを取得する(S602)。インデクス済みファイルのURLリストは、インデクス済みファイルリスト16から走査範囲に含まれるディレクトリURL161のレコードをすべて抽出し、それらのレコードに含まれるファイル名163をそれぞれ接続してファイルのURLを作成することで作成できる。ここで走査範囲は階層数で表すことができ、階層数はディレクトリURLに含まれる”/”の数から算出可能である。よって、例えば”/”を指定数含む正規表現を作成して、その正規表現に適合するディレクトリURL161を抽出することで、走査範囲のディレクトリURL161のレコードを抽出することができる。
【0043】
次に、ソート済みURLリストの先頭行を取り出す(S603)。このURLは現在ファイルサーバ3上で走査範囲に含まれる検索対象ファイル32のうち、ファイルURLが辞書順(ABC順)で最も前にあるファイルのURLである。
次に、インデクス済みファイルのURLリストの先頭行を取り出す(S604)。このURLは記憶装置15に記憶されたインデクス済みファイルリスト16のなかで走査範囲に含まれるファイルのうち、ファイルURLが辞書順で最も前にあるファイルのURLである。
次に、S603とS604で取り出したURL同士を文字列として比較する(S605)。
次に、S605の比較の結果、URLが文字列として一致していたかどうかを判断する(S606)。
【0044】
もしURLが一致していた場合は、現在ファイルサーバ3上にあるファイルまたはディレクトリと、インデクス済みファイルリストのファイルまたはディレクトリのURLが一致しているということなので、このファイルまたはディレクトリは、新規にファイルサーバ3上に追加されたファイルまたはディレクトリや、前回インデクスされたファイルまたはディレクトリが削除されたものではなく、変更が無かった、または更新があったファイルまたはディレクトリであると判断できる。このファイルまたはディレクトリは更新の可能性があるファイルまたはディレクトリであるとして、追加、更新、削除されたファイルデータの一覧に追加する処理(S607)を行う。この処理の詳細は更新ファイル追加処理(S901等)として後述する。
【0045】
次に、ソート済みURLリストに次の行があるかどうかを判断する(S608)。
もしソート済みURLリストに次の行がある場合は、次に、インデクス済みファイルのURLリストに次の行があるかを判断する(S609)。
もしインデクス済みファイルのURLリストに次の行がある場合は、ソート済みURLリストの次の行を取り出す(S610)。
【0046】
次に、インデクス済みファイルのURLリストの次の行を取り出す(S611)。
次に、S605に戻り、次のURL同士を比較する。ソート済みURLリストとインデクス済みファイルのURLリストの全てのURLについて処理を終えるまで、これらの処理を繰り返し実行する。
もしS608の判断で、ソート済みURLリストに次の行が無かった場合は、インデクス済みファイルのURLリストに残っているURLを削除されたファイルまたはディレクトリであるとして追加、更新、削除ファイル一覧に追加する処理(
図7のS620)を行う。この処理の詳細はインデクス済みファイルのURLリストの残件処理(S701等)として後述する。
【0047】
もしS609の判断で、インデクス済みファイルのURLリストに次の行が無かった場合は、ソート済みURLリストに残っているURLを追加されたファイルまたはディレクトリとして追加、更新、削除ファイル一覧に追加する処理(
図7のS619)を行う。この処理の詳細は、ソート済みURLリストの残件処理(S801等)として後述する。
もしS606の判断で、URLが文字列として一致していなかった場合は、次にソート済みURLリストのURLが辞書順でインデクス済みファイルのURLリストのURLより前かどうかを判断する(
図7のS612)。
【0048】
もしソート済みURLリストのURLが辞書順でインデクス済みファイルのURLリストのURLより前だった場合は、インデクス済みファイルリストには存在していないファイルまたはディレクトリがファイルサーバ3上に新たに作成されたということを示すので、次に追加されたファイルまたはディレクトリであるとして、追加、更新、削除されたファイルデータの一覧に追加する処理(
図7のS613)を行う。例えば、インデクス済みファイルのURLリストのURLが”http://server1/share1/etc/file1.doc”であり、ソート済みURLリストのURLが”http://server1/share1/etc/file0.txt”だった場合は、ソート済みURLリストのURLの方が辞書順で前であり、”http://server1/share1/etc/file0.txt”というファイルが前回のインデクス更新時から今回のインデクス時までの間にファイルサーバ3に新たに作成されたファイルであると判断できる。この処理の詳細は追加ファイル追加処理(S1001等)として後述する。
【0049】
次に、ソート済みURLリストに次の行があるかを判断する(S614)。
もしソート済みURLリストに次の行があればソート済みURLリストの次の行を取り出す(S615)。
次に、
図6のS605に戻ってURL同士を比較する。このとき、ソート済みURLリストのURLはS615の処理によって次の行に進んでいるが、インデクス済みファイルのURLリストのURLは次の行に進んでいない。
もしS614の判断でソート済みURLリストに次の行がなかった場合は、次にインデクス済みファイルのURLリストの残件処理(S620)を行う。
もしS612の判断でソート済みURLリストのURLが辞書順でインデクス済みファイルのURLリストのURLより後だった場合は、インデクス済みファイルリストに含まれていたファイルまたはディレクトリが、現在のファイルサーバ3上には存在しないということを示すので、次に削除されたファイルまたはディレクトリであるとして、追加、更新、削除されたファイルデータの一覧に追加する処理(
図7のS616)を行う。この処理の詳細は削除ファイル追加処理(S1101等)として後述する。
【0050】
次に、インデクス済みファイルのURLリストに次の行があるかどうかを判断する(S617)。
もしインデクス済みファイルのURLリストに次の行があればインデクス済みファイルのURLリストの次の行を取り出す(S618)。
次に、S605に戻ってURL同士を比較する。このとき、インデクス済みファイルのURLリストのURLはS618の処理によって次の行に進んでいるが、ソート済みURLリストのURLは次の行に進んでいない。
【0051】
もしS617の判断でインデクス済みファイルのURLリストに次の行がなければ、次にソート済みURLリストの残件処理(S619)を行う。
これまで述べたように、S605の判断でURLが一致していた場合は、ソート済みURLリストとインデクス済みファイルのURLリストを共に次の行に進め、S605の判断でURLが一致せず、かつS612の判断でソート済みURLリストのURLが辞書順で前だった場合はソート済みURLリストのみを次の行に進め、S605の判断でURLが一致せず、かつS612の判断でソート済みURLリストのURLが辞書順で後だった場合はインデクス済みファイルのURLリストのみを次の行に進める。このような方法で両URLリストのURLを先頭から最後尾まで比較していくことで、該当範囲について追加、更新、削除されたファイルを全て追加、更新、削除されたファイルデータの一覧に追加することができる。
【0052】
これらの処理により、今回の走査範囲についての追加、更新、削除されたファイルデータの一覧が作成され、次回の走査範囲が決定される。
図8はインデクス済みファイルのURLリストの残件処理の動作を示すフローチャートである。これは
図7のS620の処理の詳細なフローである。
最初に、インデクス済みファイルのURLリストに次の行があるかどうかを判断する(S801)。ここでインデクス済みファイルのURLリストとは、
図6の処理におけるインデクス済みファイルのURLリストと同じものを指す。
もしインデクス済みファイルのURLリストに次の行がある場合は、次にインデクス済みファイルのURLリストの次の行を取り出す(S802)。
【0053】
次に取り出したインデクス済みファイルのURLリストのURLがディレクトリのものかどうかを判断する(S803)。
もし取り出したURLがディレクトリのものである場合は、次にインデクス済みファイルリストからURLが示すディレクトリ以下のファイルの一覧を取得する(S804)。これは、ファイルツリーにおいて上位のディレクトリが削除されると、その配下のファイルおよびディレクトリは全て削除されることから、インデクス済みファイルリストに存在する当該ファイルを、全て削除ファイルとして追加、更新、削除ファイル一覧に追加しなければならないためである。インデクス済みファイルリスト一覧から取り出したURLが示すディレクトリ以下のファイルの一覧を取得する方法としては、例えばインデクス済みファイルリストから取り出したURLと前方一致するURLを検索する方法が考えられる。
【0054】
次に取得したファイルを全て削除ファイルとして追加、更新、削除ファイル一覧に追加する(S805)。
次にS801に戻り、インデクス済みファイルのURLリストに次の行があるかどうかを判断する。
もしインデクス済みファイルのURLリストに次の行が無い場合は処理を終了する。
もしインデクス済みファイルのURLリストに次の行がある場合はS801からS805の処理をインデクス済みファイルのURLリスト全てに対して繰り返し行う。
もしS803の判断でURLがディレクトリのものではなくファイルのものだった場合は、次にそのファイルを削除ファイルとして追加、更新、削除ファイル一覧に追加する(S805)。
【0055】
これらの処理により、インデクス済みファイルのURLリストに残っているURLが、削除されたファイルまたはディレクトリとして追加、更新、削除ファイル一覧に追加される。
【0056】
図9はソート済みURLリストの残件処理の動作を示すフローチャートである。これは、
図7のS619の処理の詳細なフローである。
最初に、ソート済みURLリストに次の行があるかどうかを判断する(S901)。
もしソート済みURLリストに次の行がある場合は、次にソート済みURLリストの次の行を取り出す(S902)。
次に、URLがディレクトリのものかどうかを判断する(S903)。
もしURLがディレクトリのものである場合は、次に、それが走査範囲の最下層のディレクトリであるかどうかを判断する(S904)。例えば、
図12のファイルツリーで第一階層1201から第五階層1205までを走査範囲に設定した場合は、第五階層1205に属するディレクトリのURLが最下層のディレクトリと判断される。
【0057】
もしURLが示すディレクトリが最下層のディレクトリだった場合は、そのディレクトリは次回走査範囲における起点ディレクトリの一つとして含まれるため、次回走査範囲に追加する(S905)。この次回走査範囲はファイルリスト作成サーバ1の主記憶装置上に保持してもよいし、次回走査範囲に追加されるディレクトリ数が多い場合は記憶装置15に一時的に記憶して次回処理の際にロードするようにしてもよい。
【0058】
もしS904の判断で走査範囲の最下層のディレクトリではなかった場合は、現走査範囲に下位のディレクトリが含まれているため、そのディレクトリは次回走査範囲に含める必要は無い。よって、次にS901に戻ってソート済みURLリストに次の行があるか判断する。
もしS903の判断でURLがディレクトリのものではなくファイルのものだった場合は、そのファイルを追加ファイルであるとして追加、更新、削除ファイル一覧に追加する。
次に、S901に戻ってソート済みURLリストに次の行があるか判断する。
もしS901の判断でソート済みURLリストに次の行が無かった場合は、処理を終了する。
【0059】
これらの処理により、ソート済みURLリストに残っているURLが、ファイルの場合は追加ファイルとして追加、更新、削除ファイル一覧に追加され、また、走査範囲の最下層のディレクトリの場合は次回走査範囲に追加される。
図10は更新ファイル追加処理の動作を示すフローチャートである。これは
図6のS607の処理の詳細なフローである。
最初に、URLがディレクトリのものであるかどうか判断する(S1001)。このURLは
図6のS605で比較し、S606で一致していると判断されたURLであり、ソート済みURLリストから取り出したURLを使用してもよいし、インデクス済みファイルのURLリストから取り出したURLを使用してもよい。
【0060】
もしURLがディレクトリのものである場合は、次に走査範囲の最下層のディレクトリであるかどうかを判断する(S1002)。
もしURLが示すディレクトリが最下層のディレクトリだった場合は、そのディレクトリは次回走査範囲における起点ディレクトリの一つとして含まれるため、次回走査範囲に追加する(S1003)。
【0061】
もしS1002の判断で走査範囲の最下層のディレクトリではなかった場合は、現走査範囲に下位のディレクトリが含まれているため、そのディレクトリは次回走査範囲に含める必要は無い。よって処理を終了する。
もしS1001の判断で、URLがディレクトリのものではなくファイルのものだった場合は、次にそのURLに対するインデクス済みファイルのファイル情報ハッシュ値164と、ファイルサーバ3上のソート済みURLリストのURLが示すファイルのメタデータからファイル情報ハッシュ値164と同様の方式で算出したハッシュ値を比較する(S1004)。
【0062】
次に、比較したハッシュ値に差があるかどうかを判断する(S1005)。
S1005の判断でハッシュ値に差がある場合は、そのファイルが更新されていることを示すので、次にそのURLを更新ファイルとして追加、更新、削除ファイル一覧にURLを追加する(S1006)。
S1005の判断でハッシュ値に差が無い場合は、そのファイルが更新されていないことを示すので、そのファイルについては追加、更新、削除ファイル一覧に追加する必要は無い。そのため、これで処理を終了する。
これらの処理により、URLがファイルであり、かつ更新されていた場合は、更新ファイルであるとして追加、更新、削除されたファイルデータの一覧に追加され、また、走査範囲の最下層のディレクトリの場合は次回走査範囲に追加される。
【0063】
図11は追加ファイル追加処理の動作を示すフローチャートである。これは
図7のS613の処理の詳細なフローである。
最初に、ソート済みURLリストのURLがディレクトリのものかどうかを判断する(S1101)。
もしURLがディレクトリのものだった場合は、次にそのディレクトリが走査範囲の最下層のディレクトリかどうかを判断する(S1102)。
もしディレクトリが最下層のものだった場合は、次にディレクトリを次回走査範囲に追加する(S1103)。
もしS1102の判断で、ディレクトリが走査範囲の最下層のディレクトリではなかった場合は、これで処理を終了する。
【0064】
もしS1101の判断で、ソート済みURLリストのURLがディレクトリのものではなくファイルのものだった場合は、そのファイルを追加ファイルとして追加、更新、削除ファイル一覧に追加する(S1104)。
これらの処理により、URLがファイルである場合は、追加ファイルであるとして追加、更新、削除されたファイルデータの一覧に追加され、また、走査範囲の最下層のディレクトリの場合は次回走査範囲に追加される。
【0065】
図12は削除ファイル追加処理の動作を示すフローチャートである。これは
図7のS616の処理の詳細なフローである。
最初に、インデクス済みファイルのURLリストのURLがディレクトリのものかどうかを判断する(S1201)。
もしURLがディレクトリのものだった場合は、そのディレクトリ以下のファイル全てを削除ファイルとして追加、更新、削除ファイル一覧に追加する必要があるため、次に、インデクス済みファイルリストからURL配下のファイルの一覧を取得する(S1202)。
次に、削除ファイルとして追加、更新、削除ファイル一覧に取得した一覧に含まれるファイル全てを追加する(S1203)。
【0066】
もしS1201の判断でインデクス済みファイルのURLリストのURLがディレクトリのものではなくファイルのものだった場合は、そのファイルを削除ファイルとして追加、更新、削除ファイル一覧に追加する(S1204)。
【0067】
図5で示したS502の走査は複数の分散処理サーバ群2において分散処理実行手段21を利用して並列に処理できる。S502の処理を分散させる場合は走査範囲に設定されたディレクトリのうち一定数を一つの分散処理実行手段21に割り当てる。例えば一つの分散処理実行手段21が最大5ディレクトリを受け持つようにすると、走査範囲に設定されたディレクトリが22あった場合、5ディレクトリ、5ディレクトリ、5ディレクトリ、5ディレクトリ、2ディレクトリの5つに処理が分散される。
また、
図5で示したS503のファイルリスト作成処理と次回走査範囲の設定も複数の分散処理サーバ群2において分散処理実行手段21を利用して並列に処理できる。S503の処理を分散させる場合は、1つのディレクトリに対する処理を一つの分散処理実行手段21に割り当てる。例えば
図3に示す例で走査範囲が”http://server1/share1/etc”と”http://server1/share1/doc”だと設定されていた場合、”http://server1/share1/etc/”についての処理を一つの分散処理実行手段21に割り当てて、”http://server1/share1/doc/”についての処理を一つの分散処理実行手段21に割り当てる。例えば”http://server1/share1/etc/”についての処理を割り当てられた分散処理実行手段21は”http://server1/share1/etc/file1.doc”や”http://server1/share1/etc/file2.xml”などの”http://server1/share1/etc/”の直下にあるディレクトリおよびファイルについてS503の処理を行う。
【0068】
これらの処理により、URLがファイルである場合は、削除ファイルであるとして追加、更新、削除されたファイルデータの一覧に追加され、また、ディレクトリの場合はインデクス済みファイルリストのURL配下のファイル全てが削除ファイルとして追加、更新、削除されたファイルデータの一覧に追加される。