(57)【特許請求の範囲】
【請求項１】
異なるファイルシステム間における同期方法であって、
コンピュータが、
同期対象とするファイルについてファイルリストを予め作成し、
前記ファイルの更新に関するイベントを取得し、
前記イベントが取得されたファイルを配下に持つフォルダが、更新があったフォルダを記憶する更新フォルダ記憶部に記憶されていない場合に、当該フォルダを前記更新フォルダ記憶部に登録し、
前記更新フォルダ記憶部に記憶されたフォルダが配下に持つファイルの数に基づいて最大更新ファイル数を見積もり、
同期対象とするファイルの総数に対する最大更新ファイル数の割合が第１の閾値を超えた場合に、前記ファイルリストを部分更新し、
同期対象とするファイルの総数に対する最大更新ファイル数の割合が前記第１の閾値よりも大きい第２の閾値を超えた場合に、前記ファイルリストの部分更新ではなく、前記ファイルリストを再作成する
処理を実行することを特徴とする同期方法。
【請求項２】
前記ファイルリストを部分更新する処理として、
同期対象とするファイルの総数に対する最大更新ファイル数の割合が第１の閾値を超えた場合に、前記更新フォルダ記憶部に記憶されたフォルダを対象に前記ファイルリストをフォルダ単位で更新する処理を実行することを特徴とする請求項１に記載の同期方法。
【請求項３】
前記第２の閾値は、同期対象とするファイルの総数、１つのファイルにつき部分更新を前記ファイルリストにマージするマージ所要時間または１つのファイルにつきハッシュ値の算出にかかる算出所要時間のうち少なくとも１つを用いて設定された設定値であることを特徴とする請求項１または２に記載の同期方法。
【請求項４】
前記第１の閾値は、システムリソースの空き状況、プロセッサの性能またはディスクのアクセス性能のうち少なくとも１つを用いて設定された設定値であることを特徴とする請求項１、２または３に記載の同期方法。
【請求項５】
異なるファイルシステム間における同期方法を実行するための同期プログラムであって、
コンピュータに、
同期対象とするファイルについてファイルリストを予め作成し、
前記ファイルの更新に関するイベントを取得し、
前記イベントが取得されたファイルを配下に持つフォルダが、更新があったフォルダを記憶する更新フォルダ記憶部に記憶されていない場合に、当該フォルダを前記更新フォルダ記憶部に登録し、
前記更新フォルダ記憶部に記憶されたフォルダが配下に持つファイルの数に基づいて最大更新ファイル数を見積もり、
同期対象とするファイルの総数に対する最大更新ファイル数の割合が第１の閾値を超えた場合に、前記ファイルリストを部分更新し、
同期対象とするファイルの総数に対する最大更新ファイル数の割合が前記第１の閾値よりも大きい第２の閾値を超えた場合に、前記ファイルリストの部分更新ではなく、前記ファイルリストを再作成する
処理を実行させることを特徴とする同期プログラム。
【請求項６】
異なるファイルシステム間でファイルの同期処理を行う情報処理装置であって、
同期対象とするファイルについてファイルリストを予め作成する作成部と
前記ファイルの更新に関するイベントを取得する取得部と、
前記イベントが取得されたファイルを配下に持つフォルダが、更新があったフォルダを記憶する更新フォルダ記憶部に記憶されていない場合に、当該フォルダを前記更新フォルダ記憶部に登録する登録部と、
前記更新フォルダ記憶部に記憶されたフォルダが配下に持つファイルの数に基づいて最大更新ファイル数を見積もる算出部と、
同期対象とするファイルの総数に対する最大更新ファイル数の割合が第１の閾値を超えた場合に、前記ファイルリストを部分更新する部分更新部と、
同期対象とするファイルの総数に対する最大更新ファイル数の割合が前記第１の閾値よりも大きい第２の閾値を超えた場合に、前記ファイルリストの部分更新ではなく、前記ファイルリストを再作成する再作成部と
を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、同期方法、同期プログラム及び情報処理装置に関する。
【背景技術】
【０００２】
近年のネットワークの高速化および大容量化に伴い、ＬＡＮ（Local  Area  Network）で接続されたコンピュータ間だけでなく、ネットワークを経由して接続されたコンピュータ間でも、大量のファイルの送受信が可能となった。かかるファイルの送受信の一態様としては、複数のサーバ間で保持する内容を一致させる同期処理が行われる。
【０００３】
ＯＳ（Operating  System）のセキュリティパッチの配布や、更新されたウィルス定義ファイルの配布など、非常に多くのパーソナルコンピュータ（ＰＣ：Personal  Computer）にデータを配布する用途では、配布負荷の分散が重要である。例えば、多段構成の資源配布サーバを設け、配布元であるマスタサーバから下位のサブサーバへ配布データを同期させ、各ＰＣにマスタサーバではなくサブサーバへアクセスさせることにより、配布負荷の分散が行われている。
【０００４】
このようなサーバ間での配布データの同期においては、対象となるフォルダおよびファイルの総数が非常に多くなることから、ファイルリストを作成することによる同期処理が行われている。例えば、同期処理を行うサーバ側とクライアント側の双方で作成したファイルリストを比較して差分ファイルリストを作成し、差分ファイルリストに基づき同期処理を行うクライアントサーバシステムが開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−４９６４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記の従来技術には、管理対象とするフォルダおよびファイルの増加に伴い、差分となるフォルダおよびファイルの数とは関係なく、ファイルリストの作成時間が増大するという問題がある。
【０００７】
すなわち、同期処理が必要な変更が、管理対象のデータの全体にわたる場合と、一部分に限られる場合では、同期処理として実行される処理の量、例えばファイルの追加、更新または削除の量は大きく異なる。それにもかかわらず、上記のクライアントサーバシステムでは、ファイルリストを同期処理の度に作成するので、同期処理が必要な変更が一部分のみである場合にファイルリストの作成に過大な処理時間が必要となる。
【０００８】
開示の技術は、上記に鑑みてなされたものであって、ファイルリストの作成時間を短縮できる同期方法、同期プログラム及び情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本願の開示する同期方法は、異なるファイルシステム間における同期方法であって、コンピュータが、同期対象とするファイルについてファイルリストを予め作成する処理を実行する。さらに、前記コンピュータが、前記ファイルの更新に関するイベントを取得する処理を実行する。さらに、前記コンピュータが、前記イベントが取得された更新ファイルの数を算出する処理を実行する。さらに、前記コンピュータが、同期対象とするファイルの総数に対する更新ファイルの数の割合が第１の閾値を超えた場合に、前記ファイルリストを部分更新する処理を実行する。さらに、前記コンピュータが、同期対象とするファイルの総数に対する更新ファイルの数の割合が前記第１の閾値よりも大きい第２の閾値を超えた場合に、前記ファイルリストの部分更新ではなく、前記ファイルリストを再作成する処理を実行する。
【発明の効果】
【００１０】
本願の開示する同期方法の一つの態様によれば、ファイルリストの作成時間を短縮できるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例１に係るデータ配布システムのシステム構成を示す図である。
【図２】図２は、実施例１に係るメインサーバの機能的構成を示すブロック図である。
【図３】図３は、配下数リストの一例を示す図である。
【図４】図４は、ファイルリストの一例を示す図である。
【図５】図５は、ファイル更新イベントのスタック方法を説明するための図である。
【図６】図６は、ファイルリストの作成所要時間と更新ファイル数の関係を示すグラフの模式図である。
【図７】図７は、ファイルリストの作成所要時間と更新ファイル数の関係を示すグラフの模式図である。
【図８】図８は、実施例１に係るスタック処理の手順を示すフローチャートである。
【図９】図９は、実施例１に係る第１の監視処理の手順を示すフローチャートである。
【図１０】図１０は、実施例１に係る第２の監視処理の手順を示すフローチャートである。
【図１１】図１１は、実施例１及び実施例２に係る同期プログラムを実行するコンピュータの一例について説明するための図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示する同期方法、同期プログラム及び情報処理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１３】
［システム構成］
まず、本実施例に係るデータ配布システムのシステム構成について説明する。図１は、実施例１に係るデータ配布システムのシステム構成を示す図である。図１に示すデータ配布システム１は、メインサーバ１０及び複数のサブサーバ３０Ａ〜３０Ｃ上で動作するオペレーティングシステムが提供するファイルシステム間で互いが保持するデータを一致させる同期処理を実行し、図示しない端末装置へのデータの配布を複数のサブサーバ３０Ａ〜３０Ｃに分散して実行させるものである。
【００１４】
図１に示すように、データ配布システム１には、メインサーバ１０と、複数のサブサーバ３０Ａ〜３０Ｃとが収容される。この図１の例では、サブサーバ３０Ａ〜３０Ｃを３つ収容する場合を図示したが、任意の数のサブサーバが収容される場合に適用できる。
【００１５】
これらメインサーバ１０及びサブサーバ３０Ａ〜３０Ｃの間は、ネットワーク３を介して相互に通信可能に接続される。かかるネットワーク３には、ＬＡＮ（Local  Area  Network）を始め、ＶＰＮ（Virtual  Private  Network）、インターネットなどの任意の通信網を採用できる。
【００１６】
このうち、メインサーバ１０は、図示しない端末装置へ配布させるデータをサブサーバ３０に配布するサーバ装置である。一態様としては、メインサーバ１０は、サブサーバ３０との間でデータを同期するように設定された同期対象のフォルダに格納されるファイルリストを作成してサブサーバ３０Ａ〜３０Ｃに送信する。ここで言う「同期対象のフォルダ」には、同期対象として設定されたフォルダをルートフォルダとしたディレクトリ全体、すなわちルートフォルダ及びその下位に所属するフォルダを含む。その後、メインサーバ１０は、メインサーバ１０及びサブサーバ３０Ａ〜３０Ｃによって作成された２つのファイルリストの間で検出された差分のファイルをサブサーバ３０Ａ〜３０Ｃに送信する。
【００１７】
サブサーバ３０Ａ〜３０Ｃは、自装置が保持するデータを図示しない端末装置に配布するサーバ装置である。一態様としては、サブサーバ３０Ａ〜３０Ｃは、メインサーバ１０との間でデータを同期するように設定された同期対象のフォルダに格納されるファイルリストを作成する。そして、サブサーバ３０Ａ〜３０Ｃは、先に作成したファイルリストとメインサーバ１０から転送されたファイルリストとの間で差分を検出する。その後、サブサーバ３０Ａ〜３０Ｃは、２つのファイルリストの間で差分が検出されたファイルをメインサーバ１０から取得する。これによって、サブサーバ３０Ａ〜３０Ｃは、メインサーバ１０によって保持されるデータの内容と自装置が保持するデータの内容とを一致させる。なお、以下では、サブサーバ３０Ａ〜サブサーバ３０Ｃを区別なく総称する場合に「サブサーバ３０」と記載する場合がある。
【００１８】
［メインサーバの構成］
続いて、本実施例に係るメインサーバ１０の機能的構成について説明する。図２は、実施例１に係るメインサーバ１０の機能的構成を示すブロック図である。図２に示すように、メインサーバ１０は、通信Ｉ／Ｆ（interface）部１１と、記憶部１２と、制御部１３とを有する。なお、メインサーバ１０は、図２に示す機能部以外にも既知のコンピュータが有する各種の機能部、例えば各種の入力デバイスや表示デバイスなどの機能を有するものとする。
【００１９】
このうち、通信Ｉ／Ｆ部１１は、他の装置、例えばサブサーバ３０との間で通信制御を行うインタフェースである。一例としては、通信Ｉ／Ｆ部１１は、メインサーバ１０が作成したファイルリストをサブサーバ３０へ送信する。他の一例としては、通信Ｉ／Ｆ部１１は、メインサーバ１０及びサブサーバ３０によって作成されたファイルリストの間で差分が検出されたファイルの取得要求をサブサーバ３０から受信する。かかる通信Ｉ／Ｆ部１１の一態様としては、ＬＡＮカードなどのネットワークインタフェースカード（ＮＩＣ：Network  Interface  Card）やモデムを採用できる。
【００２０】
記憶部１２は、制御部１３で実行されるＯＳ（Operating  System）やサブサーバ３０との間でデータの同期処理を実行する同期プログラムなどの各種プログラムを記憶する。さらに、記憶部１２は、制御部１３で実行されるプログラムの実行に必要なデータの一例として、更新フォルダリスト１２ａと、配下数リスト１２ｂと、ファイルリスト１２ｃとを記憶する。
【００２１】
このうち、更新フォルダリスト１２ａは、更新があったフォルダのリストデータである。一例としては、更新フォルダリスト１２ａには、同期対象のフォルダのうち更新があったファイルを配下に持つフォルダが後述のスタック部１３ｂによって追加される。他の一例としては、更新フォルダリスト１２ａは、後述のファイルリスト１２ｃが部分更新または再作成された場合に、後述の部分更新部１３ｃまたは後述の作成部１３ｅによってクリアされる。かかる更新フォルダリスト１２ａの一態様としては、更新があったフォルダの絶対パス、いわゆるフルパスを採用できる。
【００２２】
配下数リスト１２ｂは、各々のフォルダが配下に持つファイル数のリストデータである。一例としては、配下数リスト１２ｂは、後述のファイルリスト１２ｃが部分更新または再作成された場合に、後述の部分更新部１３ｄまたは後述の作成部１３ｅによって更新される。
【００２３】
かかる配下数リスト１２ｂの一態様としては、フォルダ及びフォルダ配下のファイル数が対応付けられたデータを採用できる。図３は、配下数リスト１２ｂの一例を示す図である。図３では、図中のアルファベットの大文字はフォルダ名を表すこととする。図３の例では、フォルダＡの配下には３つのファイルがあり、フォルダＫの配下には２つのファイルがあり、フォルダＢの配下には３つのファイルがあり、さらに、フォルダＣの配下には７つのファイルがあることを示す。なお、ここでは、フォルダ配下のファイル数を対応付けて記憶する場合を例示したが、例えば、フォルダ間の階層関係、例えば上位のフォルダや下位のフォルダをさらに記憶することとしてもよい。
【００２４】
ファイルリスト１２ｃは、メインサーバ１０が保持するファイルのリストデータである。一例としては、ファイルリスト１２ｃは、記憶部１２内にファイルリストが未登録の初期状態である場合に、後述の作成部１３ｅによって新規作成される。他の一例としては、ファイルリスト１２ｃは、同期対象とするファイルの総数に対する更新のあったファイルの数の割合が所定の閾値βを超える場合に、更新フォルダリスト１２ａにあるフォルダに関するリストが後述の部分更新部１３ｄによって部分更新される。更なる一例としては、ファイルリスト１２ｃは、同期対象とするファイルの総数に対する更新のあったファイルの数の割合が所定の閾値αを超える場合に、後述の作成部１３ｅによって再作成される。
【００２５】
かかるファイルリスト１２ｃの一態様としては、ファイル、サイズ、属性およびハッシュ値が対応付けられたデータを採用できる。ここで言う「属性」は、ファイルのプロパティを指し、例えば、読み取り専用属性（Read-only  file）、アーカイブ属性（Archive  file）、システムファイル属性（System  file）や隠しファイル属性（Hidden  file）などが挙げられる。また、「ハッシュ値」は、ハッシュ関数を用いて生成される疑似乱数を指し、例えば、ファイルの同一性をチェックするために使用される。
【００２６】
図４は、ファイルリスト１２ｃの一例を示す図である。図４では、図中のアルファベットの大文字はフォルダ名を表し、図中のアルファベットの小文字はファイル名を表し、図中の「.xxx」は拡張子を表すこととする。図４の例では、ファイルａ１、ファイルａ２及びファイルａ３は、いずれもＤドライブのルートフォルダ配下のフォルダＡに格納されたファイルであり、読み取り専用属性が付与されていることを示す。また、図４の例では、ファイルｋ１及びファイルｋ２は、いずれもフォルダＡ配下のフォルダＫに格納されたファイルであり、ファイルｋ１にはアーカイブ属性が付与されており、ファイルｋ２には隠しファイル属性が付与されていることを示す。
【００２７】
制御部１３は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。制御部１３は、図２に示すように、ＯＳ実行部１３ａと、スタック部１３ｂと、監視部１３ｃと、部分更新部１３ｄと、作成部１３ｅと、同期処理部１３ｆとを有する。
【００２８】
このうち、ＯＳ実行部１３ａは、コンピュータシステム全体を管理する基本ソフトウェアであるＯＳの実行を制御する処理部である。一例としては、ＯＳ実行部１３ａは、ＯＳのセキュリティパッチの配布やウィルス定義ファイルをダウンロードしたり、インストールしたりする。他の一例としては、ＯＳ実行部１３ａは、アプリケーションをインストールまたはアンインストールしたり、ユーザファイルを追加、削除または変更したりする。更なる一例としては、ＯＳ実行部１３ａは、図示しないユーザインタフェースを介して指定されたファイルの属性を変更したりする。このように、ファイルの追加、削除、更新や属性の変更などが実行された場合には、ＯＳ実行部１３ａは、更新があったファイルのフルパス及び更新日時を含むファイル更新イベントを後述のスタック部１３ｂへ通知する。なお、上記のファイル更新イベントの通知は、ＯＳによって提供されるＡＰＩ（Application  Program  Interface）、例えば「FindFirstChangeNotification」などを使用することによって実現できる。
【００２９】
スタック部１３ｂは、更新があったフォルダを更新フォルダリスト１２ａへスタックする処理部である。一態様としては、スタック部１３ｂは、ＯＳ実行部１３ａからファイル更新イベントが通知された場合に、当該ファイルを配下に持つフォルダが更新フォルダリスト１２ａに登録されているか否かを判定する。このとき、スタック部１３ｂは、更新フォルダリスト１２ａに登録されていない場合に、当該フォルダを更新フォルダリスト１２ａにスタックする。
【００３０】
図５を用いて、ファイル更新イベントのスタック方法について説明する。図５は、ファイル更新イベントのスタック方法を説明するための図である。図５では、図中の左側に示すファイルのフルパスを含むファイル更新イベントが上から順番に通知される場合を想定する。さらに、図５では、ファイル更新イベントが始めに通知される段階では更新フォルダリスト１２ａにフォルダが未登録である場合を想定する。
【００３１】
図５に示すように、ファイルのフルパス「D:\A\a1.xxx」を含むファイル更新イベントが通知されると、スタック部１３ｂは、ファイルａ１のフルパスのうち末尾のファイル名「a1.xxx」を削除する。このように末尾のファイル名を削除することによって、ファイル更新イベントが通知されたファイルａ１を配下に持つフォルダＡのフルパス「D:\A」に加工される。その上で、スタック部１３ｂは、フォルダＡが更新フォルダリスト１２ａに登録されているか否かを判定する。この場合には、更新フォルダリスト１２ａにフォルダが未登録であるので、スタック部１３ｂは、フォルダＡのフルパス「D:\A」を更新フォルダリスト１２ａに登録する。
【００３２】
このように、フォルダＡのフルパス「D:\A」が登録された後には、フォルダＡに格納されたファイルａ１、ファイルａ２及びファイルａ３のファイル更新イベントが通知されたとしても、更新フォルダリスト１２ａへの登録は実行しない。すなわち、図５の例では、更新フォルダリスト１２ａにフォルダＡのフルパスを登録した後に、ファイルａ２のフルパス「D:\A\a2.xxx」及びファイルａ３のフルパス「D:\A\a3.xxx」が通知される。これらは、いずれもフォルダＡに格納されたファイルであるので、更新フォルダリスト１２ａへの登録は実行されない。
【００３３】
その後、ファイルのフルパス「D:\A\K\k1.xxx」を含むファイル更新イベントが通知されると、スタック部１３ｂは、ファイルｋ１のフルパスのうち末尾のファイル名「k1.xxx」を削除する。このように末尾のファイル名を削除することによって、ファイル更新イベントが通知されたファイルｋ１を配下に持つフォルダＫのフルパス「D:\A\K」に加工される。その上で、スタック部１３ｂは、フォルダＫが更新フォルダリスト１２ａに登録されているか否かを判定する。この場合には、更新フォルダリスト１２ａにフォルダＫが未登録であるので、スタック部１３ｂは、フォルダＫのフルパス「D:\A\K」を更新フォルダリスト１２ａに登録する。その後、ファイルｋ２のフルパス「D:\A\K\a2.xxx」が通知されるが、これはフォルダＫに格納されたファイルであるので、更新フォルダリスト１２ａへの登録は実行されない。
【００３４】
さらに、ファイルのフルパス「D:\B\b1.xxx」を含むファイル更新イベントが通知されると、スタック部１３ｂは、ファイルｂ１のフルパスのうち末尾のファイル名「b1.xxx」を削除する。このように末尾のファイル名を削除することによって、ファイル更新イベントが通知されたファイルｂ１を配下に持つフォルダＢのフルパス「D:\B」に加工される。その上で、スタック部１３ｂは、フォルダＢが更新フォルダリスト１２ａに登録されているか否かを判定する。この場合には、更新フォルダリスト１２ａにフォルダＢが未登録であるので、スタック部１３ｂは、フォルダＫのフルパス「D:\B」を更新フォルダリスト１２ａに登録する。その後、ファイルｂ２のフルパス「D:\B\b2.xxx」が通知されるが、これはフォルダＢに格納されたファイルであるので、更新フォルダリスト１２ａへの登録は実行されない。
【００３５】
このように、スタック部１３ｂは、ＯＳ実行部１３ａから通知されるファイル更新イベントをファイル単位でリスト登録するのではなく、フォルダ単位でリスト登録する。このため、同じフォルダに格納されたファイルが更新された場合にそのファイルを改めてリスト登録せずともよくなるので、ファイル更新イベントをスタックする処理の負荷を軽減できる。
【００３６】
監視部１３ｃは、同期対象とするファイルの総数に対する更新のあったファイルの数の割合を監視する処理部である。この監視部１３ｃは、第１の周期および第２の周期の２つの異なる周期で上記の割合を監視する。なお、以下では、同期対象とするファイルの総数のことを「ファイル総数」と記載し、更新のあったファイルの数のことを「更新ファイル数」と記載する場合がある。
【００３７】
このうち、第１の周期は、ファイルリスト１２ｃを部分更新するよりも再作成した方がコストパフォーマンスがよくなってしまう前の段階でファイルリスト１２ｃの部分更新を実行するために設定される監視時間である。かかる第１の周期には、ファイル更新イベントが通知されることを契機に監視を実行することもできるが、ファイル更新イベントが短期間に集中して通知された場合には監視の処理負荷が高くなる場合があるので、例えば、１０秒周期などの周期が設定される。一方、第２の周期は、定期または定時にファイルリスト１２ｃを部分更新した方がよいか、あるいは再作成した方がよいのかを判定するために設定される監視時間であり、第１の周期よりも長い周期、例えば１時間などの周期が設定される。
【００３８】
例えば、監視部１３ｃは、前回に監視を実行してから第１の周期が経過した場合に、ファイルリスト１２ｃを部分更新するか否かを判定する第１の監視処理を実行する。これを説明すると、まず、監視部１３ｃは、更新フォルダリスト１２ａにスタックがあるか否かを判定する。このとき、監視部１３ｃは、更新フォルダリスト１２ａにスタックがある場合に、配下数リスト１２ｂに搭載されているファイル数を合計することによってファイル総数ｆ１を算出する。続いて、監視部１３ｃは、配下数リスト１２ｂに搭載されているファイル数のうち、更新フォルダリスト１２ａにスタックされたフォルダが配下に持つファイル数を合計することによって更新ファイル数ｆ２を算出する。その上で、監視部１３ｃは、ファイル総数ｆ１に対する更新ファイル数ｆ２の割合、すなわちｆ２／ｆ１が所定の閾値βを超えるか否かを判定する。このとき、ファイル総数ｆ１に対する更新ファイル数ｆ２の割合が閾値βを超える場合には、後述の部分更新部１３ｄによってファイルリスト１２ｃの部分更新が実行される。
【００３９】
また、監視部１３ｃは、前回に監視を実行してから第２の周期が経過した場合、図示しないユーザインタフェースを介して同期指示を受け付けた場合、あるいはコンソール等の外部装置から同期指示を受け付けた場合などに、次のような処理を起動する。すなわち、監視部１３ｃは、ファイルリスト１２ｃを部分更新するか、あるいは再作成するかを判定する第２の監視処理を実行する。これを説明すると、監視部１３ｃは、上記の第１の監視処理と同様に、更新フォルダリスト１２ａにスタックがある場合に、ファイル総数ｆ１及び更新ファイル数ｆ２を算出する。その上で、監視部１３ｃは、ファイル総数ｆ１に対する更新ファイル数ｆ２の割合、すなわちｆ２／ｆ１が所定の閾値βを超えるか否かを判定する。このとき、ファイル総数ｆ１に対する更新ファイル数ｆ２の割合が閾値αを超える場合には、後述の作成部１３ｅによってファイルリスト１２ｃが再作成される。一方、ファイル総数ｆ１に対する更新ファイル数ｆ２の割合が閾値αを超えない場合には、後述の部分更新部１３ｄによってファイルリスト１２ｃの部分更新が実行される。
【００４０】
このように、監視部１３ｃは、配下数リスト１２ｂに搭載されているファイル数のうち、更新フォルダリスト１２ａにスタックされたフォルダが配下に持つファイル数を合計することによって最大の更新ファイル数を見積もる。このため、ファイル更新イベントをファイル単位でスタックせずとも、更新があったファイルが更新ファイル数から洩れることなく、更新ファイル数を求めることができる。
【００４１】
部分更新部１３ｄは、ファイルリスト１２ｃを部分更新する処理部である。一態様としては、部分更新部１３ｄは、ファイル総数に対する更新ファイル数の割合が第１の監視処理にて閾値βを超えた場合、あるいは第２の監視処理にて閾値αを超えなかった場合に、ファイルリスト１２ｃを部分更新する。
【００４２】
これを説明すると、部分更新部１３ｄは、更新フォルダリスト１２ａにスタックされたフォルダのフルパスを指定して当該フォルダ配下のファイルの取得要求をＯＳ実行部１３ａに通知する。そして、部分更新部１３ｄは、ＯＳ実行部１３ａからフォルダ配下のファイルを取得すると、所定のハッシュ関数を用いてファイルのハッシュ値を算出する。その後、部分更新部１３ｄは、ファイルリスト１２ｃに登録されたファイルのうち更新フォルダリスト１２ａにスタックされたフォルダの配下にあるファイルを削除する。その上で、部分更新部１３ｄは、ＯＳ実行部１３ａから取得したファイルのフルパス、サイズ、属性およびハッシュ値を対応付けたデータをファイルリスト１２ｃに追加する。このように、更新フォルダリスト１２ａにスタックされたフォルダ配下のファイルに関するリストがファイルリスト１２ｃにマージされる。これによって、ファイルリスト１２ｃが部分更新されることになる。
【００４３】
ここで、上記の「閾値β」は、システムリソースの空き状況、プロセッサの性能またはディスクのアクセス性能のうち少なくとも１つを用いて設定される。すなわち、上記の閾値βの値を小さく設定すると、ファイルリスト１２ｃの部分更新が実行される頻度も高くなる。このように、ファイルリスト１２ｃが部分更新される頻度を過度に高くすると、メインサーバ１０のシステムリソースを定常的に圧迫する上、定期または定時に実行される第２の監視処理を実行する意義が薄くなる。このことから、第２の監視処理に用いられる閾値αよりも低い値であってメインサーバ１０のＣＰＵやメモリの使用率が低くなるほど値を低く、ディスクへのアクセス速度が高いほど値が低くなるように定められた閾値βの算出アルゴリズムによって算出された閾値βが監視部１３ｃの第１の監視処理に用いられる。
【００４４】
作成部１３ｅは、ファイルリスト１２ｃを作成する処理部である。一態様としては、作成部１３ｅは、記憶部１２にファイルリスト１２ｃが未登録である場合に、ファイルリスト１２ｃを新規作成する。他の一態様としては、作成部１３ｅは、ファイル総数に対する更新ファイル数の割合が閾値αを超えた場合に、ファイルリスト１２ｃを再作成する。なお、ファイルリスト１２ｃの新規作成および再作成は、以下に説明するように、同様の処理が実行される。
【００４５】
これを説明すると、作成部１３ｅは、同期対象のフォルダのうち最上層に位置するルートフォルダを指定してルートフォルダ及びその下位のフォルダに格納された全てのファイルの取得要求をＯＳ実行部１３ａに通知する。このように、作成部１３ｅは、ＯＳによって提供されるフォルダ監視用のＡＰＩを用いて、ＯＳ実行部１３ａから同期対象とする全てのファイルを取得する。その後、作成部１３ｅは、ＯＳ実行部１３ａから取得した同期対象のファイルごとに、所定のハッシュ関数を用いてファイルのハッシュ値を算出する。その上で、作成部１３ｅは、ＯＳ実行部１３ａから取得した同期対象のファイルごとにフルパス、サイズ、属性およびハッシュ値を対応付けることによってファイルリスト１２ｃに作成する。そして、作成部１３ｅは、記憶部１２にファイルリスト１２ｃが未登録である場合には、作成したファイルリスト１２ｃを記憶部１２に登録する。一方、作成部１３ｅは、記憶部１２にファイルリスト１２ｃが既に登録されている場合には、今回再作成したファイルリスト１２ｃを前回作成されていたファイルリストに上書き保存する。
【００４６】
ここで、上記の「閾値α」は、同期対象とするファイルの総数、１つのファイルにつき部分更新をファイルリスト１２ｃにマージするマージ所要時間または１つのファイルにつきハッシュ値の算出にかかる算出所要時間のうち少なくとも１つを用いて設定される。
【００４７】
図６及び図７は、ファイルリスト１２ｃの作成所要時間と更新ファイル数の関係を示すグラフの模式図である。図６及び図７では、図中のグラフの縦軸がファイルリスト１２ｃの作成所要時間を指し、また、図中のグラフの横軸が更新ファイル数を指す。また、図６に示す一点鎖線６０は、ファイルリスト１２ｃの再作成所要時間のグラフを示す。さらに、図６に示す実線６１は、ファイルリスト１２ｃの部分更新所要時間のグラフを示す。また、図７に示す一点鎖線７０は、ハッシュ値の算出所要時間を含む再作成所要時間のグラフを示す。また、図７に示す二点鎖線７１は、ハッシュ値の算出所要時間を含む部分更新所要時間のグラフを示す。
【００４８】
図６に示すように、ファイルリスト１２ｃの再作成は、同期対象とするファイル総数にしか依存しない。よって、再作成所要時間のグラフ６０は、更新ファイル数の多寡にかかわらず、所要時間は常に一定である。一方、部分更新所要時間のグラフ６１は、更新ファイル数が増加するほど所要時間が増加する。
【００４９】
そして、ファイルリスト１２ｃを再作成する場合には、更新フォルダリスト１２ａに登録されているフォルダ配下のファイルを対象に、前回作成されていたリストデータを削除した上で今回作成したリストデータがマージされる。このため、ファイルリスト１２ｃを部分更新する場合には、更新フォルダリスト１２ａに登録されているフォルダ配下のファイルのリストデータを削除する分、ファイルリスト１２ｃを再作成する場合よりもファイル１つ当たりの所要時間が長くなる。それゆえ、更新ファイル数によっては、部分更新所要時間のグラフ６１が再作成所要時間のグラフ６０よりも上回る場合がある。
【００５０】
このことから、ファイル１つ当たりのマージ所要時間から再作成所要時間のグラフ６０及び部分更新所要時間のグラフ６１の交点となる更新ファイル数を求めた上でその交点の更新ファイル数ｆα１と同期対象とするファイルの総数から閾値αを算出することができる。かかる閾値αを採用した場合には、部分更新所要時間のグラフ６１が再作成所要時間のグラフ６０と交わるまでは部分更新部１３ｄにファイルリスト１２ｃを部分更新させることができる。さらに、部分更新所要時間のグラフ６１が再作成所要時間のグラフ６０を上回る場合には作成部１３ｅにファイルリスト１２ｃを再作成させることができる。したがって、閾値αを採用すれば、ファイルリスト１２ｃの部分更新または再作成を適応制御できる。
【００５１】
さらに、ファイルの同一性をチェックするためにファイルのハッシュ値をファイルリスト１２ｃに含める場合には、ハッシュ値の算出所要時間をパラメータに含めて閾値αを設定するのが好ましい。なぜなら、ハッシュ値の算出所要時間は、マージ所要時間と比較して非常に長いので、図７に示すように、ハッシュ値を算出しない場合の部分更新所要時間のグラフ６０と比べてハッシュ値の算出所要時間を含む部分更新所要時間のグラフ７１の傾きが小さくなるからである。これに伴って、再作成所要時間のグラフ７０とハッシュ値の算出所要時間を含む部分更新所要時間のグラフ７１との交点も右側にシフトする。
【００５２】
これらのことから、ファイルのハッシュ値を算出する場合には、ファイル１つ当たりのマージ所要時間及びファイル１つ当たりのハッシュ値の算出所要時間から２つのグラフの交点における更新ファイル数ｆα２を算出する。その上で、更新ファイル数ｆα２と同期対象とするファイルの総数から閾値αＨを算出するのが好ましい。かかる閾値αＨを採用した場合には、ファイルリスト１２ｃにファイルのハッシュ値を含める場合にも、ファイルリスト１２ｃの部分更新または再作成を適応制御できる。
【００５３】
同期処理部１３ｆは、複数のサブサーバ３０Ａ〜３０Ｃの間で互いが保持するデータを一致させる同期処理を実行する処理部である。一態様としては、同期処理部１３ｆは、第２の監視処理が実行された場合に、部分更新部１３ｄによって部分更新されたファイルリスト１２ｃまたは作成部１３ｅによって再作成されたファイルリスト１２ｃをサブサーバ３０へ転送する。その後、同期処理部１３ｆは、メインサーバ１０及びサブサーバ３０Ａ〜３０Ｃによって作成された２つのファイルリストの間で検出された差分のファイルをサブサーバ３０へ送信する。かかる差分のファイルがサブサーバ３０に格納されることによって、メインサーバ１０及びサブサーバ３０の間で両者が保持するデータの内容が一致することになる。
【００５４】
［処理の流れ］
次に、本実施例に係るメインサーバ１０の処理の流れについて説明する。なお、ここでは、（１）スタック処理を説明した後に（２）第１の監視処理を説明し、最後に、（３）第２の監視処理を説明することとする。
【００５５】
（１）スタック処理
図８は、実施例１に係るスタック処理の手順を示すフローチャートである。このスタック処理は、メインサーバ１０の電源がＯＮ状態である限り、繰り返し実行される処理である。
【００５６】
図８に示すように、ＯＳ実行部１３ａからファイル更新イベントが通知された場合（ステップＳ１０１肯定）に、スタック部１３ｂは、次のような処理を実行する。すなわち、スタック部１３ｂは、当該ファイルのフルパスのうち末尾のファイル名を削除することによってファイル更新イベントが通知されたファイルを配下に持つフォルダのフルパスを特定する（ステップＳ１０２）。
【００５７】
その後、スタック部１３ｂは、当該ファイルを配下に持つフォルダが更新フォルダリスト１２ａにスタック済みであるか否かを判定する（ステップＳ１０３）。このとき、フォルダが更新フォルダリスト１２ａにスタックされていない場合（ステップＳ１０３否定）に、スタック部１３ｂは、当該フォルダを更新フォルダリスト１２ａにスタックし（ステップＳ１０４）、上記のステップＳ１０１に戻る。
【００５８】
一方、フォルダが更新フォルダリスト１２ａにスタック済みである場合（ステップＳ１０３肯定）には、更新フォルダリスト１２ａへのスタックを実行せずに、上記のステップＳ１０１に戻る。
【００５９】
（２）第１の監視処理
図９は、実施例１に係る第１の監視処理の手順を示すフローチャートである。この第１の監視処理は、前回に第１の監視処理を実行してから第１の周期、例えば１０秒間が経過した場合に、処理が起動される。
【００６０】
図９に示すように、まず、監視部１３ｃは、更新フォルダリスト１２ａにスタックがあるか否かを判定する（ステップＳ２０１）。なお、更新フォルダリスト１２ａにスタックがない場合（ステップＳ２０１否定）には、ファイルリスト１２ｃを部分更新または再作成する必要がないので、そのまま処理を終了する。
【００６１】
このとき、更新フォルダリスト１２ａにスタックがある場合（ステップＳ２０１肯定）に、監視部１３ｃは、配下数リスト１２ｂに搭載されているファイル数を合計することによってファイル総数ｆ１を算出する（ステップＳ２０２）。
【００６２】
続いて、監視部１３ｃは、配下数リスト１２ｂに搭載されているファイル数のうち、更新フォルダリスト１２ａにスタックされたフォルダが配下に持つファイル数を合計することによって更新ファイル数ｆ２を算出する（ステップＳ２０３）。
【００６３】
その上で、監視部１３ｃは、ファイル総数ｆ１に対する更新ファイル数ｆ２の割合、すなわちｆ２／ｆ１が所定の閾値βを超えるか否かを判定する（ステップＳ２０４）。
【００６４】
ここで、ファイル総数ｆ１に対する更新ファイル数ｆ２の割合が閾値βを超える場合（ステップＳ２０４肯定）には、部分更新部１３ｄは、更新フォルダリスト１２ａにスタックされたフォルダを対象に、ファイルリスト１２ｃを部分更新する（ステップＳ２０５）。
【００６５】
その後、部分更新部１３ｄは、配下数リスト１２ｂのうちファイルリスト１２ｃを部分更新したフォルダの配下数を部分更新後のファイル数に更新する（ステップＳ２０６）。さらに、部分更新部１３ｄは、更新フォルダリスト１２ａをクリアし（ステップＳ２０７）、処理を終了する。
【００６６】
なお、ファイル総数ｆ１に対する更新ファイル数ｆ２の割合が閾値βを超えない場合（ステップＳ２０４否定）には、ファイルリスト１２ｃを部分更新する必要はないので、そのまま処理を終了する。
【００６７】
（３）第２の監視処理
図１０は、実施例１に係る第２の監視処理の手順を示すフローチャートである。この第２の監視処理は、前回に第２の監視処理を実行してから第２の周期、例えば１時間が経過した場合、図示しないユーザインタフェースを介して同期指示を受け付けた場合やコンソール等の外部装置から同期指示を受け付けた場合などに、処理が起動される。
【００６８】
図１０に示すように、まず、監視部１３ｃは、更新フォルダリスト１２ａにスタックがあるか否かを判定する（ステップＳ３０１）。なお、更新フォルダリスト１２ａにスタックがない場合（ステップＳ３０１否定）には、ファイルリスト１２ｃを部分更新または再作成する必要がないので、そのまま処理を終了する。
【００６９】
このとき、更新フォルダリスト１２ａにスタックがある場合（ステップＳ３０１肯定）に、監視部１３ｃは、配下数リスト１２ｂに搭載されているファイル数を合計することによってファイル総数ｆ１を算出する（ステップＳ３０２）。
【００７０】
続いて、監視部１３ｃは、配下数リスト１２ｂに搭載されているファイル数のうち、更新フォルダリスト１２ａにスタックされたフォルダが配下に持つファイル数を合計することによって更新ファイル数ｆ２を算出する（ステップＳ３０３）。
【００７１】
その上で、監視部１３ｃは、ファイル総数ｆ１に対する更新ファイル数ｆ２の割合、すなわちｆ２／ｆ１が所定の閾値αを超えるか否かを判定する（ステップＳ３０４）。
【００７２】
ここで、ファイル総数ｆ１に対する更新ファイル数ｆ２の割合が閾値αを超える場合（ステップＳ３０４肯定）には、作成部１３ｅは、ファイルリスト１２ｃを部分更新した方が時間がかかるので、ファイルリスト１２ｃを再作成する（ステップＳ３０５）。
【００７３】
その後、作成部１３ｅは、配下数リスト１２ｂに登録された各フォルダの配下数を再作成後のファイル数に更新する（ステップＳ３０６）。さらに、作成部１３ｅは、更新フォルダリスト１２ａをクリアし（ステップＳ３０７）、処理を終了する。
【００７４】
一方、ファイル総数ｆ１に対する更新ファイル数ｆ２の割合が閾値αを超えない場合（ステップＳ３０４否定）には、部分更新部１３ｄは、更新フォルダリスト１２ａにスタックされたフォルダを対象に、ファイルリスト１２ｃを部分更新する（ステップＳ３０８）。
【００７５】
その後、部分更新部１３ｄは、配下数リスト１２ｂのうちファイルリスト１２ｃを部分更新したフォルダの配下数を部分更新後のファイル数に更新する（ステップＳ３０６）。さらに、部分更新部１３ｄは、更新フォルダリスト１２ａをクリアし（ステップＳ３０７）、処理を終了する。
【００７６】
［実施例１の効果］
上述してきたように、本実施例に係るメインサーバ１０は、サブサーバ３０との間でファイルリストを用いて同期処理を行う場合に、ファイル総数に対する更新ファイル数の割合に応じてファイルリストの部分更新または再作成を適応制御する。例えば、本実施例に係るメインサーバ１０では、同期対象とするファイルの更新がファイルリスト１２ｃの一部に限られる場合にはファイルリスト１２ｃを部分更新する一方で、ファイルリスト１２ｃの全体にわたる場合にはファイルリスト１２ｃを再作成できる。したがって、本実施例に係るメインサーバ１０によれば、ファイルリストの作成時間を短縮できる。
【実施例２】
【００７７】
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【００７８】
［適用範囲］
例えば、上記の実施例１では、メインサーバ１０のファイルリストを作成する場合を例示したが、開示の装置はこれに限定されるものではない。例えば、図２に示したスタック部１３ｂ、監視部１３ｃ、部分更新部１３ｄ及び作成部１３ｅの各機能部をサブサーバ３０に実装することによって、サブサーバ３０がファイルリストを作成する場合にも本発明を適用できる。
【００７９】
また、上記の実施例１では、メインサーバ１０及び複数のサブサーバ３０間におけるファイルの同期方法について説明したが、必ずしも異なるコンピュータが同期対象とするファイルを保持している必要はない。すなわち、開示の装置は、複数のファイルシステム間でファイルを同期する場合、例えば１つのコンピュータに複数または異なる複数のファイルシステムが搭載される場合に同様に適用できる。例えば、開示の装置は、複数の仮想マシンを搭載するコンピュータが有するファイルシステム間でファイルを同期する場合に適用することもできるし、また、ディスクサーバが有するファイルシステム間でファイルを同期する場合に適用することもできる。
【００８０】
また、上記の実施例１では、同期処理に用いるファイルリストを作成する場合について例示したが、開示の装置はこれに限定されず、バックアップデータのファイルリストを作成するなど他の処理を高速化する場合にも同様に適用することができる。
【００８１】
［分散および統合］
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、スタック部１３ｂ、監視部１３ｃ、部分更新部１３ｄまたは作成部１３ｅをメインサーバ１０の外部装置としてネットワーク経由で接続するようにしてもよい。また、スタック部１３ｂ、監視部１３ｃ、部分更新部１３ｄまたは作成部１３ｅを別の装置がそれぞれ有し、ネットワーク接続されて協働することで、上記のメインサーバ１０の機能を実現するようにしてもよい。
【００８２】
［同期プログラム］
また、上記の実施例で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図１１を用いて、上記の実施例と同様の機能を有する同期プログラムを実行するコンピュータの一例について説明する。
【００８３】
図１１は、実施例１及び実施例２に係る同期プログラムを実行するコンピュータの一例について説明するための図である。図１１に示すように、コンピュータ１００は、操作部１１０ａと、スピーカ１１０ｂと、カメラ１１０ｃと、ディスプレイ１２０と、通信部１３０とを有する。さらに、このコンピュータ１００は、ＣＰＵ１５０と、ＲＯＭ１６０と、ＨＤＤ１７０と、ＲＡＭ１８０と有する。これら１１０〜１８０の各部はバス１４０を介して接続される。
【００８４】
ＨＤＤ１７０には、図１１に示すように、上記の実施例１で示したスタック部１３ｂ、監視部１３ｃ、部分更新部１３ｄ及び作成部１３ｅと同様の機能を発揮する同期プログラム１７０ａが予め記憶される。この同期プログラム１７０ａについては、図２に示した各々のスタック部１３ｂ、監視部１３ｃ、部分更新部１３ｄ及び作成部１３ｅの各構成要素と同様、適宜統合又は分離しても良い。すなわち、ＨＤＤ１７０に格納される各データは、常に全てのデータがＨＤＤ１７０に格納される必要はなく、処理に必要なデータのみがＨＤＤ１７０に格納されれば良い。
【００８５】
そして、ＣＰＵ１５０が、同期プログラム１７０ａをＨＤＤ１７０から読み出してＲＡＭ１８０に展開する。これによって、図１１に示すように、同期プログラム１７０ａは、同期プロセス１８０ａとして機能する。この同期プロセス１８０ａは、ＨＤＤ１７０から読み出した各種データを適宜ＲＡＭ１８０上の自身に割り当てられた領域に展開し、この展開した各種データに基づいて各種処理を実行する。なお、同期プロセス１８０ａは、図２に示したスタック部１３ｂ、監視部１３ｃ、部分更新部１３ｄ及び作成部１３ｅにて実行される処理、例えば図８〜図１０に示す処理を含む。また、ＣＰＵ１５０上で仮想的に実現される各処理部は、常に全ての処理部がＣＰＵ１５０上で動作する必要はなく、処理に必要な処理部のみが仮想的に実現されれば良い。
【００８６】
なお、上記の同期プログラム１７０ａについては、必ずしも最初からＨＤＤ１７０やＲＯＭ１６０に記憶させておく必要はない。例えば、コンピュータ１００に挿入されるフレキシブルディスク、いわゆるＦＤ、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させる。そして、コンピュータ１００がこれらの可搬用の物理媒体から各プログラムを取得して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ１００に接続される他のコンピュータまたはサーバ装置などに各プログラムを記憶させておき、コンピュータ１００がこれらから各プログラムを取得して実行するようにしてもよい。
【符号の説明】
【００８７】
１    データ配布システム
１０    メインサーバ
１１    通信Ｉ／Ｆ部
１２    記憶部
１２ａ  更新フォルダリスト
１２ｂ  配下数リスト
１２ｃ  ファイルリスト
１３    制御部
１３ａ  ＯＳ実行部
１３ｂ  スタック部
１３ｃ  監視部
１３ｄ  部分更新部
１３ｅ  作成部
１３ｆ  同期処理部
３０Ａ，３０Ｂ，３０Ｃ    サブサーバ
【図１】
0005776499.tif 000002
【図２】
0005776499.tif 000003
【図３】
0005776499.tif 000004
【図４】
0005776499.tif 000005
【図５】
0005776499.tif 000006
【図６】
0005776499.tif 000007
【図７】
0005776499.tif 000008
【図８】
0005776499.tif 000009
【図９】
0005776499.tif 000010
【図１０】
0005776499.tif 000011
【図１１】
0005776499.tif 000012