説明

データサーバ、リポジトリ追加方法、およびプログラム

【課題】それぞれ一意なデータIDを付与した複数のデータを複数のリポジトリに分散して保管するデータサーバにおいて、たとえバックアップされたデータのリカバリを行っても、データに付与されたデータIDの一意性を保障できるようにする。
【解決手段】データサーバ10は、バックアップされたリポジトリをリポジトリグループ80に追加する要求を受けた場合、バックアップされたリポジトリのリポジトリIDが、リポジトリグループ80に含まれる各リポジトリ12に付与されている各リポジトリIDのいずれかと一致するか否かを判定する。判定の結果、リポジトリグループに含まれるリポジトリに付与されているリポジトリIDの中にバックアップされたリポジトリIDと一致するリポジトリIDが存在しない場合に、データサーバ10は、バックアップされたリポジトリをリポジトリグループ80に追加する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一意なデータIDを付与した複数のデータを複数のリポジトリに分散して保管して管理するための技術に関する。
【背景技術】
【0002】
この分野の従来の技術として、特許文献1や特許文献2に記載の技術がある。特許文献1には、局所的に一意な識別子を用いて、システム全体で一意にオブジェクトを識別する大規模分散計算機システムが開示されている。この大規模分散計算機システムは、オブジェクトを使用する場所によってオブジェクトの識別子の表現を変えることで、各場所におけるオブジェクトの一意性を保証する。
【0003】
また、特許文献2には、画像データが格納されている画像保管装置を示す特定情報を管理し、外部装置より画像データの要求があった場合に、該格納されている特定情報に基づいて該画像データが格納されている画像保管装置を特定する画像位置管理装置が開示されている。
【0004】
上記のようなシステムでは、それぞれデータに一意な識別子を付与することで、複数のデータを複数のリポジトリに分散して保管して管理することができる。また、データに付された識別子により一意にそのデータを特定することができるため、データの保管されているリポジトリが移動しても、同一の識別子に基づいてそのデータにアクセスすることができる。しかし、このようなシステムにおいて、バックアップされたデータをリカバリすると、データに付与された識別子の一意性の保障が維持できない場合がある。
【0005】
【特許文献1】特開平5−189389号公報
【特許文献2】特開2000−105677号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
本発明は、それぞれ一意なデータIDを付与した複数のデータを複数のリポジトリに分散して保管するデータサーバにおいて、たとえバックアップされたデータのリカバリを行っても、データに付与されたデータIDの一意性を保障できるようにする。
【課題を解決するための手段】
【0007】
本発明に係るプログラムの1つの態様では、一意なデータIDが付与された少なくとも1つのデータを保管する複数のリポジトリをそれぞれ一意なリポジトリIDと対応付けて、1つのリポジトリグループとして構成し、バックアップされたリポジトリを前記リポジトリグループに追加する要求を受けた場合、前記バックアップされたリポジトリのリポジトリIDが、前記リポジトリグループに含まれる各リポジトリに付与されている各リポジトリIDのいずれかとも一致しないかを判定し、判定の結果、前記リポジトリグループに含まれるリポジトリに付与されているリポジトリIDの中に前記バックアップされたリポジトリIDと一致するリポジトリIDが存在しない場合に、前記バックアップされたリポジトリを前記リポジトリグループに追加するようにコンピュータを機能させることを特徴とする。
【0008】
また、本発明に係るプログラムの別の態様では、一意なデータIDが付与された少なくとも1つのデータを保管する複数のリポジトリをそれぞれ一意なリポジトリIDと対応付けて、1つのリポジトリグループとして構成し、リポジトリの分割もしくは統合により生じるリポジトリID間の派生関係を示す情報を生成し、バックアップされたリポジトリを前記リポジトリグループに追加する要求を受けた場合、前記派生関係を示す情報を参照して、前記バックアップされたリポジトリが前記リポジトリグループに含まれる各リポジトリの前記派生関係における先祖もしくは子孫に該当しないかを判定し、判定の結果、前記バックアップされたリポジトリが前記リポジトリグループに含まれる各リポジトリの先祖もしくは子孫に該当しない場合に、前記バックアップされたリポジトリを前記リポジトリグループに追加するようにコンピュータを機能させることを特徴とする。
【0009】
さらに、本発明に係るプログラムの別の態様では、一意なデータIDが付与された少なくとも1つのデータを保管する複数のリポジトリをそれぞれ一意なリポジトリIDと対応付けて、1つのリポジトリグループとして構成し、あるリポジトリに保管されているデータが別のリポジトリに移動した場合に、移動元のリポジトリに付与されたリポジトリIDと、移動したデータに付与されたデータIDと、移動先のリポジトリに付与されたリポジトリIDとを関連づけた移動情報を生成し、バックアップされたリポジトリを前記リポジトリグループに追加する要求を受けた場合、前記移動情報を参照して、前記バックアップされたリポジトリに保管されているデータ群の中に、前記リポジトリグループに含まれるリポジトリに移動されたデータが存在しないかを判定し、判定の結果、前記バックアップされたリポジトリに保管されているデータ群の中に、前記リポジトリグループに含まれるリポジトリに移動されたデータが存在しない場合、前記バックアップされたリポジトリを前記リポジトリグループに追加するようにコンピュータを機能させることを特徴とする。
【発明の効果】
【0010】
本発明によれば、それぞれ一意なデータIDを付与した複数のデータを複数のリポジトリに分散して保管するシステムにおいて、たとえバックアップされたデータのリカバリを行っても、データに付与されたデータIDの一意性を保障できる。
【発明を実施するための最良の形態】
【0011】
本発明を実施するための最良の形態(以下、実施形態と称す)について、以下、図面を用いて説明する。
【0012】
図1は、本実施形態に係るデータ管理システムのシステム構成を示す図である。図1に示すように、本システムでは、LAN(ローカル・エリア・ネットワーク)やインターネットなどのネットワーク60に接続されたデータサーバ10とクライアント50とから構成される。本システムは、ネットワーク60上のクライアント50からのデータ要求に応じて、要求対象のデータをデータサーバ10がクライアント50に提供する。また、データサーバ10は、ネットワーク60を介してクライアント50から提供されたデータを保管する。ここで、データは、文書データ、画像データ、動画データなど、ネットワーク60を介してデータサーバ10とクライアント50とがやり取り可能なデータ全般をいう。
【0013】
図2は、実施形態におけるデータサーバ10の機能ブロックを示す図である。データサーバ10は、データを保管する複数のリポジトリ12と、リポジトリ12を管理するリポジトリ管理部30とから構成される。リポジトリ管理部30は、クライアント50を介してユーザにより選択されたいくつかのリポジトリ12をリポジトリグループ80として構成し、そのグループに含まれるリポジトリ12がそれぞれ連携して、複数のデータを分散して管理する。データサーバ10は、リポジトリグループに属するリポジトリ12に保管されているデータを、クライアント50に提供する。つまり、クライアント50は、リポジトリグループに属するリポジトリ12が保管するデータにアクセスして、閲覧や編集などの処理をすることができる。以下、リポジトリグループに属するリポジトリを、「所属リポジトリ」と称す。なお、本実施形態では、データサーバ10が備えるリポジトリ12をリポジトリグループとして構成し、データを分散して管理する例について説明する。しかし、他のコンピュータが備えるリポジトリをネットワーク60を介して接続して、そのコンピュータのリポジトリをリポジトリグループとして構成してもよい。
【0014】
各リポジトリ12は、データ格納部14を備える。図2に示すように、データ格納部14には、保管対象となるデータ22とそのデータをグローバルに一意に特定するためのデータID24とが関連づけて格納される。また、データ格納部14には、リポジトリ12をグローバルに一意に特定するためのリポジトリID26が関連づけられている。
【0015】
リポジトリ管理部30は、ID生成部20と、グループ編成部32と、所属リポジトリID保持部34と、バックアップ・リカバリ処理部36とを備える。
【0016】
ID生成部20は、グローバルに一意なデータIDやリポジトリIDを生成し、各リポジトリ12に提供する。ここで、グローバルに一意なIDとしては、例えばUUID(Universally Unique IDentifier)又はGUID(Globally Unique IDentifier)と呼ばれる128ビットの識別情報を用いることができる。ちなみに、UUIDは、グローバルな一意性を保証するために、そのUUIDを作成した時刻や作成に使用したマシンに装着されたネットワークカードのMAC(Media Access Control)アドレス等を含んでいる。クライアント50は、要求対象となるデータに対応するデータIDを示したデータ要求をデータサーバ10に送信することで、データサーバ10からそのデータ要求の応答として、要求対象データを受け取ることができる。
【0017】
グループ編成部32は、ユーザからの指示に応じて、リポジトリグループに新たなリポジトリを追加したり、既存の所属リポジトリをリポジトリグループから除外する。所属リポジトリID保持部34は、現在リポジトリグループに属する所属リポジトリのリポジトリIDとその所属リポジトリの物理位置情報とを関連づけた所属リポジトリ情報を保持する。ここで、物理位置情報は、リポジトリ12にアクセスするために必要な情報であり、例えば、ディレクトリ名、IPアドレス、URL(Uniform Resource Locator)などである。
【0018】
バックアップ・リカバリ処理部36は、ユーザからの指示に応じて、所属リポジトリをバックアップしたり、バックアップされたリポジトリをリカバリする。ここで、バックアップとは、ある時点でのリポジトリのスナップショットを別の記憶領域や別の記憶メディアにコピーして保存する処理のことをいう。よって、バックアップを行うことで、ある時点においてデータ格納部14に格納されているデータとそのデータID及びそのリポジトリのリポジトリIDがコピーされ、バックアップデータとして、別の記憶領域や別の記憶メディアに保存される。また、リカバリとは、別の記憶領域や別の記憶メディアに保存されたスナップショットをグループ編成部32がアクセスできる状態にすることをいう。よって、リカバリを行うことで、グループ編成部32がバックアップされたリポジトリにアクセスして、リポジトリグループに追加することができるようになる。
【0019】
このように構成されたデータ管理システムによれば、データを複数のリポジトリ12に分散して管理することができる。また、リポジトリ12をバックアップすることができるため、リポジトリグループとして構成されているリポジトリ12に障害が起きた場合にも、バックアップした時点でリポジトリ12に保管されているデータを復元することができる。しかしながら、バックアップされたリポジトリ12をリカバリして、新たにリポジトリグループ80に追加する場合、データに付与されたデータIDの一意性が保障できない場合がある。例えば、図3A,3Bに示すようなケースで、データIDの一意性が崩れる。
【0020】
まず、図3Aにおいて、リポジトリグループ80にリポジトリ[X]、リポジトリ[Y]などが属する場合に、リポジトリ[X]をバックアップする(なお、リポジトリ[X]は、リポジトリID[X]を付与されたリポジトリのことを意味する。他のリポジトリについても同様とする)。その後、図3Bに示すように、バックアップされたリポジトリ[X]をリカバリして、別のリポジトリ[Z]としてリポジトリグループ80に追加する。すると、リポジトリ[X]が保管するデータのデータIDとリポジトリ[Z]が保管するデータのデータIDとは重複し、データIDの一意性が崩れてしまう。このように、バックアップされたリポジトリを、リカバリした後、リポジトリグループに追加すると、バックアップされたリポジトリが保管するデータのデータIDと既存の所属リポジトリが保管するデータのデータIDとの間でデータIDの一意性が保障できない場合がある。本システムでは、クライアント50は、データに付与されているデータIDが一意性を保っているために、所望のデータを特定して、そのデータをデータサーバ10から取得することができる。しかし、上記のように、データIDが重複し、データIDの一意性が崩れると、データを一意に特定することができず、クライアント50は、所望のデータを取得できなくなる。
【0021】
そこで、本実施形態では、バックアップされたリポジトリをリカバリして、リポジトリグループに追加する要求をユーザから受けた場合、リポジトリ管理部30は、図4に示す手順に基づいて、バックアップされたリポジトリをリポジトリグループに追加するか否かを判定する。
【0022】
まず、リポジトリ管理部30は、グループ追加対象となるリポジトリのバックアップデータに付与されたリポジトリIDを取得する(S100)。次いで、リポジトリ管理部30は、所属リポジトリID保持部34が保持する所属リポジトリ情報を参照することで、取得したリポジトリIDと一致する所属リポジトリのリポジトリIDが存在するか否かを判定する(S102)。判定の結果、取得したリポジトリIDと一致する所属リポジトリのリポジトリIDが存在する場合(S102の判定結果が、肯定「Y」)、リポジトリ管理部30は、バックアップされたリポジトリが保管するデータの中に、現在リポジトリグループに属する所属リポジトリが保管するデータと同一のデータIDが付与されたデータが存在すると判断して、そのバックアップされたリポジトリをリポジトリグループに追加せずに、処理を終了する。
【0023】
一方、判定の結果、取得したリポジトリIDと一致する所属リポジトリのリポジトリIDが存在しない場合(S102の判定結果が、否定「N」)、リポジトリ管理部30は、バックアップデータをリカバリする(S104)。次いで、リポジトリ管理部30は、リカバリしたバックアップデータをリポジトリグループに新たなリポジトリとして追加する(S106)。
【0024】
以上のように、本実施形態では、リポジトリ管理部30は、バックアップデータのリポジトリに付与されたリポジトリIDと同一のリポジトリIDが付与された所属リポジトリが存在する場合、バックアップデータのリポジトリをリポジトリグループに追加することを許可しない。これにより、バックアップされたリポジトリをリポジトリグループに追加することが原因で、リポジトリグループ内においてデータIDの一意性が崩れることを防止することができる。
【0025】
続いて、本実施形態の第1の変形例について説明する。第1の変形例では、リポジトリの分割および統合が行われた場合でも、バックアップされたリポジトリをリポジトリグループに追加されることが原因で、リポジトリグループ内においてデータIDの一意性が崩れることを防止する。
【0026】
まず、本題に入る前に、リポジトリの分割及び統合について、図5,図6を用いて説明する。図5は、リポジトリの分割時におけるイメージを示す。図5に示すように、リポジトリの分割とは、1つのリポジトリに保管されているデータ群を、データIDを変更せずに、複数の新たなリポジトリに分配することをいう。なお、分割前のリポジトリは、分割により消失する。次に、図6は、リポジトリの統合時におけるイメージを示す。図6に示すように、リポジトリの統合とは、複数のリポジトリに保管されているデータ群を、データIDを変更せずに、新たな1つのリポジトリにまとめることをいう。なお、統合前のリポジトリは、統合により消失する。
【0027】
ここで、リポジトリを分割した後に、バックアップされたリポジトリをリポジトリグループに追加した場合に、データIDの一意性が崩れるケースについて、図7A,図7Bを用いて説明する。
【0028】
まず、図7Aに示す通り、リポジトリ[X]をバックアップする(S200)。次いで、リポジトリ[X]を、リポジトリ[G]とリポジトリ[H]に分割する(S202)。その後、図7Bに示す通り、リポジトリ[G]が破損したため(S204)、リポジトリ[G]を破棄して、リポジトリ[X]のバックアップデータをリカバリして得られるリポジトリ[J]をリポジトリグループに追加する(S206)。すると、リポジトリ[J]に保管されているデータのデータIDと、リポジトリ[H]に保管されているデータのデータIDとが重複する。
【0029】
このように、リポジトリの分割および統合が行われた後に、バックアップされたリポジトリをリポジトリグループに追加されることが原因で、リポジトリグループ内においてデータIDの一意性が崩れる場合がある。
【0030】
そこで、第1の変形例では、バックアップされたリポジトリをリカバリして、リポジトリグループに追加する要求をユーザから受けた場合、リポジトリ管理部30は、以下に示す手順に基づいて、バックアップされたリポジトリをリポジトリグループに追加するか否かを判定する。
【0031】
図8は、第1の変形例におけるデータサーバ10の機能ブロックを示す図である。図8において、図2と同一のブロックについては同一符号を付してある。上記の実施形態におけるデータサーバ10との違いは、分割統合処理部38と派生関係保持部28とを備える点である。
【0032】
分割統合処理部38は、上記の通り、ユーザからの指示に基づいて、リポジトリの分割もしくは統合の処理を行う。派生関係保持部28は、リポジトリの分割もしくは統合により発生するリポジトリの派生関係の情報を保持する。つまり、派生関係保持部28には、リポジトリの分割や統合の履歴情報が保持される。
【0033】
図9は、リポジトリの分割および統合によって発生するリポジトリ間の派生関係を示すイメージ図である。図9では、リポジトリ[A]がリポジトリ[B]とリポジトリ[C]とに分割され、さらに、リポジトリ[C]が、リポジトリ[D],リポジトリ[E],リポジトリ[F]に分割されている。次いで、リポジトリ[B]とリポジトリ[D]とが統合され、リポジトリ[G]が生成されている。図9において、各リポジトリの各派生関係保持部28には、それぞれ各リポジトリの下に描いた派生関係情報が保持される。
【0034】
図10は、リポジトリの分割時におけるリポジトリ管理部30の処理手順を示す図である。リポジトリ管理部30は、ユーザからリポジトリの分割指示を受けると、分割元のリポジトリが保持する派生関係情報を取得する(S300)。さらに、リポジトリ管理部30は、分割後の各リポジトリに対応するリポジトリIDをそれぞれ生成する(S302)。リポジトリ管理部30は、生成した各リポジトリIDに応じて、派生関係情報を更新する(S304)。つまり、分割前のリポジトリを「親」、分割後の各リポジトリを「子」となるように派生関係情報を更新する。その後、リポジトリ管理部30は、生成したリポジトリIDを分割後のリポジトリに提供するとともに、更新した派生関係情報も分割後のリポジトリに提供する(S306)。これにより、分割後のリポジトリ12にそれぞれリポジトリIDが付与され、派生関係保持部28に派生関係情報が格納される。
【0035】
図11は、リポジトリの統合時におけるリポジトリ管理部30の処理手順を示す図である。リポジトリ管理部30は、ユーザからリポジトリの統合指示を受けると、統合元の各リポジトリが保持する派生関係情報を取得する(S400)。さらに、リポジトリ管理部30は、統合後のリポジトリに対応するリポジトリIDを生成する(S402)。リポジトリ管理部30は、生成したリポジトリIDに応じて、派生関係情報を更新する(S404)。その後、リポジトリ管理部30は、生成したリポジトリIDを統合後のリポジトリに提供するとともに、更新した派生関係情報も統合後のリポジトリに提供する(S406)。これにより、統合後のリポジトリ12にリポジトリIDが付与され、派生関係保持部28に派生関係情報が格納される。
【0036】
続いて、第1の変形例におけるリポジトリ管理部30が、バックアップされたリポジトリをリポジトリグループに追加する要求をユーザから受けた場合の処理手順について、図12に示すフローチャートを用いて説明する。
【0037】
まず、リポジトリ管理部30は、グループ追加対象となるリポジトリのバックアップデータに付与されたリポジトリIDを取得する(S500)。さらに、リポジトリ管理部30は、所属リポジトリID保持部34に保持された所属リポジトリ情報を参照して、現在リポジトリグループに含まれる所属リポジトリを特定し、各所属リポジトリから派生関係情報を取得する(S502)。そして、リポジトリ管理部30は、取得したリポジトリIDと、各派生関係情報とを参照して、グループ追加対象のリポジトリが、所属リポジトリの先祖または子孫に該当するか否かを判定する(S504)。判定の結果、グループ追加対象のリポジトリが、所属リポジトリの先祖または子孫に該当する場合には(S504での判定結果が、肯定「Y」)、バックアップされたリポジトリが保管するデータの中に、現在リポジトリグループに属する所属リポジトリが保管するデータと同一のデータIDが付与されたデータが存在すると判断して、そのバックアップされたリポジトリをリポジトリグループに追加せずに、処理を終了する。
【0038】
一方、判定の結果、グループ追加対象のリポジトリが、所属リポジトリの先祖または子孫に該当しない場合には(S504での判定結果が、否定「N」)、リポジトリ管理部30は、バックアップデータをリカバリする(S506)。次いで、リポジトリ管理部30は、リカバリしたバックアップデータをリポジトリグループに新たなリポジトリとして追加する(S508)。
【0039】
このように、第1の変形例では、リポジトリ管理部30は、バックアップされたリポジトリをリポジトリグループに追加する要求をユーザから受けた場合、グループ追加対象のリポジトリが、所属リポジトリの先祖または子孫に該当するかどうかを判定して、先祖または子孫に該当しない場合に、バックアップされたリポジトリをリポジトリグループに追加する。これにより、リポジトリの分割および統合が行われた後に、バックアップされたリポジトリをリポジトリグループに追加されることが原因で、リポジトリグループ内においてデータIDの一意性が崩れることを防止することができる。
【0040】
ここで、S504の判定において、グループ追加対象のリポジトリが、所属リポジトリの先祖または子孫に該当する場合としない場合の具体例について説明する。
【0041】
まず、図13Aは、グループ追加対象のリポジトリが、所属リポジトリの先祖に該当する場合の例を示す。
【0042】
(A−1)は、次のようなリポジトリ間の派生関係を示している。まず、リポジトリ[A]がバックアップされた後、リポジトリ[B]とリポジトリ[C]とに分割されたこを示す。さらに、リポジトリ[C]がリポジトリ[D],リポジトリ[E]とに分割されたことを示す。そして、(A−2)は、(A−1)の派生関係を持つリポジトリグループにおいて、破損等が原因によりリポジトリ[B]がリポジトリグループから除外されたことを示している。(A−2)の派生関係を持つリポジトリグループにおいて、バックアップされたリポジトリ[A]をリポジトリグループに追加しようとする。この場合、リポジトリ[A]は、所属リポジトリであるリポジトリ[D],リポジトリ[E]の先祖に該当する。よって、リポジトリ管理部30は、バックアップされたリポジトリ[A]をリポジトリグループに追加せずに、処理を終了する。
【0043】
続いて、図13Bは、グループ追加対象のリポジトリが、所属リポジトリの子孫に該当する場合の例を示す。
【0044】
(B−1)は、次のようなリポジトリ間の派生関係を示している。まず、リポジトリ[A]がバックアップされた後、リポジトリ[B]とリポジトリ[C]とに分割されたことを示す。さらに、リポジトリ[C]はバックアップされた後に、リポジトリ[D],リポジトリ[E]とに分割されたことを示す。(B−2)は、(B−1)の派生関係を持つリポジトリグループにおいて、破損等が原因によりリポジトリ[B],リポジトリ[D],リポジトリ[E]がリポジトリグループから除外された後に、バックアップされたリポジトリ[A]をリポジトリ[T]としてリポジトリグループに追加された場合のリポジトリ間の派生関係を示している。(B−2)の派生関係を持つリポジトリグループにおいて、バックアップされたリポジトリ[C]をさらにリポジトリグループに追加しようとする。この場合、リポジトリ[C]は、所属リポジトリであるリポジトリ[T]の子孫に該当する。よって、リポジトリ管理部30は、バックアップされたリポジトリ[C]をリポジトリグループに追加せずに、処理を終了する。
【0045】
一方、図13Cは、グループ追加対象のリポジトリが、所属リポジトリの先祖および子孫に該当しない場合の例を示す。
【0046】
(C−1)は、次のような分割及び統合が行われた場合のリポジトリ間の派生関係を示している。まず、リポジトリ[A]がリポジトリ[B]とリポジトリ[C]とに分割された後、リポジトリ[C]がリポジトリ[D]とリポジトリ[E]とに分割されたことを示す。さらに、リポジトリ[B]がバックアップされた後に、リポジトリ[B]とリポジトリ[D]とが統合され、リポジトリ[G]がリポジトリグループに追加されたことを示す。(C−2)は、(C−1)の派生関係を持つリポジトリグループにおいて、破損等が原因によりリポジトリ[G]がリポジトリグループから除外されたことを示している。(C−2)の派生関係を持つリポジトリグループにおいて、バックアップされたリポジトリ[B]をリポジトリグループに追加しようとする。この場合、リポジトリ[B]は、所属リポジトリであるリポジトリ[E]の先祖にも子孫にも該当しない。よって、リポジトリ管理部30は、バックアップされたリポジトリ[B]をリポジトリグループに追加することができる。
【0047】
バックアップされたリポジトリが、所属リポジトリの先祖または子孫に該当する場合、バックアップされたリポジトリをリポジトリグループに追加すると、現在リポジトリグループに含まれる所属リポジトリとバックアップされたリポジトリとの間でデータIDの重複が生じる場合がある。そのため、第1の変形例では、バックアップされたリポジトリが、所属リポジトリの先祖または子孫に該当する場合は、バックアップされたリポジトリをリポジトリグループに追加することを禁止する。これにより、リポジトリの分割および統合が行われた後に、バックアップされたリポジトリをリポジトリグループに追加されることが原因で、リポジトリグループ内においてデータIDの一意性が崩れることを防止することができる。
【0048】
続いて、本実施形態の第2の変形例について説明する。第2の変形例では、所属リポジトリ間でデータの移動が行われた場合でも、バックアップされたリポジトリをリポジトリグループに追加されることが原因で、リポジトリグループ内においてデータIDの一意性が崩れることを防止する。なお、データの移動とは、データとデータIDとを対にして、それらをある所属リポジトリから別の所属リポジトリへ移動させることをいう。この場合、移動元の所属リポジトリからは、移動対象となったデータおよびデータIDは消失する。
【0049】
ここで、データを移動した後に、バックアップされたリポジトリをリポジトリグループに追加した場合に、データIDの一意性が崩れるケースについて、図14を用いて説明する。
【0050】
図14では、リポジトリグループにリポジトリ[A]とリポジトリ[B]とが存在する場合を想定する。まず、リポジトリ[A]をバックアップした後(S600)、リポジトリ[A]からデータID[a]が付与されたデータをリポジトリ[B]へ移動する(S602)。その後、リポジトリ[A]が破損したため(S604)、バックアップされたリポジトリ[A]をリストアして、リポジトリ[C]として新たにリポジトリグループに追加したとする(S606)。すると、この場合、移動されたデータのデータID[a]が、リポジトリ[B]とリポジトリ[C]との間で重複してしまう。このように、所属リポジトリ間でデータの移動が行われていた場合、バックアップされたリポジトリをリポジトリグループに追加することにより、リポジトリグループ内においてデータIDの一意性が崩れる場合がある。
【0051】
上記のようなデータIDの一意性の崩れを防止するために、リポジトリ管理部30が、バックアップされたリポジトリをリポジトリグループに追加する前に、次のような処理を行うことが考えられる。すなわち、リポジトリ管理部30が、バックアップされたリポジトリに保管されているデータのデータIDの中に、現在の所属リポジトリが保管するデータのデータIDと一致するデータIDが存在するか否かを判定する。そして、判定の結果、一致するデータIDが存在する場合には、リポジトリ管理部30は、バックアップされたリポジトリをリポジトリグループに追加しない。もしくは、リポジトリ管理部30は、データIDが一致したデータを除いて、バックアップされたリポジトリをリポジトリグループに追加する。このような処理を行うことにより、データIDの一意性の崩れを防止することができる。しかし、上記のような処理では、リポジトリグループに存在する所属リポジトリの保管するデータが大量に存在する場合、データIDが一致するデータを検索するのに時間がかかり、リポジトリ管理部30が、バックアップデータをリカバリして、リポジトリグループに追加するまでの時間が非常にかかってしまう場合がある。
【0052】
そこで、第2の変形例では、バックアップされたリポジトリをリカバリして、リポジトリグループに追加する要求をユーザから受けた場合、リポジトリ管理部30は、以下に示す手順に基づいて、バックアップされたリポジトリをリポジトリグループに追加するか否かを判定する。
【0053】
図15は、第2の変形例におけるリポジトリ管理部30の機能ブロックを示す図である。図15において、図2と同一のブロックについては同一符号を付してある。上記の実施形態におけるデータサーバ10との違いは、移動処理部40と移動情報保持部42とを備える点である。
【0054】
移動処理部40は、上述した所属リポジトリ間のデータの移動を行う。移動情報保持部42は、移動処理部40が行った際の移動情報を保持する。移動情報とは、図16に示すように、移動元のリポジトリID102と移動先リポジトリID104と移動対象データID106とを関連づけた情報である。リポジトリ管理部30は、この移動情報を参照することで、どのリポジトリからどのデータがそのリポジトリへ移動したのかを把握することができる。
【0055】
ここで、第2の変形例におけるリポジトリ管理部30が、バックアップされたリポジトリをリポジトリグループに追加する要求をユーザから受けた場合の処理手順について、図17に示すフローチャートを用いて説明する。
【0056】
まず、リポジトリ管理部30は、グループ追加対象となるリポジトリのバックアップデータに付与されたリポジトリIDを取得する(S700)。さらに、リポジトリ管理部30は、移動情報保持部42が保持する移動情報を取得する(S702)。次いで、リポジトリ管理部30は、移動情報を参照することで、グループ追加対象となるリポジトリは、移動元リポジトリに該当するか否かを判定する(S704)。判定の結果、グループ追加対象となるリポジトリが移動元リポジトリに該当しない場合(S704での判定結果が、否定「N」)、リポジトリ管理部30は、バックアップデータをリカバリする(S706)。次いで、リポジトリ管理部30は、リカバリしたバックアップデータをリポジトリグループに新たなリポジトリとして追加する(S708)。
【0057】
一方、判定の結果、グループ追加対象となるリポジトリが移動元リポジトリに該当する場合(S704での判定結果が、肯定「Y」)、バックアップされたリポジトリが保管するデータの中に、現在リポジトリグループに属する所属リポジトリが保管するデータと同一のデータIDが付与されたデータが存在すると判断して、そのバックアップされたリポジトリをリポジトリグループに追加せずに、処理を終了する。
【0058】
このように、第2の変形例では、リポジトリ管理部30は、バックアップされたリポジトリがデータの移動元となるリポジトリに該当する場合には、そのバックアップされたリポジトリをリポジトリグループに追加しない。これにより、所属リポジトリ間でデータの移動が行われていた場合に、バックアップされたリポジトリをリポジトリグループに追加したことが原因で、リポジトリグループ内においてデータIDの一意性が崩れることを防止することができる。
【0059】
なお、第2の変形例では、グループ追加対象のバックアップデータがデータの移動元となるリポジトリに該当する場合には、そのバックアップデータをリポジトリグループに追加しない例について説明した。しかし、バックアップデータに含まれる移動データを削除した後に、そのバックアップデータをリポジトリグループに追加してもよい。そこで、本実施形態の第3の変形例として、移動データを削除する場合を説明する。
【0060】
図18は、第3の変形例において、バックアップされたリポジトリをリポジトリグループに追加する要求をユーザから受けた場合のリポジトリ管理部30の処理手順を示すフローチャートである。図18において、図17と同一の処理については同一符号を付してある。
【0061】
図18において、バックアップデータがデータの移動元となるリポジトリに該当する場合には(S704での判定結果が、肯定「Y」)、リポジトリ管理部30は、そのバックアップデータから移動対象データを削除した後(S705)、バックアップデータのリカバリ及びリポジトリグループの追加を行う(S706,S708)。
【0062】
以上、実施形態および各変形例によれば、リポジトリ管理部30が、バックアップされたリポジトリをリカバリして、リポジトリグループに追加することが原因で、リポジトリグループ内においてデータIDの一意性が崩れることを防止することができる。
【0063】
なお、リポジトリ管理部30は、バックアップされたリポジトリをリカバリして、リポジトリグループに追加する要求をユーザから受けた場合、上記の実施形態および各変形例において説明した各判定をすべて満たす場合に、バックアップされたリポジトリをリポジトリグループに追加してもよい。
【0064】
つまり、以下の3つの条件を満たす場合に、リポジトリ管理部30は、バックアップされたリポジトリをリポジトリグループに追加することを許可する。
(1)バックアップデータのリポジトリに付与されたリポジトリIDと同一のリポジトリIDを付与された所属リポジトリが存在しない。
(2)バックアップされたリポジトリが、所属リポジトリの先祖または子孫に該当しない。
(3)バックアップされたリポジトリがデータの移動元となるリポジトリに該当しない。
【図面の簡単な説明】
【0065】
【図1】実施形態におけるデータ管理システムのシステム構成を示す図である。
【図2】実施形態におけるデータサーバの機能ブロックを示す図である。
【図3A】バックアップされたリポジトリをリカバリして、新たにリポジトリグループに追加した場合に、リポジトリグループ内において、データIDの一意性が崩れるケースを説明するための図である。
【図3B】バックアップされたリポジトリをリポジトリグループに追加した場合に、リポジトリグループ内において、データIDの一意性が崩れるケースを説明するための図である。
【図4】実施形態において、バックアップされたリポジトリをリポジトリグループに追加する要求をユーザから受けた場合のリポジトリ管理部の処理手順を示すフローチャートである。
【図5】リポジトリの分割について説明するための図である。
【図6】リポジトリの統合について説明するための図である。
【図7A】バックアップされたリポジトリをリポジトリの分割後にリポジトリグループに追加した場合に、リポジトリグループ内においてデータIDの一意性が崩れるケースを説明するための図である。
【図7B】バックアップされたリポジトリをリポジトリの分割後にリポジトリグループに追加した場合に、リポジトリグループ内においてデータIDの一意性が崩れるケースを説明するための図である。
【図8】第1の変形例におけるデータサーバの機能ブロックを示す図である。
【図9】リポジトリの分割および統合によって生じるリポジトリ間の派生関係を示すイメージ図である。
【図10】リポジトリの分割時におけるリポジトリ管理部の処理手順を示すフローチャートである。
【図11】リポジトリの統合時におけるリポジトリ管理部の処理手順を示すフローチャートである。
【図12】第1の変形例において、バックアップされたリポジトリをリポジトリグループに追加する要求をユーザから受けた場合のリポジトリ管理部の処理手順を示すフローチャートである。
【図13A】グループ追加対象のリポジトリが、所属リポジトリの先祖に該当する場合の例を説明するための図である。
【図13B】グループ追加対象のリポジトリが、所属リポジトリの子孫に該当する場合の例を説明するための図である。
【図13C】グループ追加対象のリポジトリが、所属リポジトリの先祖もしくは子孫のいずれにも該当しない場合の例を説明するための図である。
【図14】バックアップされたリポジトリを、リポジトリ間でデータ移動が行われた後に、リポジトリグループに追加した場合に、リポジトリグループ内においてデータIDの一意性が崩れるケースを説明するための図である。
【図15】第2の変形例におけるデータサーバの機能ブロックを示す図である。
【図16】移動情報保持部が保持する移動情報のデータ構造を示す図である。
【図17】第2の変形例において、バックアップされたリポジトリをリポジトリグループに追加する要求をユーザから受けた場合のリポジトリ管理部の処理手順を示すフローチャートである。
【図18】第3の変形例において、バックアップされたリポジトリをリポジトリグループに追加する要求をユーザから受けた場合のリポジトリ管理部の処理手順を示すフローチャートである。
【符号の説明】
【0066】
10 データサーバ、12 リポジトリ、14 データ格納部、20 ID生成部、28 派生関係保持部、30 リポジトリ管理部、32 グループ編成部、34 所属リポジトリID保持部、36 バックアップ・リカバリ処理部、38 分割統合処理部、40 移動処理部、42 移動情報保持部、50 クライアント、60 ネットワーク、80 リポジトリグループ。

