以下、実施形態について、図面を参照しながら詳細に説明する。まず、図1〜3を参照して第1実施形態について説明する。図1〜3は、後述の第2および第3実施形態にも当てはまる図である。続いて、図4〜15を参照して第2実施形態について説明し、図16〜20を参照して第3実施形態について説明する。最後にその他の変形例についても説明する。
さて、図1は、第1実施形態におけるバックアップ制御方法のフローチャートである。図1の処理を実行する情報処理装置は、具体的には、ユーザが使う複数台の端末のうちの1台であってもよい。図1の処理を実行する情報処理装置は、複数台の端末のうち少なくとも1台以上とネットワークを介して通信を行うコンピュータ(例えばサーバ)であってもよい。
利用可能な端末の種類は様々である。例えば、各端末は、以下に例示する様々な種類の端末のうちのいずれかであってもよい。
・デスクトップ型のPC(Personal Computer)
・ラップトップ型のPC
・タブレット型端末
・スマートフォン
・携帯電話
・PDA(Personal Digital Assistant)
・携帯型メディアプレーヤ
・ディジタルカメラ
情報処理装置は、図1の処理を実行することにより、複数台の端末上に(または、複数台の端末と上記のコンピュータ上に)分散して記憶されている複数個のファイルの中から、バックアップ対象の1つ以上のファイルを選択する。詳しくは後述するとおり、情報処理装置は、バックアップすることが好ましいファイルに高い優先度を割り当て、優先度にしたがってファイルを選択する。情報処理装置による自動選択により、ファイルのバックアップが効率化される。具体的には以下のとおりである。
ユーザが複数台の端末を使う場合、複数台の端末(または、複数台の端末と上記のコンピュータ)に記憶されている全ファイルをバックアップすることは、時間と記憶容量の無駄につながり得る。
例えば、複数台の端末上には、大量のファイルが分散して記憶されている場合があり、大量のファイルの中には、重要性の低いファイルもあり得るし、複数台の端末間でいくつかのファイルが重複することもあり得る。ユーザは、重要性の低いファイルのバックアップのために記憶領域を使いたくないかもしれない。また、複数台の端末間で重複しているファイルは、事実上バックアップされているので、当該ファイルをさらにバックアップする必要性は低い。よって、全ファイルをバックアップすることは、時間と記憶容量の無駄につながり得る。
一方で、ユーザが大量のファイルの中からバックアップ対象のファイルを手動で適切に選択することは、非常に手間がかかるので、現実的には困難である。
第1実施形態では、複数台の端末上に(または、複数台の端末と上記のコンピュータ上に)記憶されている複数個のファイルの中から、一部のファイルが情報処理装置により自動的に選択され、選択されたファイルがバックアップされる。よって、第1実施形態では、バックアップにかかる時間と記憶領域を節約する効果が得られる。さらに、情報処理装置による自動選択により、ユーザがバックアップ対象のファイルを手動で選択する手間もなくせる。
また、情報処理装置が各ファイルについて計算する優先度は、バックアップすることが好ましいファイルほど高くなるように、定義される。情報処理装置が優先度を計算するための式の定義は、可変であってもよい。例えば、優先度を計算するための式の定義(例えば式の中のパラメタの値)は、「どういうファイルをバックアップすることが好ましいとユーザが考えているのか」ということに応じて、適宜決められてもよい。つまり、情報処理装置は、ユーザの考えに応じてカスタマイズされた式にしたがって優先度を計算してもよい。もちろん、情報処理装置は、デフォルトの式にしたがって優先度を計算してもよい。
いずれにしろ、第1実施形態によれば、バックアップすることが好ましいファイルほど、優先度が高いので、優先的に選択され、バックアップされる。その結果、時間と記憶領域の無駄が減る。また、ユーザは、大量のファイルの中からバックアップ対象の一部のファイルを選び出す手間をかけなくてよいので、ユーザの負担も少ない。
以上のようなバックアップの効率化は、具体的には、図1の処理により実現される。以下、図1の処理について詳しく説明する。
ステップS1で、情報処理装置は、複数台の端末上に(または、複数台の端末と上記のコンピュータ上に)分散して記憶されている複数個のファイルの各々に対して行われた各操作について、当該操作の種類を示す履歴情報を取得する。操作の種類は、例えば、作成、編集、閲覧、コピー、変名(rename)、ディレクトリ間での移動(move)、送信、受信などである。編集操作は、換言すれば変更操作である。履歴情報は、当該操作が行われた時点や当該操作にかかった時間の長さをさらに示していてもよい。
次にステップS2で、情報処理装置は、追跡情報を取得する。追跡情報は、複製操作によって生じる親ファイルと子ファイルの関係を示す。なお、「複製操作」は、より具体的には、以下のいずれの操作であってもよい。
・複数台の端末のうちの1台の端末内で行われる複製操作。例えば、端末内でファイルをコピーする操作。
・複数台の端末のうちの2台の端末間で行われる複製操作。例えば、第1の端末に記憶されているファイルを、第1の端末が第2の端末に送信し、第2の端末が、受信したファイルを第2の端末内に記憶する場合がある。この場合、結果として、端末間でファイルが複製(duplicate)される。
・複数台の端末のうちの1台と、複数台の端末とネットワークを介して通信を行うコンピュータ(例えばサーバ)との間で行われ複製操作。例えば、第1の端末に記憶されているファイルを、第1の端末がサーバに送信(つまりアップロード)し、サーバが、受信したファイルをサーバ内に記憶する場合がある。この場合、結果として、端末・サーバ間でファイルが複製される。また、サーバ上のファイルを第2の端末が受信(つまりダウンロード)する場合も、端末・サーバ間でファイルが複製される。
以下では説明の便宜上、第1のファイルを複製することで第2のファイルが得られた場合、第1のファイルを「親ファイル」ともいい、第2のファイルを「子ファイル」ともいう。親ファイルは、換言すれば複製元のファイルであり、子ファイルは、親ファイルに対する複製操作により新たに作成されたファイルである。また、以下の説明では、木構造に関する「根」・「葉」・「先祖」・「子孫」などの用語を用いて「根ファイル」や「子孫ファイル」などの言い方をすることもある。追跡情報により、ファイル間の親子関係を追跡する(track)ことが可能となる。
なお、ステップS1とS2の実行順序は逆でもよいし、ステップS1とS2が並行して実行されてもよい。また、ステップS1における履歴情報の取得は、時間的に分散していてもよく、ステップS2における追跡情報の取得も、時間的に分散していてもよい。
例えば、1つのファイルに対して1つの操作が行われるたびに、当該操作についての履歴情報を情報処理装置が取得してもよい。または、いくつかのファイルに対してそれぞれ1回以上行われた操作の各々についての履歴情報を、情報処理装置が一度に取得してもよい。
同様に、1回の複製操作のたびに、当該複製操作によって生じた親子関係を示す追跡情報を情報処理装置が取得してもよい。または、いくつかの複製操作についての追跡情報を、情報処理装置が一度に取得してもよい。
また、あるファイルに対するある操作についての履歴情報は、情報処理装置自体により生成される場合もあり得る。つまり、情報処理装置は、操作の検出に応じて自ら履歴情報を生成することで、履歴情報を取得する場合がある。他方、情報処理装置は、他のファイルに対する操作についての履歴情報を、他の装置から受信する場合もあり得る。つまり、情報処理装置は、受信により履歴情報を取得する場合があり得る。情報処理装置は、一部の履歴情報を生成することにより取得し、残りの履歴情報を他の装置から受信することにより取得してもよい。
同様に、ある複製操作に関する追跡情報は、情報処理装置自体により生成される場合もあり得る。つまり、情報処理装置は、複製操作の検出に応じて自ら追跡情報を生成することで、追跡情報を取得する場合がある。他方、情報処理装置は、他の複製操作に関する追跡情報を、他の装置から受信する場合もあり得る。つまり、情報処理装置は、受信により追跡情報を取得する場合があり得る。情報処理装置は、一部の追跡情報を生成することにより取得し、残りの追跡情報を他の装置から受信することにより取得してもよい。
例えば、図1の処理を実行する情報処理装置が複数台の端末のうちの第1の端末である場合があり得る。この場合、情報処理装置は、複数個のファイルのうちで、第1の端末に記憶されているいずれかのファイルに対して、第1の端末上で行われる操作を検出してもよい。そして、情報処理装置は、検出した操作の種類を示す履歴情報を生成してもよい。
また、図1の処理を実行する情報処理装置が上記第1の端末の場合、情報処理装置は、複数個のファイルのうちで、複数台の端末のうちのある特定の端末に記憶されているいずれかのファイルの、特定の端末から第1の端末への送信を検出してもよい。そして、情報処理装置は、特定の端末から第1の端末へ送信されたファイルに関する情報を推定してもよい。例えば、情報処理装置は、ファイルの作成日時を推定してもよい。
また、特定の端末は、具体的には、履歴情報を生成する機能を持たない端末であってもよいし、ネットワーク通信機能を持たない端末であってもよい。情報処理装置は、上記ファイルに関して、「作成」(具体的には、特定の端末における作成)という種類を示す履歴情報を、特定の端末の代わりに生成してもよい。
また、図1の処理を実行する情報処理装置が上記第1の端末の場合、情報処理装置は、第1の端末に記憶されている第1のファイルを第1の端末内で第2のファイルに複製する複製操作を検出してもよい。そして、情報処理装置は、第1のファイルと第2のファイルを関連づける追跡情報を生成してもよい。
逆に、図1の処理を実行する情報処理装置が、複数台の端末のうち少なくとも1台以上とネットワークを介して通信を行うコンピュータ(例えばサーバ)である場合もあり得る。この場合、情報処理装置は、複数台の端末のうちの第1の端末に記憶されているいずれかのファイルに対して第1の端末上で行われる操作の種類を示す履歴情報を、第1の端末から受信してもよい。また、この場合、情報処理装置は、一部の追跡情報を受信することにより取得し、他の追跡情報を生成することにより取得してもよい。
例えば、複数個のファイルのうちで、第1の端末に記憶されている第3のファイルを、第1の端末が第1の端末内で第4のファイルに複製した場合に、情報処理装置は、第1の端末から、第3のファイルと第4のファイルを関連づける追跡情報を受信してもよい。また、複数個のファイルのうちで、第1の端末に記憶されている第5のファイルを、第1の端末が第2の端末に送信し、送信された第5のファイルを第2の端末が第6のファイルとして第2の端末内に記憶した場合に、情報処理装置は、追跡情報を生成してもよい。具体的には、情報処理装置は、第1の端末からの第5のファイルに関する通知と、第2の端末からの第6のファイルに関する通知に基づいて、第5のファイルと第6のファイルを関連づける追跡情報を生成してもよい。
第1の端末からの第5のファイルに関する上記通知は、具体的には、第1の端末における第5のファイルに対する「送信」という操作の種類を示す履歴情報であってもよい。同様に、第2の端末からの第6のファイルに関する上記通知は、具体的には、第2の端末における第6にファイルに対する「受信」という操作の種類を示す履歴情報であってもよい。つまり、情報処理装置は、2台の端末からそれぞれ送信される履歴情報を受信し、履歴情報に基づいて追跡情報を生成することで、追跡情報を取得する場合もあり得る。
また、図1の処理を実行する情報処理装置が、複数台の端末のうち少なくとも1台以上とネットワークを介して通信を行うコンピュータ(例えばサーバ)である場合、端末と情報処理装置の間の複製操作に関して、情報処理装置は以下のように動作してもよい。複数個のファイルのうちで、第1の端末に記憶されている第7のファイルを、第1の端末が情報処理装置に送信し、送信された第7のファイルを情報処理装置が第8のファイルとして情報処理装置内に記憶することがある。この場合、情報処理装置は、第7のファイルと第8のファイルを関連づける追跡情報を生成することで、追跡情報を取得することができる。
以上説明したように、ステップS1〜S2における情報の取得の具体的手順は、実施形態に応じて様々であってよい。
さて、続くステップS3〜S5で情報処理装置は、履歴情報と追跡情報を用いて、上記複数個のファイルに含まれる個々のファイルについて、優先度を算出する。優先度は、具体的には、以下の事柄に基づく。
・当該個々のファイルに対して行われた操作の種類。
・追跡情報により当該個々のファイルと関連づけられている別のファイルが上記複数個のファイルの中にあるか否か。
・上記別のファイルがある場合は、当該個々のファイルのデータと上記別のファイルのデータが等しいか否か。
具体的には、ステップS3で、情報処理装置は、複数台の端末上(または、複数台の端末と上記のコンピュータ上)の上記複数個のファイルのうち、優先度を算出していないファイルがあるか否かを判断する。もし、優先度を算出していないファイルがまだ残っていれば、図1の処理はステップS4に移行する。逆に、すべてのファイルについて優先度が算出済みなら、図1の処理はステップS6に移行する。
ステップS4で情報処理装置は、優先度を算出していないファイルを1つ選ぶ。説明の便宜上、以下では、ステップS4で選ばれたファイルを「選択ファイル」という。
次に、ステップS5で情報処理装置は、履歴情報と追跡情報を用いて、選択ファイルの優先度を算出する。優先度が何に基づくかは上述のとおりであるが、より詳しく説明すると、以下のとおりである。
・選択ファイルに対して行われた操作の種類(例えば、選択ファイルに関して何らかの操作が今までに5回行われた場合には、5回の操作それぞれの種類)。選択ファイルに対して行われた操作の種類は、履歴情報により示される。
・追跡情報により選択ファイルと関連づけられている別のファイル(つまり、選択ファイルの親ファイルまたは選択ファイルの子ファイル)が存在するか否か。
・追跡情報により選択ファイルと関連づけられている別のファイルが存在する場合、選択ファイルのデータと、追跡情報により選択ファイルと関連づけられている別のファイルのデータとが等しいか否か。
ステップS5での優先度の算出後、図1の処理はステップS3に戻る。そして、情報処理装置は、ステップS3〜S5の繰り返しによりすべてのファイルについて優先度を算出すると、次に、ステップS6〜S7で、ある条件を満たす範囲内で、優先度の降順に、上記複数個のファイルの中から1つ以上のファイルを選択する。
なお、上記「ある条件」とは、バックアップする対象のファイルの量に関して指定される条件である。例えば、「合計で15GB(ギガバイト)まで」のように、ファイルの合計サイズによって条件が指定されてもよい。または、「1000個のファイルまで」のように、ファイルの個数によって条件が指定されてもよい。
具体的には、ステップS6で、情報処理装置は、「バックアップ対象としては未選択のファイルのうちで優先度が最高のファイルを選択しても、指定された条件が満たされるか否か」を判断する。もし、バックアップ対象としては未選択のファイルのうちで優先度が最高のファイルを選択しても、指定された条件がまだ満たされるならば、図1の処理はステップS7に移行する。
例えば、上記のように「合計で15GBまで」という条件が指定されているとする。この場合、もし、バックアップ対象としては未選択のファイルのうちで優先度が最高のファイルを選択しても、バックアップ対象として選択済みのファイルの合計サイズが15GB以下ならば、図1の処理はステップS7へと移行する。
そして、ステップS7で、情報処理装置は、バックアップ対象としては未選択のファイルのうちで優先度が最高のファイルを、バックアップ対象として選択する。ステップS7での選択後、図1の処理はステップS6に戻る。
以上のようにしてステップS6〜S7が繰り返されると、優先度の高いファイルから順にバックアップ対象のファイルとして選ばれる。そして、ある個数のファイルが選ばれた後のステップS6において、「バックアップ対象としては未選択のファイルのうちで優先度が最高のファイルを選択すると、指定された条件が満たされなくなる」と判断される。ステップS6でこのように判断されると、図1の処理は終了する。なお、もし情報処理装置がすべてのファイルを選択し終わってもなお、指定された条件が満たされる場合(例えば、全ファイルの合計サイズよりも大きな容量が条件として指定された場合など)も、図1の処理は終了する。
以上のようにして図1の処理によりバックアップ対象のファイルを選択した後、情報処理装置は、選択結果にしたがって適宜の処理を行う。例えば、情報処理装置自体がファイルのバックアップを実行する場合、情報処理装置は、選択したファイルをバックアップする。
また、情報処理装置自体はファイルのバックアップを実行しない場合もあり得る。この場合、情報処理装置は、ファイルのバックアップを実行する装置(例えば、複数台の端末のうち、バックアップソフトウェアがインストールされた端末)に対して、選択結果を通知する。すると、図1の選択結果に応じてバックアップが行われる。選択結果の通知は、具体的には、バックアップ対象として情報処理装置が選択した各ファイルを識別するファイル識別情報を含む。ファイル識別情報は、例えば、ファイルが記憶されている端末を識別する情報と、端末内でファイルを識別する情報(例えばファイルの絶対パス)を含む。
ところで、上記のとおり、情報処理装置が優先度を計算するための式は、バックアップすることが好ましいファイルほど、優先度が高くなるように決められる。以下に、優先度に関する具体例をいくつか示す。
例えば、ステップS4で情報処理装置が、ある根ファイル(すなわち複数個のファイルのうち、他のファイルに対する複製操作により得られたのではないファイル)を選択したとする。この場合、情報処理装置がステップS5で根ファイルの優先度を算出する処理は、1回以上の複製操作により根ファイルから直接または間接に得られた1個以上の子孫ファイルの各々に対して行われた各操作に応じて、根ファイルの優先度を上げる処理を含んでもよい。
例えば、ユーザは、カメラを有する端末を使って写真を撮影する場合がある。撮影の結果として、画像ファイルが端末に記憶される。ユーザは、オリジナルの画像ファイルをそのまま残す一方で、オリジナルの画像ファイルをコピーし、コピーにより得られた新たな画像ファイルをレタッチすることがある。ユーザは、レタッチした画像ファイルをさらにコピーし、コピーにより得られた新たな画像ファイルをさらにレタッチすることもある。このようにして、ユーザは、異なるバージョンの画像ファイルをいくつか作成することがある。
この場合、オリジナルの画像ファイルが根ファイルである。根ファイルから以上のようにして直接または間接に派生した画像ファイルは、子孫ファイルである。
一方、「ユーザは、ユーザが不要と考えるファイルに対してわざわざ多くの操作を行うことはあまりない」と想定される。換言すれば、根ファイルから子孫ファイルがいくつも作成される場合、ユーザが根ファイルを重要視している蓋然性が高い。
また、仮に子孫ファイルが消えた場合であっても、ユーザが過去と同じ操作を繰り返すことで、削除されたのと同じファイルを再作成することは決して不可能ではない。しかし、根ファイルが消えた場合に、根ファイルを再現することは困難である。
そのため、根ファイルの優先度を高めること(すなわち、根ファイルが優先的にバックアップされるようにし、根ファイルの消失を防ぐこと)は、好ましい。そこで、上記のように情報処理装置は、根ファイルの優先度を算出する際に、各子孫ファイルに対して行われた各操作に応じて、根ファイルの優先度を上げてもよい。もちろん、情報処理装置は、根ファイル自体に対して行われた各操作にも応じて、根ファイルの優先度を上げることが好ましい。
また、根ファイルだけでなく、葉ファイル(つまり、根ファイルから派生した1個以上の子孫ファイルのうちで、どの複製操作における複製元ファイルでもないファイル)も、比較的重要性が高いと考えられる。なぜなら、根ファイルでも葉ファイルでもない中間ファイルは、編集過程の途中の状態を示すものであるのに対し、葉ファイルは最新の編集結果を反映した最新バージョンのファイルだからである。よって、情報処理装置は、ステップS4で葉ファイルを選んだ場合には、選んだ葉ファイルの優先度を、ステップS5において根ファイルの優先度に応じて上げてもよい。
ところで、ステップS5に関して説明したように、選択ファイルの優先度は、選択ファイルのデータと、追跡情報により選択ファイルと関連づけられている別のファイルのデータとが等しいか否かにも基づく。具体的には、両ファイルのデータが等しい場合よりも、両ファイルのデータが等しくない場合の方が、選択ファイルの優先度がより高い。
例えば、複数個のファイルのうちの第1のファイルに対する複製操作により第2のファイルが得られたとする。複製操作が行われた後、第1のファイルが編集されることもあるし、第1のファイルが編集されないこともある。同様に、複製操作が行われた後、第2のファイルが編集されることもあるし、第2のファイルが編集されないこともある。よって、第1のファイルのデータと第2のファイルのデータが等しいとは限らない。
第1のファイルのデータと第2のファイルのデータが等しい場合は、第2のファイルを第1のファイルのバックアップコピーと見なすことができ、第1のファイルを第2のファイルのバックアップコピーと見なすこともできる。つまり、第1のファイルのデータと第2のファイルのデータが等しい場合は、第1のファイルをバックアップする必要性はそれほど高くないし、第2のファイルをバックアップする必要性もそれほど高くない。
したがって、第1のファイルのデータと第2のファイルのデータが異なる場合は、第1のファイルのデータと第2のファイルのデータが等しい場合よりも、第1のファイルと第2のファイルをバックアップする必要性が高い。そこで、優先度は、以下のように定義されていてもよい。
・第1のファイルのデータと第2のファイルのデータが等しい場合よりも、第1のファイルのデータと第2のファイルのデータが等しくない場合の方が、第1のファイルの優先度がより高い。
・第1のファイルのデータと第2のファイルのデータが等しい場合よりも、第1のファイルのデータと第2のファイルのデータが等しくない場合の方が、第2のファイルの優先度もより高い。
ところで、ファイルは、ユーザの指示に応じて変更される場合もあり得るし、自動的に変更される場合もあり得る。例えば、ある種のファイルには、デーモンにより所定の時間間隔でデータが追加されることがある。ユーザにとっての重要性は、ユーザ自身が変更したファイルの方が、ユーザの意思と関係なく自動的に更新されるファイルよりも、高いと想定される。
ここで、説明の便宜上、ファイルに対する操作のうち、ユーザからの指示に基づく操作を、「ユーザ主導(user-driven)操作」という。逆に、複数台の端末のうち当該ファイルを記憶する端末が所定のプログラムを実行することにより、自動的に行われる操作を、「自動操作」という。
ユーザ主導操作は、自動操作よりも、優先度をより高めるように、優先度に影響してもよい。つまり、情報処理装置は、ユーザ手動操作が行われた場合には、自動操作が行われた場合よりも、より高い優先度を算出してもよい。
ところで、第1の端末が第2の端末またはサーバから受信したファイルと、第1の端末にしか存在しないファイルを比較すると、前者のファイルをバックアップする必要性は、後者のファイルをバックアップする必要性よりも低い。なぜなら、「前者のファイルのバックアップコピーが、第2の端末またはサーバにある」と見なせるからである。
そこで、新規ファイルを作成する作成操作は、他の操作(より具体的には、例えば受信操作)よりも、優先度をより高めるように、優先度に影響してもよい。つまり、情報処理装置は、作成操作が行われた場合には、他の操作が行われた場合よりも、より高い優先度を算出してもよい。すると、大まかな傾向としては、例えば、第1の端末により作成されて第1の端末にしか存在しないファイルの優先度を、第1の端末が第2の端末から受信したファイルの優先度よりも高くすることが可能となる。
ところで、履歴情報は、操作が行われた時点をさらに示してもよい。この場合、複数個のファイルの各々に対して行われた各操作について、当該操作が行われた時点が新しいほど、当該ファイルの優先度が高くてもよい。なぜなら、ユーザが長期間にわたって操作を行っていないファイルよりも、ユーザが最近何らかの操作(例えば、閲覧、編集、変名、コピー、送信など、何の操作であってもよい)を行ったファイルの方が、ユーザにとっての重要度が高いと考えられるからである。
また、履歴情報は、操作にかかった時間をさらに示してもよい。この場合、複数個のファイルの各々に対して行われた各操作について、当該操作にかかった時間が長いほど、当該ファイルの優先度が高くてもよい。例えば、ユーザが長時間かけて編集したファイルの重要性は高いと考えられるので、操作にかかった時間に応じて優先度が決められてもよい。
続いて、図2を参照して、第1実施形態が適用可能なシステムの構成例について説明する。図1に関する上記の説明は、様々な構成のシステムに適用可能である。図2には、システム構成の一例が示されている。
図2のシステム100は、ネットワーク101に接続された様々な装置を含む。ネットワーク101は、LAN(Local Area Network)、WAN(Wide Area Network)、インターネット、それらの組み合わせのいずれであってもよい。
例えば、あるユーザは、スマートフォン102とタブレット端末104とPC106とカメラ109という、4台の端末を使う。スマートフォン102は、SSD(Solid-State Drive)103を有しており、ネットワーク101に接続可能である。タブレット端末104も、SSD105を有しており、ネットワーク101に接続可能である。
また、PC106はHDD107を有し、ネットワーク101に接続可能である。さらに、外付けのHDD108がPC106に接続されてもよい。また、カメラ109は、ネットワーク101に接続可能なもの(例えば無線通信機能を備えたディジタルカメラ)であってもよいが、通信機能を持っていなくても構わない。例えば、カメラ109は、USB(Universal Serial Bus)ケーブルを介してPC106に接続可能であってもよい。
ネットワーク101には、他のユーザが使う端末110と端末111がさらに接続されていてもよい。
また、ネットワーク101には、管理サーバ112が接続されている。ネットワーク101にはさらに、コンテンツサーバ(content server)113が接続されていてもよいし、NAS(Network-Attached Storage)114またはファイルサーバが接続されていてもよい。
図1に関して説明した「複数台の端末」は、具体的には、スマートフォン102とタブレット端末104とPC106とカメラ109であってもよい。また、図1に関して説明した「複数台の端末のうち少なくとも1台以上とネットワークを介して通信を行うコンピュータ」は、具体的には管理サーバ112であってもよい。管理サーバ112は、スマートフォン102、タブレット端末104、およびPC106と、ネットワーク101を介して通信を行うことができる。
図1の処理を実行する上記の「情報処理装置」は、具体的には、例えば、PC106であってもよいし、管理サーバ112であってもよい。例えば、PC106にはバックアップソフトウェアがインストールされていてもよく、PC106は、図1の処理により選んだファイルをバックアップしてもよい。バックアップする対象の個々のファイルは、例えば、以下のいずれかの場所に記憶されている。
・スマートフォン102内のSSD103。
・タブレット端末104内のSSD105。
・PC106内のHDD107。
・カメラ109内の不図示の不揮発性記憶領域(例えばフラッシュメモリカード)。
選んだファイルをPC106がどこにバックアップするかは、例えばユーザからの指示にしたがって、適宜決められてよい。例えば、PC106は、図1の処理により選んだファイルを、以下のいずれかの領域にバックアップしてもよい。
・PC106内のHDD107上の領域。
・HDD108上の領域。
・NAS114上の領域。
・SSD103上の領域とSSD105上の領域とHDD107上の領域の組み合わせ。
図1の処理を実行する上記の「情報処理装置」が管理サーバ112である場合、管理サーバ112は、選択結果をPC106に通知してもよい。すると、PC106は、管理サーバ112からの通知にしたがって、選択されたファイルを上記のいずれかの領域に適宜バックアップする。
コンテンツサーバ113は、ネットワーク101を介してユーザ端末からのファイルのアップロードを受け付ける。アップロードされたファイルは、ファイルの所有者(owner)のユーザ自身にのみ公開されてもよいし、特定の何人かのユーザのグループにのみ公開されてもよいし、制限なく一般に公開されてもよい。
管理サーバ112とコンテンツサーバ113が同じ1台のコンピュータであってもよい。つまり、管理サーバ112がコンテンツサーバ113を兼ねていてもよい。管理サーバ112がコンテンツサーバ113を兼ねている場合、コンテンツサーバ113と端末との間での複製操作を、管理サーバ112が検出することができる。
例えば、タブレット端末104上のファイルがアップロードされた場合、タブレット端末104上のファイルが親ファイルであり、コンテンツサーバ113上に保存(save)されたファイルが子ファイルである。管理サーバ112は、タブレット端末104からのファイルの受信に応じて、親ファイルと子ファイルを関連づける追跡情報を生成してもよい。
図1のステップS1〜S2に関する説明から明らかなように、一部の履歴情報または一部の追跡情報が、スマートフォン102から管理サーバ112に送信される場合もある。また、一部の履歴情報または一部の追跡情報が、タブレット端末104から管理サーバ112に送信される場合もある。同様に、一部の履歴情報または一部の追跡情報が、PC106から管理サーバ112に送信される場合もある。
逆に、管理サーバ112から、一部の履歴情報または一部の追跡情報が、PC106に送信される場合もある。さらに、一部の履歴情報または一部の追跡情報が、管理サーバ112からスマートフォン102へ送信されてもよいし、タブレット端末104へ送信されてもよい。履歴情報と追跡情報の取得に関する、より具体的な手順の例については、後述の第2実施形態と第3実施形態に示す。
ところで、図1の処理を実行する情報処理装置は、具体的には図3のように構成されていてもよい。図3の情報処理装置200は、CPU(Central Processing Unit)201と、RAM(Random Access Memory)202と、ネットワーク通信装置203と、シリアル接続インタフェイス回路204を有する。以下、「インタフェイス」を「I/F」と略すことがある。情報処理装置200はさらに、入力装置205と、出力装置206と、不揮発性記憶装置207と、記憶媒体210のリーダ/ライタ208を有する。「リーダ/ライタ」は「リーダおよびライタ」の意味である。
情報処理装置200内の各コンポーネントは、バス209で互いに接続されている。また、情報処理装置200はネットワーク通信装置203を介してネットワーク220に接続されている。ネットワーク220は、LAN、WAN、インターネット、その組み合わせのいずれであってもよい。また、ネットワーク220は、有線ネットワークでもよく、無線ネットワークでもよく、両者の組み合わせであってもよい。
CPU201は、シングルコアまたはマルチコアのプロセッサである。情報処理装置200は、複数のプロセッサを有していてもよい。例えば、情報処理装置200は、2台以上のCPU201を有していてもよい。CPU201は、プログラムをRAM202にロードし、RAM202をワーキングエリアとしても利用しながら、プログラムを実行する。
ネットワーク通信装置203は、例えば、有線LANインタフェイス、無線LANインタフェイス、またはその組み合わせである。ネットワーク通信装置203は、具体的には、外付けのNIC(Network Interface Card)でもよいし、オンボード型のネットワークインタフェイスコントローラでもよい。例えば、ネットワーク通信装置203は、物理層の処理を行う「PHYチップ」と呼ばれる回路と、MAC(Media Access Control)副層の処理を行う「MACチップ」と呼ばれる回路を含んでいてもよい。
シリアル接続I/F回路204は、例えば、USB接続のための、USBコントローラとUSBポートを含んでいてもよい。あるいは、シリアル接続I/F回路204は、USB以外の種類のシリアル接続用の回路であってもよい。情報処理装置200は、シリアル接続I/F回路204の代わりに(またはシリアル接続I/F回路204に加えて)、パラレル接続I/F回路を有していてもよい。
例えば、PC106が情報処理装置200である場合、シリアル接続I/F回路204は2個以上のUSBポートを含んでいてもよい。この場合、1つのUSBポートを介して情報処理装置200とHDD108が接続されてもよく、もう1つのUSBポートを介して情報処理装置200とカメラ109が接続されてもよい。
入力装置205は、例えば、キーボード、ポインティングデバイス、マイク、カメラまたはその組み合わせである。ポインティングデバイスは、例えば、マウスでもよいしタッチパッドでもよいしタッチスクリーンでもよい。出力装置206は、ディスプレイ、スピーカ、またはその組み合わせである。ディスプレイはタッチスクリーンであってもよい。
不揮発性記憶装置207は、例えば、HDD、SSD、またはその組み合わせである。さらにROM(Read-Only Memory)が不揮発性記憶装置207として使われてもよい。
記憶媒体210の例は、CD(Compact Disc)やDVD(Digital Versatile Disk)などの光ディスク、光磁気ディスク、磁気ディスク、フラッシュメモリなどの半導体メモリカードなどである。リーダ/ライタ208は、具体的には、光ディスク駆動装置、光磁気ディスク駆動装置、または磁気ディスク駆動装置であってもよいし、メモリカード用のリーダ/ライタであってもよい。
CPU201が実行するプログラムは、予め不揮発性記憶装置207にインストールされていてもよい。あるいは、プログラムは、記憶媒体210に格納されて提供され、記憶媒体210からリーダ/ライタ208により読み取られて不揮発性記憶装置207にコピーされ、その後、RAM202にロードされてもよい。
または、プログラムは、ネットワーク220上のプログラム提供者221から、ネットワーク220とネットワーク通信装置203を介して、プログラムが情報処理装置200にダウンロードされ、インストールされてもよい。プログラム提供者221は、具体的には、情報処理装置200とは別の情報処理装置である。
なお、RAM202、不揮発性記憶装置207、および記憶媒体210は、いずれも、有形の(tangible)記憶媒体の例である。これらの有形の記憶媒体は、信号搬送波のような一時的な(transitory)媒体ではない。
上記のとおり、図1の処理を実行する情報処理装置は、例えば図2のPC106であってもよいし、管理サーバ112であってもよい。つまり、PC106が図3の情報処理装置200であってもよいし、管理サーバ112が情報処理装置200であってもよい。
また、図1の処理を実行する情報処理装置は、具体的には、取得した履歴情報を記憶する第1の記憶部と、取得した追跡情報を記憶する第2の記憶部と、優先度を算出する優先度算出部と、優先度にしたがって1つ以上のファイルを選択する選択部を有してもよい。第1の記憶部と第2の記憶部は、図2の不揮発性記憶装置207により実現されてもよい。また、優先度算出部と選択部は、プログラムを実行するCPU201によって実現されてもよい。
ところで、図2の中のその他の装置も、図3のように構成されていてもよい。例えば、スマートフォン102が情報処理装置200である場合、ネットワーク通信装置203は、具体的には、LTE(Long Term Evolution)規格にしたがった通信回路と、無線LANインタフェイス回路とを含んでいてもよい。同様に、タブレット端末104が情報処理装置200である場合も、ネットワーク通信装置203は、LTE規格にしたがった通信回路と、無線LANインタフェイス回路とを含んでいてもよい。
カメラ109が情報処理装置200である場合、ネットワーク通信装置203は省略されてもよい。また、入力装置205は、レンズや光電変換回路などを含む撮像部であってもよい。
端末110、端末111、管理サーバ112、およびコンテンツサーバ113の各々も、情報処理装置200のように構成されていてもよい。
続いて、図4〜15を参照して第2実施形態について説明する。図4は、第2実施形態のシステム構成図である。図4のシステム300は、あるユーザが使う2台の端末310と330を含み、さらにサーバ350を含む。端末310、端末330、およびサーバ350は、それぞれネットワーク370に接続可能である。ネットワーク370の種類は任意である。
例えば、端末310は、図2のスマートフォン102またはタブレット端末104であってもよい。端末330は、図2のPC106であってもよい。サーバ350は、図2の管理サーバ112であってもよい。そして、ネットワーク370は、図2のネットワーク101であってもよい。
より詳しくは、端末310は、通信部311と、ファイル記憶部312と、監視部313と、デバイスID(identification)記憶部314と、DB(database)管理部315と、DB記憶部316を有する。
通信部311は、ネットワーク370を介して端末330およびサーバ350と通信する。ファイル記憶部312は、種々のファイルを記憶する。
監視部313は、ファイル記憶部312に記憶されているファイルに対する操作を監視する。そして、何らかの操作を検出すると、監視部313は、監視結果をDB管理部315に出力する。
例えば、監視部313は、ユーザから端末310の入力装置205を介して与えられる入力に応じたユーザ主導操作を監視する。さらに、監視部313は、例えばデーモンなどの所定のプログラムを端末310が実行することによって自動的に行われる自動操作を監視してもよい。
監視部313は、例えば、ファイル操作に関するAPI(Application Programming Interface)関数の呼び出しをフックしてもよいし、ファイル操作に関するシステムコールをフックしてもよい。また、監視部313を実現するために、アプリケーション上でのメニュー選択をフックするアドオンが付加的に使われてもよい。
API関数の呼び出し、システムコール、アプリケーション上でのメニュー選択などをフックすることで、監視部313は、ファイルに対する操作を検出することができる。さらに、監視部313は、監視部313がフックしたシステムコールの呼び出し元(caller)のプロセスを認識してもよい。そして、監視部313は、認識した呼び出し元のプロセスに応じて、「ファイルに対してユーザ主導操作が行われたのか、それとも自動操作が行われたのか」ということを判断してもよい。
監視部313を実現するのにアドオンも使われる場合は、アプリケーション固有の種別の操作(例えば「コメントの追加」などの操作)も検出可能となる。また、ファイルの送信と受信を監視するために、監視部313は、さらに通信部311を監視してもよい。例えば、監視部313は、ファイルの送信と受信を監視するために、パケットキャプチャを行ってもよい。
また、端末310と330の双方に、端末間での同期をサポートする特定のアプリケーション(例えば、ある種の写真管理アプリケーションや、メディアプレーヤ・アプリケーションなど)がインストールされている場合がある。その場合、監視部313を実現するために、当該特定のアプリケーションのアドオンが使われてもよい。すると、監視部313は、同期機能によるファイルの送信と受信を検出することができる。
監視部313は、メーラの動作を監視してもよい。具体的には、監視部313は、端末310が受信した電子メールに添付されているファイルの、ファイル記憶部312への保存を、監視してもよい。
デバイスID記憶部314は、端末310を識別するデバイスIDを記憶する。DB管理部315は、デバイスID記憶部314に記憶されているデバイスIDと、監視部313による監視結果から、DB記憶部316に追加する情報を作成し、作成した情報をDB記憶部316に書き込む。DB記憶部316は、図1に関して説明した履歴情報と追跡情報を含むDBを記憶する。
DBの具体例は図6とともに後述するが、DBに含まれる情報は、ファイル記憶部312に記憶されているファイルに関するメタデータの一種である。よって、以下では、DBに含まれる情報をメタデータということもある。明らかに、追跡情報はメタデータの一例であり、履歴情報もメタデータの一例である。
なお、通信部311は、メタデータを受信して、受信したメタデータをDB記憶部316に出力することもあるし、DB記憶部316内のメタデータを送信することもある。また、通信部311は、ファイルを受信して、受信したファイルをファイル記憶部312に記憶することもあるし、ファイル記憶部312に記憶されているファイルを送信することもある。
さて、端末330も端末310と同様に、通信部331と、ファイル記憶部332と、監視部333と、デバイスID記憶部334と、DB管理部335と、DB記憶部336を有する。通信部331、ファイル記憶部332、監視部333、デバイスID記憶部334、DB管理部335、およびDB記憶部336の詳細は、端末310と同様なので説明を省略する。なお、DB記憶部336が記憶するDBの具体例は、図7とともに後述する。
また、第2実施形態では、端末330がバックアップを制御するので、端末330はさらに、優先度算出部337と、バックアップ記憶部338と、バックアップ制御部339を有する。
優先度算出部337は、DB記憶部336に記憶されているDB(具体的には、取得済みの履歴情報と追跡情報を含むDB)を使って、図1のステップS3〜S5と同様の方法により、各ファイルの優先度を算出する。ユーザが端末310と端末330の2台の端末を使う場合、優先度算出部337が優先度を算出する対象のファイルは、具体的には以下のファイルを含む。
・端末310のファイル記憶部312に記憶されている複数個のファイル。
・端末330のファイル記憶部332に記憶されている複数個のファイル。
バックアップ制御部339は、優先度算出部337の算出した優先度を使って、図1のステップS6〜S7と同様にして、バックアップ対象のファイルを選ぶ。そして、バックアップ制御部339は、選んだ各ファイルをバックアップ記憶部338にバックアップする。バックアップ制御部339は、優先度に応じてバックアップ対象の1個以上のファイルを選ぶ選択部の一例である。
例えば、説明の便宜上、バックアップ制御部339が、ファイル記憶部312に記憶されているファイルのうちの500個と、ファイル記憶部332に記憶されているファイルのうちの1000個をバックアップすることに決めたとする。この場合、バックアップ制御部339は、上記500個のファイルを送信するよう、通信部331とネットワーク370を介して端末310に要求し、上記500個のファイルを、ネットワーク370と通信部331を介して受信する。そして、バックアップ制御部339は、受信した上記500個のファイルを、バックアップ記憶部338にバックアップする。さらに、バックアップ制御部339は、上記1000個のファイルをファイル記憶部332からバックアップ記憶部338へとバックアップする。もちろん、バックアップ制御部339がどういう順序で上記の合計1500個のファイルをバックアップするのかは、実施形態に応じて任意に変更可能である。
さて、サーバ350は、通信部351と、DB記憶部352と、デバイス管理部353と、DB管理部354を有する。
通信部351は、ネットワーク370を介して端末310および330と通信する。具体的には、通信部351は、端末310からメタデータを受信する場合もあるし、端末310にメタデータを送信する場合もあるし、端末330からメタデータを受信する場合もあるし、端末330にメタデータを送信する場合もある。
DB記憶部352は、メタデータを含むDB(つまり履歴情報と追跡情報を含むDB)を記憶する。DBの具体例は図8〜9とともに後述するが、第2実施形態では、DB記憶部352が、ユーザ別のDBを記憶する。
デバイス管理部353は、ユーザとデバイスとの対応関係を管理する。つまり、デバイス管理部353は、ユーザIDと、端末のデバイスIDとの対応関係を管理する。よって、デバイス管理部353は、デバイスIDから、当該デバイスIDに対応するユーザIDを得ることができる。DB管理部354は、デバイス管理部353が得たユーザIDに応じて、DB記憶部352上のどのユーザ用のDBを操作するのかを決定する。
ところで、端末310、端末330、サーバ350の各々は、図3の情報処理装置200のように構成されてもよい。
例えば、通信部311は、ネットワーク通信装置203により実現されてもよい。ファイル記憶部312とデバイスID記憶部314とDB記憶部316は、不揮発性記憶装置207により実現されてもよい。監視部313とDB管理部315は、プログラムを実行するCPU201により実現されてもよい。
また、通信部331は、ネットワーク通信装置203により実現されてもよい。ファイル記憶部332とデバイスID記憶部334とDB記憶部336は、不揮発性記憶装置207により実現されてもよい。監視部333とDB管理部335と優先度算出部337とバックアップ制御部339は、プログラムを実行するCPU201により実現されてもよい。
バックアップ記憶部338は、不揮発性記憶装置207により実現されてもよい(例えば、端末330が図2のPC106である場合、バックアップ記憶部338はHDD107であってもよい)。あるいは、バックアップ記憶部338は、図3のシリアル接続I/F回路204を介して接続された外部の記憶装置(例えば、図2のHDD108)により実現されてもよい。
また、通信部351はネットワーク通信装置203により実現されてもよく、DB記憶部352は不揮発性記憶装置207により実現されてもよい。デバイス管理部353は、後述のデバイス管理テーブル520を記憶する不揮発性記憶装置207と、デバイス管理テーブル520を用いた処理を実行するCPU201によって、実現されてもよい。DB管理部354は、プログラムを実行するCPU201により実現されてもよい。
続いて、第2実施形態における端末310、端末330、およびサーバ350の動作の概要について、図1と図5を参照して説明する。図1に関して説明したように、図1の処理を実行する情報処理装置は、複数台の端末のうちの1台でもよいし、複数台の端末のうちの少なくとも1台以上とネットワークを介して通信を行うコンピュータ(例えばサーバ350)であってもよい。第2実施形態では、図1の処理を実行する情報処理装置は、具体的には端末330である。
また、図1のステップS1とS2に関して説明したように、履歴情報と追跡情報を取得するための具体的手順は、実施形態に応じて様々である。
第2実施形態では、端末330が、履歴情報を生成することで履歴情報を取得することもあるし、追跡情報を生成することで追跡情報を取得することもある。また、端末330は、履歴情報をサーバ350から受信することで履歴情報を取得することもあるし、追跡情報をサーバ350から受信することで追跡情報を取得することもある。
また、サーバ350が端末330に送信する履歴情報は、具体的には、サーバ350が端末310から受信することにより取得した履歴情報であってもよい。また、サーバ350は、端末310からの履歴情報の通知と、端末330からの履歴情報の通知に基づいて追跡情報を生成することもある。サーバ350は、こうして生成した追跡情報を端末330に送信することがあり、その結果として、端末330が追跡情報を取得することもある。
以下、履歴情報と追跡情報を含むメタデータのやりとりの具体的な例について、図5を参照して説明する。図5は、第2実施形態の動作シーケンスの例を示す図である。
ステップS101で端末310がファイル401を作成する。例えば、端末310が入力装置205としてカメラを有する場合、ユーザが端末310を用いて写真を撮影することで、画像ファイルが新規に作成される。ファイル401はそのようにして作成される画像ファイルであってもよい。もちろん、ファイル401は、テキストファイルやスプレッドシートファイルなど、その他の種類のファイルであってもよい。作成されたファイル401は、ファイル記憶部312に記憶される。
また、監視部313は、ファイル401の作成を検出する。検出に応じて、ステップS102では、DB管理部315が、ファイル401の作成に関する履歴情報を含むメタデータ402を生成する。DB管理部315は、生成したメタデータ402を、DB記憶部316に記憶する。
さらに、ステップS103では、通信部311がメタデータ402をサーバ350に送信する。メタデータ402は、サーバ350の通信部351において受信される。
すると、ステップS104でデバイス管理部353が、メタデータ402の送信元の端末310のデバイスIDから、端末310のユーザを識別するユーザIDを求める。
そして、ステップS105では、得られたユーザIDにしたがって、DB記憶部352中の適宜のDBに、受信されたメタデータ402が書き込まれる。ステップS105でのDBの更新は、DB管理部354により制御される。
さらに、ステップS106では、メタデータ403が、通信部351から端末330へと送信され、端末330の通信部331で受信され、DB記憶部336に追加される。ファイル401は作成操作により新たに作成されたファイルなので、他のファイルとの間に親子関係はない。よって、メタデータ403は追跡情報を含んでおらず、実質的にはメタデータ402とメタデータ403は同じである。
以上のようにして、端末330は、ファイル401の作成に関する履歴情報を含むメタデータ403を取得することができる。また、端末310上でファイル401に対して編集、移動、変名などの操作が行われる可能性もある。端末310でファイル401に対して何らかの操作が行われると、ステップS102〜S106のシーケンスと類似のシーケンスにより、端末330は、行われた操作に関する履歴情報を含むメタデータを取得することができる。
なお、端末310内でファイル401がコピーされることもあり得る。コピー操作は複製操作の一種である。この場合、端末330は、コピー操作に関する履歴情報と、ファイル401(つまり親ファイル)と子ファイルの関係を示す追跡情報とを含むメタデータを、ステップS102〜S106のシーケンスと類似のシーケンスにより、取得する。
ところで、端末310と330のユーザは、端末間でファイルを複製することもあり得る。例えば、端末310のファイル記憶部312に記憶されている既存のファイル404が、ステップS107で、通信部311から送信される。ファイル404は、端末330の通信部331で受信され、ファイル記憶部332に保存される。
すると、監視部333は、ファイル404の受信と保存を検出する。検出に応じて、ステップS108では、DB管理部335が、ファイル404の受信と保存に関する履歴情報を含むメタデータ405を生成する。DB管理部335は、生成したメタデータ405を、DB記憶部336に記憶する。
さらに、ステップS109では、通信部331がメタデータ405をサーバ350に送信する。メタデータ405は、サーバ350の通信部351において受信される。
すると、ステップS110でデバイス管理部353が、メタデータ405の送信元の端末310のデバイスIDから、端末310のユーザを識別するユーザIDを求める。また、得られたユーザIDにしたがって、DB記憶部352中の適宜のDBに、受信されたメタデータ405が書き込まれる。
他方、端末310は、ステップS101の作成操作の後にステップS102とS103を実行したのと同様に、ステップS107の送信操作の後にはステップS111とS112を実行する。具体的には以下のとおりである。
監視部313が、ステップS107でのファイル404の送信を検出する。すると、検出に応じて、ステップS111でDB管理部315が、ファイル404の送信に関する履歴情報を含むメタデータ406を生成する。DB管理部315は、生成したメタデータ406をDB記憶部316に記憶する。
さらに、ステップS112では、通信部311がメタデータ406をサーバ350に送信する。メタデータ406は、サーバ350の通信部351において受信される。
すると、ステップS113でデバイス管理部353が、メタデータ406の送信元の端末310のデバイスIDから、端末310のユーザを識別するユーザIDを求める。そして、得られたユーザIDにしたがって、DB記憶部352中の適宜のDBに、受信されたメタデータ406が書き込まれる。このときのDBの更新も、DB管理部354により制御される。
さらに、DB管理部354は、ファイル404の端末330における受信を示すメタデータ405と、ファイル404の端末310からの送信を示すメタデータ406に基づいて、「ファイル404が端末310から端末330に複製された」と認識する。よって、DB管理部354は、端末310と330の間での複製操作に対応する追跡情報を含むメタデータ407を、ステップS113でさらに生成する。DB管理部354は、生成したメタデータ407をDB記憶部352に追加する。
そして、ステップS114では、上記のような追跡情報を含むメタデータ407が、通信部351から、端末310と330の双方へ送信される。メタデータ407は、通信部311で受信されてDB記憶部316に記憶されるとともに、通信部331で受信されてDB記憶部336に記憶される。
なお、図5では図示の便宜上、ステップS108〜S110がステップS111〜S113よりも先に描かれている。しかし、場合によっては、サーバ350は、メタデータ406をメタデータ405よりも先に受信することもあり得る。
いずれにしろ、サーバ350は、メタデータ405とメタデータ406の双方を受信した後に、追跡情報を含むメタデータ407を生成する。そして、メタデータ407は端末310と330に送信される。図1の処理を実行する端末330は、以上のようにして、端末310と330の間で行われる複製操作についての追跡情報を取得することができる。
なお、ファイル記憶部332に記憶されているファイルが、端末330から端末310に送信される場合もあり得る。つまり、端末330から端末310にファイルが複製されることもあり得る。この場合も、サーバ350は、端末330からの通知(具体的には送信に関する履歴情報を含むメタデータ)と、端末310からの通知(具体的には受信に関する履歴情報を含むメタデータ)に基づいて、追跡情報を含むメタデータを生成することができる。よって、端末330は、追跡情報を含むメタデータをサーバ350から取得することができる。
さて、ステップS115では、ファイルをバックアップするためのトリガイベントが生じる。例えば、端末330の入力装置205を介して、ユーザから明示的にバックアップ開始が指示されることもある。また、バックアップスケジュールが予め決められている場合には、トリガイベントは、具体的には、「バックアップスケジュールにより決められた日時になった」というイベントである。
トリガイベントの発生に応じて、優先度算出部337は、端末310のファイル記憶部312に記憶されている各ファイルと、端末330のファイル記憶部332に記憶されている各ファイルについて、優先度408を算出する。つまり、優先度算出部337は、図1のステップS3〜S5と同様の処理を実行する。
そして、バックアップ制御部339は、算出された優先度408に応じて、バックアップ対象のファイルを選び、選んだ各ファイルをバックアップ記憶部338にバックアップする。
続いて、第2実施形態で使われる何種類かの情報の具体例について、図6〜9を参照して説明する。
図6は、第2実施形態において端末310のDB記憶部316に記憶されるDBの例を示す図である。図6のDB500は、IDテーブル501と、IDテーブル501中の各エントリに対応する履歴テーブルと、追跡テーブル503を含む。図6には、履歴テーブルのうち、履歴テーブル502aと502bのみが例示されている。
IDテーブル501の各エントリは、1台の端末内の1個のファイルに対応する。IDテーブル501の各エントリは、デバイスID、ファイルID、ファイル名、およびパスを含む。
例えば、図6の例では、端末310のデバイスIDは「mobile−001」である。ファイル記憶部312内のファイルに関するファイルIDは、具体的には、ファイル記憶部312上に新たなファイルが記憶されたことを監視部313が検出するたびに、DB管理部315が発行するシーケンス番号であってもよい。図6のIDテーブル501は、以下のことを示している。
・ファイル記憶部312において「/mnt/doc/」というパスで識別されるディレクトリにある、「test.txt」というファイル名のファイルには、「150」というファイルIDが割り当てられている。
・ファイル記憶部312において「/mnt/pict/20120306/」というパスで識別されるディレクトリにある、「2013.jpg」というファイル名のファイルには、「13」というファイルIDが割り当てられている。
・ファイル記憶部312において「/mnt/pict/favorite/」というパスで識別されるディレクトリにある、「2013.jpg」というファイル名のファイルには、「210」というファイルIDが割り当てられている。
さて、履歴テーブル502aは、「13」というファイルIDのファイルに対応する。つまり、履歴テーブル502aの各エントリは、「13」というファイルIDのファイルに対して行われた1つの操作に対応する履歴情報である。履歴テーブル502aの各エントリは、日時、利用時間、ログ種別、およびユニーク値を含む。
ユニーク値は、ファイルに対して一意に決まる値(つまりファイルに固有の値)であり、ファイルの内容を要約する(digest)値である。このように、履歴情報は、単に操作の種類(つまりログ種別)を示すだけでなく、操作が行われた時点、操作にかかった時間、操作対象のファイルに対して一意に決まる値をさらに含んでもよい。なお、ログ種別によっては、利用時間の値は省略されてもよい。
なお、ユニーク値は、具体的には、ファイルのハッシュ値であってもよい。例えば、ユニーク値は、MD5(Message Digest Algorithm 5)などのハッシュ関数により算出される値であってもよい。また、ユニーク値の算出に、ファイル自体のデータのみが使われてもよいし、ファイル名、パス、またはその双方がさらに使われてもよい。以下では説明の簡単化のため、ユニーク値同士の衝突(collision)は無視しても差し支えないものとする。
履歴テーブル502aは、具体的には以下のことを示す。
・「13」というファイルIDのファイルは、2012年3月6日8時20分に端末310上で作成された。
・このファイルから算出されたユニーク値は「65615163」である。
・このファイルは、2012年3月6日8時21分にPC(具体的には端末330)に送信された。
・このファイルは、2012年3月6日8時23分から30分間、端末310上で閲覧された。
・このファイルは、閲覧されている最中の2012年3月6日8時25分に、端末310上でコピーされた。具体的には、このファイルは、「../favorite/」という相対パスで識別されるディレクトリにコピーされた。
・送信・閲覧・コピーによってファイルが変化することはないので、ユニーク値は「65615163」のままである。
なお、図6では便宜上、相対パスが例示されているが、絶対パスが使われてもよい。
さて、「13」というファイルIDのファイルに対する上記コピー操作により得られたファイルは、「210」というファイルIDのファイルである。図6には、「210」というファイルIDのファイルに対応する履歴テーブル502bも示されている。履歴テーブル502bの形式は、履歴テーブル502aと同様である。履歴テーブル502bは、具体的には以下のことを示す。
・「210」というファイルIDのファイルは、2012年3月6日8時25分に、他のファイルをコピーすることにより得られた。具体的には、「210」というファイルIDのファイルは、「../20120306」という相対パスで識別されるディレクトリのファイルをコピーすることで得られた。
・「210」というファイルIDのファイルのユニーク値は、複製元のファイルと同じく、「65615163」である。
・「210」というファイルIDのファイルは、2012年3月6日8時30分から45分間かけて、端末310上で編集された。
・編集によりファイルのデータが変化したので、ユニーク値も「16153321」に変化した。
・2012年3月7日9時31分から1時間かけて、端末310上でこのファイルにコメントが付加された。例えば、ユーザは、コメントを付加する機能を持つアプリケーションを使って、このファイルにコメントを付加してもよい。
・コメントの付加によりファイルのデータが変化したので、ユニーク値も「97488475」に変化した。
・このファイルは、2012年3月7日10時45分にウェブサービスに投稿(submit)された。つまり、このファイルは、ブログサービス、ソーシャルネットワーキングサービス、ファイル共有サービスなど、何らかの種類のウェブサービスのサーバにアップロードされた。
・ウェブサービスへの投稿によってファイルが変化することはないので、ユニーク値は「97488475」のままである。
さて、追跡テーブル503の各エントリは、1つの親ファイルと1つの子ファイルとの関係を示す追跡情報に相当する。図6には追跡テーブル503中の2つのエントリが例示されている。追跡テーブル503の各エントリは、親デバイスIDと、親ファイルIDと、子デバイスIDと、子ファイルIDを含む。
親デバイスIDは、親ファイルを記憶している端末のデバイスIDである。親ファイルIDは、親ファイルを記憶している端末が親ファイルに対して割り当てたファイルIDである。親デバイスIDと親ファイルIDの組み合わせにより、親ファイルが識別される。
他方、子デバイスIDは、子ファイルを記憶している端末のデバイスIDである。子ファイルIDは、子ファイルを記憶している端末が子ファイルに対して割り当てたファイルIDである。子デバイスIDと子ファイルIDの組み合わせにより、子ファイルが識別される。
したがって、1台の端末内での複製操作により生じた親子関係を示すエントリにおいては、親デバイスIDと子デバイスIDが等しい。逆に、端末間または端末・サーバ間での複製操作により生じた親子関係を示すエントリにおいては、親デバイスIDと子デバイスIDが異なる。ただし、説明の簡単化のため、第2実施形態では、端末・サーバ間での複製操作は行われないものとする。端末・サーバ間での複製操作の具体例については、第3実施形態とともに後述する。
具体的には、追跡テーブル503は、以下のことを示す。
・「mobile−001」というデバイスIDの端末(具体的には端末310)において「13」というファイルIDを持つファイルが、「PC−002」というデバイスIDの端末(具体的には端末330)に複製された。そして、複製操作(具体的には、端末310からの送信と、端末330での受信および保存による複製)によって、端末330上に作られたファイルには、「83」というファイルIDが割り当てられた。
・つまり、「mobile−001」というデバイスIDと「13」というファイルIDのペアにより識別されるファイルは、「PC−002」というデバイスIDと「83」というファイルIDのペアにより識別されるファイルの親ファイルである。
・「mobile−001」というデバイスIDの端末(具体的には端末310)内で、「13」というファイルIDを持つファイルが複製された(具体的には、端末310内でコピーされた)。そして、コピー操作の結果として端末310上に作られた新たなファイルには、「210」というIDが割り当てられた。
・つまり、「mobile−001」というデバイスIDと「13」というファイルIDのペアにより識別されるファイルは、「mobile−001」というデバイスIDと「210」というファイルIDのペアにより識別されるファイルの親ファイルでもある。
さて、図7は、第2実施形態において端末330のDB記憶部336に記憶されるDBの例を示す図である。図7のDB510は、IDテーブル511と、IDテーブル511中の各エントリに対応する履歴テーブルと、追跡テーブル513を含む。図7には、履歴テーブルのうち、履歴テーブル512aと512bのみが例示されている。
IDテーブル511の形式は、図6のIDテーブル501と同様である。図7には、端末330のファイル記憶部332内に記憶されている2つのファイルに関する2つのエントリと、端末310のファイル記憶部312内に記憶されている1つのファイルに関する1つのエントリ(図6にも例示されているもの)が例示されている。図7では省略されているが、図6のIDテーブル501に例示されている残りの2つのエントリと同じエントリも、IDテーブル511には含まれる。
上記のとおり、「mobile−001」は端末310のデバイスIDであり、「PC−002」は端末330のデバイスIDである。よって、IDテーブル511は以下のことを示す。
・端末330のファイル記憶部332において「D:\doc\」というパスで識別されるディレクトリにある、「test.txt」というファイル名のファイルには、「351」というファイルIDが割り当てられている。
・端末330のファイル記憶部332において「D:\temp\」というパスで識別されるディレクトリにある、「snow_0306.jpg」というファイル名のファイルには、「83」というファイルIDが割り当てられている。
・端末310のファイル記憶部312において「/mnt/pict/favorite/」というパスで識別されるディレクトリにある、「2013.jpg」というファイル名のファイルには、「210」というファイルIDが割り当てられている。
さて、履歴テーブル512aは、端末330内で「83」というファイルIDにより識別されるファイルに対応する。履歴テーブル512aの各エントリは、当該ファイルに対して行われた1つの操作に対応する履歴情報である。履歴テーブル512aは、具体的には以下のことを示す。
・2012年3月6日8時21分にスマートフォン(具体的には端末310)からファイルが受信され、受信されたファイルがファイル記憶部332に記憶され、記憶されたファイルに対して、「83」というファイルIDが割り当てられた。
・このファイルのユニーク値は、図6の履歴テーブル502aからも分かるとおり、「65615163」である。
・以上のようにしてファイル記憶部332に記憶されたこのファイルは、2012年3月6日20時15分から1時間20分かけて、端末330上で編集された。
・編集によりファイルのデータが変化したので、ユニーク値も「12345678」に変化した。
・編集後、2012年3月6日21時37分に、このファイルは、「snow_0306.jpg」というファイル名へとリネームされた。リネーム後の新たなファイル名がIDテーブル511には記録されている。
・図7の例では、ユニーク値がファイル名にも依存するものとする。したがって、ファイルをリネームするとユニーク値も変化する。具体的には、2012年3月6日21時37分のリネームの結果、ユニーク値は「87654321」に変化した。
さて、図7には履歴テーブル512bと追跡テーブル513も例示されている。履歴テーブル512bは図6の履歴テーブル502bと同じであり、追跡テーブル513は図6の追跡テーブル503と同じなので、詳しい説明は省略する。
なお、図6では省略されているが、図7で例示されているIDテーブル511中の1番目と2番目のエントリは、図6のIDテーブル501にも含まれる。よって、端末310も、図7の履歴テーブル512aと同じテーブルを有する。同様に、端末330も、図6の履歴テーブル502aと同じテーブルを有する。
図8は、第2実施形態においてサーバ350に記憶されている情報の概要を例示する図である。図8には、デバイス管理部353が管理するデバイス管理テーブル520と、DB記憶部352に記憶されるユーザ別のDB530−1〜530−Uが例示されている。なお、Uは1以上の整数である。
デバイス管理テーブル520の各エントリは、1台の端末に対応する。デバイス管理テーブル520の各エントリは、ユーザIDとデバイスIDを含む。デバイス管理テーブル520は、以下のことを示す。
・「suzuki_taro」というユーザIDのユーザは、「mobile−001」というデバイスIDの端末を使う。
・このユーザは、「PC−002」というデバイスIDの端末も使う。
・つまり、このユーザは、端末310と330を使う。
・「sato_jiro」というユーザIDのユーザは、「pad−123」というデバイスIDの端末を使う。
例えば、バックアップ対象のファイルの自動選別を望むユーザは、自分が使う各端末をサーバ350に登録する操作をまず行ってもよい。そして、デバイス管理部353は、登録の際に、システム300内で一意のデバイスIDを新たに生成して、生成したデバイスIDを端末に割り当ててもよい。あるいは、既存の情報(例えば、端末の製造ベンダ・機種名・製造シリアル番号の組み合わせにより示される識別子など)が、デバイスIDとして使われてもよい。いずれにせよ、端末310のデバイスIDは、デバイスID記憶部314に記憶され、端末330のデバイスIDはデバイスID記憶部334に記憶される。
デバイス管理テーブル520は、ユーザIDとデバイスIDに加えて、さらに他のフィールドを含んでいてもよい。例えば、端末310に対応する1番目のエントリには、以下のようなフィールドが含まれていてもよい。他のエントリについても同様である。
・端末310で使われる電子メールアドレスを表すフィールド。
・端末310と330の間での同期をサポートする特定のアプリケーションが端末310にインストールされている場合、当該アプリケーションにおいて端末310を識別するために用いられるIDを表すフィールド。
DB530−1は、1番目のユーザ(具体的には「suzuki_taro」というユーザIDのユーザ)用のDBである。DB530−1の詳細は、図9に例示する。DB530−2は、2番目のユーザ(具体的には「sato_jiro」というユーザIDのユーザ)用のDBである。DB530−Uは、U番目のユーザ用のDBである。
図9は、第2実施形態においてサーバ350に記憶されるDB530−1の例の詳細を示す図である。図9に示すとおり、DB530−1は、IDテーブル531と、IDテーブル531中の各エントリに対応する履歴テーブルと、追跡テーブル533を含む。図9には、履歴テーブルのうち、履歴テーブル532aと532bのみが例示されている。
IDテーブル531の形式は、図6のIDテーブル501と同様である。図9では、図7でIDテーブル511中に例示した3つのエントリと同じ3つのエントリのみが、IDテーブル531に関して例示されている。図9では省略されているが、図6のIDテーブル501中に例示した1番目と2番目のエントリと同じエントリも、IDテーブル531には含まれる。
履歴テーブル532aは、「PC−002」というデバイスIDを持つ端末330内において「83」というファイルIDにより識別されるファイルに対応する。履歴テーブル532aは、図7の履歴テーブル512aと同じである。
履歴テーブル532bは、「mobile−001」というデバイスIDを持つ端末310において「210」というファイルIDにより識別されるファイルに対応する。履歴テーブル532bは、図6の履歴テーブル502bと同じである。
また、追跡テーブル533は、図6の追跡テーブル503と同じである。
以上、図6〜9を参照して説明したように、第2実施形態では、DB記憶部316とDB記憶部336とDB記憶部352が重複して同様のDBを保持する。しかし、実施形態によっては、DBは必ずしも冗長化されていなくてもよい。DBを冗長化しない変形例については後述する。
続いて、図10〜15を参照して、第2実施形態において端末310と端末330とサーバ350が行う処理について詳しく説明する。
図10は、第2実施形態で端末310が行う処理のフローチャートである。ある観点から言えば、図10の処理は、端末330(すなわち優先度の算出を行う情報処理装置)が履歴情報と追跡情報を取得することができるようにするための処理である。端末310の電源がオンにされると、端末310は図10の処理を開始する。
ステップS201でDB管理部315は、「ファイル記憶部312に記憶されているファイルが、通信部311から送信された」というイベントが監視部313により検出されたか否かを判断する。そのようなイベントが検出された場合(すなわち、そのようなイベントの検出を示す監視結果が監視部313からDB管理部315に出力された場合)、図10の処理はステップS202に移行する。逆に、そのようなイベントが検出されていなければ、図10の処理はステップS205に移行する。
ステップS202でDB管理部315は、監視部313からDB管理部315へ出力される監視結果から、ファイルの送信先などの情報を抽出する。例えば、監視部313は、以下のような項目を含む監視結果を出力してもよい。
・ファイルが送信されたことを示す情報(例えば「送信」を示すコードなど)。
・送信操作が行われた日時。
・送信されたファイルが置かれている(located)ディレクトリのパスと、当該ファイルのファイル名。
・送信先の端末を示す送信先情報(例えば、端末の名前、デバイスID、送信先の端末で使われる電子メールアドレスなど)。
DB管理部315は、監視結果から日時と送信先情報を抽出する。また、DB管理部315は、デバイスID記憶部314に記憶されているデバイスIDと、ディレクトリのパスと、ファイル名とを検索キーとして使って、IDテーブル501を参照し、ファイルIDを取得する。また、DB管理部315は、上記のパスとファイル名により識別されるファイルから、当該ファイルのユニーク値を算出する。
そして、次のステップS203でDB管理部315は、抽出済みの情報を使ってDB500を更新する。さらに、次のステップS204では、ステップS203での更新に応じて、1つ以上のテーブルそれぞれの一部または全部が、通信部311からネットワーク370を介してサーバ350へと送信される。なお、図10に示すとおり、ステップS203は、ステップS202、S206、S208またはS211の後に実行される。よって、「ステップS203でどのテーブルが更新され、ステップS204でどのテーブル(の一部または全部)が送信されるのか」ということは、場合による。
例えば、ステップS202の後にステップS203が実行される場合、DB管理部315は、送信されたファイルに対応する履歴テーブルに、ステップS203で新規エントリを追加する。例えば、図6の履歴テーブル502aの2番目のエントリは、ステップS202で抽出された情報に基づいて、DB管理部315によってステップS203で追加されるエントリの一例である。
また、ステップS202の後にステップS203が実行される場合、ステップS204では、ステップS203で履歴テーブルに追加されたエントリと、当該履歴テーブルに対応するファイルIDが送信されてもよい。あるいは、ステップS204では、当該履歴テーブルの全体が、当該履歴テーブルに対応するファイルIDとともに送信されてもよい。図5のステップS112は、ステップS202の後に実行されるステップS204の例である。
ステップS204での送信の後、図10の処理はステップS201に戻る。
さて、ステップS205でDB管理部315は、「ファイル記憶部312に記憶されているファイルが、変更、移動、変名、または削除された」というイベントが監視部313により検出されたか否かを判断する。そのようなイベントが検出された場合(すなわち、そのようなイベントの検出を示す監視結果が監視部313からDB管理部315に出力された場合)、図10の処理はステップS206に移行する。逆に、そのようなイベントが検出されていなければ、図10の処理はステップS207に移行する。
ステップS206でDB管理部315は、監視部313からDB管理部315へ出力される監視結果から、操作が行われたファイルに関するパスなどの情報を抽出する。
例えば、あるファイルが変更された場合(例えば、ユーザがアプリケーションを利用してファイルを編集したりファイルにコメントを付加したりした場合)、監視部313は、以下のような項目を含む監視結果を出力してもよい。
・ファイルが変更されたことを示す情報(例えば「変更」を示すコードなどでもよいし、より細分化された「編集」や「コメント付加」などの種別を示すコードなどでもよい)。
・変更されたファイルが置かれているディレクトリのパス。
・変更されたファイルのファイル名。
・監視部313が、ファイルの変更にかかった時間も検出可能な場合は、ファイルの変更が開始された日時と、ファイルの変更にかかった時間。
・監視部313が、ファイルの変更にかかった時間を検出しない場合は、変更されたファイルが保存された日時。
また、あるファイルが、あるディレクトリから別のディレクトリへと移動された場合、監視部313は、以下のような項目を含む監視結果を出力してもよい。
・ファイルが移動されたことを示す情報(例えば「移動」を示すコードなど)。
・移動される前にファイルが置かれていたディレクトリのパス。
・ファイルが移動された先のディレクトリのパス。
・移動されたファイルのファイル名。
・移動操作が行われた日時。
また、あるファイルが変名された場合、監視部313は、以下のような項目を含む監視結果を出力してもよい。
・ファイルが変名されたことを示す情報(例えば「変名」を示すコードなど)。
・変名される前のファイル名。
・変名後のファイル名。
・変名操作が行われた日時。
なお、ある種のコマンドの実行によって、ファイルの移動と変名が同時に行われることもある。その場合も、監視部313は適宜の監視結果を出力する。
また、あるファイルが削除された場合、監視部313は、以下のような項目を含む監視結果を出力してもよい。
・ファイルが削除されたことを示す情報(例えば「削除」を示すコードなど)。
・削除されたファイルが今まで置かれていたディレクトリのパス。
・削除されたファイルのファイル名。
以上例示したように、監視部313は、変更、移動、変名、削除といった操作の種類に応じて、適宜の監視結果を出力する。よって、ステップS206でDB管理部315は、出力された監視結果から、パスなどの適宜の情報を抽出することができる。
また、DB管理部315は、デバイスID記憶部314に記憶されているデバイスIDと、監視結果から得られるパスおよびファイル名を検索キーとして用いて、IDテーブル501を参照することで、ファイルIDを抽出することができる。さらに、DB管理部315は、変更、移動、または変名されたファイルから、ユニーク値を算出する。その後、図10の処理はステップS203に移行する。
以上のようにしてステップS206の後にステップS203が実行される場合、ステップS203とS204では、具体的には以下のような処理が行われる。
例えば、あるファイルが変更された場合、DB管理部315は、変更されたファイルに対応する履歴テーブルに、ステップS203で新規エントリを追加する。例えば、図6の履歴テーブル502bの2番目と3番目のエントリは、ステップS206の後のステップS203で追加されるエントリの例である。そして、ステップS204では、ステップS203で履歴テーブルに追加されたエントリ(または当該履歴テーブルの全体)と、当該履歴テーブルに対応するファイルIDが送信される。
また、あるファイルが移動された場合、DB管理部315は、IDテーブル501において、移動された当該ファイルに対応するエントリをステップS203で更新する。具体的には、DB管理部315は、当該エントリのパスを書き換える。さらに、DB管理部315は、移動されたファイルに対応する履歴テーブルに、ステップS203で新規エントリを追加する。そして、ステップS204では、IDテーブル501中の書き換えられたエントリと、当該エントリに対応する履歴テーブルに追加されたエントリ(または当該履歴テーブルの全体)が送信される。
また、あるファイルが変名された場合、DB管理部315は、IDテーブル501において、変名された当該ファイルに対応するエントリをステップS203で更新する。具体的には、DB管理部315は、当該エントリのファイル名を書き換える。さらに、DB管理部315は、変名されたファイルに対応する履歴テーブルに、ステップS203で新規エントリを追加する。そして、ステップS204では、IDテーブル501中の書き換えられたエントリと、当該エントリに対応する履歴テーブルに追加されたエントリ(または当該履歴テーブルの全体)が送信される。
また、あるファイルが削除された場合、DB管理部315は、削除されたファイルに対応する履歴テーブルを、ステップS203でDB500から削除する。そして、ステップS204では、削除されたファイルに対応する、IDテーブル501中のエントリが、ファイルの削除を示す情報とともに送信される。
さて、ステップS207でDB管理部315は、「ファイル記憶部312に記憶されている既存のファイルに対して、変更、移動、変名、削除、コピー以外の他の操作が行われた」というイベントが監視部313により検出されたか否かを判断する。そのようなイベントが検出された場合(すなわち、そのようなイベントの検出を示す監視結果が監視部313からDB管理部315に出力された場合)、図10の処理はステップS208に移行する。逆に、そのようなイベントが検出されていなければ、図10の処理はステップS209に移行する。具体的には、例えば、ファイルの閲覧操作が検出されると、図10の処理はステップS207からS208へと移行する。
例えば、監視部313は、ファイルを開くためのシステムコールと、ファイルにデータを書き込むためのシステムコールと、ファイルを閉じるためのシステムコールを監視してもよい。そして、ファイルが開かれた後、何もファイルに書き込まれずにファイルが閉じられた場合、監視部313は、閲覧操作を検出してもよい。逆に、ファイルが開かれた後、何らかのデータがファイルに書き込まれ、その後にファイルが閉じられた場合、監視部313は変更操作(例えば編集操作)を検出してもよい。
さて、ステップS208でDB管理部315は、監視部313からDB管理部315へ出力される監視結果から、操作種別などの情報を抽出する。
例えば、あるファイルが閲覧されたことを監視部313が上記のようにして検出した場合、監視部313は、以下のような項目を含む監視結果を出力してもよい。
・ファイルが閲覧されたことを示す情報(例えば「閲覧」を示すコードなど)。
・閲覧されたファイルが置かれているディレクトリのパス。
・閲覧されたファイルのファイル名。
・ファイルの閲覧にかかった時間(つまりファイルが開かれてから閉じられるまでの時間)。
・閲覧操作が開始された日時(つまりファイルが開かれた日時)。
すると、DB管理部315は、「閲覧」という種別と、閲覧にかかった時間と、閲覧操作が開始された日時を監視結果から抽出することができる。また、DB管理部315は、デバイスID記憶部314に記憶されているデバイスIDと、監視結果から得られるパスおよびファイル名を、検索キーとして用いてIDテーブル501を参照することで、ファイルIDを抽出することができる。また、DB管理部315は、閲覧されたファイルから、ユニーク値を算出する。その後、図10の処理はステップS203に移行する。
以上のようにしてステップS208の後にステップS203が実行される場合、ステップS203とS204では、具体的には以下のような処理が行われる。
例えば、あるファイルが閲覧された場合、DB管理部315は、閲覧されたファイルに対応する履歴テーブルに、ステップS203で新規エントリを追加する。例えば、図6の履歴テーブル502aの3番目のエントリは、ステップS208の後のステップS203で追加されるエントリの例である。そして、ステップS204では、ステップS203で履歴テーブルに追加されたエントリ(または当該履歴テーブルの全体)と、当該履歴テーブルに対応するファイルIDが送信される。
さて、テップS209でDB管理部315は、「ファイル記憶部312に新たなファイルが1つ増えた」というイベントが監視部313により検出されたか否かを判断する。より具体的には、DB管理部315は、以下の3種類のイベントのいずれかが検出されたか否かを判断する。
・「端末310内でファイルが新規作成された」というイベント。
・「ファイル記憶部312内の既存のファイルがコピーされた」というイベント。
・「ファイルが、通信部311を介して受信されて、ファイル記憶部312に記憶された」というイベント。
上記3種類のイベントのうちのいずれかが検出された場合(すなわち、そのようなイベントの検出を示す監視結果が監視部313からDB管理部315に出力された場合)、図10の処理はステップS210に移行する。逆に、上記3種類のイベントがいずれも検出されていなければ、図10の処理はステップS212に移行する。
ステップS210でDB管理部315は、新たなファイルIDを発行する。例えば、シーケンス番号がファイルIDとして使われる場合、DB管理部315は、カウンタをインクリメントすることで、新たなファイルIDを取得してもよい。そして、DB管理部315は、取得した新たなファイルIDを、新たなファイルに割り当ててもよい。
次に、ステップS211でDB管理部315は、監視部313からDB管理部315へ出力される監視結果から、新たなファイルに関するパスなどの情報を抽出する。
例えば、端末310内でファイルが新規作成された場合、監視部313は、以下のような項目を含む監視結果を出力してもよい。
・ファイルが作成されたことを示す情報(例えば「作成」を示すコードなど)。
・作成された新たなファイルが保存されたディレクトリのパス。
・作成された新たなファイルのファイル名。
・ファイルがファイル記憶部312上に作成された日時。
また、ファイル記憶部312内の既存のファイルがコピーされた場合、監視部313は、以下のような項目を含む監視結果を出力してもよい。
・ファイルがコピーされたことを示す情報(例えば「コピー」を示すコードなど)。
・コピー操作が行われた既存ファイルが置かれているディレクトリのパス。
・当該既存ファイルのファイル名。
・コピー操作により新たに作られたファイルが保存されたディレクトリのパス。
・当該新たなファイルのファイル名。
・コピー操作が行われた日時。
また、ファイルが、通信部311を介して受信されて、ファイル記憶部312に記憶された場合、監視部313は、以下のような項目を含む監視結果を出力してもよい。
・ファイルが受信されたことを示す情報(例えば「受信」を示すコードなど)。
・受信されたファイルが保存されたディレクトリのパス。
・受信されて新たに保存されたファイルのファイル名。
・受信されたファイルがファイル記憶部312上に保存された日時。
・ファイルの送信元を示す送信元情報(例えば、端末の名前、デバイスID、送信元の端末で使われる電子メールアドレスなど)。
以上例示したように、監視部313は、操作の種類に応じて適宜の監視結果を出力する。よって、ステップS211でDB管理部315は、出力された監視結果から、パスなどの適宜の情報を抽出することができる。さらに、DB管理部315は、新たなファイルからユニーク値を算出する。その後、図10の処理はステップS203に移行する。
以上のようにしてステップS211の後にステップS203が実行される場合、ステップS203とS204では、具体的には以下のような処理が行われる。
作成操作、コピー操作、受信操作のいずれが検出された場合においても、DB管理部315は、ステップS203でIDテーブル501に新規エントリを追加する。具体的には、新規エントリの各フィールドには以下の値が設定される。
・デバイスID記憶部314から読み取った、端末310のデバイスID。
・ステップS210で発行した新たなファイルID。
・ステップS211で抽出したパス。
・ステップS211で抽出したファイル名。
さらに、ステップS203でDB管理部315は、IDテーブル501に追加した新規エントリに対応する新たな履歴テーブルを作成する。そして、DB管理部315は、作成した新たな履歴テーブルに新規エントリを追加する。新規エントリには、ステップS211で抽出された情報が設定される。
例えば、図6の履歴テーブル502aは、ファイルが端末310内で新規作成されて、当該ファイルに対してステップS210で「13」というファイルIDが割り当てられた後に、ステップS203で作成されたテーブルである。履歴テーブル502aの1番目のエントリは、履歴テーブル502aが作成されたときにステップS203で追加されたエントリである。
また、履歴テーブル502bは、「13」というファイルIDのファイルがコピーされて、コピー操作により作られた新たなファイルに対してステップS210で「210」というファイルIDが割り当てられた後、ステップS203で作成されたテーブルである。履歴テーブル502bの1番目のエントリは、履歴テーブル502bが作成されたときにステップS203で追加されたエントリである。
さらに、検出された操作がコピー操作である場合、ステップS203でDB管理部315は、コピー元のファイルに対応する履歴テーブルにも新規エントリを追加する。新規エントリには、ステップS211で抽出された情報が設定される。この場合、ステップS203でDB管理部315は、さらに、コピー操作によって生じたファイル間の親子関係を示すエントリを追跡テーブル503に追加する
例えば、図6の履歴テーブル502aの4番目のエントリは、履歴テーブル502bが作成されたのと同じステップS203において、追加されたエントリである。また、図6の追跡テーブル503の2番目のエントリも、履歴テーブル502bが作成されたのと同じステップS203において、追加されたエントリである。
そして、ステップS211の後にステップS203が実行される場合、ステップS204では、少なくとも、IDテーブル501に追加されたエントリと、新たに作成された履歴テーブルが送信される。コピー操作が行われた場合には、ステップS204でさらに、コピー元のファイルに対応するIDテーブル501中のエントリと、コピー元のファイルに対応する履歴テーブルに追加されたエントリと、追跡テーブル503に追加された新たなエントリも送信される。
さて、ステップS212でDB管理部315は、「DB500に追加するためのテーブルの一部または全部を、サーバ350から通信部311が受信した」というイベントが監視部313により検出されたか否かを判断する。そのようなイベントが検出された場合(すなわち、そのようなイベントの検出を示す監視結果が監視部313からDB管理部315に出力された場合)、図10の処理はステップS213に移行する。逆に、そのようなイベントが検出されていなければ、図10の処理はステップS214に移行する。
例えば、DB500に追加するためのテーブルの一部または全部が特定のTCP(Transmission Control Protocol)ポートで受信される場合、監視部313は、特定のTCPポートにおける受信を監視してもよい。それにより、監視部313は、上記のようなイベントを検出することができる。
なお、上記の「DB500に追加するためのテーブルの一部または全部」とは、具体的には以下のうちの1つ以上の組み合わせである。
・IDテーブル501の全体を置き換えるための、丸ごとのIDテーブル。
・IDテーブル501に追加するための、新たな1つ以上のエントリ。
・IDテーブル501中の既存の1つ以上のエントリをそれぞれ置き換えるための、更新された1つ以上のエントリ。
・DB500に追加するための、新たな履歴テーブル。
・DB500中の既存のいずれかの履歴テーブルの全体を置き換えるための、丸ごとの履歴テーブル。
・DB500中の既存のいずれかの履歴テーブルに追加するための、新たな1つ以上のエントリ。
・追跡テーブル503の全体を置き換えるための、丸ごとの追跡テーブル。
・追跡テーブル503に追加するための、新たな1つ以上のエントリ。
例えば、図5のステップS114での端末310におけるメタデータ407の受信は、ステップS212における受信の一例である。例えば、メタデータ407は、追跡テーブル503に追加するための、新たな1つのエントリを含む。
さて、ステップS213では、ステップS212で受信された内容に応じて、DB500が更新される。ステップS213でのDB500の更新は、DB管理部315により制御される。
例えば、丸ごとのIDテーブルが受信された場合、DB管理部315は、受信されたIDテーブルで既存のIDテーブル501を置き換えてもよい。あるいは、丸ごとのIDテーブルが受信された場合、DB管理部315は、更新されたエントリと追加された新規エントリを探してもよい。そして、DB管理部315は、更新されたエントリでIDテーブル501中の既存のエントリを置き換え、受信したIDテーブルに含まれている新規エントリをDB500中のIDテーブル501に追加してもよい。
履歴テーブルや追跡テーブルに関しても、DB管理部315は、類似の方法により、テーブル全体の置き換え、エントリの更新、および/またはエントリの追加を行う。なお、新たな履歴テーブルが受信された場合、DB管理部315は、受信された新たな履歴テーブルをDB500に追加する。
例えば以上のようなDB500の更新の後、図10の処理はステップS201に戻る。
さて、ステップS214でDB管理部315は、サーバ350への問い合わせをするか否かを判断する。ここで、「サーバ350への問い合わせ」とは、「端末310中のDB500には含まれていない新たなデータがサーバ350のDB530−1(つまり端末310と330を使うユーザ用のDB)内に蓄積されているか否か」についての問い合わせである。
例えば、端末310の入力装置205を介して、ユーザが明示的に、サーバ350への問い合わせをするよう端末310に指示する場合があり得る。この場合、DB管理部315は、ユーザからの入力を検出してもよい。DB管理部315は、ユーザからの入力を検出した場合には、「サーバ350への問い合わせをする」と判断する。
あるいは、端末310が最後にサーバ350からメタデータ(つまりテーブルの一部または全部)を受信してから、決められた時間以上の時間が既に経過している場合に、DB管理部315は、「サーバ350への問い合わせをする」と判断してもよい。ステップS214の判断は、例えばフラグやタイマを用いて実装されてもよい。
DB管理部315が「サーバ350への問い合わせをする」と判断すると、図10の処理はステップS215に移行する。逆に、DB管理部315が「サーバ350への問い合わせをしない」と判断すると、図10の処理はステップS201に戻る。
ステップS215では、通信部311がサーバ350に問い合わせを送る。問い合わせは、DB管理部315により生成される。問い合わせは、端末310が最後にサーバ350からメタデータを受信した日時を含んでいてもよい。また、問い合わせは、IDテーブル501のエントリ数や追跡テーブル503のエントリ数などを含んでいてもよい。
問い合わせに対して、サーバ350から応答が返される。サーバ350から返される応答は、具体的には、適宜のメタデータ(つまりテーブルの一部または全部)を含む応答であるか、または、「新たなデータは蓄積されていない」旨を示す応答である。通信部311は、サーバ350からの応答をステップS215で受信する。
次に、ステップS216でDB管理部315は、受信された応答に基づいて(あるいは、受信された応答に含まれるメタデータと端末310中のDB500との比較に基づいて)、追加データがあるか否かを判断する。つまり、DB管理部315は、端末310中のDB500には含まれていない新たなデータがあるか否かを判断する。
追加データがある場合、図10の処理はステップS213に移行し、ステップS213で追加データがDB500に追加される。逆に、追加データがない場合、図10の処理はステップS201に戻る。
さて、図11は、第2実施形態で端末330が行う処理のフローチャートである。端末330の電源がオンにされると、端末330は図11の処理を開始する。
図11と図10の違いは、図11ではステップS301とS302が追加されている点である。ステップS201〜S216は、図10と図11で共通なので、詳しい説明は省略する。なお、図10では、ステップS204、S213、S214、およびS216からステップS201へと処理が戻る場合があるが、図11では、ステップS201ではなくステップS301に処理が戻る。
具体的には、端末330が図11の処理を開始すると、まずステップS301で、バックアップ制御部339が「ファイルのバックアップを行うか否か」を判断する。
例えば、端末330の入力装置205を介して、ユーザから明示的にバックアップ開始が指示される場合もある。バックアップ制御部339は、ユーザから入力を検出してもよい。バックアップ制御部339は、ユーザからの入力を検出した場合には、「ファイルのバックアップを行う」と判断する。
また、バックアップスケジュールが予め決められていてもよい。バックアップスケジュールにより決められた日時になった場合、バックアップ制御部339は、「ファイルのバックアップを行う」と判断してもよい。
そして、バックアップ制御部339が「ファイルのバックアップを行う」と判断すると、図11の処理はステップS302に移行する。ステップS302では、図14〜15とともに後述するバックアップ制御処理が行われる。バックアップ制御処理の実行後、図11の処理はステップS301に戻る。
逆に、ステップS301でバックアップ制御部339が「ファイルのバックアップを行わない」と判断した場合、図11の処理はステップS201に移行する。ステップS201〜S216では、端末330内の通信部331、監視部333、およびDB管理部335が、端末310内の通信部311、監視部313、およびDB管理部315とそれぞれ同様に動作する。
また、図10に関して説明したように、端末310では、ファイル記憶部312内のファイルに対する操作が監視され、デバイスID記憶部314に記憶されたデバイスIDが使われ、DB記憶部316上のDB500が管理される。同様に、図11の処理においては、端末330では、ファイル記憶部332内のファイルに対する操作が監視され、デバイスID記憶部334に記憶されたデバイスIDが使われ、DB記憶部336上のDB510が管理される。
ある観点から言えば、図11のステップS201〜S216の処理は、端末330(すなわち優先度の算出を行う情報処理装置)が履歴情報と追跡情報を取得する処理であり、図1のステップS1〜S2に対応する。他方、図11のステップS302でのバックアップ制御処理は、図1のステップS3〜S7に対応するいくつかのステップを含む。
また、図5のステップS106でのメタデータ403の受信は、図11のステップS212での受信に対応する。同様に、ステップS114でのメタデータ407の受信も、ステップS212での受信に対応する。
図5のステップS107でのファイル404の受信は、図11のステップS209で検出される受信に対応する。そして、図5のステップS108でのメタデータ405の生成と記録は、図11のステップS210、S211およびS203に対応し、図5のステップS109でのメタデータ405の送信は図11のステップS204での送信に対応する。
図5のステップS115での優先度408の算出は、図11のステップS302のバックアップ制御処理に含まれる。
ところで、ステップS214の問い合わせは、主に、端末330に利点をもたらす。なぜなら、優先度の算出を行う端末330にとって、優先度の算出に使うDB510を適切に管理することが望ましいからであり、問い合わせはDB510の適切な管理に役立つからである。
例えば、端末330には常に電源が入れられているとは限らない。また、仮に端末330に電源が入れられているとしても、端末330が常にネットワーク370に接続されているとは限らない。例えば、端末330が電池で駆動される場合などに、省電力のために通信機能がオフにされることがあり得る。また、通信機能がオンになっていても、無線通信環境などによっては、端末330が通信不能な場合もあり得る。
すると、端末330がネットワーク370を介してサーバ350と通信を行うことができない期間が存在し得る。一方、そのような期間中に、端末310においてファイルに対して何らかの操作が行われることもあり得るし、その結果、新たなメタデータが生成されることもあり得る。
ステップS214の問い合わせは、端末330が通信不能な期間中に新たに生成されたメタデータを、後から端末330が取得することを可能にする。つまり、ステップS214の問い合わせは、端末330のDB記憶部336上のDB510を適切な状態に維持するうえで、有益である。
また、「端末310や330は、常にネットワーク370を介した通信が可能な状態にあるわけではない」という点を考慮して、図10と11の処理は、以下のように変形されてもよい。説明の便宜上、図10の処理の変形について以下に例示するが、図11の処理も同様に変形されてよい。
端末310は、電池残量や通信環境によっては、ステップS203の実行後、ステップS204を実行せずにステップS201に戻ってもよい。端末310は、このようにステップS203の直後のステップS204の送信を省略する場合は、代わりに、「ステップS203でどのテーブルのどのエントリを更新または追加したのか」ということを記録する。例えば、DB500中の各テーブルの各エントリに、「当該エントリを後でサーバ350に送信するか否か」を示すフラグ用のフィールドが設けられてもよい。
端末310は、ステップS204を省略する場合は、ステップS203で更新または追加した各エントリのフラグをオンにする。そして、端末310は、通信が可能な状況になった後の適宜の時点において、フラグがオンのエントリをサーバ350に送信してもよい。送信後、端末310は、送信した各エントリのフラグをオフにする。
以上のような図10の処理の変形と同様の変形は、上述のとおり、端末330が実行する図11の処理にも適用可能である。
さて、ここで説明の都合上、上記のステップS302のバックアップ制御処理の詳細について説明する前に、サーバ350が行う処理について先に説明することにする。サーバ350は、上記のステップS214の問い合わせに応答するだけでなく、さらに、図12の処理も実行する。ある観点から言えば、ステップS214の問い合わせに対して応答する処理も、図12の処理も、端末330(すなわち優先度の算出を行う情報処理装置)が履歴情報と追跡情報を取得することができるようにするための処理である。
サーバ350に電源が入れられると、サーバ350は図12の処理を開始する。そして、通信部351が、いずれかの端末から、いずれかのテーブルの一部または全部(つまり何らかのメタデータ)を受信するまで、サーバ350はステップS401で待つ。通信部351が何らかのメタデータを受信すると、図12の処理はステップS402に移行する。
ステップS402でデバイス管理部353は、メタデータの送信元の端末のデバイスIDを抽出する。また、ステップS403でデバイス管理部353は、メタデータの送信元の端末を使うユーザのユーザIDを抽出する。
ステップS402とS403の抽出のための具体的手法は、実施形態に応じて適宜決められていてよい。
例えば、端末310と330の各々は、ステップS204において、ステップS203で更新または追加したテーブルおよび/またはエントリとともに、デバイスIDをサーバ350に送信してもよい。すると、デバイス管理部353は、通信部351が受信した情報の中から、ステップS402でデバイスIDを抽出することができる。また、ステップS403でデバイス管理部353は、抽出したデバイスIDを検索キーとして用いて、デバイス管理テーブル520を参照することで、ユーザIDを抽出することもできる。
あるいは、ステップS204の送信が、端末とサーバ350の間でコネクションを確立するための認証フェーズと、確立されたコネクション上での情報送信フェーズを含んでいてもよい。端末310と330の各々は、認証フェーズにおいてデバイスIDをサーバ350に送信してもよい。この場合、デバイス管理部353は、認証フェーズで送信されたデバイスIDを取得することができる。
もちろん、端末310と330の各々は、デバイスIDだけでなく、ユーザIDをさらに記憶していてもよい。この場合、端末310と330の各々は、デバイスIDだけでなく、ユーザIDをさらにサーバ350に送信してもよい。
具体的な方法が何であれ、デバイス管理部353は、デバイスIDとユーザIDを抽出すると、デバイスIDとユーザIDをDB管理部354に出力する。そして、図12の処理はステップS404に移行する。
なお、図12に関しては、説明の簡単化のため、端末から一度に送られるメタデータは、1つの操作に対応するものと仮定する。2つ以上の操作に対応するメタデータが一度にまとめて送られる場合は、図12の処理が、ステップS404〜S408・S411〜S413を適宜の回数繰り返すように変形される。
さて、ステップS404でDB管理部354は、通信部351が受信したメタデータのログ種別が、「受信」なのか、「送信」なのか、それ以外なのかを判断する。そして、ログ種別が「受信」の場合、図12の処理はステップS405に移行する。ログ種別が「送信」の場合、図12の処理はステップS411に移行する。ログ種別が「受信」でも「送信」でもない場合、図12の処理はステップS413に移行する。
例えば、あるファイルが1台の端末から他の端末に送信された場合、送信されたファイルに対応する当該ファイルのファイルIDと、当該ファイルIDに対応する履歴テーブル中の1個のエントリがステップS401で受信される。この場合、ログ種別は「送信」である。もちろん、単なるファイルIDの代わりに、IDテーブル中の1つのエントリが使われてもよい。
例えば、図6の履歴テーブル502aの2番目のエントリがステップS401で受信された場合、ログ種別は「送信」である。よって、この場合、図12の処理はステップS411に移行する。
あるファイルが端末内で変更された場合は、変更された当該ファイルのファイルIDと、当該ファイルIDに対応する履歴テーブル中の1個のエントリがステップS401で受信される。この場合、ログ種別は「受信」でも「送信」でもない。もちろん、単なるファイルIDの代わりに、IDテーブル中の1つのエントリが使われてもよい。
例えば、図6の履歴テーブル502bの2番目または3番目のエントリがステップS401で受信された場合、図12の処理はステップS413に移行する。同様に、図7の履歴テーブル512aの2番目のエントリがステップS401で受信された場合も、図12の処理はステップS413に移行する。
あるファイルが端末内で移動または変名された場合は、IDテーブルの1個のエントリ(つまり移動または変名された当該ファイルに対応するエントリ)と、当該ファイルに対応する履歴テーブル中の1個のエントリがステップS401で受信される。この場合、ログ種別は「受信」でも「送信」でもない。
例えば、図7のIDテーブル511の2番目のエントリと履歴テーブル512aの3番目のエントリがステップS401で受信された場合、図12の処理はステップS413に移行する。
あるファイルが削除された場合は、IDテーブルの1個のエントリ(つまり削除された当該ファイルに対応するエントリ)が、削除を示す情報とともにステップS401で受信される。この場合、ログ種別は「受信」でも「送信」でもない。よって、図12の処理はステップS413に移行する。
あるファイルが端末内で新規作成された場合は、IDテーブルの1個のエントリ(つまり作成された当該ファイルに対応するエントリ)と、当該ファイルに対応する新たな履歴テーブルに最初に作られたエントリが、ステップS401で受信される。この場合、ログ種別は「受信」でも「送信」でもない。
例えば、図6のIDテーブル501の2番目のエントリと、履歴テーブル502aの1番目のエントリがステップS401で受信された場合、図12の処理はステップS413に移行する。
あるファイルが端末内でコピーされた場合は、IDテーブルの2個のエントリ(つまりコピー元のファイルとコピー操作により新たに作られたファイル)と、両ファイルにそれぞれ対応する履歴テーブルのそれぞれ1個のエントリが、ステップS401で受信される。さらに、この場合には、追跡テーブルの1個のエントリもステップS401で受信される。
例えば、ステップS401で以下のエントリが受信された場合、図12の処理はステップS413に移行する。
・図6のIDテーブル501において、履歴テーブル502aに対応するエントリ。
・IDテーブル501において、履歴テーブル502bに対応するエントリ。
・履歴テーブル502aの4番目のエントリ。
・履歴テーブル502bの1番目のエントリ。
・追跡テーブル503の2番目のエントリ。
あるファイルが、ある端末で受信されて新たに保存された場合は、IDテーブルの1個のエントリ(つまり受信され保存されたエントリ)と、当該ファイルに対応する新たな履歴テーブルに最初に作られたエントリが、ステップS401で受信される。この場合、ログ種別は「受信」である。
例えば、図7のIDテーブル511の2番目のエントリ(ただしファイルがリネームされる前の状態のもの)と、履歴テーブル512aの1番目のエントリがステップS401で受信された場合、図12の処理はステップS405に移行する。
あるファイルが閲覧された場合は、閲覧された当該ファイルのファイルIDと、当該ファイルIDに対応する履歴テーブル中の1個のエントリがステップS401で受信される。この場合、ログ種別は「受信」でも「送信」でもない。もちろん、単なるファイルIDの代わりに、IDテーブル中の1つのエントリが使われてもよい。
例えば、図6の履歴テーブル502aの3番目のエントリがステップS401で受信された場合、図12の処理はステップS413に移行する。
さて、ログ種別が「受信」の場合、ステップS405でDB管理部354は、送信元に関する情報を抽出する。
例えば、図7の履歴テーブル512aの1番目のエントリでは「スマートフォンから受信」と例示されている。よって、履歴テーブル512aの1番目のエントリが受信された場合、DB管理部354は、スマートフォンが送信元であることをステップS405で認識する。
例えば、図8のデバイス管理テーブル520には、ユーザIDとデバイスIDのフィールドのみが例示されているが、さらに、端末の種類(例えば、「PC」や「スマートフォン」など)を示すフィールドがあってもよい。すると、デバイス管理部353は、デバイス管理テーブル520を参照することで、スマートフォンのデバイスIDを認識することも可能である。したがって、DB管理部354は、デバイス管理部353への問い合わせを介して、スマートフォンのデバイスIDを取得することができる。
場合によっては、履歴テーブルにおいて、「mobile−001から受信」のように、デバイスIDを使ってログ種別が表現されていてもよい。この場合、DB管理部354は、送信元に関する情報として、「mobile−001」というデバイスIDを、理的テーブルから直接抽出することができる。
なお、履歴テーブルにおけるログ種別の表現形式は、実施形態に応じて適宜決められていてよい。例えば、「『スマートフォンから受信』というサブ種別が『受信』という種別に含まれる」と予め定義されていてもよい。あるいは、図6では「ログ種別」という1つのフィールドの中に「スマートフォンから受信」と例示されているが、「受信」のような大まかな種別を示すフィールドと、種別に応じたパラメタを示すフィールドが履歴テーブルに含まれていてもよい。例えば、「受信」という種別の場合、後者のフィールドには、「スマートフォン」または「mobile−001」などのパラメタが含まれていてもよい。
さて、次のステップS406において、DB管理部354は、受信に対応する送信ログがあるか否かを判断する。ここで、今回のステップS401において受信された履歴情報が示す「受信」は、ファイルが送られる送信先の端末にとっての「受信」であることに注意されたい。よって、ステップS406でDB管理部354は、具体的には、送信元の端末にとっての「送信」を示す履歴情報がDB記憶部352内にあるか否かを判断する。
例えば、端末330から図7の履歴テーブル512aの1番目のエントリがステップS401で受信されたとする。この場合、ステップS402で抽出されるデバイスIDは「PC−002」であり、ステップS403で抽出されるユーザIDは「suzuki_taro」である。ステップS405では、送信元を示す情報として、「スマートフォン」という種別のみが抽出される場合もあり得るし、「mobile−001」というデバイスIDが抽出される場合もあり得る。
このように「suzuki_taro」というユーザIDが抽出された場合、DB管理部354は、「suzuki_taro」というユーザIDのユーザ用のDB(すなわち図8と9のDB530−1)を参照し、受信に対応する送信ログを探す。例えば、送信元を示す情報として「mobile−001」というデバイスIDが抽出されたとする。この場合、DB管理部354は、IDテーブル531で「mobile−001」というデバイスIDを持つ各エントリに対応するすべての履歴テーブルの中から、以下の3つの条件を満たすエントリを探す。
・ログ種別が、「送信」である。
・ユニーク値が、「受信」を示す履歴情報におけるユニーク値(この例では、履歴テーブル512aの1番目のエントリにおける「65615163」)と等しい。
・日時が、「受信」を示す履歴情報における日時(この例では、履歴テーブル512aの1番目のエントリにおける「2012年3月6日8時21分)と、ある誤差範囲内で等しい。
上記の3つの条件を満たすエントリが、上記の「受信に対応する送信ログ」である。例えば、上記の例では、図6の履歴テーブル502aの2番目のエントリをサーバ350が既に受信していた場合には、「受信に対応する送信ログ」がDB530−1内に存在する。
以上の説明から明らかなとおり、ステップS405では、送信元を示す情報が抽出されなくても問題ない。つまりステップS405は省略可能である。なぜなら、DB管理部354は、DB530−1中の全履歴テーブルの中から上記の3つの条件を満たすエントリを探せばよいからである。ただ、送信元を示す情報が抽出可能であれば、検索が効率化されるので、図12にはステップS405が例示されている。
そして、受信に対応する送信ログが見つかった場合、図12の処理はステップS407に移行する。逆に、受信に対応する送信ログが見つからなければ、図12の処理はステップS413に移行する。例えば、図5のステップS110では、受信に対応する送信ログが見つからない。
さて、ステップS407でDB管理部354は、送信を示す履歴情報と、受信を示す履歴情報に基づいて、端末間の複製操作によるファイル間の親子関係を認識する。そして、DB管理部354は、親子関係を示す追跡情報を生成する。
例えば、送信を示す履歴情報として、図6の履歴テーブル502aの2番目のエントリが既にサーバ350に受信されており、かつ、受信を示す履歴情報として、図7の履歴テーブル512aの1番目のエントリが既にサーバ350に受信されているとする。この場合、DB記憶部352内のDB530−1には、送信を示す履歴情報と受信を示す履歴情報が含まれている。つまり、DB530−1には、以下の2つの履歴テーブルが含まれている。
・「mobile−001」というデバイスIDと「13」というファイルIDとのペアに対応する履歴テーブル。
・「PC−002」というデバイスIDと「83」というファイルIDとのペアに対応する履歴テーブル。
そして、ステップS407に至るまでのステップにおいて、DB管理部354は既に上記の2つのデバイスIDと上記の2つのファイルIDを認識している。
例えば、ファイルの受信を示す履歴情報は、IDテーブルのエントリとともにサーバ350に受信されるから、DB管理部354は、ファイルの送信先の端末(つまりファイルを受信した端末)におけるファイルIDを認識することができる。また、ファイルの受信を示す履歴情報がステップS401で受信された場合には、ファイルの送信先の端末(つまり履歴情報の送信元の端末)のデバイスIDは、ステップS402で抽出されている。
そして、ファイルを送信した端末のデバイスIDは、ステップS405で抽出されるか、または、ステップS406での検索の結果として、DB管理部354に認識される。また、ファイルを送信した送信元の端末におけるファイルIDは、ステップS406での検索の結果として、DB管理部354に認識されている。
よって、ステップS407でDB管理部354は、送信を示す履歴情報と、受信を示す履歴情報に基づいて、親デバイスID、親ファイルID、子デバイスID、および子ファイルIDを認識することができる。DB管理部354は、これら4つのIDにより表される追跡情報を生成する。
続いて、ステップS408でDB管理部354は、テーブルの送信先を決定する。より具体的には、DB管理部354は、ステップS401で受信されたメタデータの送信元の端末と同じユーザにより使われているすべての端末に、以下のエントリを送信することを決定する。
・追跡テーブルのエントリ(ステップS407で生成された追跡情報であり、次のステップS409でDB530−1内の追跡テーブル533に追加するエントリとも同じ追跡情報である)。
・履歴テーブルのエントリ(ステップS401で受信されたエントリと同じ履歴情報であり、次のステップS409でDB530−1内のいずれかの履歴テーブルに追加するエントリとも同じ履歴情報である)。
・ステップS401でIDテーブルのエントリが受信された場合は、当該IDテーブルのエントリ(次のステップS409でDB530−1内のIDテーブル511に追加するエントリと同じである)。
上記の説明から明らかなように、あるユーザがM台の端末を使う場合、M台の端末すべてが、ステップS408で送信先として決定される。そして、図12の処理はステップS409に移行する。
ステップS409でDB管理部354は、DB記憶部352上のDBを更新する。つまり、DB管理部354は、ステップS401で受信したメタデータに基づいて、適宜、テーブルの追加、エントリの追加、および/またはエントリの更新を行う。また、ステップS407の後にステップS409が実行される場合は、DB管理部354はさらに、ステップS407で生成した追跡情報もDBに追加する。
そして、次のステップS410では、ステップS409で更新または追加された各エントリが、通信部351から送信される。送信先は、ステップS408で決定された上記M台の端末か、または、後述するようにステップS413で決定された(M−1)台の端末である。送信後、図12の処理はステップS401に戻る。
さて、ログ種別が「送信」の場合、ステップS411でDB管理部354は、送信先に関する情報を抽出する。そして、次のステップS412でDB管理部354は、送信に対応する受信ログがあるか否かを判断する。ステップS411およびS412の詳細は、「受信」と「送信」が入れ替わっている点を除けば、ステップS405およびS406と類似である。よって、詳細な説明は省略する。ステップS405が省略可能なのと同様に、ステップS411も省略可能である。
ステップS412において、送信に対応する受信ログが見つかった場合、図12の処理はステップS407に移行する。逆に、送信に対応する受信ログが見つからなかった場合、図12の処理はステップS413に移行する。
例えば、図5のステップS112でのメタデータ406が、図12のステップS401で受信されると、ステップS412で、送信に対応する受信ログが見つかる。なぜなら、図5のステップS109で既にメタデータ405が受信されているからである。よって、この場合は、図12の処理はステップS407に移行する。その結果、ステップS407で認識された親子関係を示す追跡情報を含むメタデータ407が、ステップS410で送信される。このステップS410での送信が、図5のステップS114に対応する。
さて、ステップS413では、DB管理部354は、以下のようにテーブルの送信先を決定する。具体的には、DB管理部354は、ステップS401で受信されたメタデータの送信元の端末以外のすべての端末(ただし、送信元の端末と同じユーザにより使われている端末に限る)に、以下のエントリを送信することを決定する。
・履歴テーブルのエントリ(ステップS401で受信されたエントリと同じ履歴情報であり、次のステップS409でDB530−1内のいずれかの履歴テーブルに追加するエントリとも同じ履歴情報である)。
・ステップS401でIDテーブルのエントリが受信された場合は、当該IDテーブルのエントリ(次のステップS409でDB530−1内のIDテーブル511に追加するエントリと同じである)。
上記の説明から明らかなように、あるユーザがM台の端末を使う場合、(M−1)台の端末が、ステップS413で送信先として決定される。そして、図12の処理はステップS409に移行する。
例えば、図4と図5に示す例ではM=2であり、図5のステップS106は、1(=M−1)台の端末330にステップS410でメタデータ403が送信されることを示している。
以上、図12を参照して説明したように、第2実施形態では、端末間の複製操作によって発生する親子関係についての追跡情報は、サーバ350により生成される。そして、サーバ350が追跡情報を送信することで、端末330(つまり優先度を算出する情報処理装置)は、追跡情報を取得することが可能となる。
続いて、図11のステップS302におけるバックアップ制御処理の詳細について、図13〜15を参照して説明する。バックアップ制御処理は優先度の算出を含み、優先度の算出においてはファイル間の親子関係が考慮される。
図13は、ファイル間の親子関係と優先度について説明する図である。ファイルは、端末内でのコピー操作により複製されることもあり得るし、ある端末から他の端末への送信により端末間で複製されることもあり得る。また、後述の第3実施形態では、ファイルが端末からサーバへの送信により複製されることもあり得るし、サーバから端末への送信によりファイルが複製されることもあり得る。そして、複製は1回だけ行われるとは限らない。また、複製の後に、親ファイルが変更される可能性もあるし、子ファイルが変更される可能性もある。つまり、親ファイルと子ファイルのデータは、互いに等しい場合もあり得るし、互いに異なる場合もあり得る。
図13では、ファイル間の親子関係を木構造で図示している。以下では説明の便宜上、1つ以上のファイルを含む木を「ファイルツリー」という。また、1つのファイルツリーに含まれるファイルのうち、データが同じ1つ以上のファイル同士のグループを「同一データグループ」という。さらに、根ファイルでも葉ファイルでもないファイルを「中間ファイル」という。
ファイルツリー600は、1つのファイル601のみを含む。ファイル601は根ファイルであり、かつ、葉ファイルである。つまり、ファイル601に対する複製操作は、まだ行われたことがない。ファイル601の優先度は、ファイル601に対して今までに行われた各操作に応じて算出される。
例えば、ファイル601に対して今までに3回、何らかの操作が行われたとする。この場合、優先度算出部337は、3つの操作それぞれの種別に応じた値の和を、ファイル601の優先度として算出してもよい。例えば、優先度算出部337は、定義701のようにログ種別に応じて決められた式にしたがって、3つの操作それぞれに対応する値を算出し、算出した3つの値を足すことで、ファイル601の優先度を算出してもよい。
定義701に例示されているそれぞれの式において、「Now」は現在時刻(つまり優先度算出部337が優先度を算出する時点)を示し、「t」は操作が行われた日時を示し、「Δt」は操作にかかった時間の長さを示す。定義701に例示するとおり、操作の種別に応じた値を算出するための式は、(Now−t)の関数であってもよいし、(Now−t)とΔtの関数であってもよい。
各関数fa(1≦a)は、(Now−t)に対して単調減少することが望ましい。つまり、優先度算出部337は、そのように定義された関数を用いることで、操作が行われた時点が新しいほど、ファイルの優先度を高めてもよい。
また、関数faが引数としてΔtをもとる場合、関数faは、Δtに対して単調増加することが望ましい。つまり、優先度算出部337は、そのように定義された関数を用いることで、操作にかかった時間が長いほど、ファイルの優先度を高めてもよい。
各関数f
aの詳細は、実施形態に応じて適宜決められてよい。例えば、以下の式(1)と(2)のような定義が採用されてもよい(ただし、式(1)と(2)では、(Now−t)とΔtの単位が秒であるものとする)。
例えば、式(1)と(2)における「100」などの具体的な値は、いずれも説明の便宜上の例に過ぎないが、これらの値を調整することで、操作の種別に応じた重要度を優先度に反映させることができる。
例えば、作成操作は、他の操作(例えば受信操作)よりも優先度をより高めるように、優先度に影響することが好ましい。そこで、「受信」という種別に対応する関数は、式(1)の「100」という値を「20」という値に置き換えた関数であってもよい。すると、このような値の違いにしたがって、優先度算出部337は、優先度の算出において、受信よりも作成を重要視することが可能となる。
同様に、ユーザ主導操作と自動操作の違いを優先度に反映するために、関数f5とf6におけるパラメタの値が異なるように定義されていてもよい。
また、スマートフォン102のSSD103の容量は、PC106のHDD107の容量よりも小さい場合が多い。このことから、以下のような考察が得られる。
ユーザは、それほど重要と考えていないファイルでも、しばしばスマートフォン102からPC106に送信すると考えられる。なぜなら、PC106のHDD107の容量は大きいからである。
しかし、ユーザがわざわざPC106からスマートフォン102に送信するファイルは、ユーザにとってある程度重要性の高いものだと考えられる。なぜなら、スマートフォン102のSSD103の容量は小さいからである。
以上のような考察に基づいて、「送信」という種別は、「PCへの送信」という種別と、「スマートフォンへの送信」という種別にサブカテゴリ化されてもよい。そして、「PCへの送信」という種別と、「スマートフォンへの送信」という種別に応じて、互いに異なる式が使われてもよい。同様に、「PCからの受信」と「スマートフォンからの受信」という種別に応じて、互いに異なる式が使われてもよい。つまり、優先度算出部337は、そのように端末の種類に応じてサブカテゴリ化された「受信」・「送信」などのログ種別に応じた式を使ってもよい。
それにより、スマートフォン102への送信操作(換言すればPC106からの受信操作)は、PC106への送信操作(換言すればスマートフォン102からの受信操作)よりも、一層、優先度を高めるように、優先度に影響することになる。
さて、ファイルツリー610は、3つのファイル611〜613を含む。ファイル611は根ファイルであり、ファイル612はファイル611の子ファイルである。ファイル613は、ファイル612の子ファイルであり、かつ、葉ファイルである。また、ファイル611〜613のデータは互いに異なる。
例えば、ユーザは、ファイル611を作成し、ファイル611をコピーしてファイル612を作成し、ファイル612を編集し、編集後のファイル612をコピーしてファイル613を作成し、ファイル613を編集する場合がある。ファイルツリー610は、例えばこのような場合に対応する。
優先度算出部337は、1回以上の複製操作により根ファイルから直接または間接に得られた1個以上の子孫ファイルの各々に対して行われた各操作に応じて、根ファイルの優先度を上げてもよい。つまり、優先度算出部337は、ファイル611の優先度を算出する際に、ファイル611に対する操作履歴のほかに、さらに、ファイル612と613に対する操作履歴を考慮してもよい。具体的には、優先度算出部337は、ファイル612と613に対する操作履歴に応じて、ファイル611の優先度を上げてもよい。
なぜなら、「もしファイル612や613に対して多くの操作が行われているならば、ファイル612と613の元になった根ファイルであるファイル611の重要性が高い」と想定されるからである。
また、ファイル612と613を比べると、ファイル613は最新版である蓋然性が高く、ファイル612は編集過程の途中の状態が保存されたものである蓋然性が高い。よって、優先度算出部337は、1つのファイルツリーに属するファイルのうち、葉ファイルの優先度を中間ファイルの優先度よりも高く評価することが好ましい。
例えば、優先度算出部337は、ファイル613の優先度を、ファイル611の優先度(例えば、上記のようにして各子孫ファイルに対する各操作に応じて上げた優先度)に応じて上げてもよい。優先度算出部337は、このようにして、中間ファイル612の優先度よりも、葉ファイル613の優先度の方を高く評価してもよい。
あるいは、優先度算出部337は、根ファイル以外の各ファイルについては、根ファイルから当該ファイルまでのパス上の各ファイルに対する各操作に応じて優先度を算出してもよい。例えば、優先度算出部337は、ファイル611と612に対する各操作に応じてファイル612の優先度を算出してもよく、ファイル611と612と613に対する各操作に応じてファイル613の優先度を算出してもよい。
それにより、優先度算出部337は、ある先祖ファイル(ただし根ファイル以外)の優先度よりも、その子孫ファイルの優先度の方を高く評価することができる。その結果、優先度算出部337は、葉ファイルの優先度を中間ファイルの優先度よりも高く評価することが可能となる。
以上説明したように、根ファイルと葉ファイルの優先度を中間ファイルの優先度よりも高く評価するために、優先度算出部337は、例えば、定義702に例示されるような式を用いて各ファイルの優先度を算出してもよい。なお、定義702中のそれぞれの式の詳細については後述する。
さて、ファイルツリー620は、3つのファイル621〜623を含む。ファイル621は根ファイルであり、ファイル622はファイル621の子ファイルである。ファイル623は、ファイル622の子ファイルであり、かつ、葉ファイルである。また、ファイル621〜623のデータは互いに等しい。よって、ファイル621〜623は、同一データグループ624に属する。
ファイルツリー610と620を比較すると明らかなように、もしファイル611と621の重要性が同じであれば、ファイル611が失われると生じる損害の方が、ファイル621が失われると生じる損害よりも大きい。なぜなら、ファイル621が仮に失われたとしても、ファイル622と623がファイル621のバックアップコピーとして利用可能だからである。
よって、同一データグループに2つ以上のファイルが含まれる場合、優先度算出部337は、同一データグループ内の各ファイルの優先度を下げることが好ましい。例えば、優先度算出部337は、同一データグループに含まれるファイルの個数に対して単調減少するような関数を使ってもよい。優先度算出部337は、優先度を下げるために、1未満の適宜の整数を掛ける乗算を行ってもよい。
ところで、1つの同一データグループに属する複数のファイルは、すべて1台の端末内に記憶されている場合もあり得るし、2台以上の端末に分散している場合もあり得る。明らかに、1つの同一データグループに属する複数のファイルが多くの端末に分散しているほど、ファイルをバックアップする必要性が低い。
そこで、優先度算出部337は、「1つの同一データグループに属する複数のファイルが何台の端末に分散しているか」ということに応じて、優先度を調整することが好ましい。例えば、優先度算出部337は、1つの同一データグループに属するファイルを1個以上記憶している端末の台数に対して単調減少するような関数を使ってもよい。
以上のような、同一データグループを考慮に入れた優先度の算出のために、優先度算出部337は、例えば定義703に例示されるような式を用いて各ファイルの優先度を算出してもよい。なお、定義703中のそれぞれの式の詳細については後述する。
さて、ファイルツリーの中には、ファイルツリー630のような複雑なものも存在し得る。ファイルツリー630は、図12に示すようにファイル631〜639を含む。ファイルツリー630に示すように、1つの親ファイルから複数の子ファイルが派生する場合もあり得る(例えば、ファイル632の子ファイルの数は3つである)。また、ファイルツリー630内において、ファイル631、633、および637は1つの同一データグループ640に属し、ファイル632と634も1つの同一データグループ641に属する。しかし、他のファイルは、互いにデータが異なる。
例えば、優先度算出部337が根ファイル631の優先度を算出する処理は、次の2つの処理を含むことが好ましい。
・子孫ファイル632〜639に対して行われた各操作を考慮に入れて優先度を上げる処理。
・同一データグループ640に3つのファイルが含まれることを考慮に入れて優先度を下げる処理。
さて、図14〜図15は、図11のステップS302に示したバックアップ制御処理のフローチャートである。このバックアップ制御処理は、図13に関して説明したような優先度の調整を含む。
まずステップS501で、優先度算出部337は、IDテーブル511を参照し、デバイスIDとファイルIDの全ペアを抽出する。より正確には、優先度算出部337は、IDテーブル511に記録されているデバイスIDとファイルIDのペアのうち、当該ペアに対応する履歴テーブルが存在するすべてのペアを抽出する。すなわち、優先度算出部337は、まだ削除されていない各ファイルを識別するデバイスIDとファイルIDを抽出する。
また、ステップS502で優先度算出部337は、DB510中のすべての履歴テーブルを参照し、全ユニーク値を抽出する。具体的には、優先度算出部337は、各履歴テーブル内において日時が最新のエントリにおけるユニーク値を抽出する。こうして得られる複数のユニーク値の中には、互いに等しいものもあり得る。例えば、ファイル621〜623のユニーク値は等しい。
よって、優先度算出部337は、重複したユニーク値を除く。なお、上述のとおり、説明の簡単化のため、ユニーク値の衝突は無視して差し支えないものとする。
続くステップS503〜S508は、各ユニーク値に対する繰り返しループを形成している。
ステップS503で優先度算出部337は、ステップS502で抽出したユニーク値の中に未選択のものがあるか否かを判断する。未選択のユニーク値がある場合、優先度算出部337は、次のステップS504で、未選択のユニーク値を1つ選択する。逆に、抽出した全ユニーク値が選択済みの場合、バックアップ制御処理はステップS509へ移行する。
さて、ステップS504で選択されたユニーク値を、以下では「選択ユニーク値」という。ステップS504での選択に続いて、ステップS505で優先度算出部337は、選択ユニーク値に複数のファイルが対応するか否かを判断する。
選択ユニーク値に複数のファイルが対応する場合とは、同一データグループに複数のファイルが含まれる場合である。具体的には、日時が最新のエントリの「ユニーク値」のフィールドに選択ユニーク値が記録されている履歴テーブルがDB510中に2つ以上存在する場合、選択ユニーク値には複数のファイルが対応する。
選択ユニーク値には1つのファイルのみが対応する場合、バックアップ制御処理はステップS506に移行する。逆に、選択ユニーク値に複数のファイルが対応する場合、バックアップ制御処理はステップS507に移行する。
ステップS506で優先度算出部337は、選択ユニーク値に対応する1つのファイルに対して行われた操作に基づいて、選択ユニーク値に対応する「個別優先度」を算出する。以下では、あるユニーク値「u」に対応する個別優先度を「p(u)」と示す。
個別優先度p(u)は、ユニーク値uに対応する1つ以上のファイルの各々に対する各操作に基づく値である。ステップS506では、選択ユニーク値に対応するファイルの個数は1個なので、ステップS506で算出される個別優先度p(u)は、ユニーク値uに対応する1つファイルに対する各操作に基づく値である。
個別優先度p(u)は、例えば、式(3)により定義されてもよい。
式(3)における「H(u)」は、ユニーク値uに関する履歴情報のエントリの数である。例えば、ユニーク値uに対応するファイルが1個あって、当該ファイルに対応する履歴テーブルが4個のエントリを有する場合、H(u)=4である。
式(3)における「f(h)」は、図13の定義701中の関数faのいずれかである(ただし1≦a)。例えば、H(u)個のエントリのうちのh番目のエントリのログ種別が「作成」の場合、f(h)=f1(Now−t)である。なお、前述のとおり「Now」は現在時刻を示す。また、「t」は、H(u)個のエントリのうちのh番目のエントリにおける日時を示し、「Δt」は、H(u)個のエントリのうちのh番目のエントリにおける利用時間を示す。
ステップS506で優先度算出部337は、例えば上記の式(3)にしたがって、選択ユニーク値に対応する個別優先度を算出する。なお、ステップS506は、選択ユニーク値には1つのファイルのみが対応する場合に実行される。よって、優先度算出部337は、具体的には、当該1つのファイルに対して行われた操作に基づいて(すなわち、当該1つのファイルに対応する履歴テーブルに基づいて)、個別優先度を算出する。
優先度算出部337は、算出した個別優先度を、選択ユニーク値に対応づけて記憶する。例えば、優先度算出部337は、選択ユニーク値と個別優先度のペアをRAM202上に記憶する。そして、バックアップ制御処理はステップS503に戻る。
さて、選択ユニーク値に複数のファイルが対応する場合、優先度算出部337は、ステップS507で、それら複数のファイルに対して行われた操作に基づいて、選択ユニーク値に対応する個別優先度を算出する。ステップS507でも、優先度算出部337は、例えば上記の式(3)を用いる。
例えば、選択ユニーク値に対応するファイルが3個あって、各ファイルに対応する履歴テーブル中のエントリ数がそれぞれ2個、5個、1個の場合には、式(3)においてH(u)=8である。この場合、ステップS507で優先度算出部337は、3つの履歴テーブル中の合計8個のエントリに基づいて、式(3)を使って個別優先度を算出する。
そして、次のステップS508で優先度算出部337は、ステップS507で算出した個別優先度から、選択ユニーク値に対応する「コピー優先度」を算出する。以下では、あるユニーク値「u」に対応するコピー優先度を「q(u)」と示す。
コピー優先度q(u)は、ユニーク値uに対応するファイルがどのように分散して記憶されているかに応じて、個別優先度p(u)を調整した値を示す。例えば、コピー優先度は式(4)により定義されてもよく、式(4)中の関数gは式(5)のように定義されてもよい。
式(4)における「M」は、ユーザが使う端末の数である(1≦M)。式(4)と(5)における「cm」は、m番目(1≦m≦M)の端末内における、ユニーク値uのファイルの個数を示す(0≦cm)。
そして、式(4)における「n(u)」は、M台の端末のうちで、ユニーク値uのファイルを少なくとも1つ記憶している端末の台数である。なお、ステップS502で抽出されるユニーク値は、どれも、M台の端末のいずれかに現在、実際に記憶されているファイルのユニーク値である。よって、0<n(u)が成り立つ。
例えば、図13の同一データグループ640に属するファイル631と633と637に共通のユニーク値がuであり、ユーザが2台の端末310と330を使っているとする。
例えば、もし、ファイル631が端末310に記憶されており、ファイル633と637が端末330に記憶されていれば、c1=1かつc2=2かつn(u)=2である。別の例として、もし、ファイル631と633と637がすべて端末330に記憶されていれば、c1=0かつc2=3かつn(u)=1である。
式(4)と(5)から明らかなように、ユニーク値uを持つ複数のファイルが多くの端末に分散して記憶されていれば、コピー優先度は低い。また、1台の端末内にユニーク値uを持つファイルが沢山ある場合も、コピー優先度は低い。
以上のようにしてコピー優先度を算出すると、優先度算出部337は、算出したコピー優先度を選択ユニーク値に対応づけて記憶する。例えば、優先度算出部337は、選択ユニーク値とコピー優先度のペアをRAM202上に記憶する。そして、バックアップ制御処理はステップS503に戻る。
ところで、ユニーク値uに対応するファイルがM台の端末の中に1つしかない場合、式(4)と(5)によればq(u)=p(u)である。なぜなら、この場合、式(4)と(5)の定義より、n(u)=1が成り立ち、cm>0を満たすmが1つだけ存在し、そのようなmに関して具体的にはcm=1が成り立ち、したがって、q(u)=g(p(u),1)=p(u)が成り立つからである。
つまり、式(4)と(5)は、ユニーク値uに対応するファイルが1つしかない場合にq(u)=p(u)が成り立つように定義されている。実施形態によっては、ユニーク値uに対応するファイルが1つしかない場合にq(u)=p(u)が成り立つように定義された他の式が、式(4)と(5)の代わりに使われてもよい。
例えば、式(4)における(n(u))2による除算は、(n(u))αによる除算に置き換えられてもよい(αは1より大きい定数)。式(4)では、Mのオーダとn(u)のオーダが同程度であることを考慮に入れて、n(u)に応じて優先度を下げる効果を得るために、単なるn(u)による除算ではなく、(n(u))2による除算が採用されている。同様の考慮に基づいて、αは1より大きいことが望ましい。また、式(5)におけるcmによる除算は、cm βによる除算に置き換えられてもよい(βは1より大きい定数)。
さて、以上のステップS503〜S508によれば、ステップS509の実行時点においては、ステップS502で抽出された各ユニーク値に対応する個別優先度またはコピー優先度が、例えばRAM202に記憶されている。また、ユニーク値uに対応するファイルが1つしかない場合、上記のとおりq(u)=p(u)なので、この場合は個別優先度をコピー優先度と見なすことができる。したがって、ステップS509の実行時点においては、ステップS502で抽出された各ユニーク値に対応するコピー優先度q(u)が、例えばRAM202に記憶されている。
続くステップS509〜S518は、各ファイル(つまり、ステップS501で抽出された各ペアにより識別される各ファイル)に対する繰り返しループを形成している。ステップS509〜S518において、優先度算出部337は、各ファイルの優先度を式(6)にしたがって算出する。
式(6)において、「x」と「y」はファイルを示し、「r(x)」はファイルxの優先度を示す。また、「d(x)」はファイルxのユニーク値を示し、「A」は正の定数である。根ファイルと葉ファイルの優先度のバランスを良くするためには、定数Aは1未満であることが好ましい。
また、「tree(x)」は、ファイルxを含むファイルツリーに含まれるファイルの集合を示す。例えば、ファイルxが図13のファイル631の場合、集合tree(x)は、ファイルツリー630内の9個のファイル631〜639を含む。そして、「root(x)」は、ファイルxを含むファイルツリーの根ファイルを示す。例えば、ファイルxが図13のファイル636の場合、root(x)はファイル631である。
なお、説明の簡単化のため、式(6)と図13には明示していないが、ときには、「あるファイルツリー中の一部のファイルが既に削除されている」という状況も生じ得る。例えば、図13のファイルツリー630において、ファイル632と636が既に削除されており、残りの7個のファイルのみが現存している場合があり得る。
仮にファイル632が削除されたとしても、ファイル632の子ファイル634がファイルツリー630に属することには変わりない。よって、第2実施形態では、ファイル632が削除されても、IDテーブル511中のファイル632に対応するエントリは削除されないし、追跡テーブル513中のファイル632に関わるエントリは削除されない。他方、ファイル632に対応する履歴テーブルは不要なので削除される。
ファイルyが既に削除されている場合、式(6)では、q(d(y))=0と見なされる。つまり、後述のステップS514またはS516での総和の算出においては、ファイルツリー中の削除済みのファイルに関しては、優先度としてゼロが使われる。
なお、DB管理部335は、適宜のタイミングで、「当該ファイルツリーに属するすべてのファイルが削除済みであるようなファイルツリー」を探してもよい。そして、もしそのようなファイルツリーが見つかれば、DB管理部335は、見つかったファイルツリーに関連する全エントリを、IDテーブル511と追跡テーブル513から削除してもよい。
さて、以下にステップS509〜S518の詳細を説明する。
ステップS509で優先度算出部337は、未選択のファイル(つまり、ステップS501で抽出されたデバイスIDとファイルIDのペアのうち、未選択のペアにより識別されるファイル)が残っているか否かを判断する。未選択のファイルがある場合、バックアップ制御処理はステップS510に移行する。逆に、すべてのファイルが選択済みの場合(つまりすべてのファイルについて優先度が算出済みの場合)、バックアップ制御処理は、図15のステップS519に移行する。
ステップS510で優先度算出部337は、未選択のファイルを1つ選択する。以下では、ステップS510で選択されたファイルを「選択ファイル」という。
そして、次のステップS511で優先度算出部337は、選択ファイルの親ファイルが存在するか否かを判断する。具体的には、優先度算出部337は、選択ファイルを識別するデバイスIDとファイルIDが、子デバイスIDと子ファイルIDとして記憶されているエントリを、追跡テーブル513内において検索する。
そのようなエントリが見つからない場合、選択ファイルは親ファイルを持たない。つまり、選択ファイルは根ファイルである。この場合、バックアップ制御処理はステップS512に移行する。
逆に、上記のようなエントリが見つかった場合、選択ファイルの親ファイルが存在する。つまり、選択ファイルは中間ファイルまたは葉ファイルである。この場合、バックアップ制御処理はステップS515に移行する。
ステップS512で優先度算出部337は、選択ファイルの子ファイルが存在するか否かを判断する。具体的には、優先度算出部337は、選択ファイルを識別するデバイスIDとファイルIDが、親デバイスIDと親ファイルIDとして記憶されているエントリを、追跡テーブル513内において検索する。
そのようなエントリが見つからない場合、選択ファイルは子ファイルを持たない。つまり、選択ファイルの属するファイルツリーには、選択ファイルのみが含まれる。この場合、バックアップ制御処理はステップS513に移行する。
逆に、上記のようなエントリが見つかった場合、選択ファイルの子ファイルが存在する。つまり、選択ファイルを根ファイルとして含むファイルツリーは、1つ以上の子孫ファイルをさらに含む。この場合、バックアップ制御処理はステップS514に移行する。
ステップS513で優先度算出部337は、選択ファイルのユニーク値に対応する優先度(すなわち、選択ファイルのユニーク値に対応づけられて記憶されているq(u)の値)を、選択ファイルの優先度r(x)として決定する。ステップS513は式(6)の右辺の3番目のケースに該当する。
そして、優先度算出部337は、決定した優先度r(x)を、選択ファイルに対応づけて(具体的には、選択ファイルを識別するデバイスIDとファイルIDのペアに対応づけて)、例えばRAM202に記憶する。その後、バックアップ制御処理はステップS509に戻る。
さて、ステップS514で優先度算出部337は、選択ファイルを根とするファイルツリー内の各ファイルのユニーク値に対応する優先度の総和を算出する。
なお、優先度算出部337は、追跡テーブル513を参照することで、選択ファイルを根とするファイルツリー内に含まれるすべてのファイルを認識することができる。具体的には、ステップS512と同様の方法により子ファイルを探す処理を繰り返すことで、優先度算出部337は、選択ファイルを根とするファイルツリー内に含まれるすべてのファイルを認識することができる。
また、各ファイルのユニーク値は、当該ファイルに対応する履歴テーブルの中で日時が最新のエントリに記録されている。そして、上記のとおり、ステップS503〜S508の結果として、各ユニーク値に対応してq(u)が記憶されている。
よって、優先度算出部337は、上記のごとき総和を算出することができる。優先度算出部337は、算出した総和を、選択ファイルの優先度r(x)として決定する。ステップS514は式(6)の右辺の1番目のケースに該当する。
そして、優先度算出部337は、決定した優先度r(x)を、選択ファイルに対応づけて、例えばRAM202に記憶する。その後、バックアップ制御処理はステップS509に戻る。
さて、ステップS515で優先度算出部337は、選択ファイルの子ファイルが存在するか否かを判断する。ステップS515における判断は、ステップS512と同様に、追跡テーブル513を検索する処理により実現される。
選択ファイルが子ファイルを持たない場合(つまり、選択ファイルが葉ファイルである場合)、バックアップ制御処理はステップS516に移行する。逆に、選択ファイルが子ファイルを持つ場合(つまり、選択ファイルが中間ファイルである場合)、バックアップ制御処理はステップS518に移行する。
ステップS516で優先度算出部337は、選択ファイルを含むファイルツリー内の各ファイルのユニーク値に対応する優先度の総和を算出する。
具体的には、まず、優先度算出部337は、追跡テーブル513を参照することにより、葉ファイルからパスをたどって根ファイルを特定する。例えば、選択ファイルが図13のファイル638である場合、優先度算出部337は、追跡テーブル513を参照することで、ファイル638の親ファイルがファイル633であることを認識する。そして、優先度算出部337は、追跡テーブル513を参照することで、ファイル633の親ファイルがファイル631であることを認識する。さらに優先度算出部337は、追跡テーブル513を参照することで、ファイル631が親ファイルを持たないことを認識する。以上のようにして、優先度算出部337は、選択ファイル638に基づいて、根ファイル631を特定する。
そして、優先度算出部337は、上記のようにして特定したファイルを根とするファイルツリー内の、各ファイルのユニーク値に対応する優先度の総和を、ステップS514と同様の方法により算出する。以上のようにしてステップS516で算出される総和は、式(6)におけるr(root(x))である。
次に、ステップS517で優先度算出部337は、選択ファイルのユニーク値に対応する優先度と、ステップS516で算出した総和から、選択ファイルの優先度を算出する。つまり、優先度算出部337は、式(6)の定数Aを上記の算出した総和に掛けて積を求め、求めた積と、選択ファイルのユニーク値に対応づけられて記憶されているq(u)の値との和を、選択ファイルの優先度r(x)として算出する。
そして、優先度算出部337は、算出した優先度r(x)を、選択ファイルに対応づけて、例えばRAM202に記憶する。その後、バックアップ制御処理はステップS509に戻る。
さて、ステップS518で優先度算出部337は、ステップS513と同様に、選択ファイルのユニーク値に対応する優先度(すなわち、選択ファイルのユニーク値に対応づけられて記憶されているq(u)の値)を、選択ファイルの優先度r(x)として決定する。ステップS518も、式(6)の右辺の3番目のケースに該当する。
そして、優先度算出部337は、決定した優先度r(x)を、選択ファイルに対応づけて、例えばRAM202に記憶する。その後、バックアップ制御処理はステップS509に戻る。
さて、以上のステップS509〜S518によれば、現存する全ファイルに対して優先度r(x)が算出される。そして、全ファイルに対して優先度r(x)が算出されると、バックアップ制御部339によりステップS519〜S521が実行される。
ステップS519でバックアップ制御部339は、バックアップ容量を決める。例えば、バックアップ制御部339は、バックアップ容量に関するユーザからの入力を、ステップS519で入力装置205から受け付けてもよい。あるいは、バックアップ制御部339は、予め設定ファイルなどに設定されたバックアップ容量の値を、ステップS519で読み込んでもよい。
そして、ステップS520でバックアップ制御部339は、優先度算出部337により算出されて記憶された優先度の降順に、バックアップ容量の範囲内で、バックアップ対象のファイルを選ぶ。ステップS520は図1のステップS6〜S7と同様である。
最後に、ステップS521でバックアップ制御部339は、選んだファイルをバックアップ記憶部338にバックアップする。そして、バックアップ制御処理は終了する。
なお、バックアップ対象のファイルは、多くの場合、2台以上の端末に分散している。よって、ステップS521では、バックアップ制御部339は、ユーザが使う全端末をネットワーク370に接続するようにユーザに促すプロンプトを出力装置206に表示してもよい。
例えば、バックアップ制御処理が開始される時点で端末310の電源はオフになっているかもしれない。しかし、プロンプトに応じてユーザが端末310の電源をオンにすると、端末330は、端末310内のファイルをネットワーク370を介して受信し、受信したファイルをバックアップ記憶部338にバックアップすることが可能となる。
また、ファイルのバックアップにはある程度の時間がかかる。よって、VSS(Volume Shadow Copy Service)などのスナップショット技術が利用されてもよい。つまり、バックアップ制御部339は、ステップS521でスナップショットを作成してもよく、スナップショットの作成後、直ちに図11の処理はステップS302からステップS301に戻ってもよい。
例えば、より具体的には、バックアップ制御部339は、端末330のファイル記憶部332のスナップショットを作成するとともに、ファイル記憶部312のスナップショットを作成するように端末310に命令してもよい。こうしてスナップショット技術を利用することで、端末330は、実際にいくつものファイルをファイル記憶部332および312からバックアップ記憶部338へとバックアップするのと並行して、図11のステップS201〜216を実行することも可能である。
以上説明したように、第2実施形態によれば、第1実施形態と同様に、バックアップが効率化される。また、第1実施形態と第2実施形態のいずれにおいても、バックアップスケジュールとバックアップ容量を適宜に設定することにより、優先度の高いファイルをより高い頻度でバックアップすることが可能となる。
例えば、「毎週月曜日にファイルをバックアップする」というスケジュールが決められているとする。この場合、さらに、例えば、「第1月曜日におけるバックアップ容量は50GBであり、その他の月曜日におけるバックアップ容量は15GBである」と決められていてもよい。すると、大まかには、以下のような傾向に沿ってファイルのバックアップが行われることになる。
・優先度が高いファイルは、毎週月曜日にバックアップされる。
・優先度が中程度のファイルは、第1月曜日にのみバックアップされる。
・優先度が低いファイルは、バックアップされない。
もちろん、各ファイルに対して行われる操作に応じて、優先度は、日々動的に変動し得るが、大まかには以上のごとき傾向が見られるであろう。このように、第1実施形態と第2実施形態のいずれにおいても、優先度の高いファイルをより高い頻度でバックアップすることが可能である。
なお、上記の例は「高・中・低」の3段階の優先度に応じてバックアップ頻度を3段階に分ける例である。しかし、バックアップスケジュールとバックアップ容量を適宜に設定することにより、バックアップ頻度を4段階以上に分けることも可能である。
続いて、図16〜20を参照して第3実施形態について説明する。なお、第2実施形態との共通点については、適宜説明を省略する。
図16は、第3実施形態のシステム構成図である。図16のシステム800は、端末810、830、850とサーバ870を含む。端末810は、図16の例ではネットワーク890に接続可能であるが、ネットワーク通信機能がなくても問題ない。端末830と850はネットワーク890に接続可能な端末であるものとする。また、サーバ870もネットワーク890に接続される。ネットワーク890の種類は任意である。
例えば、端末810は、図2のカメラ109でもよい。カメラ109は、例えば無線LANによる通信機能を有していてもよく、無線LANを介してPC106と通信を行ってもよい。もちろん、カメラ109の無線LAN通信機能は省略可能である。カメラ109は、例えばUSBケーブルにより直接PC106に接続されてもよい。もちろん、端末810は、図2のスマートフォン102またはタブレット端末104であってもよい。
端末830は、図4の端末330と類似の端末である。端末830は、例えば図2のPC106であってもよい。
端末850は、例えば図2のスマートフォン102でもよいし、タブレット端末104でもよい。端末850は、端末830とは別のPCであってもよい。
サーバ870は、図2の管理サーバ112とコンテンツサーバ113を兼ねるコンピュータであってもよい。ネットワーク890は、図2のネットワーク101であってもよい。
以下、システム800内の各装置の詳細について説明する。
端末810は、通信部811と、作成部812と、ファイル記憶部813と、デバイスID記憶部814を有する。通信部811は、ネットワーク890を介して端末830と通信を行ってもよいし、端末830に接続されたUSBケーブルなどの接続を介して端末830と通信を行ってもよい。通信部811はさらに、ネットワーク890を介してサーバ870と通信を行ってもよい。
作成部812はファイルを作成し、作成されたファイルはファイル記憶部813に記憶される。また、デバイスID記憶部814は、端末810を識別するデバイスIDを記憶する。
例えば、端末810は、カメラ109であってもよい。カメラ109も図3の情報処理装置200の一種である。
例えば、通信部811は、無線LAN通信用のネットワーク通信装置203により実現されてもよいし、USBケーブルなどのシリアル接続用のシリアル接続I/F回路204により実現されてもよい。カメラ109ではネットワーク通信装置203は省略可能である。
端末810がカメラ109である場合、作成部812は、写真の画像ファイルを作成する。つまり、作成部812は、レンズ、光電変換回路、およびCPU201などのハードウェア要素により実現されてもよい。ファイル記憶部813は、カメラ109のリーダ/ライタ208にセットされた記憶媒体210(より具体的には半導体メモリカード)により実現されてもよい。デバイスID記憶部814は、不揮発性記憶装置207(例えばROMまたはフラッシュメモリ)により実現されてもよい。例えば、製造シリアル番号が、デバイスIDとしてデバイスID記憶部814に記憶されていてもよい。
もちろん、端末810は、スマートフォン102、タブレット端末104、またはPC106であってもよい。
端末830は、上記のとおり図4の端末330と類似の端末である。端末830は、通信部831、ファイル記憶部832、監視部833、デバイスID記憶部834、DB管理部835、DB記憶部836、優先度算出部837、バックアップ記憶部838、およびバックアップ制御部839を有する。また、端末330と同様に、端末830も、情報処理装置200によって実現されてもよい。
通信部831は、ネットワーク890またはUSBケーブルなどの有線接続を介して、端末810と通信を行う。また、通信部831は、ネットワーク890を介して、サーバ870および端末850と通信を行う。例えば、通信部831は、ネットワーク通信装置203により実現されてもよい。通信部831は、ネットワーク通信装置203とシリアル接続I/F回路204の双方により実現されてもよい。
ファイル記憶部832、監視部833、およびデバイスID記憶部834は、端末330のファイル記憶部332、監視部333、およびデバイスID記憶部334と同様である。よって、詳細な説明は省略する。ファイル記憶部832には、図7のDB510と同様のDBが記憶される。
DB管理部835は、端末330のDB管理部335と同様の処理を行い、さらに、他の端末により作成されたファイルに関する情報を推定する処理も行う。DB管理部835が行う推定の詳細については、図17〜18とともに後述する。DB管理部835は、プログラムを実行するCPU201により実現されてもよい。
DB記憶部836、優先度算出部837、バックアップ記憶部838、およびバックアップ制御部839は、端末330のDB記憶部336、優先度算出部337、バックアップ記憶部338、およびバックアップ制御部339と同様である。よって、詳細な説明は省略する。
さて、端末850は、通信部851と、ファイル記憶部852と、デバイスID記憶部853を有する。
通信部851は、ネットワーク890を介して端末830およびサーバ870と通信を行う。通信部851は、ネットワーク890を介してさらに端末810と通信を行ってもよい。通信部851は、例えばネットワーク通信装置203により実現されてもよい。
ファイル記憶部852は、種々のファイルを記憶する。デバイスID記憶部853は、端末850を識別するデバイスIDを記憶する。ファイル記憶部852とデバイスID記憶部853は、例えば不揮発性記憶装置207により実現されてもよい。
なお、図16では省略されているが、端末810、830、および850は、それぞれ入力装置205と出力装置206を有する。
ところで、サーバ870は、通信部871、DB記憶部872、デバイス管理部873、DB管理部874、およびファイル記憶部875を有する。
通信部871は、ネットワーク890を介して、端末830および850と通信を行う。通信部871は、例えばネットワーク通信装置203により実現されてもよい。
DB記憶部872は、サーバ350のDB記憶部352と同様である。DB記憶部872は、不揮発性記憶装置207により実現されてもよい。
デバイス管理部873は、サーバ350のデバイス管理部353と似ている。ただし、デバイス管理部873が保持するデバイス管理テーブル(不図示)の形式は、デバイス管理部353が保持する図8のデバイス管理テーブル520とは異なる。具体的には、デバイス管理部873が保持するデバイス管理テーブル中の各エントリは、ユーザIDおよびデバイスIDだけでなく、デバイスがメタデータを生成する機能を持つか否かを示すフラグを含む。デバイス管理部873は、例えば、デバイス管理テーブルを記憶する不揮発性記憶装置207と、デバイス管理テーブルを用いた処理を実行するCPU201によって、実現されてもよい。
DB管理部874は、第2実施形態でサーバ350のDB管理部354が行う処理と似た処理を実行するだけでなく、端末330の監視部333およびDB管理部335が行う処理と似た処理も実行する。
具体的には、第3実施形態のサーバ870は、ネットワーク890を介して種々の端末からそれぞれファイルのアップロードを受け付け、アップロードされたファイルをファイル記憶部875に記憶する。また、サーバ870は、ファイル記憶部875に記憶されたファイルに対するダウンロード要求も受け付ける。
つまり、第3実施形態のサーバ870は、図2の管理サーバ112とコンテンツサーバ113を兼ねている。そして、サーバ870は、ファイルの送受信を行うという点において、第2実施形態の端末330と似ている。そのため、DB管理部874は、端末330の監視部333とDB管理部335が行う処理と似た処理も実行する。
なお、サーバ870はさらに、ファイル記憶部875に記憶されたファイルに対するその他の要求も、ネットワーク890を介して、種々の端末から受け付ける。例えば、サーバ870は、編集、移動、変名、削除、コメント追加などの操作をファイルに対して行うための要求を受け付けてもよい。
DB管理部874が実行する処理の詳細については、図19〜20とともに後述する。DB管理部874は、例えば、プログラムを実行するCPU201により実現されてもよい。ファイル記憶部875は、不揮発性記憶装置207により実現されてもよい。
ところで、上記の第2実施形態に関しては、ある1人のユーザが使う複数の端末(例えば、端末310と330)に分散している複数のファイルそれぞれの優先度の算出について詳しく説明した。上記のとおり、第2実施形態における優先度は、当該ユーザが各ファイルに対して行った各操作に基づいて算出される。しかし、上記の第2実施形態では、他のユーザは優先度とは無関係である。
しかし、第3実施形態では、あるユーザの所有する(own)ファイルに対する、他のユーザの行為も、当該ファイルの優先度に反映される。例えば、あるユーザの所有するファイルは、サーバ870にアップロードされてファイル記憶部875に記憶されてもよく、他の1人以上の特定または不特定のユーザに対して公開されてもよい。サーバ870にアップロードされて公開されたファイルに対して、他のユーザたちは、例えば以下のような行為(action)を行う可能性がある。
・ファイルを閲覧またはダウンロードする行為。
・ファイルにコメントやタグなどの付加的情報を加える行為。
・ファイルへの参照リンクを生じさせる行為(例えばトラックバック)。
また、ファイルに対する評価や参照などを、SNS(Social Networking Service)を介してユーザ間で共有するために、サーバ870上のウェブページには、ファイルに対応づけられたユーザインタフェイス要素(例えばボタン)が設けられることがある。このようなユーザインタフェイス要素には、ファイルに対する評価や参照などを、SNSを介してユーザ間で共有するための、SNS固有の機能が割り当てられている。
例えば、このようなボタン(より具体的には、例えば「いいね!(Like)ボタン」など)をクリックする行為も、あるユーザの所有するファイルに対して他のユーザが行う可能性のある行為のうちの一つである。つまり、ユーザインタフェイス要素に割り当てられた上記の機能を呼び出す行為が、他のユーザにより行われる可能性がある。
第3実施形態では、例えば以上例示したような、他のユーザによる行為も、優先度の算出において考慮される。
例えば、サーバ870がコメント機能をサポートしている場合、第1のユーザの端末からサーバ870にアップロードされたファイルに対して、第2のユーザがサーバ870上でコメントを付加する場合があり得る。第1のユーザは、多くの他のユーザから多くのコメントが寄せられたファイルを重要と考え、他のユーザからほとんど何の反応も得られなかったファイルはさして重要でないと考えるかもしれない。
また、第1のユーザは、あるファイルを編集し、編集後のファイルをサーバ870にアップロードすることがある。アップロードされたファイルに対して多くの他のユーザからコメントが寄せられたりダウンロードが要求されたりした場合、第1のユーザは、編集前のオリジナルのファイルを重要と考えるかもしれない。つまり、この場合、第1のユーザは、アップロードされたファイルが属するファイルツリーの根ファイルを、重要と考えるかもしれない。
第3実施形態は、例えば上記のような考えを持つ第1のユーザにとって、特に有益である。以下では説明の便宜上、次のように仮定する。
・端末810と830は、「suzuki_taro」というユーザIDのユーザにより使われる端末である。
・端末850は、「suzuki_taro」というユーザIDのユーザにより使われる端末であってもよいし、「sato_jiro」というユーザIDのユーザにより使われる端末であってもよい。
さて、上記のような仮定のもとで、第3実施形態における端末810、830、850とサーバ870の動作の概要について、図1と図17を参照して以下に説明する。
図1に関して説明したように、図1の処理を実行する情報処理装置は、複数台の端末のうちの1台でもよいし、複数台の端末のうちの少なくとも1台以上とネットワークを介して通信を行うコンピュータ(例えばサーバ870)であってもよい。第3実施形態では、図1の処理を実行する情報処理装置は、具体的には端末830である。
図1のステップS1とS2に関して説明したように、履歴情報と追跡情報を取得するための具体的手順は、実施形態に応じて様々である。第3実施形態では、端末830が、履歴情報を生成することで履歴情報を取得することもあるし、追跡情報を生成することで追跡情報を取得することもある。また、端末830は、履歴情報をサーバ870から受信することで履歴情報を取得することもあるし、追跡情報をサーバ870から受信することで追跡情報を取得することもある。
以下、履歴情報と追跡情報を含むメタデータのやりとりの具体的な例について、図17を参照して説明する。図17は、第3実施形態の動作シーケンスの例を示す図である。
ステップS601で端末810の作成部812がファイル901を作成する。ファイル901はファイル記憶部813に記憶される。
その後、ステップS602で端末810と830が、ネットワーク890を介して接続されるか、または、USBケーブルなどにより直接接続される。そして、ファイル901が端末810から端末830に送られる。つまり、ファイル901は、ファイル記憶部813から読み出され、通信部811から送信され、通信部831で受信されて、ファイル記憶部832に記憶される。
すると、ファイル記憶部832を監視している監視部833は、ファイル901の受信と保存を検出する。検出に応じて、ステップS603では、DB管理部835が、ファイル901の受信と保存に関する履歴情報を含むメタデータ902を生成する。
また、DB管理部835は、ファイル901から、ファイル901の送信元の端末810に関する情報や、端末810におけるファイル901の作成日時に関する情報を推定する。推定により何らかの情報が得られた場合、DB管理部835は、推定により得られた情報をメタデータ902に含めてもよい。
例えば、ある種のフォーマットのファイルは、プロパティを含む。プロパティには、ファイルの作成日時が含まれている場合がある。
よって、端末830のDB管理部835は、端末810におけるファイル901の作成日時のフィールドを、ファイル901のプロパティにおいて、探してもよい。作成日時のフィールドがプロパティ内に見つかったら、DB管理部835は、プロパティから作成日時を読み取る。
また、ファイル901が画像ファイルである場合、ファイル901がExif(Exchangeable image file format)データを含む可能性がある。Exifデータは様々なフィールドを含み得る。
例えば、ファイル901の作成日時がファイル901のExifデータに含まれている場合がある。また、ファイル901を作成した端末810の製造シリアル番号が、ファイル901のExifデータに含まれている場合がある。
そこで、ファイル901がExifデータを含む場合には、DB管理部835は、作成日時と製造シリアル番号のフィールドを、Exifデータの中から探してもよい。作成日時と製造シリアル番号のフィールドがExifデータ内に見つかったら、DB管理部835は、作成日時と製造シリアル番号をExifデータから読み取る。DB管理部835は、製造シリアル番号に加えて(あるいは製造シリアル番号の代わりに)、端末810の機種(モデル)など、端末810に関するその他の情報を、Exifデータの中から探してもよい。
例えば以上のような処理を行うことにより、DB管理部835は、ファイル901の送信元の端末810に関する情報や、端末810におけるファイル901の作成日時に関する情報を推定してもよい。推定の結果、何らかの情報の取得に成功したら、DB管理部835は、取得した情報をメタデータ902に含めてもよい。
なお、上記のとおりメタデータ902は、端末810に関する推定により得られた情報だけでなく、端末830自体における受信と保存に関する履歴情報も含む。例えば、DB管理部835は、以下のようにして履歴情報を生成してメタデータ902に含めてもよい。
DB管理部835は、ファイル901がファイル記憶部832に保存された日時を、監視部833からの通知に基づいて認識する。また、DB管理部835は、ファイル901に対して新たなファイルIDを発行し、ファイル901が保存されたディレクトリのパスとファイル901の名前を取得する。さらに、DB管理部835は、ファイル901のユニーク値を算出する。
また、DB管理部835は、監視部833からの通知に基づいて、ログ種別を「受信」と判断する。なお、DB管理部835は、もし端末810の製造シリアル番号を上記のようにして取得することができた場合は、ファイル901の送信元を示す製造シリアル番号を含む形式で、ログ種別を表してもよい。
DB管理部835は、以上のようにして、DB記憶部836上のDB中の履歴テーブルの1つのエントリに対応する新たな履歴情報を生成してもよい。そして、DB管理部835は、図7のIDテーブル511と同様の形式のIDテーブルに、ファイル901に対応するエントリを追加し、ファイル901に対応する新たな履歴テーブルを作成する。DB管理部835はさらに、作成した履歴テーブルに、1つのエントリ(つまり、上記のようにして生成した履歴情報を示すエントリ)を追加する。
また、次のステップS604で端末830は、メタデータ902をサーバ870に送信する。メタデータ902はサーバ870の通信部871において受信される。
すると、ステップS605では、デバイス管理部873が、メタデータ902の送信元の端末830のデバイスIDから、端末830のユーザを識別するユーザIDを求める。また、得られたユーザIDにしたがって、DB記憶部872中の適宜のDBに、受信されたメタデータ902が書き込まれる。
ところで、端末830からサーバ870に送られたメタデータ902は、端末830が端末810からファイル901を受信したことを示す。しかし、サーバ870は、メタデータ902が示す受信と対になる送信を示すメタデータ(つまり端末810が端末830にファイル901を送信したことを示す履歴情報)を受信することはない。なぜなら、端末810は、メタデータを生成する機能を持たないからである。また、端末810がメタデータを生成する機能を持たないことを、サーバ870は認識している。なぜなら、サーバ870のデバイス管理部873(より具体的にはデバイス管理テーブル)には、端末810が、メタデータを生成しない端末として登録されているからである。
したがって、サーバ870のDB管理部874は、メタデータ902が示す受信と対になる送信を示すメタデータを端末810から受信するのを待たずに、ステップS605で追跡情報も生成してしまう。つまり、DB管理部874は、端末810に記憶されている親ファイルと、端末810から受信されて端末830に記憶された子ファイルとを対応づける追跡情報を生成する。
なお、ここで親ファイルと子ファイルのデータは互いに等しい。そのため、図17に関する説明では、便宜上、親ファイルと子ファイルの両方を、「901」という参照符号を用いて参照している。
DB管理部874は、生成した追跡情報をDB記憶部872に書き込む。つまり、DB管理部874は、DB記憶部872中の追跡テーブルにエントリを1つ追加する。
そして、以上のようにして生成された追跡情報を含むメタデータ903が、ステップS606で、サーバ870から端末830へと送られる。通信部831がメタデータ903を受信すると、DB管理部835は、メタデータ903をDB記憶部836に記憶する。
ところで、ファイルが端末830とサーバ870の間で複製されることもあり得る。つまり、端末830からサーバ870へのアップロードによりファイルが複製される場合もあり得るし、サーバ870から端末830または850へのダウンロードによりファイルが複製される場合もあり得る。ステップS607は、前者の場合の一例である。
具体的には、ステップS607では、ファイル記憶部832に記憶されている既存のファイル904が、通信部831から送信される。ファイル904は、サーバ870の通信部871で受信され、ファイル記憶部875に保存される。
すると、ステップS608でサーバ870のDB管理部874は、ファイル904の受信と保存に応じて、履歴情報を生成し、DB記憶部872のDBを更新する。図17では省略されているが、生成された履歴情報は、さらにサーバ870から端末830に送信されてもよい。
また、図17では省略されているが、ファイル904を送信した端末830は、ファイル904の送信を示す履歴情報を含むメタデータをさらにサーバ870に送信する。このように端末830がメタデータをサーバ870に送信することは、図5でファイル404を送信した端末310が、ファイル404の送信を示す履歴情報を含むメタデータ406をサーバ350に送信することと同様である。
すると、DB管理部874は、サーバ870における受信に関して生成した履歴情報と、端末830における送信に関して端末830から取得した履歴情報から、端末830・サーバ870間でのファイル904の複製操作に関する追跡情報をさらに生成する。DB管理部874は、生成した追跡情報をDB記憶部872の追跡テーブルに追加する。
図17では省略されているが、以上のようにして生成された追跡情報も、サーバ870から端末830に送信される。
具体的には、ステップS608でDB管理部874は、サーバ870でファイル904を識別するためのファイルIDを発行し、ファイル記憶部875に記憶されたファイル904に関する新たな履歴テーブルを作成する。また、DB管理部874は、端末830に記憶されている親ファイルと、端末830から受信されてサーバ870に記憶された子ファイルとを対応づける追跡情報を生成する。こうして生成された追跡情報を示す新たなエントリが、DB記憶部872内の追跡テーブルに追加される。
なお、ここで親ファイルと子ファイルのデータは互いに等しい。そのため、図17に関する説明では、便宜上、親ファイルと子ファイルの両方を、「904」という参照符号を用いて参照している。
ところで、以上のようにしてサーバ870にアップロードされたファイル904は、端末810と830を使うユーザ自身に対してのみアクセス権が与えられていてもよい。または、特定の他の1人以上のユーザに対しても、サーバ870上のファイル904に対するアクセスが許可されていてもよい。場合によっては、不特定の任意の他のユーザに対しても、サーバ870上のファイル904に対するアクセスが許可されていてもよい。
なお、アクセス権の種類は、実施形態に応じて適宜決められていてよい。例えば、特定または不特定の他の1人以上のユーザに対して、読み取りアクセス、書き込みアクセス、またはその双方が許可されていてもよい。
また、実施形態によっては、ユーザに読み取りアクセス権さえあれば以下のような行為が許されてもよい。あるいは、以下のような行為に対して、読み取りアクセス権とは別種のアクセス権が定義される実施形態も可能である。
・ファイルにコメントやタグなどの付加的情報を加える行為。
・ファイルへの参照リンクを生じさせる行為(例えばトラックバック)。
・ファイルに対する評価や参照などをSNSを介してユーザ間で共有するための、SNS固有の機能を呼び出す行為(例えば所定のボタンをクリックすることで上記機能を呼び出す行為)。
説明の簡単化のため、図17の例では、サーバ870上のファイル904を閲覧する行為およびファイル904にコメントを加える行為は、任意のユーザに許可されているものとする。また、端末850は、端末810と830を使うユーザ自身の端末であってもよいし、他のユーザの端末であってもよい。
すると、ステップS609に示すように、サーバ870にアップロードされたファイル904に対するコメント905が、端末850からサーバ870に送られることがある。
すると、ファイル904に対して「コメント905の付加」という操作が行われたことを示す履歴情報を含むメタデータ906を、ステップS610でサーバ870のDB管理部874が生成する。DB管理部874は、メタデータ906をDB記憶部872に記憶する。
さらに、メタデータ906は、ステップS611で通信部871から送信され、端末830の通信部831で受信され、DB記憶部836に記憶される。
すると、後のステップS612において、ファイルをバックアップするためのトリガイベントが生じると、優先度907の算出において、コメント905の付加のような操作に関する履歴情報も考慮される。トリガイベントの発生に応じて、優先度算出部837は、端末830を使うユーザが所有する各ファイルについて、優先度907を算出する。具体的には、以下の各ファイルについて優先度907が算出される。
・端末810のファイル記憶部813に記憶されているファイル。
・端末830のファイル記憶部832に記憶されているファイル。
・端末850のファイル記憶部852に記憶されているファイル(ただし端末850が当該ユーザの端末である場合に限る)。
・サーバ870のファイル記憶部875に記憶されているファイルのうち、当該ユーザが所有するファイル。
そして、バックアップ制御部839は、バックアップする対象のファイルを優先度907にしたがって選択し、選択したファイルをバックアップ記憶部838にバックアップする。
続いて、図17に例示したような動作シーケンスを実現するために第3実施形態で行われる種々の処理について、図18〜20のフローチャートを参照して説明する。
図18は、第3実施形態で端末830が行う処理の一部を示すフローチャートである。端末830は、端末330が実行する図11の処理と類似の処理を実行する。具体的には、端末830は、図11の一部が図18に示すように変更された処理を実行する。図11と18を比較すると分かるとおり、図11におけるステップS209〜S211の処理のうち、ステップS209が、図18ではステップS701〜S705に置き換えられている。
さらに、第3実施形態では、ステップS201における「送信」は、端末830から別の端末(例えば端末810または850)への送信であってもよいし、端末830からサーバ870への送信であってもよい。このようなステップS201の変形に応じて、第3実施形態のS202では、送信先の情報として、サーバ870を識別する情報が抽出される場合もある。
さて、図11から理解されるように、ステップS207でDB管理部835は、以下のような判断を行う。すなわち、DB管理部835は、「ファイル記憶部832に記憶されている既存のファイルに対して、変更、移動、変名、削除、コピー以外の他の操作が行われた」というイベントが監視部833により検出されたか否かを判断する。そして、そのようなイベントが検出された場合(すなわち、そのようなイベントの検出を示す監視結果が監視部833からDB管理部835に出力された場合)に、図18のステップS701が実行される。
ステップS701でDB管理部835は、以下のいずれかのイベントが検出されたか否かを判断する。
・「端末830内でファイルが新規作成された」というイベント。
・「ファイル記憶部832内の既存のファイルがコピーされた」というイベント。
上記のいずれかのイベントが検出された場合(すなわち、そのようなイベントの検出を示す監視結果が監視部833からDB管理部835に出力された場合)、図18の処理はステップS210に移行する。ステップS210と、それに続くステップS211は、図11と同様である。ステップS211の実行後は、ステップS203が実行される。
逆に、上記のいずれのイベントも検出されていなければ、図18の処理はステップS702に移行する。そして、ステップS702でDB管理部835は、「ファイルが、通信部831を介して受信されて、ファイル記憶部832に記憶された」というイベントが検出されたか否かを判断する。
そのようなイベントが検出された場合、図18の処理はステップS703に移行する。逆に、そのようなイベントが検出されていなければ、図11と同様に、次はステップS212が実行される。
なお、ステップS702で検出される「受信」は、別の端末(例えば端末810または850)から送られたファイルの端末830における受信の場合もあり得るし、サーバ870から送られたファイルの端末830における受信の場合もあり得る。
さて、ステップS703でDB管理部835は、受信されてファイル記憶部832に記憶されたファイルから、ユニーク値を算出する。そして、次のステップS704でDB管理部835は、算出したユニーク値がDBに登録されているか否かを判断する。具体的には、DB管理部835は、算出したユニーク値を含むエントリを含む履歴テーブルを探す。
なお、端末830のDB記憶部836上のDBと、サーバ870のDB記憶部872における、端末830のユーザ用のDBとは、通信環境などによっては、完全には同期していない場合があり得る。よって、ステップS704では、具体的には、図11のステップS214、S215、S216およびS213に示すような、同期のための処理が行われることが好ましい。すると、DB記憶部836上のDBは、サーバ870上のDBに同期されて最新の状態となる。DB管理部835は、こうして同期されたDB記憶部836上のDBにおいて、ステップS703で算出したユニーク値を含むエントリを含む履歴テーブルを探す。
もし、算出したユニーク値を含むエントリを含む履歴テーブルが見つかれば、図18の処理はステップS210に移行する。なぜなら、この場合、端末830が受信したファイルの送信元(つまり他の端末またはサーバ870)における当該ファイルに関するメタデータは、既にDBに登録されているからである。したがって、DB管理部835は、そのようなメタデータを新たに生成する必要もないし、メタデータを推定する必要もない。この場合、DB管理部835は、端末830のファイル記憶部832に新たに記憶されたファイルについてのメタデータさえ生成すれば十分である。よって、図18の処理はステップS210に移行する。
例えば、図16では省略されているが、端末830のユーザは、図4の端末310のようにメタデータを生成する端末をさらに使っていてもよい。端末830が端末310からファイルを受信した場合、送信元の端末310で生成済みのメタデータがDB内に存在する。よって、この場合、算出したユニーク値を含むエントリを含む履歴テーブルが、ステップS704で見つかる。
また、端末810のようにメタデータを生成しない端末から、端末830がファイルを受信した場合でも、ステップS704で履歴テーブルが見つかる場合があり得る。例えば、かつて端末830が端末810から受信したことのあるファイルを、再度、端末830が端末810から受信した場合などは、履歴テーブルが見つかる。
しかし、逆に、ステップS703で算出したユニーク値を含むエントリを含む履歴テーブルが見つからなければ、図18の処理はステップS705に移行する。そして、ステップS705でDB管理部835は、受信したファイルに関するメタデータを推定する。
具体的には、図17のステップS903に関して説明したように、DB管理部835は、Exifデータまたはプロパティから、受信したファイルの作成日時や、ファイルの送信元の端末を識別する識別情報(例えば製造シリアル番号など)の抽出を試みる。端末830が受信したファイルによって、作成日時や識別情報の抽出が成功する場合もあるし、何の情報も抽出されない場合もあり得る。いずれにしろ、図18の処理は、ステップS210に移行する。
なお、ステップS705で情報の抽出に成功した場合、ステップS210とS211の後に実行されるステップS204において、抽出された情報が端末830からサーバ870へと送信される。
さて、図19は、第3実施形態でサーバ870が行う処理のフローチャートである。上記のとおり、第3実施形態のサーバ870のDB管理部874は、以下の処理を行う。
・第2実施形態の端末330の監視部333およびDB管理部335が行う処理と似た処理。
・第2実施形態のサーバ350のDB管理部354が行う処理と似た処理。
図19には、前者の処理が具体的に示されている。図19中のステップS803に相当する図20には、後者の処理が具体的に示されている。
さて、ステップS801でDB管理部874は、「ファイル記憶部875に記憶されているファイルが、いずれかの端末からのダウンロード要求に応じて、通信部871から送信された」というイベントが発生したか否かを判断する。そのようなイベントが発生した場合、図19の処理はステップS802に移行する。逆に、そのようなイベントが検出されなければ、図19の処理はステップS804に移行する。
ステップS802でDB管理部874は、ファイルの送信先などの情報を抽出する。上記のとおり、第3実施形態のDB管理部874は、第2実施形態の監視部333と類似の処理も行う。例えば、DB管理部874は、ダウンロード要求の受信や、ダウンロード要求に応じたファイルの送信を監視する。
よって、ステップS802でDB管理部874は、監視結果として、例えば以下のような情報を取得する。
・「送信」というログ種別を示す情報。
・ファイルが送信された日時。
・送信されたファイルが置かれている、ファイル記憶部875におけるディレクトリのパスと、当該ファイルのファイル名。
・送信先の端末を識別するデバイスID(例えば、端末850からのダウンロード要求に応じてファイルが端末850に送信された場合、端末850のデバイスID)。
ところで、サーバ870のファイル記憶部875に記憶されているファイルを表す、IDテーブル中のエントリにおいて、デバイスIDの値は、サーバ870を識別する値である。よって、DB管理部874は、サーバ870自身のデバイスIDと、取得した上記のパスおよびファイル名を検索キーとして用いて、DB記憶部872内のIDテーブルを参照し、送信されたファイルのファイルIDを取得する。
なお、DB管理部874は、ファイル記憶部875上に記憶された各ファイルの所有者がどのユーザなのかを認識している。例えば、サーバ870のOS(Operating System)が提供するファイルシステムにより、各ファイルの所有者が記録されてもよい。DB管理部874は、ファイルシステムを介して、各ファイルの所有者を認識してもよい。DB管理部874は、「ファイルが送信されたことを示すエントリを、どのユーザのDB中の履歴テーブルに追加するのか」ということを決めるために、ステップS802で、ファイルの所有者のユーザを識別するユーザIDも、取得する。
また、DB管理部874は、送信先の端末のデバイスIDを使って、デバイス管理部873に対して、送信先の端末のユーザのユーザIDを問い合わせる。ファイルの所有者のユーザ自身がファイルをダウンロードすることもあるし、他のユーザがファイルをダウンロードすることもある。そのため、上記のようにして得られる2つのユーザID同士は、等しい場合もあるし、異なる場合もある。
さらに、DB管理部874は、送信されたファイルのユニーク値を取得する。具体的には、DB管理部874は、上記のパスとファイル名により識別されるファイルから、ユニーク値を算出してもよい。または、DB管理部874は、当該ファイルに対応する履歴テーブルの最新のエントリから、ユニーク値を読み出してもよい。
以上のようにして、履歴テーブルに追加するエントリに含めるための情報をDB管理部874が取得し終えると、図19の処理はステップS803に移行する。ステップS803の詳細は、図20とともに後述する。概要だけ説明すると、ステップS803では、DB管理部874が、取得済みの情報を用いて適宜DBを更新し、更新または追加されたエントリ(つまり、履歴情報、追跡情報、またはその双方を含むメタデータ)を、適宜の1台以上の端末に通知する。ステップS803の実行後、図19の処理はステップS801に戻る。
さて、ステップS804でDB管理部874は、「いずれかの端末から送信されたファイルが、通信部871で受信されて、ファイル記憶部875に記憶された」というイベントが発生したか否かを判断する。つまり、DB管理部874は、端末からサーバ870へのファイルのアップロードも監視し、監視結果に応じてステップS804の判断を行う。
上記イベントが発生した場合(つまりファイルがアップロードされた場合)、図19の処理はステップS805に移行する。例えば、図17のステップS607でファイル904が端末830からアップロードされると、図19の処理はステップS805に移行する。逆に、上記イベントが検出されなければ、図19の処理は、ステップS807に移行する。
ステップS805でDB管理部874は、新たなファイルIDを発行する。例えば、シーケンス番号がサーバ870内でのファイルIDとして使われる場合、DB管理部874は、カウンタをインクリメントすることで、新たなファイルIDを取得してもよい。
次に、ステップS806でDB管理部874は、監視結果として、例えば以下のような情報を取得する。
・「受信」というログ種別を示す情報。
・アップロードされたファイルが保存された、ファイル記憶部875上のディレクトリのパス。
・アップロードされたファイルの、ファイル記憶部875でのファイル名。
・当該ファイルがファイル記憶部875に保存された日時。
・当該ファイルの送信元の端末のデバイスID。
また、DB管理部874は、アップロードされたファイルのユニーク値も算出する。
さらに、DB管理部874は、どのユーザ用のDBを更新するのかを決めるために、ユーザIDを取得する。つまり、DB管理部874は、アップロードされたファイルの所有者のユーザIDを取得する。
具体的には、DB管理部874は、上記パスとファイル名に基づいて、ファイルシステムを介してユーザIDを取得してもよい。あるいは、DB管理部874は、取得したデバイスIDを使って、デバイス管理部873に対する問い合わせを介して、デバイスIDからユーザIDを取得してもよい。
以上のようにして、IDテーブルに追加するエントリに含めるための情報と、新たに追加する履歴テーブルに含めるための情報をDB管理部874が取得し終えると、図19の処理はステップS803に移行する。
さて、ステップS807でDB管理部874は、「ファイル記憶部875に記憶されているファイルが、変更、移動、変名、または削除された」というイベントが生じたか否かを判断する。つまり、DB管理部874は、「ファイル記憶部875に記憶されているファイルに対する、変更、移動、変名、または削除のための要求が、いずれかの端末からネットワーク890を介して通信部871により受信されたか否か」を監視する。そして、DB管理部874は、監視結果にしたがって、ステップS807の判断を行う。なお、ファイルに設定されたアクセス権によっては、あるユーザが所有するファイルが、他のユーザによって変更、移動、変名、または削除される可能性もある。
上記のようなイベントが検出された場合、図19の処理はステップS808に移行する。逆に、上記のようなイベントが検出されなければ、図10の処理はステップS809に移行する。
ステップS808でDB管理部874は、パスなどの情報を取得する。具体的には以下のとおりである。
例えば、ファイル記憶部875上のあるファイルが変更された場合、DB管理部874は、監視結果として、以下のような情報を取得する。
・「変更」というログ種別を示す情報。
・変更されたファイルが置かれているディレクトリのパス。
・変更されたファイルのファイル名。
・DB管理部874が、ファイルの変更にかかった時間も検出可能な場合は、ファイルの変更が開始された日時と、ファイルの変更にかかった時間。
・DB管理部874が、ファイルの変更にかかった時間を検出しない場合は、変更されたファイルが保存された日時。
・ファイルを変更するための要求をサーバ870に送信してきた、要求元(requestor)端末のデバイスID。
さらに、DB管理部874は、変更操作についての履歴情報をどのユーザ用のDBに追加するのかを決めるために、変更されたファイルの所有者のユーザのユーザIDも取得する。DB管理部874は、変更されたファイルの新たなユニーク値も算出する。また、DB管理部874は、デバイス管理部873への問い合わせを介して、要求元端末のデバイスIDから、当該端末のユーザのユーザIDを取得する。DB管理部874は、IDテーブルを参照することにより、パスとファイル名から、ファイルIDも取得する。
また、ファイル記憶部875上のあるファイルが、あるディレクトリから別のディレクトリへと移動された場合、DB管理部874は、監視結果として、以下のような情報を取得する。
・「移動」というログ種別を示す情報。
・移動される前にファイルが置かれていたディレクトリのパス。
・ファイルが移動された先のディレクトリのパス。
・移動されたファイルのファイル名。
・移動操作が行われた日時。
・ファイルを移動するための要求をサーバ870に送信してきた、要求元端末のデバイスID。
さらに、DB管理部874は、ファイルが変更された場合と同様にして、2つのユーザIDも取得し、ファイルIDも取得する。
また、ファイル記憶部875上のあるファイルが変名された場合、DB管理部874は、監視結果として、以下のような情報を取得する。
・「変名」というログ種別を示す情報。
・変名される前のファイル名。
・変名後のファイル名。
・変名操作が行われた日時。
・ファイルを変名するための要求をサーバ870に送信してきた、要求元端末のデバイスID。
さらに、DB管理部874は、ファイルが変更された場合と同様にして、2つのユーザIDも取得し、ファイルIDも取得する。また、DB管理部874は、変名されたファイルのユニーク値を算出する。
なお、ある種のコマンドの実行によって、ファイルの移動と変名が同時に行われることもある。その場合も、DB管理部874は適宜の監視結果を取得することができる。
また、ファイル記憶部875上のあるファイルが削除された場合、DB管理部874は、監視結果として、以下のような情報を取得する。
・「削除」というログ種別を示す情報。
・削除されたファイルが今まで置かれていたディレクトリのパス。
・削除されたファイルのファイル名。
・ファイルを削除するための要求をサーバ870に送信してきた、要求元端末のデバイスID。
さらに、DB管理部874は、ファイルが変更された場合と同様にして、2つのユーザIDも取得し、ファイルIDも取得する。
以上、例示したように、DB管理部874は、変更、移動、変名、削除といった操作の種類に応じて、適宜の情報を取得する。そして、DBの更新に使う情報(例えば、IDテーブルのエントリを書き換えるための情報と、履歴テーブルに追加するエントリに含めるための情報、など)をDB管理部874が取得し終えると、図19の処理はステップS803に移行する。
さて、ステップS809でDB管理部874は、「ファイル記憶部875に記憶されている既存のファイルに対して、変更、移動、変名、削除以外の他の操作が行われた」というイベントが生じたか否かを判断する。上記イベントが発生した場合、図19の処理はステップS810に移行する。逆に、上記イベントが検出されなければ、図19の処理はステップS811に移行する。
より詳しく説明すると、DB管理部874は、上記のダウンロード要求などを監視するだけでなく、端末からサーバ870に対して送られるその他の種々の要求も監視し、監視結果に応じてステップS809の判断を行う。ステップS809での検出対象の操作の種類と数は実施形態に応じて任意である。例えば、以下のような操作がステップS809で検出されてもよい。
・ファイルにコメントやタグなどの付加的情報を加える操作。
・ファイルへの参照リンクを生じさせる操作(例えばトラックバック)。
・ファイルに対する評価や参照などをSNSを介してユーザ間で共有するための、SNS固有の機能を呼び出す操作(例えば所定のボタンをクリックする操作)。
さて、ステップS810でDB管理部874は、監視結果として、例えば以下のような情報を取得する。
・行われた操作の種別を示す情報。
・操作が行われたファイルが置かれているディレクトリのパス。
・操作が行われたファイルのファイル名。
・操作が行われた日時。
・操作のための要求をサーバ870に送信してきた、要求元端末のデバイスID(例えば、図17のステップS609のように端末850によりコメント905が加えられた場合は、端末850のデバイスID)。
さらに、DB管理部874は、検出した操作に関する履歴情報をどのユーザ用のDBに追加するのかを決めるために、操作が行われたファイルの所有者のユーザのユーザIDも取得する。なお、ステップS809で検出される操作は、ファイル自体のデータを変更する操作ではないので、ファイルのユニーク値は変化しない。また、DB管理部874は、ステップS808と同様に、2つのユーザIDも取得し、ファイルIDも取得する。
以上のようにして、履歴テーブルに追加するエントリに含めるための情報をDB管理部874が取得し終えると、図19の処理はステップS803に移行する。
さて、ステップS811でDB管理部874は、「いずれかのユーザ用のDBに追加するためのテーブルの一部または全部を、いずれかの端末から通信部871が受信した」というイベントが発生したか否かを判断する。そして、そのようなイベントが発生すると(つまりいずれかの端末からサーバ870が何らかのメタデータを受信すると)、図19の処理はステップS803に移行する。
より具体的には、DB管理部874は、通信部871がメタデータを受信するか否かも監視する。そして、通信部871がメタデータを受信すると、DB管理部874は、メタデータの送信元の端末のデバイスIDを取得する。DB管理部874は、取得したデバイスIDを使って、デバイス管理部873に対する問い合わせを介して、メタデータの送信元の端末を使うユーザのユーザIDも取得する。DB管理部874は、以上のようにユーザIDを取得することにより、受信したメタデータをどのDBに反映させるかを決定する。その後、上記のとおり図19の処理はステップS811からステップS803へと移行する。
逆に、「通信部871がメタデータを受信した」というイベントが検出されなければ、図19の処理はステップS801に戻る。
さて、図20は、図19のステップS803におけるDBの更新と通知のフローチャートである。
ステップS901でDB管理部874は、どのDBを更新するかを、取得済みのユーザIDにしたがって決める。上記のとおり、図19のステップS802、S806、S808、S810またはS811において、どのDBを更新するかを決めるためにユーザIDが既に取得されている。
例えば、DB記憶部872は、図8と同様にU人のユーザ用のDB530−1〜530−Uを記憶していてもよい。そして、「suzuki_taro」というユーザIDのユーザが所有するファイルに対して、当該ユーザ自身の端末または他のユーザの端末から、何らかの操作(例えば、変更、コメント付加など)のための要求がサーバ870に送られてもよい。この場合、「suzuki_taro」というユーザIDが取得済みである。よって、この場合、ステップS901でDB管理部874は、DB530−1〜530−UのうちのDB530−1を更新することを決める。
便宜上、図20に関する以下の説明においては、DB管理部874が、DB530−1を更新することに決めたものとする。
さて、次にステップS902でDB管理部874は、DB530−1の更新に関わるログ種別が、「受信」なのか、「送信」なのか、それ以外なのかを判断する。そして、ログ種別が「受信」の場合、図20の処理はステップS903に移行する。ログ種別が「送信」の場合、図20の処理はステップS910に移行する。ログ種別が「受信」でも「送信」でもない場合、図20の処理はステップS915に移行する。より具体的には、以下のとおりである。
図19のステップS804でファイルの受信が検出された場合、ログ種別は「受信」である。つまり、いずれかの端末から送信されたファイルの、サーバ870における受信が検出された場合、ログ種別は「受信」である。
また、図19のステップS811でメタデータの受信が検出され、かつ、当該メタデータが「受信」というログ種別の履歴情報を含む場合も、ログ種別は「受信」である。つまり、端末間でのファイル転送(transfer)またはサーバ870から端末へのファイルのダウンロードが、受信側の端末で検出され、履歴情報が受信側の端末で生成され、生成された履歴情報がサーバ870に送られた場合も、ログ種別は「受信」である。
他方、図19のステップS801でファイルの送信が検出された場合、ログ種別は「送信」である。つまり、サーバ870からいずれかの端末への送信が検出された場合、ログ種別は「送信」である。
また、図19のステップS811でメタデータの受信が検出され、かつ、当該メタデータが「送信」というログ種別の履歴情報を含む場合も、ログ種別は「送信」である。つまり、端末間でのファイル転送または端末からサーバ870へのファイルのアップロードが、送信側の端末で検出され、その結果として履歴情報が送信側の端末で生成され、生成された履歴情報がサーバ870に送られた場合も、ログ種別は「送信」である。
さて、ステップS903でDB管理部874は、ファイルの送信元を認識する。具体的には、以下のとおりである。
「受信」というログ種別の履歴情報をいずれかの端末(例えば端末830)からサーバ870が受信した場合、DB管理部874は、ステップS903において、図12のステップS405と同様にして、送信元に関する情報を抽出する。それにより、DB管理部874は、ファイルの送信元を認識する。
また、図19のステップS804でファイルの受信が検出された場合には、上記のとおり、ステップS806で既に送信元の端末のデバイスIDが得られている。よって、この場合も、DB管理部874は送信元を認識することができる。
次に、ステップS904でDB管理部874は、ステップS903で認識した送信元が、メタデータを生成することが可能であるか否かを判断する。
例えば、送信元が端末810である場合、端末810はメタデータの生成機能を持たない。そして、上記のとおり、デバイス管理部873が保持するデバイス管理テーブルには、各デバイスがメタデータを生成する機能を持つか否かを示すフラグが含まれる。よって、送信元が端末810の場合、DB管理部874は、デバイス管理部873への問い合わせを介して、「送信元はメタデータを生成する機能を持たない」と判断する。
逆に、送信元が例えば端末830である場合、DB管理部874は、デバイス管理部873への問い合わせを介して、「送信元はメタデータを生成する機能を持つ」と判断する。また、送信元がサーバ870である場合も、DB管理部874は、「送信元はメタデータを生成する機能を持つ」と判断する。
そして、「送信元はメタデータを生成する機能を持たない」と判断された場合、図20の処理はステップS905に移行する。逆に、「送信元はメタデータを生成する機能を持つ」と判断された場合、図20の処理はステップS908に移行する。
ステップS905でDB管理部874は、ファイルの送信元の端末(つまりメタデータの生成機能を持たない端末)においてファイルを識別するためのファイルIDを生成する。DB管理部874は、例えば、端末別のカウンタを使って、シリアル番号をファイルIDとして生成してもよい。
また、送信元の端末におけるファイルに対応する新規エントリを、後のステップS907でIDテーブル中に追加するために、DB管理部874は、新規エントリ用の適当なパスもステップS905で生成する。ステップS905で生成されるパスは、送信元の端末において実際にファイルが置かれているパスではなく、単なる便宜上の値である。よって、DB管理部874は、どのようなパスを生成してもよい。
ファイルIDとパスの生成後、図20の処理はステップS906に移行する。なお、ステップS903で認識される送信元を示すデバイスIDと、ステップS905で生成されるファイルIDとのペアは、デバイス間での複製操作における親ファイルを識別する。つまり、メタデータを生成しない端末(例えば端末810)から他の端末(例えば端末830)またはサーバ870へのファイルの複製操作における親ファイルを識別する情報が、ステップS903とS905で取得される。
さて、ステップS906でDB管理部874は、端末間または端末・サーバ870間での複製操作によって生じる、ファイル間の親子関係を認識し、追跡情報を生成する。
例えば、ステップS905の次にステップS906が実行される場合の追跡情報の詳細は、以下のとおりである。
・親デバイスIDは、ステップS903で認識されたデバイスIDである。
・親ファイルIDは、ステップS905で生成されたファイルIDである。
・図19のステップS811で、あるファイルIDに対応する履歴テーブルのエントリがある端末から受信された場合、子デバイスIDは、履歴テーブルのエントリの送信元の当該端末のデバイスIDであり、子ファイルIDは、当該ファイルIDである。
・図19のステップS804で受信が検出された場合、子デバイスIDは、サーバ870のデバイスIDであり、子ファイルIDは、ステップS805で発行されたIDである。
また、ステップS906でDB管理部874は、テーブルの送信先を決定する。より具体的には、DB管理部874は、ステップS901で決めたDB530−1に対応するユーザが使う端末のうち、メタデータの生成機能を持つすべての端末に、後述のステップS907で追加または更新する各エントリを送信することを決定する。そして、図20の処理はステップS907に移行する。
ステップS907でDB管理部874は、DB(つまり、更新対象としてステップS901で選んだDB)を更新する。具体的には、DB管理部874は、サーバ870上の操作を検出した場合は、ステップS802、S805、S806、S808、またはS810で取得した情報に基づいて、適宜、テーブルの追加、エントリの追加、および/またはエントリの更新を行う。また、サーバ870がいずれかの端末からメタデータを受信した場合は、DB管理部874は、受信したメタデータに基づいて、適宜、テーブルの追加、エントリの追加、および/またはエントリの更新を行う。ステップS905または後述のステップS912でファイルIDを生成した場合は、DB管理部874は、IDテーブルにエントリを追加する。なお、ステップS906の後にステップS907が実行される場合は、DB管理部874はさらに、ステップS906で生成した追跡情報もDBに追加する。
ステップS907で追加または更新された各エントリは、ステップS906で送信先として決められた各端末か、または、後述のステップS915で送信先として決められる各端末に、通信部871から送信される。送信後、図20の処理は終了する。
さて、「ファイルの送信元の端末はメタデータの生成機能を持つ」とステップS904で判断した場合、ステップS908でDB管理部874は、「現在注目している受信は、1人のユーザに閉じたファイル転送における受信か否か」を判断する。
例えば、現在注目している受信が、端末830からサーバ870へのファイル転送における、サーバ870での受信の場合がある。この場合、当該受信は、1人のユーザに閉じている。なぜなら、サーバ870にアップロードされるファイルの所有者は、アップロード元の端末を使うユーザ自身だからである。
逆に、現在注目している受信が、ステップS811で得られた履歴情報により示される受信の場合もある。この場合、当該履歴情報からステップS903で抽出された送信元のデバイスIDと、当該履歴情報をサーバ870に送ってきた端末のデバイスIDは、同じユーザIDに対応づけられている可能性もあるし、違うユーザIDに対応づけられている可能性もある。
2つのデバイスIDが同じユーザIDに対応づけられていれば、当該受信は、1人のユーザに閉じたファイル転送における受信である。逆に、2つのデバイスIDが異なるユーザIDに対応づけられていれば、当該受信は、1人のユーザに閉じたファイル転送における受信ではなく、ユーザ間でのファイル転送における受信である。
DB管理部874は、具体的には、ステップS903で抽出したデバイスIDから、デバイス管理部873への問い合わせを介して、ユーザIDを取得してもよい。DB管理部874は、こうして取得したユーザID(つまり、ファイルの送信元に対応するユーザID)を、ステップS811で取得したユーザID(つまり、ファイルの送信先に対応するユーザID)と比較してもよい。そして、DB管理部874は、比較結果に応じて、ステップS908の判断を行ってもよい。
そして、「現在注目している受信は、1人のユーザに閉じたファイル転送における受信である」とDB管理部874が判断すると、図20の処理はステップS909に移行する。
逆に、「現在注目している受信は、1人のユーザに閉じたファイル転送における受信ではない」とDB管理部874が判断すると、図20の処理はステップS915に移行する。なぜなら、ユーザ間でのファイル転送による複製では、ファイル間に親子関係は生じないからである。
さて、ステップS909でDB管理部874は、現在注目している受信に対応する送信ログがあるか否かを判断する。
例えば、現在注目している受信が、端末830からサーバ870に送られたファイルのサーバ870における受信の場合がある。この場合、「現在注目している受信に対応する送信ログ」とは、端末830により生成されて端末830からサーバ870に送られる履歴情報であり、より具体的には、ログ種別として「送信」が指定されている履歴情報である。
逆に、現在注目している受信が、ステップS811で得られた履歴情報により示される受信の場合もある。この場合、「現在注目している受信に対応する送信ログ」とは、当該履歴情報をサーバ870に送ってきた端末にファイルを送信した他の端末(またはサーバ870)により生成され、ログ種別として「送信」が指定されているような、履歴情報である。
いずれの場合も、DB管理部874は、図12のステップS406と類似の方法でDB530−1内の履歴テーブルを検索することにより、現在注目している受信に対応する送信ログがあるか否かを判断することができる。
そして、現在注目している受信に対応する送信ログが見つかった場合、図20の処理はステップS906に移行する。この場合、ステップS906でDB管理部874は、見つかった送信ログに基づいて親デバイスIDと親ファイルIDを決定し、現在注目している受信に関して取得済みの情報から、子デバイスIDと子ファイルIDを決定する。それにより、DB管理部874は、ステップS906で適切な追跡情報を生成することができる。
逆に、現在注目している受信に対応する送信ログが見つからなければ、図20の処理は、ステップS915に移行する。つまり、現在注目している受信に対応する送信ログが見つからない場合、サーバ870は、今回は追跡情報を生成せず、対応する送信ログ(つまり履歴情報)の受信を待ってから追跡情報を生成する。
さて、ログ種別が「送信」の場合、ステップS910でDB管理部874は、ファイルの送信先を認識する。具体的には、以下のとおりである。
「送信」というログ種別の履歴情報をいずれかの端末(例えば端末830)からサーバ870が受信した場合、DB管理部874は、ステップS910において、図12のステップS411と同様にして、送信先に関する情報を抽出する。それにより、DB管理部874は、ファイルの送信先を認識する。
また、図19のステップS801でファイルの送信が検出された場合には、上記のとおり、ステップS802で既に送信先の端末のデバイスIDが得られている。よって、この場合も、DB管理部874は送信先を認識することができる。
次に、ステップS911でDB管理部874は、ステップS910で認識した送信先が、メタデータを生成することが可能であるか否かを判断する。ステップS911の判断の詳細は、送信元と送信先の違い以外は、ステップS904と同様である。よって、ステップS911の詳細な説明は省略する。
なお、「ファイルの送信先はメタデータを生成する機能を持たない」と判断された場合は、図20の処理はステップS912に移行する。逆に、「ファイルの送信先はメタデータを生成する機能を持つ」と判断された場合は、図20の処理はステップS913に移行する。
さて、ステップS912でDB管理部874は、ファイルの送信先の端末(つまりメタデータの生成機能を持たない端末)においてファイルを識別するためのファイルIDを生成する。
例えば、端末830から端末810に、USBケーブルまたはネットワーク890を介して、ファイルが送信された場合、端末830は、送信に関する履歴情報を生成し、当該履歴情報をサーバ870に送信する。そして、サーバ870は、「送信先の端末810がメタデータを生成しない」と判断し、ステップS912でファイルIDを生成する。
ステップS912でDB管理部874はさらに、送信先の端末におけるファイルに対応する新規エントリを、後のステップS907でIDテーブル中に追加するために、新規エントリ用の適当なパスも生成する。ステップS912の詳細はステップS905と類似である。ファイルIDとパスの生成後、図20の処理はステップS906に移行する。
なお、ステップS910で認識される送信先を示すデバイスIDと、ステップS912で生成されるファイルIDとのペアは、デバイス間での複製操作における子ファイルを識別する。つまり、サーバ870または端末830から、メタデータを生成しない端末(例えば端末850)へのファイルの複製操作における、子ファイルを識別する情報が、ステップS910とS912で取得される。
一方、当該複製操作における親ファイルを識別する情報は、サーバ870が端末830から受信した履歴情報(つまり送信を示す履歴情報)に含まれているか、または、サーバ870自身がステップS802で既に抽出している。よって、ステップS912の後にステップS906が実行される場合も、適切な追跡情報が生成される。
さて、「ファイルの送信先はメタデータの生成機能を持つ」とステップS911で判断した場合、ステップS913でDB管理部874は、「現在注目している送信は、1人のユーザに閉じたファイル転送における送信か否か」を判断する。
例えば、現在注目している送信が、サーバ870からいずれかの端末へのファイルの送信(つまりステップS801で検出された送信)の場合がある。この場合、ステップS802で取得された2つのユーザIDが等しければ、現在注目している送信は、1人のユーザに閉じたファイル転送における送信である。逆に、ステップS802で取得された2つのユーザIDが異なれば、現在注目している送信は、1人のユーザに閉じたファイル転送における送信ではない。例えば、ファイルの所有者とは別のユーザの端末からのダウンロード要求に応じてサーバ870がファイルを送信した場合、2つのユーザIDは異なる。
また、現在注目している送信が、ステップS811で得られた履歴情報により示される送信の場合もある。この場合、当該履歴情報からステップS910で抽出された送信先のデバイスIDと、当該履歴情報をサーバ870に送ってきた端末のデバイスIDは、同じユーザIDに対応づけられている可能性もあるし、違うユーザIDに対応づけられている可能性もある。
2つのデバイスIDが同じユーザIDに対応づけられていれば、当該送信は、1人のユーザに閉じたファイル転送における送信である。逆に、2つのデバイスIDが異なるユーザIDに対応づけられていれば、当該送信は、1人のユーザに閉じたファイル転送における送信ではなく、ユーザ間でのファイル転送における送信である。
DB管理部874は、具体的には、ステップS910で抽出したデバイスIDから、デバイス管理部873への問い合わせを介して、ユーザIDを取得してもよい。DB管理部874は、こうして取得したユーザID(つまり、ファイルの送信先に対応するユーザID)を、ステップS811で取得したユーザID(つまり、ファイルの送信元に対応するユーザID)と比較してもよい。そして、DB管理部874は、比較結果に応じて、ステップS913の判断を行ってもよい。
そして、「現在注目している送信は、1人のユーザに閉じたファイル転送における送信である」とDB管理部874が判断すると、図20の処理はステップS914に移行する。
逆に、「現在注目している送信は、1人のユーザに閉じたファイル転送における送信ではない」とDB管理部874が判断すると、図20の処理はステップS915に移行する。なぜなら、ユーザ間でのファイル転送による複製では、ファイル間に親子関係は生じないからである。
さて、ステップS914でDB管理部874は、現在注目している送信に対応する受信ログがあるか否かを判断する。
例えば、現在注目している送信が、サーバ870から端末830へのファイルの送信の場合がある。この場合、「現在注目している送信に対応する受信ログ」とは、端末830により生成されて端末830からサーバ870に送られる履歴情報であり、より具体的には、ログ種別として「受信」が指定されている履歴情報である。
逆に、現在注目している送信が、ステップS811で得られた履歴情報により示される送信の場合もある。この場合、「現在注目している送信に対応する受信ログ」とは、当該履歴情報をサーバ870に送ってきた端末からファイルを受信する他の端末(またはサーバ870)により生成され、ログ種別として「受信」が指定されているような、履歴情報である。
いずれの場合も、DB管理部874は、図12のステップS412と類似の方法でDB530−1内の履歴テーブルを検索することにより、現在注目している送信に対応する受信ログがあるか否かを判断することができる。
そして、現在注目している送信に対応する受信ログが見つかった場合、図20の処理はステップS906に移行する。この場合、ステップS906でDB管理部874は、見つかった受信ログに基づいて子デバイスIDと子ファイルIDを決定し、現在注目している送信に関して取得済みの情報から、親デバイスIDと親ファイルIDを決定する。それにより、DB管理部874は、ステップS906で適切な追跡情報を生成することができる。
逆に、現在注目している送信に対応する受信ログが見つからなければ、図20の処理はステップS915に移行する。つまり、現在注目している送信に対応する受信ログが見つからない場合、サーバ870は、今回は追跡情報を生成せず、対応する受信ログ(つまり履歴情報)の受信を待ってから追跡情報を生成する。
さて、ステップS915でDB管理部874は、テーブル(具体的には、履歴テーブルのエントリか、履歴テーブルとIDテーブルそれぞれのエントリか、履歴テーブルとIDテーブルと追跡テーブルそれぞれのエントリ)の送信先を決定する。例えば、DB管理部874は、以下のように送信先の端末を選んでもよい。
ステップS811で端末から履歴情報が受信され、ログ種別が「受信」でも「送信」でもなかった場合、DB管理部874は、履歴情報の送信元の端末のユーザが使う端末のうち、当該履歴情報の送信元以外で、メタデータの生成機能を持つ端末をすべて選んでもよい。例えば、端末830内でのファイルのコピーや変更などの操作を示す履歴情報が受信された場合は、DB管理部874は、端末830のユーザが使う他の端末のうち、メタデータの生成機能を持つ端末をすべて選んでもよい。
ステップS811で端末から履歴情報が受信され、ログ種別が「受信」だった場合、DB管理部874は、履歴情報の送信元の端末のユーザが使う端末のうち、当該履歴情報の送信元以外で、メタデータの生成機能を持つ端末をすべて選んでもよい。また、ステップS908の後にステップS915が実行される場合(つまりユーザ間でのファイル転送が行われる場合)は、DB管理部874は、さらに、ファイルの送信先の端末のユーザが使う端末のうち、メタデータの生成機能を持つ端末をすべて選んでもよい。
ステップS811で端末から履歴情報が受信され、ログ種別が「送信」だった場合、DB管理部874は、履歴情報の送信元の端末のユーザが使う端末のうち、当該履歴情報の送信元以外で、メタデータの生成機能を持つ端末をすべて選んでもよい。また、ステップS913の後にステップS915が実行される場合(つまりユーザ間でのファイル転送が行われる場合)は、DB管理部874は、さらに、ファイルの送信元の端末のユーザが使う端末のうち、メタデータの生成機能を持つ端末をすべて選んでもよい。
ステップS801でサーバ870からのファイルの送信が検出された場合、DB管理部874は、ファイルの所有者が使う端末のうち、メタデータの生成機能を持つ端末をすべて選んでもよい。また、ファイルの所有者と、ファイルをダウンロードした端末のユーザが異なる場合、DB管理部874は、さらに、ファイルをダウンロードした端末のユーザが使う端末のうち、メタデータの生成機能を持つ端末をすべて選んでもよい。
ステップS804でサーバ870でのファイルの受信が検出された場合、DB管理部874は、ファイルの送信元の端末のユーザが使う端末のうち、当該送信元の端末以外で、メタデータの生成機能を持つ端末をすべて選んでもよい。
ステップS807またはS809で、ファイル記憶部875に記憶されている既存のファイルに対する何らかの操作が検出された場合、DB管理部874は、当該ファイルの所有者が使う端末のうち、メタデータの生成機能を持つ端末をすべて選んでもよい。つまり、操作がどのユーザの端末からの要求に基づいてなされたかには関係なく、DB管理部874は、ファイルの所有者に基づいて、メタデータの送信先を選ぶ。
ステップS915では、例えば以上のようにして、メタデータの送信先の1台以上の端末が選ばれる。その後、図20の処理はステップS907に移行する。すると、ステップS907でDB管理部874は、サーバ870が端末から受信したメタデータをDBに追加するか、または、DB管理部874自身が検出および取得した情報に基づいてDB管理部874が生成したメタデータをDBに記録する。そして、図20の処理は終了する。
以上説明した第3実施形態には、第1〜第2実施形態と同様の効果がある。さらに、第3実施形態によれば、あるユーザの所有するファイルに対する他のユーザによる操作を、当該ファイルの優先度に反映させることが可能となる。
ところで、本発明は上記実施形態に限られるものではない。上記の説明においてもいくつかの変形について説明したが、上記実施形態は、さらに例えば下記の観点から様々に変形することもできる。上記の各実施形態(変形例を含む)および下記の各種変形は、相互に矛盾しない限り、任意に組み合わせることが可能である。
図6〜9にはテーブル形式でデータを例示したが、XML(Extensible Markup Language)形式など、その他のデータ形式も利用可能である。また、追跡テーブルの1つのエントリは、1つのファイルツリー中の1つのエッジを表す。つまり、追跡テーブルは、木構造を示すためのデータ形式の一例である。実施形態によっては、追跡テーブルのようなテーブル形式のデータの代わりに、木構造を表すための別の形式のデータが、追跡情報を示すために利用されてもよい。
また、矛盾が生じない限り、フローチャート中のステップの実行順序は入れ替えられてもよい。また、入れ替え可能なステップ同士は、並列に実行されてもよい。
例えば、図14〜15では、ファイルを選択する順序について特に決められていない。しかし、実施形態によっては、優先度算出部337は、根ファイルを葉ファイルよりも先に選択してもよい。すると、優先度算出部337は、ステップS516での総和の算出の代わりに、算出済みの根ファイルの優先度を参照するだけでよい。
実施形態によっては、式(6)以外の式で表される優先度が算出されてもよい。式(1)〜(5)の定義も、実施形態に応じて適宜変更されてよい。例えば、式(4)の代わりに式(7)が使われてもよい。
式(7)は以下のことを示す。
・同じユニーク値uのファイルを有する端末の台数n(u)が多いほど、コピー優先度q(u)は低い。
・同じユニーク値uのファイルの数が多いほど、コピー優先度q(u)は低い。
・同じユニーク値uのファイルの数が1のとき、q(u)=p(u)が成り立つ。
実施形態によっては、同じユニーク値uのファイルを有する端末が2台以上ある場合に、優先度算出部は、ユニーク値uを持つ全ファイルの優先度r(x)の値を非常に低い値(例えばゼロ)に決めてもよい。
ところで、端末間での複製操作は、例えば、写真管理ソフトウェアなどの特定のアプリケーションを介して端末間で行われるファイル転送であってもよいし、添付ファイルつきの電子メールの送受信であってもよい。場合によっては、リムーバブルメディアを介して、ファイルが端末間で複製されてもよい。いずれにせよ、監視部が適宜の操作(例えば、特定のアプリケーションにおける操作、メーラからの添付ファイルの保存操作、リムーバブルメディアに対する読み書きの操作など)を検出することにより、適切な追跡情報の生成が可能となる。
なお、上記の第3実施形態は、サーバ870上でのファイルのコピー操作が許可されていない場合の例である。しかし、もちろん、サーバ870上でのファイルのコピー操作が許可されていてもよい。つまり、サーバ870上のファイルが、サーバ870上で複製されてもよい。その場合、DB管理部874は、サーバ870上でのコピー操作に応じて、適宜のメタデータを生成し、DBを更新する。
具体的には、ファイル記憶部875に記憶されているファイルの所有者自身が、当該ファイルをサーバ870上でコピーした場合は、DB管理部874は、履歴情報と追跡情報の双方を生成する。
しかし、他のユーザが当該ファイルをサーバ870でコピーした場合は、DB管理部874は、履歴情報を生成するが、追跡情報は生成しない。なぜなら、コピー操作により新たに作成されたファイルの所有者は、元のファイルの所有者とは異なるからである。つまり、複数のユーザ間での複製操作では、ファイル間に親子関係は生じない。換言すれば、追跡情報により表されるファイルツリーは、1人のユーザにとってのファイルの優先度を算出するために参照されるのであり、あるユーザにとっての優先度は、他のユーザにとっての優先度に影響しない。
ところで、第2実施形態では、DB記憶部316とDB記憶部336とDB記憶部352が同様のDBを保持し、第3実施形態では、DB記憶部836とDB記憶部872が同様のDBを保持する。つまり、第2実施形態と第3実施形態は、DBが冗長化される例を示す。
しかし、実施形態によっては、DBが完全に冗長化されていなくてもよい。ただし、図10のステップS214の問い合わせに関して説明したように、端末がオフラインの場合もある。よって、各端末は、当該端末がオフラインの間に当該端末上で行われる操作に関するエントリだけは、少なくとも保持する。つまり、各端末は、当該端末がサーバとの通信を行わない期間中に当該端末上で行われる操作に関して、IDテーブル、履歴テーブル、追跡テーブルのうち少なくとも1つのテーブルの、少なくとも1つのエントリを保持する。
各端末は、オフライン状態からオンライン状態に変化したら、オフライン状態の間にDB記憶部に蓄積したエントリをサーバに送信する。実施形態によっては、このような送信の後、端末は、送信済みのエントリを削除してもよい。
ところで、実施形態によっては、ユニーク値が使われなくてもよい。代わりに、ファイル同士のデータが等しいか否かをチェックするためのコマンド等が利用されてもよい。
また、ユニーク値同士の衝突を無視することができない場合は、図14〜15のバックアップ制御処理が変形されてもよい。具体的には、優先度算出部337または837は、ユニーク値だけに注目してユニーク値ごとにステップS505〜S508を実行する代わりに、各ファイルツリー別に、当該ファイルツリー内でのユニーク値ごとにステップS505〜S508を実行してもよい。
ところで、第2実施形態と第3実施形態では、端末が優先度を算出する。しかし、第1実施形態に関して説明したように、サーバが優先度を算出してもよい。つまり、図1の処理を実行する情報処理装置は、ユーザの使う複数の端末のうちの1台以上と通信を行う他のコンピュータ(例えば、管理サーバ112、サーバ350、またはサーバ870)であってもよい。
優先度を算出する情報処理装置としてのサーバは、複数台の端末のうちの第1の端末に記憶されているいずれかのファイルに対して第1の端末上で行われる操作の種類を示す履歴情報を、第1の端末から受信してもよい。こうした履歴情報の受信の例は、図12のステップS401や図19のステップS811に例示されている。
また、第1の端末に記憶されているファイルx1を、第1の端末が第1の端末内でファイルx2に複製する(つまりコピーする)こともある。優先度を算出する情報処理装置としてのサーバは、第1の端末から、ファイルx1とx2を関連づける追跡情報を受信してもよい。こうした追跡情報の受信も、図12のステップS401や図19のステップS811に例示されている。サーバは、このように受信により取得した追跡情報を、優先度の算出において使う場合もある。
また、第1の端末に記憶されているファイルx3を、第1の端末が第2の端末に送信し、送信されたファイルx3を第2の端末がファイルx4として第2の端末に記憶する場合があり得る。例えば、第1と第2の端末がそれぞれ端末310と330であってもよく、ファイルx3は図5のファイル404であってもよい。
この場合、優先度を算出する情報処理装置としてのサーバは、第1の端末からのファイルx3に関する通知と、第2の端末からのファイルx4に関する通知に基づいて、ファイルx3とx4を関連づける追跡情報を生成してもよい。例えば、サーバは、図5のステップS112の通知とステップS109の通知に基づいて、ステップS113で、追跡情報を生成してもよい。サーバは、このようにして自ら生成した追跡情報を、優先度の算出において使う場合もある。
また、第1の端末に記憶されているファイルx5を、第1の端末がサーバに送信し、送信されたファイルx5をサーバがファイルx6としてサーバ内に記憶する場合もあり得る。例えば、第1の端末が端末830であってもよく、サーバはサーバ870であってもよく、ファイルx5はファイル904であってもよい。
この場合、優先度を算出する情報処理装置としてのサーバは、ファイルx5とx6を関連づける追跡情報を、ファイルx6の保存に応じて生成してもよい。このような追跡情報の生成は、例えば図17のステップS608に例示されている。サーバは、このようにして自ら生成した追跡情報を、優先度の算出において使う場合もある。
最後に、上記の種々の実施形態に関して、さらに下記の付記を開示する。
(付記1)
ユーザが使う複数台の端末のうちの1台であるか、または、前記複数台の端末のうち少なくとも1台以上とネットワークを介して通信を行うコンピュータである情報処理装置に、
前記複数台の端末上に分散して記憶されているか、または前記複数台の端末と前記コンピュータに分散して記憶されている複数個のファイルの各々に対して行われた各操作について、当該操作の種類を示す履歴情報を取得し、
前記複数台の端末のうちの1台の端末内で行われたか、前記複数台の端末のうちの2台の端末間で行われたか、または、前記複数台の端末のうちの1台と前記コンピュータとの間で行われた各複製操作について、複製元のファイルと、当該複製操作により作成されたファイルとを関連づける追跡情報を取得し、
前記履歴情報と前記追跡情報を用いて、前記複数個のファイルに含まれる個々のファイルについて、
当該個々のファイルに対して行われた操作の種類、
前記追跡情報により当該個々のファイルと関連づけられている別のファイルが前記複数個のファイルの中にあるか否か、および
前記別のファイルがある場合は、当該個々のファイルのデータと前記別のファイルのデータが等しいか否か
に基づく優先度を算出し、
バックアップする対象のファイルの量に関して指定される条件を満たす範囲内で、前記優先度の降順に、前記複数個のファイルの中から1つ以上のファイルを選択する
ことを含むバックアップ制御処理を実行させるためのバックアップ制御プログラム。
(付記2)
前記複数個のファイルのうち、他のファイルに対する複製操作により得られたのではない根ファイルの前記優先度を算出する処理は、1回以上の複製操作により根ファイルから直接または間接に得られた1個以上の子孫ファイルの各々に対して行われた各操作に応じて、前記根ファイルの前記優先度を上げる処理を含む
ことを特徴とする付記1に記載のバックアップ制御プログラム。
(付記3)
前記1個以上の子孫ファイルのうちで、どの複製操作における複製元ファイルでもない葉ファイルの前記優先度を算出する処理は、前記根ファイルの前記優先度に応じて前記葉ファイルの前記優先度を上げる処理を含む
ことを特徴とする付記2に記載のバックアップ制御プログラム。
(付記4)
前記複数個のファイルのうちの第1のファイルに対する複製操作により第2のファイルが得られた場合において、
前記第1のファイルのデータと前記第2のファイルのデータが等しい場合よりも、前記第1のファイルの前記データと前記第2のファイルの前記データが等しくない場合の方が、前記第1のファイルの前記優先度がより高く、
前記第1のファイルの前記データと前記第2のファイルの前記データが等しい場合よりも、前記第1のファイルの前記データと前記第2のファイルの前記データが等しくない場合の方が、前記第2のファイルの前記優先度もより高い
ことを特徴とする付記1から3のいずれか1項に記載のバックアップ制御プログラム。
(付記5)
各ファイルに対する各操作は、
前記ユーザからの指示に基づくユーザ主導操作であるか、または、
前記複数台の端末のうち当該ファイルを記憶する端末が、所定のプログラムを実行することにより自動的に行われる自動操作であり、
前記ユーザ主導操作は、前記自動操作よりも、前記優先度をより高めるように、前記優先度に影響する
ことを特徴とする付記1から4のいずれか1項に記載のバックアップ制御プログラム。
(付記6)
新規ファイルを作成する作成操作は、他の操作よりも、前記優先度をより高めるように、前記優先度に影響することを特徴とする付記1から5のいずれか1項に記載のバックアップ制御プログラム。
(付記7)
前記複数個のファイルの各々に対して行われた各操作について、当該操作が行われた時点が新しいほど、当該ファイルの前記優先度が高い
ことを特徴とする付記1から6のいずれか1項に記載のバックアップ制御プログラム。
(付記8)
前記複数個のファイルの各々に対して行われた各操作について、当該操作にかかった時間が長いほど、当該ファイルの前記優先度が高い
ことを特徴とする付記1から7のいずれか1項に記載のバックアップ制御プログラム。
(付記9)
前記複数個のファイルのうち、あるファイルが前記コンピュータに記憶されている場合、前記あるファイルに対して前記ユーザ以外の他のユーザが行った操作についての前記履歴情報が取得される
ことを特徴とする付記1から8のいずれか1項に記載のバックアップ制御プログラム。
(付記10)
前記情報処理装置が、前記複数台の端末のうちの第1の端末であり、
前記履歴情報を取得する処理が、
前記複数個のファイルのうちで、前記第1の端末に記憶されているいずれかのファイルに対して、前記第1の端末上で行われる操作を検出し、
前記検出した操作の種類を示す前記履歴情報を生成する
ことを含む
ことを特徴とする付記1から9のいずれか1項に記載のバックアップ制御プログラム。
(付記11)
前記履歴情報を取得する処理が、さらに、
前記複数個のファイルのうちで、前記複数台の端末のうちのある特定の端末に記憶されているいずれかのファイルの、前記特定の端末から前記第1の端末への送信を検出し、
前記特定の端末から前記第1の端末へ送信された前記ファイルに関する情報を推定する
ことを含む
ことを特徴とする付記10に記載のバックアップ制御プログラム。
(付記12)
前記追跡情報を取得する処理が、
前記複数個のファイルのうちで、前記第1の端末に記憶されている第1のファイルを前記第1の端末内で第2のファイルに複製する複製操作を検出し、
前記第1のファイルと前記第2のファイルを関連づける前記追跡情報を生成する
ことを含む
ことを特徴とする付記10または11に記載のバックアップ制御プログラム。
(付記13)
前記情報処理装置が、前記コンピュータであり、
前記履歴情報を取得する処理が、前記複数個のファイルのうちで、前記複数台の端末のうちの第1の端末に記憶されているいずれかのファイルに対して前記第1の端末上で行われる操作の種類を示す前記履歴情報を、前記第1の端末から受信することを含む
ことを特徴とする付記1から9のいずれか1項に記載のバックアップ制御プログラム。
(付記14)
前記追跡情報を取得する処理が、
前記複数個のファイルのうちで、前記第1の端末に記憶されている第3のファイルを、前記第1の端末が前記第1の端末内で第4のファイルに複製した場合に、前記第1の端末から、前記第3のファイルと前記第4のファイルを関連づける前記追跡情報を受信し、
前記複数個のファイルのうちで、前記第1の端末に記憶されている第5のファイルを、前記第1の端末が第2の端末に送信し、送信された前記第5のファイルを前記第2の端末が第6のファイルとして前記第2の端末内に記憶した場合に、前記第1の端末からの前記第5のファイルに関する通知と、前記第2の端末からの前記第6のファイルに関する通知に基づいて、前記第5のファイルと前記第6のファイルを関連づける前記追跡情報を生成し、
前記複数個のファイルのうちで、前記第1の端末に記憶されている第7のファイルを、前記第1の端末が前記コンピュータに送信し、送信された前記第7のファイルを前記コンピュータが第8のファイルとして前記コンピュータ内に記憶した場合に、前記第7のファイルと前記第8のファイルを関連づける前記追跡情報を生成する
ことを含む
ことを特徴とする付記13に記載のバックアップ制御プログラム。
(付記15)
ユーザが使う複数台の端末のうちの1台であるか、または、前記複数台の端末のうち少なくとも1台以上とネットワークを介して通信を行うコンピュータである情報処理装置が、
前記複数台の端末上に分散して記憶されているか、または前記複数台の端末と前記コンピュータに分散して記憶されている複数個のファイルの各々に対して行われた各操作について、当該操作の種類を示す履歴情報を取得し、
前記複数台の端末のうちの1台の端末内で行われたか、前記複数台の端末のうちの2台の端末間で行われたか、または、前記複数台の端末のうちの1台と前記コンピュータとの間で行われた各複製操作について、複製元のファイルと、当該複製操作により作成されたファイルとを関連づける追跡情報を取得し、
前記履歴情報と前記追跡情報を用いて、前記複数個のファイルに含まれる個々のファイルについて、
当該個々のファイルに対して行われた操作の種類、
前記追跡情報により当該個々のファイルと関連づけられている別のファイルが前記複数個のファイルの中にあるか否か、および
前記別のファイルがある場合は、当該個々のファイルのデータと前記別のファイルのデータが等しいか否か
に基づく優先度を算出し、
バックアップする対象のファイルの量に関して指定される条件を満たす範囲内で、前記優先度の降順に、前記複数個のファイルの中から1つ以上のファイルを選択する
ことを特徴とするバックアップ制御方法。
(付記16)
ユーザが使う複数台の端末上に分散して記憶されているか、または前記複数台の端末のうち少なくとも1台以上とネットワークを介して通信を行うコンピュータと前記複数台の端末とに分散して記憶されている複数個のファイルの各々に対して行われた各操作について、当該操作の種類を示す履歴情報を記憶する第1の記憶部と、
前記複数台の端末のうちの1台の端末内で行われたか、前記複数台の端末のうちの2台の端末間で行われたか、または、前記複数台の端末のうちの1台と前記コンピュータとの間で行われた各複製操作について、複製元のファイルと、当該複製操作により作成されたファイルとを関連づける追跡情報を記憶する第2の記憶部と、
前記履歴情報と前記追跡情報を用いて、前記複数個のファイルに含まれる個々のファイルについて、
当該個々のファイルに対して行われた操作の種類、
前記追跡情報により当該個々のファイルと関連づけられている別のファイルが前記複数個のファイルの中にあるか否か、および
前記別のファイルがある場合は、当該個々のファイルのデータと前記別のファイルのデータが等しいか否か
に基づく優先度を算出する優先度算出部と、
バックアップする対象のファイルの量に関して指定される条件を満たす範囲内で、前記優先度の降順に、前記複数個のファイルの中から1つ以上のファイルを選択する選択部
を備えることを特徴とする情報処理装置。
(付記17)
前記複数台の端末のうちの1台であることを特徴とする付記16に記載の情報処理装置。
(付記18)
前記コンピュータであることを特徴とする付記16に記載の情報処理装置。