【特許請求の範囲】
【請求項1】
一意なデータIDが付与された少なくとも1つのデータを保管する複数のリポジトリをそれぞれ一意なリポジトリIDと対応付けて、1つのリポジトリグループとして構成し、
バックアップされたリポジトリを前記リポジトリグループに追加する要求を受けた場合、前記バックアップされたリポジトリのリポジトリIDが、前記リポジトリグループに含まれる各リポジトリに付与されている各リポジトリIDのいずれとも一致しないかを判定し、
判定の結果、前記リポジトリグループに含まれるリポジトリに付与されているリポジトリIDの中に前記バックアップされたリポジトリIDと一致するリポジトリIDが存在しない場合に、前記バックアップされたリポジトリを前記リポジトリグループに追加する、
ようにコンピュータを機能させるためのプログラム。
【請求項2】
一意なデータIDが付与された少なくとも1つのデータを保管する複数のリポジトリをそれぞれ一意なリポジトリIDと対応付けて、1つのリポジトリグループとして構成し、
リポジトリの分割もしくは統合により生じるリポジトリID間の派生関係を示す情報を生成し、
バックアップされたリポジトリを前記リポジトリグループに追加する要求を受けた場合、前記派生関係を示す情報を参照して、前記バックアップされたリポジトリが前記リポジトリグループに含まれる各リポジトリの前記派生関係における先祖もしくは子孫に該当しないかを判定し、
判定の結果、前記バックアップされたリポジトリが前記リポジトリグループに含まれる各リポジトリの先祖もしくは子孫に該当しない場合に、前記バックアップされたリポジトリを前記リポジトリグループに追加する、
ようにコンピュータを機能させるためのプログラム。
【請求項3】
一意なデータIDが付与された少なくとも1つのデータを保管する複数のリポジトリをそれぞれ一意なリポジトリIDと対応付けて、1つのリポジトリグループとして構成し、
あるリポジトリに保管されているデータが別のリポジトリに移動した場合に、移動元のリポジトリに付与されたリポジトリIDと、移動したデータに付与されたデータIDと、移動先のリポジトリに付与されたリポジトリIDとを関連づけた移動情報を生成し、
バックアップされたリポジトリを前記リポジトリグループに追加する要求を受けた場合、前記移動情報を参照して、前記バックアップされたリポジトリに保管されているデータ群の中に、前記リポジトリグループに含まれるリポジトリに移動されたデータが存在しないかを判定し、
判定の結果、前記バックアップされたリポジトリに保管されているデータ群の中に、前記リポジトリグループに含まれるリポジトリに移動されたデータが存在しない場合、前記バックアップされたリポジトリを前記リポジトリグループに追加する、
ようにコンピュータを機能させるためのプログラム。
【請求項4】
請求項3に記載のプログラムにおいて、
判定の結果、前記バックアップされたリポジトリに保管されているデータ群の中に、前記リポジトリグループに含まれるリポジトリに移動されたデータが存在する場合、そのデータを除いて前記バックアップされたリポジトリを前記リポジトリグループに追加する、
ようにコンピュータを機能させるためのプログラム。
【請求項5】
一意なデータIDが付与された少なくとも1つのデータを保管する複数のリポジトリをそれぞれ一意なリポジトリIDと対応付けて、1つのリポジトリグループとして構成するグループ構成部と、
バックアップされたリポジトリを前記リポジトリグループに追加する要求を受けた場合、前記バックアップされたリポジトリのリポジトリIDが、前記リポジトリグループに含まれる各リポジトリに付与されている各リポジトリIDのいずれかとも一致しないかを判定するID判定部と、
判定の結果、前記リポジトリグループに含まれるリポジトリに付与されているリポジトリIDの中に前記バックアップされたリポジトリIDと一致するリポジトリIDが存在しない場合に、前記バックアップされたリポジトリを前記リポジトリグループに追加するグループ追加部とを、
を備えるデータサーバ。
【請求項6】
一意なデータIDが付与された少なくとも1つのデータを保管する複数のリポジトリをそれぞれ一意なリポジトリIDと対応付けて、1つのリポジトリグループとして構成するグループ構成部と、
リポジトリの分割もしくは統合により生じるリポジトリID間の派生関係を示す情報を生成する派生関係情報生成部と、
バックアップされたリポジトリを前記リポジトリグループに追加する要求を受けた場合、前記派生関係を示す情報を参照して、前記バックアップされたリポジトリが前記リポジトリグループに含まれる各リポジトリの前記派生関係における先祖もしくは子孫に該当しないかを判定する派生関係判定部と、
判定の結果、前記バックアップされたリポジトリが前記リポジトリグループに含まれる各リポジトリの先祖もしくは子孫に該当しない場合に、前記バックアップされたリポジトリを前記リポジトリグループに追加するグループ追加部と、
を備えるデータサーバ。
【請求項7】
一意なデータIDが付与された少なくとも1つのデータを保管する複数のリポジトリをそれぞれ一意なリポジトリIDと対応付けて、1つのリポジトリグループとして構成するグループ構成部と、
あるリポジトリに保管されているデータが別のリポジトリに移動した場合に、移動元のリポジトリに付与されたリポジトリIDと、移動したデータに付与されたデータIDと、移動先のリポジトリに付与されたリポジトリIDとを関連づけた移動情報を生成する移動情報生成部と、
バックアップされたリポジトリを前記リポジトリグループに追加する要求を受けた場合、前記移動情報を参照して、前記バックアップされたリポジトリに保管されているデータ群の中に、前記リポジトリグループに含まれるリポジトリに移動されたデータが存在しないかを判定する移動判定部と、
判定の結果、前記バックアップされたリポジトリに保管されているデータ群の中に、前記リポジトリグループに含まれるリポジトリに移動されたデータが存在しない場合、前記バックアップされたリポジトリを前記リポジトリグループに追加するグループ追加部と、
を備えるデータサーバ。
【請求項8】
一意なデータIDが付与された少なくとも1つのデータを保管する複数のリポジトリをそれぞれ一意なリポジトリIDと対応付けて、1つのリポジトリグループとして構成し、
バックアップされたリポジトリを前記リポジトリグループに追加する要求を受けた場合、前記バックアップされたリポジトリのリポジトリIDが、前記リポジトリグループに含まれる各リポジトリに付与されている各リポジトリIDのいずれかとも一致しないかを判定し、
判定の結果、前記リポジトリグループに含まれるリポジトリに付与されているリポジトリIDの中に前記バックアップされたリポジトリIDと一致するリポジトリIDが存在しない場合に、前記バックアップされたリポジトリを前記リポジトリグループに追加する、
ことを特徴とするバックアップされたリポジトリをリポジトリグループに追加するためのリポジトリ追加方法。
【請求項9】
一意なデータIDが付与された少なくとも1つのデータを保管する複数のリポジトリをそれぞれ一意なリポジトリIDと対応付けて、1つのリポジトリグループとして構成し、
リポジトリの分割もしくは統合により生じるリポジトリID間の派生関係を示す情報を生成し、
バックアップされたリポジトリを前記リポジトリグループに追加する要求を受けた場合、前記派生関係を示す情報を参照して、前記バックアップされたリポジトリが前記リポジトリグループに含まれる各リポジトリの前記派生関係における先祖もしくは子孫に該当しないかを判定し、
判定の結果、前記バックアップされたリポジトリが前記リポジトリグループに含まれる各リポジトリの先祖もしくは子孫に該当しない場合に、前記バックアップされたリポジトリを前記リポジトリグループに追加する、
ことを特徴とするバックアップされたリポジトリをリポジトリグループに追加するためのリポジトリ追加方法。
【請求項10】
一意なデータIDが付与された少なくとも1つのデータを保管する複数のリポジトリをそれぞれ一意なリポジトリIDと対応付けて、1つのリポジトリグループとして構成し、
あるリポジトリに保管されているデータが別のリポジトリに移動した場合に、移動元のリポジトリに付与されたリポジトリIDと、移動したデータに付与されたデータIDと、移動先のリポジトリに付与されたリポジトリIDとを関連づけた移動情報を生成し、
バックアップされたリポジトリを前記リポジトリグループに追加する要求を受けた場合、前記移動情報を参照して、前記バックアップされたリポジトリに保管されているデータ群の中に、前記リポジトリグループに含まれるリポジトリに移動されたデータが存在しないかを判定し、
判定の結果、前記バックアップされたリポジトリに保管されているデータ群の中に、前記リポジトリグループに含まれるリポジトリに移動されたデータが存在しない場合、前記バックアップされたリポジトリを前記リポジトリグループに追加する、
ことを特徴とするバックアップされたリポジトリをリポジトリグループに追加するためのリポジトリ追加方法。

【図1】
image rotate

【図2】
image rotate

【図3A】
image rotate

【図3B】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7A】
image rotate

【図7B】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13A】
image rotate

【図13B】
image rotate

【図13C】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate


【公開番号】特開2007−86854(P2007−86854A)
【公開日】平成19年4月5日(2007.4.5)
【国際特許分類】
【出願番号】特願2005−271544(P2005−271544)
【出願日】平成17年9月20日(2005.9.20)
【出願人】(000005496)富士ゼロックス株式会社 (21,908)
【Fターム(参考)】