以下、本発明の実施形態を図面に基づいて説明する。なお、以下に説明する実施の形態は、コンテンツ分散保存システムに本発明を適用した場合の実施形態である。
[1.コンテンツ分散保存システムの構成及び動作概要]
始めに、図1等を参照して、本実施形態に係るコンテンツ分散保存システムの構成及び動作概要について説明する。
図1は、本実施形態に係るコンテンツ分散保存システムSにおける各ノード装置の接続態様の一例を示す図である。
図1の下部枠101内に示すように、分散保存システムSは、複数のノード装置Nnがインターネットを介して接続されることで構成される。また、図1の下部枠101内に示すように、IX(Internet eXchange)3、ISP(Internet Service Provider)4a,4b、DSL(Digital Subscriber Line)回線事業者の装置5a,5b、FTTH(Fiber To The Home)回線事業者の装置6、及び通信回線7等によって、インターネット等のネットワーク8が構築されている。ネットワーク8は、現実世界の通信ネットワークである。なお、図1の例におけるネットワーク8には、データパケットを転送するためのルータが適宜挿入されているが、図1では図示を省略している。なお、通信回線7としては、例えば、電話回線や光ケーブル等が用いられる。
このようなネットワーク8には、複数のノード装置Nn(n=1,2,3・・・の何れか)が接続されている。以下、ノード装置は、「ノード」という。また、各ノードNnには、固有の製造番号及びIP(Internet Protocol)アドレスが割り当てられている。そして、本実施形態に係るコンテンツ分散保存システムSは、これらのノードNnのうち、図1の上部枠100内に示すように、何れか複数のノードNnの接続により形成されるピアツーピア方式のネットワークシステムとなっている。
なお、図1の上部枠100内に示すネットワーク9は、既存のネットワーク8を用いて形成された仮想的なリンクを構成するオーバーレイネットワーク9である。論理的なネットワークであるオーバーレイネットワーク9は、特定のアルゴリズム、例えば、DHTを利用したアルゴリズムにより実現される。そして、コンテンツ分散保存システムSに接続されている各ノードNnには、所定桁数からなる固有の識別情報であるノードIDが割り当てられている。
また、ノードIDは、例えば、各ノードNnに個別に割り当てられたIPアドレス或いは製造番号を共通のハッシュ関数によりハッシュ化した値である。ノードIDは、ID空間に偏りなく分散して配置されることになる。ハッシュ関数としては、例えば、SHA−1等が用いられる。また、ハッシュ化した値は、例えば、bit長が160bitとなる。そして、このノードIDは、ID空間に偏りなく分散して配置されることになる。
なお、コンテンツ分散保存システムSへの接続は、接続していないノードNn、例えば、ノードN8が、接続している任意のノードNnに対してコンテンツ分散保存システムへの参加要求を示す参加メッセージを送信することによって行われる。コンテンツ分散保存システムSへの参加とは、ノード装置Nnが分散保存システムSに接続され、分散保存システムSからコンテンツデータを取得可能になることである。任意のノードNnは、例えば、システムSに常時接続しているコンタクトノードである。
また、各ノードNnは、夫々、DHTを用いたルーティングテーブルを保持している。このルーティングテーブルは、コンテンツ分散保存システムS上における各種メッセージの転送先を規定している。具体的に、このルーティングテーブルには、ID空間内で適度に離れたノードNnのノードID、IPアドレス及びポート番号を含むノード情報が複数登録されている。
コンテンツ分散保存システムSに接続している1台のノードは、必要最低限のノードNnのノード情報をルーティングテーブルとして記憶している。各ノードNn間で互いに各種メッセージが転送されることで、ノード情報を記憶していないノードNnについてのノード情報が取得される。
このようなDHTを用いたルーティングテーブルについては、特開2006−197400号公報等で公知であるので、詳しい説明を省略する。
コンテンツ分散保存システムSは、内容の異なる様々なコンテンツデータのレプリカを所定のファイル形式で複数のノードNnに分散して保存する。以下、コンテンツデータは、「コンテンツ」という。そして、各ノードNn間でレプリカが利用可能になっている。各コンテンツのオリジナルはセンターサーバSAに保存されている。例えば、ノードN5には、タイトルがXXXの映画のコンテンツのレプリカが保存されている。一方、ノードN3には、タイトルがYYYの映画のコンテンツのレプリカが保存される。このように、複数のノードNnに分散されて保存されている。以下、コンテンツのレプリカが保存されるノードNは、「コンテンツ保持ノード」という。
上述のコンテンツのレプリカには、夫々、コンテンツ名及びコンテンツ毎に固有の識別情報であるコンテンツID等の情報が付加されている。このコンテンツIDは、例えば、コンテンツ名+任意の数値が、上記ノードIDを得るときと共通のハッシュ関数によりハッシュ化されて生成される。或いは、システム管理者が、コンテンツ毎に一意のID値を付与しても良い。
分散保存されているコンテンツのレプリカの所在は、インデックス情報として、コンテンツのレプリカの所在を管理(記憶)しているノードNn等により記憶される。以下、レプリカの所在を管理(記憶)しているノードNnは、「ルートノード」という。インデックス情報は、レプリカを保存したノードNnのノード情報と、コンテンツのコンテンツIDと等の組を含む。このようなルートノードは、例えば、コンテンツIDと最も近いノードIDを有するノードNnであるように定められる。コンテンツIDと最も近いノードIDとは、例えば、IDの上位桁が最も多く一致するノードIDである。
例えば、タイトルがXXXの映画のコンテンツのレプリカについてのインデックス情報は、そのコンテンツのルートノードであるノードN4により管理される。また、例えば、タイトルがYYYの映画のコンテンツのレプリカについてのインデックス情報は、そのコンテンツのルートノードであるノードN7により管理される。また、このようなルートノードは、例えば、コンテンツIDと最も近いノードIDを有するノードNnであるように定められる。コンテンツIDと最も近いノードIDとは、例えば、コンテンツIDと上位桁がより多く一致するノードIDである。
そして、あるノードNnのユーザが、所望するコンテンツのレプリカを取得したい場合、このレプリカの取得を望むノードNnは、メッセージを生成する。以下、ユーザによりレプリカの取得を望むノードNnは、「ユーザノード」という。このメッセージは、取得を望むコンテンツのコンテンツID及びユーザノードのIPアドレス等を含むコンテンツ所在問合せメッセージである。コンテンツ所在問合せメッセージは、コンテンツ保持ノードを検索するためのメッセージでもある。上述のコンテンツ所在問合せメッセージが、ユーザノードが取得するDHTのルーティングテーブルに従って、他のノードNnに対して送出される。つまり、ユーザノードは、コンテンツ所在問合せメッセージを、ルートノードに向けて送出する。これにより、コンテンツ所在問合せメッセージは、コンテンツIDをキーとするDHTルーティングによって最終的にルートノードに到着することになる。
各ノードNnにおいて、コンテンツのコンテンツ名及びコンテンツID等の属性情報は、コンテンツカタログ情報に記述されている。コンテンツカタログ情報は、センターサーバSAにより作成されて、後述するページ情報単位で全てのノードNnに配信される。このコンテンツカタログ情報の構造、内容及び作成方法等についての詳細は後述する。
また、上記コンテンツ所在問合せメッセージに含まれるコンテンツIDは、ユーザノードによって、コンテンツ名が上記共通のハッシュ関数によりハッシュ化されて生成されるようにしても良い。なお、DHTルーティングについては、特開2006−197400号公報等で公知であるので、詳しい説明を省略する。
上記コンテンツ所在問合せメッセージを受信したルートノードは、これに含まれるコンテンツIDに対応するインデックス情報をインデックス情報キャッシュから取得する。取得されたインデックス情報は、コンテンツ所在問合せメッセージの送信元であるユーザノードに対して返信される。こうしてインデックス情報を取得したユーザノードは、インデックス情報に基づいてコンテンツのレプリカをダウンロード(取得)することができる。インデックス情報に含まれるコンテンツ保持ノードのIPアドレス等に基づいて、ユーザノードはコンテンツ保持ノードにアクセスする。アクセスしたコンテンツ保持ノードから、コンテンツのレプリカをダウンロードすることが可能になる。この場合、ユーザノードは、この複数のコンテンツ保持ノードのうち一つのコンテンツ保持ノードを選択する。そして、ユーザノードは、選択したコンテンツ保持ノードに接続してコンテンツのレプリカをダウンロードすることができる。
なお、ルートノードは、このインデックス情報に含まれるIPアドレス等に示されたコンテンツ保持ノードに対してコンテンツ送信要求メッセージを送信し、これにより、ユーザノードは、上記コンテンツ保持ノードからそのレプリカをダウンロードすることもできる。また、上記ユーザノードは、コンテンツ所在問合せメッセージがルートノードに辿り着くまでの間に、このルートノードと同じインデックス情報をキャッシュしているキャッシュノードからこのインデックス情報を取得することもできる。
また、ユーザノードは、コンテンツ保持ノードからコンテンツのレプリカを取得して保存したとき、保存したユーザノードは、パブリッシュメッセージを生成する。パブリッシュメッセージは、レプリカを保存したことをルートノードへ知らせるためのメッセージである。パブリッシュメッセージは、レプリカのコンテンツID及びレプリカを保存したノード装置のノード情報を含む。パブリッシュメッセージは、ルートノードに向けて送出される。これにより、パブリッシュメッセージは、コンテンツ所在問合せメッセージと同じように、コンテンツIDをキーとするDHTルーティングによってルートノードに到着することになる。そして、ルートノードは、パブリッシュメッセージを受信する。ルートノードは、パブリッシュメッセージに含まれるノード情報及びコンテンツIDの組を含むインデックス情報をインデックス情報キャッシュ領域に記憶する。こうして、上記ユーザノードは、新たに、上記コンテンツのレプリカを保持するコンテンツ保持ノードとなる。
[2.コンテンツカタログ情報の構造及び内容等]
次に、コンテンツカタログ情報の構造及び内容等について、図2を用いて説明する。
図2は、本実施形態に係るコンテンツカタログ情報の構造の一例を示す図である。なお、コンテンツカタログ情報のことを、今後単にカタログ情報という。
カタログ情報は、コンテンツの属性情報を一覧として管理するための情報である。この属性情報の内容はレコードに格納される。また、カタログ情報は、検索キーから一意にコンテンツを特定することができる情報である。コンテンツを特定することができるとは、コンテンツのレコードを探し出すことができることを意味する。検索キーとしては、例えば、対応するレコードやコンテンツ名を共通のハッシュ関数によりハッシュ化した値が用いられる。或いは、検索キーは、コンテンツIDやコンテンツ名等であっても良い。この検索キーはインデックス情報の一例である。
本実施形態において用いられるカタログ情報は、コンテンツの属性情報の改竄を防止するため、及び、コンテンツの検索を効率的に行うため、図2に示す探索木の構造を有している。
図2に示すように、カタログ情報は、木構造における根に位置するルートページ情報から葉に位置する葉ページ情報にかけて、各ページ情報が関連付けられて構成されている。ルートページ情報は、根ページ情報の一例である。直接関連付けられているページ情報同士は、親子関係を形成している。或るページ情報Xに対してページ情報Yが関連付けられているとする。つまり、ページ情報Xとページ情報Yとで親子関係を形成している。ページ情報Xとページ情報Yとのうち、ページ情報Xの方がルートページ情報からの距離が短い場合、ページ情報Xは、ページ情報Yから見て親に位置する親のページ情報となる。そして、ページ情報Yは、ページ情報Xから見て子に位置する子のページ情報となる。ここで、ルートページ情報からの距離とは、木構造において、根の位置から注目する節点に辿るまでのリンク数に相当する長さである。換言すると、ルートページ情報からの距離とは、ルートページ情報から関連付けを辿って注目するページ情報に至るまでに、注目するページ情報を含めて通過するページ情報の数に相当する。なお、以降の説明においては、親のページ情報を親ページ情報といい、子のページ情報を子ページ情報という。
親ページ情報と子ページ情報との関連付けは、リンク情報に示される。リンク情報は、親ページ情報に格納される情報であり、子ページ情報を指す情報である。このリンク情報は、子ページ情報のページ番号と、子ページ情報の改竄をチェックするためのメッセージダイジェストとを含む。
ページ番号は、ページ情報に固有に割り当てられたシリアル番号である。リンク情報が指すページ情報というときは、リンク情報に含まれるページ番号が割り当てられているページ情報を意味する。また、詳細は後述するが、或るページ情報が更新される場合にはこのページ情報に対して新たなページ番号が割り当てられる。ここで、本実施形態におけるページ情報の更新とは、元のページ情報の内容が更新されたページ情報を、元のページ情報とは別個のページ情報として新たに作成することを意味する。実際、ページ番号は、例えば、ページ情報がRAMに格納される際の格納アドレスに対応したり、ページ情報の格納位置を示すポインタの格納アドレスであったりする。また、ページ情報がファイルとして保存される際には、ページ番号はファイル名に対応したりする。
メッセージダイジェストは、リンク情報が指す子ページ情報又はリンク情報が指す子ページ情報に格納されているレコードの改竄をチェックするための情報である。また、メッセージダイジェストは、改竄をチェックする対象を共通のハッシュ関数によりハッシュ化した値である。このメッセージダイジェストは改竄チェック情報の一例である。
カタログ情報は、更にルートリンク情報を有する(符号100)。ルートリンク情報には、ルートページ情報へのリンク情報が格納される(符号1001)。そして、このリンク情報は、ルートページ情報のページ番号(符号1002)及びメッセージダイジェスト(符号1003)を含む。また、ルートリンク情報には、電子署名が格納される(符号1004)。電子署名は、ルートリンク情報の改竄をチェックするための情報である。電子署名には、例えば、署名値、証明書情報等の情報が含まれている。
ページ情報は、大別して節ページ情報(符号200)と葉ページ情報(符号300)とがある。
節ページ情報は、一つ以上の子ページ情報を持つ。節ページ情報には、セルフリンク情報(符号2001)、子ページ情報へのリンク情報(符号2004)及びインデックス(符号2007)が格納される。セルフリンク情報は、このセルフリンク情報が格納されている節ページ情報自身へのリンク情報である。つまり、セルフリンク情報は、節ページ情報のページ番号(符号2002)及びメッセージダイジェスト(符号2003)を含む。よって、セルフリンク情報は、節ページ情報の親ページ情報に格納されているこの節ページ情報へのリンク情報と同一内容となる。
子ページ情報へのリンク情報は、子ページ情報のページ番号(符号2006)及びメッセージダイジェスト(符号2005)を含む。なお、節ページ情報において、単にリンク情報というときは、セルフリンク情報ではなく、子ページ情報へのリンク情報を意味するものとする。節ページ情報には、リンク情報を複数格納することができる。一つあたりの節ページ情報に格納可能なリンク情報の最大数は、カタログ情報の木構造としての次数に一致する。この次数は、一つの親が持ちうる子の最大数を意味する。つまり、次数は、n分探索木のnの値に該当する。
インデックスは、探索木の節点が持つ値、キー等と呼ばれている情報と同じ役割を持つ。このインデックスは、コンテンツのレコードが格納されているページ情報を、検索キーを用いて探索するための情報である。なお、図2に示すインデックスは、便宜上十進数で示されている。このインデックスは、インデックス情報及び担当領域情報の一例である。
カタログ情報の木構造は、順序性を有している。従って、節ページ情報に格納されているインデックスは、例えばその値の小さい順に配列されている。そして、リンク情報は、インデックスに対応した順序で配列されている。例えば、1番目のリンク情報は、1番目のインデックスの値以下の範囲インデックスが格納される子ページ情報への関連付けを示す。また例えば、2番目のリンク情報は、1番目のインデックスの値より大きく且つ2番目のインデックスの値以下の範囲のインデックスが格納される子ページ情報への関連付けを示す。或る節ページ情報に現在k個のリンク情報が格納されている場合、この節ページ情報にはk−1個のインデックスが格納されている。
葉ページ情報は、上述したように、探索木における葉に位置するページ情報である。つまり、葉ページ情報は、子ページ情報を持たない。葉ページ情報には、セルフリンク情報(符号3001)、レコード(符号3004)及びインデックス(符号3005)が格納される。セルフリンク情報は、このセルフリンク情報が格納されている葉ページ情報自身へのリンク情報である。つまり、セルフリンク情報は、葉ページ情報のページ番号(符号3002)及びメッセージダイジェスト(符号3003)を含む。よって、セルフリンク情報は、葉ページ情報の親ページ情報に格納されているこの葉ページ情報へのリンク情報と同一内容となる。
レコードとインデックスとは、一対一に対応付けられている。対応付けられているレコードとインデックスとの組は、葉ページ情報に1組又は複数組格納される。一つのレコードには、一つまたは複数のコンテンツの属性情報が設定される。例えば、レコードには、コンテンツID、コンテンツの公開開始日時、公開終了日時、コンテンツ名、キーワード等が設定される。インデックスは、対応するレコードを一意に特定するための情報である。葉ページ情報のインデックスとして用いられる情報の種類は、節ページ情報のインデックスとして用いられる情報の種類と同じである。このインデックスとして、コンテンツIDやコンテンツ名等が用いられる場合、この情報は、レコードの設定内容に含める必要はない。このインデックスは、インデックス情報の一例である。
以上説明した構成のカタログ情報を用いた場合に、コンテンツの検索を効率的に行える理由を説明する。登録されているコンテンツの個数がnである場合、逐次探索における探索の計算量は、最悪O(n)となる。一方、本実施形態に係るカタログ情報は、探索木の構造を有しているので、木が平衡した状態での探索の計算量は、周知のようにO(log n)となる。よってコンテンツの検索を効率的に行うことができる。
次に、コンテンツの属性情報の改竄を防止することができる理由を説明する。子ページ情報が改竄されているか否かはその親ページ情報に格納されているこの子ページ情報へのリンク情報により行われる。つまり、このリンク情報には、子ページ情報のメッセージダイジェストが含まれているので、このメッセージダイジェストで改竄チェックが行われる。このようにして、葉ページ情報からルートページ情報まで、子ページ情報の改竄有無は、その親ページ情報に格納されているリンク情報によってチェックされる。ルートページ情報の改竄有無は、ルートリンク情報によってチェックされる。
一般的に、メッセージダイジェストだけでは、改竄を確実に防止することはできないとされている。つまり、必要なハッシュ関数を入手することができれば、メッセージダイジェストを計算することができる。このハッシュ関数は、例えばノードNn側での改竄チェックのために公開される。悪意を持った者は、ページ情報の内容を改竄し、その改竄された内容でメッセージダイジェストを計算することができる。そして、このメッセージダイジェストを親ページのリンク情報に設定してしまえば、改竄されているか否かは分からない。
これに対し、本実施形態に係るカタログ情報は、ルートリンク情報に、その真正性を保証するための電子署名が付与されている。例えば電子署名に公開鍵方式を用いた場合には、電子署名に必要な秘密鍵を第三者に入手されなければ、ルートリンク情報の改竄をチェックすることができる。電子署名を用いた改竄チェックによりルートリンク情報が真正なものと判断されれば、ルートリンク情報に含まれるルートページ情報のメッセージダイジェストも真正なものと判断することができる。次に、この真正なメッセージダイジェストを用いた改竄チェックによりルートページ情報が真正なものと判断されれば、ルートページ情報に格納されているリンク情報に含まれる子ページ情報のメッセージダイジェストも真正なものと判断することができる。このようにして、ルートページ情報から葉ページ情報まで、親ページ情報に格納されているリンク情報のメッセージダイジェストにより子ページ情報の真正性が保証される。結果として、カタログ情報全体の改竄防止が可能となる。
本実施形態においては、上述したようにルートリンク情報に対してのみ電子署名を作成しているが、全てのページ情報に対して電子署名を作成することを排除するものではない。ただし、電子署名は、証明書情報等の情報を設定する等して作成されることで、一般的に電子署名の方がメッセージダイジェストよりもセキュリティが高められている。このセキュリティを高めるための暗号化や改竄チェック時の復号化等の処理による計算量が大きく、また、電子証明書情報等の電子署名に必要なデータ量も大きくなる。そのため、電子署名よりもメッセージダイジェストの方が、計算量及びページ情報のデータ量ともに節約することができる。一方、全てのページ情報に対して電子署名を作成する場合、ルートリンク情報は必須ではない。この場合、ルートページ情報に対する電子署名を保存しておけば良い。
カタログ情報の改竄としては、上述したページ情報の内容自体の改竄の他に、ページ情報を古いページ情報で置き換える改竄も存在する。つまり、コンテンツの追加や削除によって、ページ情報の内容が更新されるが、これを更新される前のページ情報で置き換えるのである。古いページ情報自体も真正なものである。従って、どのページ情報が最新のものであるかを区別することができるようになっている必要がある。
本実施形態に係るカタログ情報は、各ページ情報に対してページ番号が割り当てられている。このページ番号は、ページ情報間で同一のものが割り当てられることはない。更に、本実施形態においては、ページ情報を更新する際、ページ情報の内容を書き換えるのではない。本実施形態においては、元のページ情報とは別個に新たなページ情報を作成し、この新たなページ情報に対して、更新した内容を設定する。このとき、新しいページ情報には、元のページ情報のページ番号とは異なるページ番号が割り当てられる。具体的には、新しいページ情報が作成される都度、過去に作成された如何なるページ情報にも割り当てられていない最新のページ番号が割り当てられる。例えば、最後に割り当てられたページ番号が100である場合、次に新たに作成されるページ情報に割り当てられるページ番号は101となる。このページ番号は、親ページ情報に格納されるリンク情報内に設定される。従って、節ページ情報に格納されているリンク情報は、必ず最新の子ページ情報を指している。仮に、リンク情報のページ番号が古いページ番号に改竄された場合、それは、ページ情報の内容の改竄である。従って、前記の方法により改竄を発見することができる。
なお、本実施形態においては、ページ情報を更新する場合、上述したように新しいページ情報を作成しているが、ページ情報自体の内容を書き換えてもかまわない。
以上、図2を用いて説明したカタログ情報の構造は、あくまでも一例である。カタログ情報の構造としては、コンテンツのレコードを探索可能な木構造を有していれば、どのような構造であってもかまわない。
例えば、葉ページ情報だけでなく、節ページ情報中にレコードが格納されても良い。また、木構造の次数、つまり、一つの節ページ情報に格納可能なリンク情報の最大数は任意である。また、一つのページ情報に格納可能なレコードの最大数は1個でも複数個でも良い。更に、セルフリンク情報は、必須ではない。
また更に、節ページ情報のインデックスは必須ではない。例えば、トライ(trie)木の場合、節ページ情報のインデックスは不要である。つまり、トライ木では、木構造上におけるページ情報の位置がインデックスに対応し、検索キーのビットや文字等の値に従ってルートページ情報から葉ページ情報まで木が辿られる。例えば、ルートページ情報から葉ページ情報に向かって各節ページ情報に検索キーの最上位4ビットから4ビットずつを割り当てたとする。この場合、一つの節ページ情報に、16個のリンク情報を要素として格納する配列がある。そして例えば、検索キーが16進でF3405B9Cである場合、ルートページ情報に関しては、上位一桁目のFが、配列のインデックスとなる。つまり、ルートページ情報における配列の16番目に格納されているリンク情報が、次に参照すべき子ページ情報へのリンク情報となる。次に、ルートページ情報の子ページ情報に関しては、上位から2桁目の3が、配列のインデックスとなる。つまり、この子ページ情報における配列の4番目に格納されているリンク情報が、次に辿るべき子ページ情報へのリンク情報となる。こうして葉ページ情報に辿り着いたところで、検索キー全体とレコードのインデックスとが比較される。このようにして探索が行われる。
更にまた、葉ページ情報のインデックスも必須ではない。例えば、トライ木においては、インデックスの値が比較的離れているレコードをまとめることができる。例えば、インデックスが16進でF3405B9CのレコードとF34013A2のレコードがあるとする。この2つのインデックスの上位3桁の値は同じである。この場合、上位3桁の値がF34であるレコードが他に存在せず、且つ、一つの葉ページ情報がレコードを2つ以上格納可能であれば、この2つのレコードを同じ葉ページ情報に格納することができる。つまり、ルートページ情報から、F、3、4と辿って至る葉ページ情報に2つのレコードが格納される。この場合、葉ページ情報に、レコードのインデックスが必要である。一方、例えば、検索キーの上位7桁までは、必ず節ページ情報を作成するようにし、且つ、検索キーの最下位4桁目の値を葉ページ情報に割り当てるとする。この場合、葉ページ情報には、16個のレコードを要素として格納する配列がある。このとき、インデックスがF3405B9Cのレコードは、ルートページ情報から、F、3、4、0、5、B、9と辿って至る葉ページ情報における配列の10番目にレコードが格納される。この場合、葉ページ情報には、レコードのインデックスは不要である。
更に、具体例を示して説明する。ここでは、コンテンツのインデックスとして4進数4桁が用いられるものとする。この場合、各節ページには、4つのリンク情報を格納することができる。例えば、ルートページ情報は、インデックスの上位一桁の値が0、1、2及び3に対応するページ情報を夫々指すリンク情報を格納する配列がある。この場合、最上位の桁の値が0に対応する位置に、インデックスの上位一桁の値が0に対応するページ情報へのリンク情報が格納される。また、最上位の桁の値が1に対応する位置に、インデックスの上位一桁の値が1に対応するページ情報へのリンク情報が格納される。また、最上位の桁の値が2に対応する位置に、インデックスの上位一桁の値が2に対応するページ情報へのリンク情報が格納される。また、最上位の桁の値が3に対応する位置に、インデックスの上位一桁の値が3に対応するページ情報へのリンク情報が格納される。
次に、例えば、インデックスの上位一桁の値が1に対応するページ情報には、インデックスの上位二桁の値が10、11、12及び13に対応するページ情報を夫々指すリンク情報を格納する配列がある。この場合、最上位から2番目の桁の値が0に対応する位置に、インデックスの上位二桁の値が10に対応するページ情報へのリンク情報が格納される。また、最上位から2番目の桁の値が1に対応する位置に、インデックスの上位二桁の値が11に対応するページ情報へのリンク情報が格納される。また、最上位から2番目の桁の値が2に対応する位置に、インデックスの上位二桁の値が12に対応するページ情報へのリンク情報が格納される。また、最上位から2番目の桁の値が3に対応する位置に、インデックスの上位二桁の値が13に対応するページ情報へのリンク情報が格納される。
次に、例えば、インデックスの上位二桁の値が10に対応するページ情報には、インデックスの上位三桁の値が100、101、102及び103に対応するページ情報を夫々指すリンク情報を格納する配列がある。この場合、最上位から3番目の桁の値が0に対応する位置に、インデックスの上位三桁の値が100に対応するページ情報へのリンク情報が格納される。
次に、例えば、インデックスの上位三桁の値が102に対応するページ情報は、葉ページ情報となる。インデックスの上位三桁の値が102に対応するページ情報には、インデックスの値が1020、1021、1022及び1023である4つのレコードを格納する配列がある。この場合、最下位の桁の値が0に対応する位置に、インデックスが1020のレコードが格納される。
また、木の種類としては、例えばB木、B+木、赤黒木等の平衡木であっても良いし、平衡性のない単純なn分探索木であっても良い。
[3.コンテンツカタログ情報に対するレコードの追加、削除及び検索]
次に、カタログ情報へのレコードの追加、カタログ情報からのレコードの削除、及び、レコードの検索方法について、図3乃至図6を用いて説明する。
レコードの追加又は削除を行う場合には、カタログ情報の更新、つまり、ページ情報の更新が必要となる。このとき、本実施形態におけるページ情報の更新の原則は以下の通りである。
(1)ページ情報を追加するときは勿論のこと、ページ情報を更新するときも、元のページ情報の内容を更新したページ情報を新たに作成する。例えば、ページ情報をRAM上に作成する場合には、元のページ情報が格納されるアドレスとは異なるアドレスに新しいページ情報を作成する。また、ルートリンク情報を更新するときも、内容を更新したルートリンク情報を新たに作成する。
(2)ページ情報を新しく作成するときは、作成順にページ番号を割り当てる。
(3)ページ情報を新しく作成するときは、新しいページ情報のメッセージダイジェストを計算する。
(4)ルートリンク情報を新しく作成するときは、新しいルートリンク情報に対する電子署名を作成する。
(5)新しく作成されたページ情報のページ番号及びメッセージダイジェストを、このページ情報への新たなリンク情報として、親ページ情報に設定する。つまり、親ページ情報も更新する必要がある。また、ルートページ情報を新しく作成した場合は、このルートページ情報のページ番号及びメッセージダイジェストを、このページ情報への新たなリンク情報として、ルートリンク情報に設定する。つまり、ルートリンク情報も更新する必要がある。
(6)ページ情報の更新は、レコードが追加又は削除されるページ情報から開始し、このページ情報からルートページ情報までのパス(経路)上にあるページ情報を、ルートページ情報からの距離が長いページ情報から順に更新する。つまり、ルートページ情報が上方に、葉ページ情報が下方に位置すると仮定すると、下から順にページ情報を更新する。
(1)及び(2)の原則は、古いページ情報がカタログ情報に挿入されないためのものである。また、(3)乃至(5)の原則は、カタログ情報の内容の改竄を防止するためのものである。また、(6)の原則は、カタログ情報の改竄を防止するため、(5)の原則からに導き出されるものである。なお、これらの原則は、あくまでも本実施形態における原則である。例えば、前述したように、(1)の原則は本発明において必須ではない。
新しいページ情報が作成されることにより、古くなったページ情報、つまり、参照されなくなったページ情報は、参照されなくなった時点で削除しても良いし、削除しなくても良い。また、古くなったページ情報を定期的に削除するようにしても良い。
以上の原則を踏まえて、以下レコードの追加、削除及び検索の方法について説明する。
[3.1 初期状態]
カタログ情報における初期状態とは、レコードが一切登録されていない状態であり、且つ、レコードを登録する準備ができている状態である。この初期状態のカタログ情報は、センターサーバSAの後述する初期化処理から実行されるルートリンク情報登録処理において作成される。
図3は、初期状態におけるカタログの情報の状態、及び、レコードが追加される場合にカタログ情報が更新される様子の一例を示す図である。
図3(1)に示すように、先ず、空のルートページ情報301が作成される。空のページ情報とは、リンク情報及びレコードが全く格納されていないページ情報を意味する。このルートページ情報301に対してページ番号が割り当てられる。最初のページ情報の作成であるので、ページ番号として1が割り当てられる。また、ページ番号が割り当てられたルートページ情報301のメッセージダイジェストH1が計算される。ページ情報にセルフリンク情報を含ませる場合には、セルフリンク情報のメッセージダイジェストが設定される部分を除いたページ情報全体に対してメッセージダイジェストが計算される。
次に、ルートリンク情報101が作成される。ルートリンク情報には、ルートページ情報のページ番号1と、メッセージダイジェストH1が設定される。また、ルートリンク情報101の電子署名1が作成される。電子署名は、電子署名自身が設定される部分を除いたルートリンク情報全体に対して作成される。そして、電子署名1は、ルートリンク情報に設定される。このルートリンク情報101とルートページ情報301とでカタログ情報の初期状態を構成する。
[3.2 レコードの追加]
カタログ情報へのレコードの追加は、センターサーバSAの後述するレコード追加処理において行われる。新規レコードを追加する場合、新規レコードとこの新規レコードの検索キーとが必要となる。なお、検索キーは、新規レコードとは別に指定されても良いし、新規レコードに設定されているコンテンツIDやコンテンツ名等が用いられても良い。また、レコードの内容をハッシュ化したものを検索キーとしても良い。
カタログ情報の初期状態において、新規レコードR1が追加されるとする。ルートリンク情報101に設定されているリンク情報の内容から、ページ番号1のルートページ情報301が参照される。ルートページ情報301は空であるので、レコードを追加することができる。従って、図3(2)に示すように、新規レコードR1が追加されたルートページ情報302が新たに作成される。このとき、必要であれば、新規レコードの検索キーがこの新規レコードのインデックスとしてルートページ情報302に追加される。そして、このルートページ情報302に対し、最新のページ番号2が割り当てられ、メッセージダイジェストH2が計算される。
次いで、図3(3)に示すように、ページ番号2及びメッセージダイジェストH2が設定されたルートリンク情報102が新たに作成される。そして、ルートリンク情報102の電子署名2が作成される。
次に、新規レコードR2が追加されるとする。ルートページ情報302に格納されているレコードの数は1である。葉ページ情報に格納可能なレコードの数が、例えば3であるとすると、ルートページ情報302に対してレコードを追加することができる。従って、図3(4)に示すように、レコードR1に加えて、新規レコードR2が追加されたルートページ情報303が新たに作成される。そして、このルートページ情報303に対し、最新のページ番号3が割り当てられ、メッセージダイジェストH3が計算される。
次いで、図3(5)に示すように、ページ番号3及びメッセージダイジェストH3が設定されたルートリンク情報103が新たに作成される。そして、ルートリンク情報103の電子署名3が作成される。
図4は、レコードが追加される場合にカタログ情報が更新される様子の一例を示す図である。
上記と同様にして新規レコードR3がルートページ情報に追加される。その結果、3個のレコードを格納するルートページ情報304とルートリンク情報104とが作成される。
次に、新規レコードR4が追加されるとする。すると、図4(1)に示すように、ルートページ情報304には、もはやレコードを追加する余裕がない。そこで、ページ情報の分割が行われる。この分割方法は任意であり、木の種類やアルゴリズム等によって様々である。従って、ここでは一例のみを説明する。
例えば、ルートページ情報304の内容が3分割される。図4(2)に示すように、レコードR1を格納する葉ページ情報305と、レコードR3及び新規レコードR4を格納する葉ページ情報306と、レコードR2を格納する葉ページ情報307とが新たに作成される。新たに作成された葉ページ情報のうちどの葉ページ情報に新規レコードが追加されるかは、新規レコードの検索キーにより決定される。新たに作成された各葉ページ情報に対し、ページ番号が割り当てられ、メッセージダイジェストが計算される。
分割前のページ情報に親ページ情報が存在するのであれば、ページ情報の分割はここで終わっても良い。しかし、分割前のページ情報がルートページ情報である場合には、親ページ情報が存在しない。分割された各ページ情報へのリンク情報を格納する親ページ情報が必要である。従って、図4(3)に示すように、ルートページ情報201が新たに作成される。ルートページ情報201には、葉ページ情報305、306及び307への各リンク情報が設定される。また、インデックスが必要な場合には、適切な内容のインデックスがルートページ情報201に設定される。そして、このルートページ情報201に対し、最新のページ番号8が割り当てられ、メッセージダイジェストH8が計算される。
次いで、図4(4)に示すように、ページ番号8及びメッセージダイジェストH8が設定されたルートリンク情報104が新たに作成される。そして、ルートリンク情報104の電子署名5が作成される。
図5は、レコードが追加される場合にカタログ情報が更新される様子の一例を示す図である。
図5に示すように、カタログ情報には、ルートリンク情報105、ルートページ情報203、ルートページ情報203の子である節ページ情報202、及び、節ページ情報202の子である葉ページ情報308があるとする。ここで、新規レコードR16が追加されるとする。レコード16の検索キーと各ページ情報のインデックスとに基づいて、例えば、ルートリンク情報105、ルートページ情報203、節ページ情報202、葉ページ情報308の順に、新規レコードR16を格納すべきページ情報の探索が行われる。葉ページ情報308に対してレコードが追加可能であれば、この葉ページ情報308に代わる新たな葉ページ情報309が作成される。葉ページ情報309には、葉ページ情報308に格納されていたレコードR1と新規レコードR16が設定される。そして、この葉ページ情報309に対し、最新のページ番号32が割り当てられ、メッセージダイジェストH32が計算される。
節ページ情報202としては、節ページ情報202の子ページ情報へのリンク情報が変更されるので、節ページ情報202に代わる新たな節ページ情報204が作成される。節ページ情報204には、節ページ情報202に格納されていた各リンク情報及びインデックスが設定される。また、設定されたリンク情報のうち、葉ページ情報308へのリンク情報であるページ番号24及びメッセージダイジェストH24が、葉ページ情報309へのリンク情報であるページ番号32及びメッセージダイジェストH32に書き換えられる。そして、この節ページ情報204に対し、最新のページ番号33が割り当てられ、メッセージダイジェストH33が計算される。
ルートページ情報203としては、ルートページ情報203の子ページ情報へのリンク情報が変更されるので、ルートページ情報203に代わる新たなルートページ情報205が作成される。ルートページ情報205の作成方法は、節ページ情報204の作成方法と同様である。
そして、ルートページ情報203へのリンク情報が変更されるので、ルートリンク情報105に代わる新たなルートリンク情報106が作成される。
[3.3 レコードの削除]
カタログ情報からのレコードの削除は、センターサーバSAの後述するレコード削除処理において行われる。レコードを削除する場合、削除対象レコードの検索キーが必要となる。
図6は、レコードが削除される場合にカタログ情報が更新される様子の一例を示す図である。
カタログ情報は、図5を用いて説明した新規レコードR16が追加された後の状態であるとする。ここで、削除対象のレコードの検索キーとして5が指定されたとする。検索キーの値5と各ページ情報のインデックスとに基づいて、例えば、図6(1)に示すルートリンク情報106、ルートページ情報205、節ページ情報204、葉ページ情報309の順に、検索キーに対応するレコードを格納しているページ情報の探索が行われる。
葉ページ情報309には、レコードが格納されているので、レコードのインデックスと検索キーとが比較される。検索キーの値5は、レコードR1のインデックスの値5と一致する。従って、この葉ページ情報309に代わる新たな葉ページ情報310が作成される。葉ページ情報310には、葉ページ情報308に格納されていたレコードのうち、レコードR1以外のレコードが設定される。そして、この葉ページ情報310に対し、最新のページ番号35が割り当てられ、メッセージダイジェストH35が計算される。
この後、節ページ情報204に代わる節ページ情報206、ルートページ情報205に代わるルートページ情報207、ルートリンク情報106に代わるルートリンク情報107が、この順に新たに作成される。これらのページ情報の作成方法は、図5を用いて説明した場合と同様である。
更に、削除対象のレコードの検索キーとして8が指定されたとする。検索キーの値8と各ページ情報のインデックスとに基づいて、例えば、図6(2)に示すルートリンク情報107、ルートページ情報207、節ページ情報206、葉ページ情報310の順に探索が行われる。葉ページ情報310には、インデックスの値が8であるレコードR16が格納されている。従って、レコードR16は削除されことになる。
レコードR16が削除されると、葉ページ情報310は空になる。空になった葉ページ情報は不要であるので、葉ページ情報310に代わる新たな葉ページ情報を作成する必要はない。ここで、節ページ情報206に代わる新たな節ページ情報208が作成される。節ページ情報208には、節ページ情報206に格納されていた各リンク情報及びインデックスが設定される。また、設定されたリンク情報のうち、葉ページ情報310へのリンク情報であるページ番号35及びメッセージダイジェストH35が、何れも無効な値に書き換えられる。これにより、葉ページ情報310は、今後一切参照されなくなる。そして、この節ページ情報208に対し、最新のページ番号38が割り当てられ、メッセージダイジェストH38が計算される。
この後、ルートページ情報207に代わるルートページ情報209、及び、ルートリンク情報107に代わるルートリンク情報108が、この順に新たに作成される。
[3.4 レコードの検索]
レコードの検索は、センターサーバSAの後述するレコード検索処理において行われる。レコードを検索する場合において、検索目的のレコードを格納しているページ情報を探索する方法は、木構造におけるノードの探索方法と同じである。つまり、ページ情報の探索方法は、カタログ情報の木構造に対応する探索アルゴリズムに依存する。また、レコードを追加、削除する場合にも、同様の探索方法が用いられる。以下では、レコードの検索方法の一例を、図5を用いて説明する。
図5に示すように、カタログ情報には、ルートリンク情報106、ルートページ情報205、節ページ情報204、及び、葉ページ情報309があるとする。ここで、検索対象のレコードの検索キーとして8が指定されたとする。先ず、ルートリンク情報に設定されているページ番号34が参照される。
ページ番号34はルートページ情報205のページ番号であるので、次はルートページ情報205が参照される。ここで、検索キーとルートページ情報205に格納されている各インデックスとの比較が行われる。ルートページ情報205には、インデックスとして、11、37及び68が格納されている。検索キーの値5とインデックスの値11とを比較すると、検索キーの値の方が小さい。従って、11よりインデックスの値が小さいページ情報を指すリンク情報に含まれるページ番号33が参照される。なお、ルートページ情報205には、ページ番号33に対応するページ情報へのリンク情報のほか、ページ番号30、20及び18に対応するページ情報へのリンク情報も格納されている。ただし、図5においては、ページ番号30、20及び18に対応するページ情報の図示は省略している。
ページ番号33は節ページ情報204のページ番号であるので、次は節ページ情報204が参照される。ルートページ情報205には、インデックスとして、3が格納されている。検索キーの値5とインデックスの値3とを比較すると、検索キーの値の方が大きい。従って、3よりインデックスの値が大きいページ情報を指すリンク情報に含まれるページ番号32が参照される。なお、節ページ情報204には、ページ番号32に対応するページ情報へのリンク情報のほか、ページ番号23に対応するページ情報へのリンク情報も格納されている。ただし、図5においては、ページ番号23に対応するページ情報の図示は省略している。
ページ番号32は葉ページ情報309のページ番号であるので、次は葉ページ情報309が参照される。葉ページ情報309には、インデックスとして、5及び8が格納されている。検索キーの値8とインデックスとを順次比較すると、レコードR16のインデックスの値と検索キーの値8とが一致する。その結果、レコードR16が検索される。
なお、本実施形態においては、レコードの追加、削除及び検索においてページ情報の探索を行う際に、改竄チェックを行っている。この改竄チェックは、参照されるページ情報について行われる。
前記の例では、最初に、ルートページ情報209の改竄チェックが、ルートリンク情報108に設定されているメッセージダイジェストH34を用いて行われる。次に、節ページ情報208の改竄チェックが、ルートページ情報209に設定されているメッセージダイジェストH33を用いて行われる。最後に、葉ページ情報309の改竄チェックが、節ページ情報208に設定されているメッセージダイジェストH32を用いて行われる。なお、ルートリンク情報の改竄チェックは、センターサーバSAの後述する初期化処理で行われる。
このように、ページ情報が実際に参照されるときに改竄チェックが行われるので、参照されたページ情報の真正性が確実に保証される。また、参照されるページ情報のみ改竄チェックが行われるので、効率的でもある。ただし、レコードの追加、削除及び検索の度にこのような改竄チェックを行わなくても良い。例えば、定期的に改竄チェックを行っても良いし、オペレータからの指示があったときに改竄チェックを行っても良い。
[4.センターサーバSAの構成等]
次に、図7を参照して、センターサーバSAの構成及び機能について説明する。
図7は、センターサーバSAの概要構成例を示す図である。
センターサーバSAは、図7に示すように、演算機能を有するCPU,作業用RAM,各種データ及びプログラムを記憶するROM等から構成された制御部11を備えている。また、センターサーバSAは、各種データ及び各種プログラム等を記憶保存するためのHD等から構成された記憶部12を備えている。更に、センターサーバSAは、ネットワーク8等を通じてノードNnとの間の情報の通信制御を行うための通信部13を備えている。また更に、センターサーバSAは、各種情報を表示するCRT,液晶ディスプレイ等の表示部14を備えている。更にまた、センターサーバSAは、オペレータからの指示を受け付けこの指示に応じた指示信号を制御部11に対して与える入力部(例えば、キーボード、マウス等)15と、を備えている。そして、制御部11、記憶部12、通信部13、表示部14、及び入力部15はバス16を介して相互に接続されている。ここで、入力部15は、本発明における追加入力手段、削除入力手段及び検索入力手段の一例である。また、記憶部12は、本発明におけるページ情報記憶手段の一例である。記憶部12は、揮発性のメモリであっても良いし、不揮発性のメモリであっても良い。
記憶部12には、各ノードNnのノードID、IPアドレス及びポート番号等が記憶されている。また、記憶部12には、カタログ情報がルートリンク情報及びページ情報単位で登録されるカタログデータベースが構築されている。更に、記憶部12には、カタログデータベースを管理するためのデータベース管理プログラムが記憶されている。データベース管理プログラムは、情報生成プログラムの一例である。
制御部11は、CPUが記憶部12等に記憶されたデータベース管理プログラム等のプログラムを読み出して実行することにより、本発明における葉ページ情報生成手段、根ページ情報生成手段、節ページ情報生成手段、ルートリンク情報生成手段、追加入力手段、追加葉ページ決定手段、登録手段、割当手段、判定手段、削除葉ページ決定手段、検索入力手段及び検索手段として機能する。
なお、上記データベース管理プログラムは、例えば、ネットワーク8上の所定のサーバからダウンロードされるようにしても良いし、例えば、CD−ROM等の記録媒体に記録されてこの記録媒体のドライブを介して読み込まれるようにしても良い。
[5.ノードNnの構成及び機能等]
次に、図8を参照して、ノードNnの構成及び機能について説明する。
図8は、ノードNnの概要構成例を示す図である。
各ノードNnは、図8に示すように、演算機能を有するCPU,作業用RAM,各種データ及びプログラムを記憶するROM等から構成されたコンピュータとしての制御部21を備えている。また、各ノードNnは、各種データ及び各種プログラム等を記憶保存するためのHD(ハードディスク)等から構成された記憶部22と、受信されたコンテンツのレプリカ等を一時蓄積するバッファメモリ23とを備えている。更に、各ノードNnは、コンテンツのレプリカに含まれるエンコードされたビデオデータ(映像情報)及びオーディオデータ(音声情報)等をデコードするデコーダ部24を備えている。また更に、各ノードNnは、このデコードされたビデオデータ等に対して所定の描画処理を施しビデオ信号として出力する映像処理部25と、この映像処理部25から出力されたビデオ信号に基づき映像表示するCRT,液晶ディスプレイ等の表示部26と、を備えている。更にまた、各ノードNnは、上記デコードされたオーディオデータをアナログオーディオ信号にD (Digital)/A(Analog)変換した後これをアンプにより増幅して出力する音声処理部27と、この音声処理部27から出力されたオーディオ信号を音波として出力するスピーカ28と、を備えている。また更に、各ノードNnは、ネットワーク8を通じて他のノードNn等間の情報の通信制御を行うための通信部29を備えている。更にまた、各ノードNnは、ユーザからの指示を受け付けこの指示に応じた指示信号を制御部21に対して与える入力部(例えば、キーボード、マウス、或いは、リモコンや操作パネル等)30を備えている。そして、制御部21、記憶部22、バッファメモリ23、デコーダ部24、通信部29、及び入力部30はバス31を介して相互に接続されている。なお、ノードNnとしては、例えば、パーソナルコンピュータ、STB(Set Top Box)等を適用可能である。
記憶部22には、DHTを用いたルーティングテーブル、インデックス、並びに、コンテンツ分散保存システムSに参加する際のアクセス先となるコンタクトノードのIPアドレス及びポート番号、及びセンターサーバSAのIPアドレス及びポート番号等が記憶されている。また、記憶部22には、他のノードNnから取得したページ情報や、センターサーバSAから配信されてきたページ情報が、ファイルとして記憶される。
制御部21は、CPUが記憶部22等に記憶されたプログラムを読み出して実行することにより、各種処理を行う。
例えば、制御部21は、コンテンツ分散保存システムSに接続した際に、他のノードNnから最新のルートリンク情報及びページ情報を取得する。取得先のノードNnとしては、例えば、コンタクトノードであっても良い。また、制御部21は、センターサーバSAから配信されてきたルートリンク情報及びページ情報を受信する。他のノードNn又はセンターサーバSAから取得されたルートリンク情報は、RAMに格納される。また、他のノードNn又はセンターサーバSAから取得されたページ情報は、記憶部22に保存される。
制御部21は、RAMに記憶されたルートリンク情報及び記憶部22に保存されたページ情報に基づいて、コンテンツのレコードの検索を行う。この検索方法は、基本的にセンターサーバSAにおけるレコードの検索方法と同じである。そして、制御部21は、検索されたレコードの内容に基づいて、必要な処理を行う。例えば、制御部21は、レコードの情報を表示部26に表示させたり、コンテンツが公開されているか否かを判断したり、レコードに含まれているコンテンツIDに基づいて、コンテンツ保持ノードからコンテンツを取得したりする。
なお、プログラムは、例えば、ネットワーク8上の所定のサーバからダウンロードされるようにしても良いし、例えば、CD−ROM等の記録媒体に記録されてこの記録媒体のドライブを介して読み込まれるようにしても良い。
[6.コンテンツ分散保存システムSの動作]
次に、図9乃至図16を参照して、本実施形態に係るコンテンツ分散保存システムSの動作について説明する。
以下においては、カタログ情報が一般的なn分探索木の構造を少なくとも有するものとして説明する。木の種類や構造等に特有の処理に関する説明は省略する。また、ページ情報に必須ではないセルフリンク情報に関する処理の説明は省略する。
[6.1 センターサーバSAの動作]
図9は、本実施形態に係るセンターサーバSAにおける制御部11の処理例を示すフローチャートである。
図9に示す処理は、例えば、データベース管理プログラムが起動されたときに開始される。先ず、制御部11は、ステップS1〜S5の初期化処理を実行する。具体的に、制御部11は、ルートリンク情報を保存したファイルが記憶部12に記憶されているか否かを判定する(ステップS1)。データベース管理プログラムの起動が初めてである場合には、ルートリンク情報は未だ作成されていない。その一方で、データベース管理プログラムの起動が初めてではない場合には、ルートリンク情報は既に作成されてファイルに保存されている。そこで、制御部11は、ルートリンク情報を保存したファイルが記憶部12に記憶されていない場合には(ステップS1:NO)、ルートリンク情報登録処理を実行する(ステップS2)。初期化処理から実行されたルートリンク情報登録処理では、ルートリンク情報とルートページ情報とが新規に作成される。なお、ルートリンク情報登録処理の詳細については後述する。
ステップS1において、制御部11は、ルートリンク情報を保存したファイルが記憶部12に記憶されている場合には(ステップS1:YES)、このファイルからルートリンク情報を読み出してRAMに格納する(ステップS3)。
次いで、制御部11は、このファイルに保存されている電子署名を用いてルートリンク情報の改竄をチェックする(ステップS4)。例えば、制御部11は、ルートリンク情報、より具体的には、ルートページ情報のシリアル番号及びメッセージダイジェストから、メッセージダイジェストを計算する。このメッセージダイジェストの計算には、電子署名に設定されているハッシュ関数が用いられる。また、制御部11は、電子署名の証明書情報に設定されている公開鍵を用いて電子署名の署名値を復号する。そして、制御部11は、作成されたメッセージダイジェストと復号されたデータとが一致するか否かを判定する。ここで、一致する場合にはルートリンク情報は改竄されていないとされ、一致しない場合には改竄されている。
次いで、制御部11は、ルートリンク情報は改竄されているか否かを判定する(ステップS5)。このとき、制御部11は、ルートリンク情報は改竄されている場合には(ステップS5:YES)、エラー終了とさせる。この場合は、例えば、表示部14に、ルートリンク情報が改竄されている旨のエラー表示がなされ、データベース管理プログラムの実行が中断される。
ステップS5において、制御部11は、ルートリンク情報は改竄されていない場合(ステップS5:NO)、又は、ステップS2のルートリンク情報登録処理を終えた場合には、メインの処理を開始させる。
先ず、制御部11は、オペレータからの終了指示があったか否かを、入力部15からの入力に基づいて判定する(ステップS6)。
ステップS6において、制御部11は、終了指示がない場合には(ステップS6:NO)、オペレータからのレコードの追加要求があったか否かを、入力部15からの入力に基づいて判定する(ステップS7)。このとき、制御部11は、レコードの追加要求があった場合には(ステップS7:YES)、レコード追加処理を実行する(ステップS8)。この場合、制御部11は、例えばオペレータ操作によって入力部15から入力された新規レコードを指定する。また、制御部11は、別途検索キーが必要な場合には、新規レコードの検索キーをも指定する。このレコード追加処理では、入力された新規レコードがカタログ情報に追加される。なお、レコード追加処理の詳細については後述する。
ステップS7において、制御部11は、レコードの追加要求がなかった場合には(ステップS7:NO)、オペレータからのレコードの削除要求があったか否かを、入力部15からの入力に基づいて判定する(ステップS9)。このとき、制御部11は、レコードの削除要求があった場合には(ステップS9:YES)、レコード削除処理を実行する(ステップS10)。この場合、制御部11は、オペレータ操作によって入力部15から入力された削除対象レコードの検索キーを指定する。このレコード削除処理では、指定された検索キーに対応する削除対象レコードがカタログ情報から削除される。なお、レコード削除処理の詳細については後述する。
ステップS9において、制御部11は、レコードの削除要求がなかった場合には(ステップS9:NO)、オペレータからのレコードの検索要求があったか否かを、入力部15からの入力に基づいて判定する(ステップS11)。このとき、制御部11は、レコードの検索要求があった場合には(ステップS11:YES)、レコード検索処理を実行する(ステップS12)。この場合、制御部11は、オペレータ操作によって入力部15から入力された検索キーを指定する。このレコード検索処理では、指定された検索キーに対応するレコードがカタログ情報から検索される。なお、レコード検索処理の詳細については後述する。
制御部11は、ステップS8、S10又はS12の処理を終えたとき、或いは、ステップS11において、レコードの検索要求がなかった場合には(ステップS11:NO)、ステップS6に移行する。そして、制御部11は、ステップS6においてオペレータからの終了指示があった場合には(ステップS6:YES)、本処理を終了させる。
図10は、本実施形態に係るセンターサーバSAにおける制御部11のルートリンク情報登録処理における処理例を示すフローチャートである。
先ず、制御部11は、ルートページ情報があるか否かを判定する(ステップS101)。つまり、制御部11は、ルートページ情報がRAMに格納されているか否かを判定する。初期化処理からルートリンク情報登録処理が実行された場合、又は、レコード削除処理によってルートページ情報がRAMから削除された場合には、ルートページ情報は存在しない。そこで、制御部11は、ルートページ情報がない場合には(ステップS101:NO)、新規に空(から)のルートページ情報をRAM上に作成する。(ステップS102)。
次いで、制御部11は、ページ情報登録処理を実行する(ステップS103)。このとき、制御部11は、新規に作成したルートページ情報を指定する。ページ情報登録処理では、指定されたページ情報へのリンク情報が作成され、このページ情報がファイルに保存される。これによりルートページ情報が登録される。なお、ページ情報登録処理の詳細については後述する。
次いで、制御部11は、ルートリンク情報生成手段として、作成されたリンク情報をルートリンク情報に設定する(ステップS104)。
ステップS101において、制御部11は、ルートページ情報が存在する場合には(ステップS101:YES)、現在のルートリンク情報が指すページ情報が現在のルートページ情報と一致するか否かを判定する(ステップS105)。レコード追加処理又はレコード削除処理においては、現在のルートリンク情報が指している古いページ情報に代わって、新たなルートページ情報が作成される。そこで、制御部11は、現在のルートリンク情報が指すページ情報が現在のルートページ情報と一致しない場合には(ステップS105:NO)、ルートリンク情報生成手段として、ルートページ情報へのリンク情報をルートリンク情報に設定する(ステップS106)。
制御部11は、ステップS104又はS106の処理を終えると、ルートリンク情報生成手段として、ルートリンク情報の電子署名を作成する(ステップS107)。例えば、制御部11は、ルートリンク情報、より具体的には、ルートページ情報のページ番号及びメッセージダイジェストから、メッセージダイジェストを作成する。次いで、制御部11は、秘密鍵を用いて、作成されたメッセージダイジェストを暗号化し、署名値を得る。また、メッセージダイジェストの計算に用いたハッシュ関数、署名値、証明書情報等の情報を設定して電子署名を作成する。
次いで、制御部11は、ルートリンク情報を、作成した電子署名とともにファイルに保存する(ステップS108)。
次いで、制御部11は、作成した新しいルートリンク情報を、ルートリンク情報メッセージに含ませて全てのノードNnに配信する(ステップS109)。この配信は、例えば、オーバーレイマルチキャストで行われても良い。制御部11は、ステップS105において、現在のルートリンク情報が指すページ情報が現在のルートページ情報と一致する場合、又は、ステップS109の処理を終えると、ルートリンク情報登録処理を終了させる。
図11は、本実施形態に係るセンターサーバSAにおける制御部11のページ情報登録処理における処理例を示すフローチャートである。
先ず、制御部11は、割当手段として、登録対象として指定されたページ情報に、今までに割り当てられていない最新のページ番号を割り当てる(ステップS151)。次いで、制御部11は、登録対象のページ情報のメッセージダイジェストを計算する(ステップS152)。
次いで、制御部11は、登録対象のページ情報をファイルに保存する(ステップS153)。このとき、ページ情報がどこに保存されているかが特定することができるよう、例えば、ファイル名にページ番号が付加される。
次いで、制御部11は、作成した新しいページ情報を、ページ情報メッセージに含ませて全てのノードNnに配信する(ステップS154)。この配信は、例えば、オーバーレイマルチキャストで行われても良い。
制御部11は、この処理を終えると、ページ情報登録処理を終了させ、割り当てたページ番号と計算したメッセージダイジェストとからなるリンク情報を、呼び出し元の処理に返却する。
図12は、本実施形態に係るセンターサーバSAにおける制御部11のレコード追加処理における処理例を示すフローチャートである。
先ず、制御部11は、現在のルートリンク情報をRAMから取得する(ステップS201)。次いで、制御部11は、ページ情報取得処理を実行する(ステップS202)。このとき、制御部11は、ルートリンク情報を指定する。ページ情報取得処理では、指定されたリンク情報が指すページ情報がファイルから取得され、RAMに格納される。取得されたページ情報は、現在参照しているページ情報とされる。なお、ページ情報取得処理の詳細については後述する。
次いで、制御部11は、追加葉ページ決定手段として、指定された検索キーと、現在参照しているページ情報に設定されているインデックスとに基づいて、担当ページ情報を決定する。担当ページ情報とは、或るレコードに対して、このレコードを格納すべきページ情報を意味する。レコードを追加する場合は、入力された新規レコードを格納すべき葉ページ情報が担当ページ情報である。
具体的に、制御部11は、取得されたページ情報が新規レコードの担当ページ情報であるか否かを判定する(ステップS203)。この判定方法は、ページ情報の構造に依存する。
制御部11は、取得されたページ情報が新規レコードの担当ページ情報ではない場合には(ステップS203:NO)、現在参照しているページ情報から、次のページ情報へのリンク情報を取得する(ステップS204)。次のページ情報とは、現在参照しているページ情報の子ページ情報のうち、次に参照するページ情報をいう。次に参照するページ情報は、指定された検索キーに対応する。この処理は、カタログ情報の探索木の構造に対応した探索アルゴリズムに従って行われる。例えば、制御部11は、指定された検索キーと現在参照しているページ情報に設定されているインデックスとの比較によって、次のページ情報へのリンク情報を特定する。具体的に、本実施形態においては、検索キーとインデックスとの大小比較が行われる。そして、大小比較の結果、例えば、検索キーの値がインデックスの値以下である場合、検索キーの値がインデックスの値よりも大きい場合等によって次のページ情報へのリンク情報が特定される。
次いで、制御部11は、次のページ情報へのリンク情報が存在するか否かを判定する(ステップS205)。つまり、制御部11は、次のページ情報へのリンク情報を取得することができたか否かを判定する。このとき、制御部11は、次のページ情報へのリンク情報が存在しない場合には(ステップS205:NO)、葉ページ情報生成手段として、ステップS206において、新しい担当ページ情報をRAM上に作成する。そして、制御部11は、登録手段として、作成した担当ページ情報上に新規レコードを追加して設定する。このとき、制御部11は、カタログ情報の構造上必要な場合には、新規レコードの検索キーをインデックスとして、この新規レコードに対応付けて担当ページ情報に追加して設定する。例えば、後述するレコード削除処理においてレコードが削除されること等により葉ページ情報が空になると、空になった葉ページ情報が削除される。この場合、空になった葉ページ情報の親ページ情報において、この葉ページ情報を指していたリンク情報には無効な値が設定される。これによって、空になった葉ページ情報を指していたリンク情報は削除される。ただし、親ページ情報に格納されていたインデックスについては特に更新を行わない場合、その後検索キーとインデックスとの大小比較によって、無効なリンク情報が特定されることがある。つまり、ステップS205において、次のページ情報へのリンク情報が存在しないと判定される。この場合、次のページ情報、つまり、検索キーに対応して新規レコードを格納する担当ページ情報が必要になるので、ステップS206においてこの担当ページ情報が作成される。
一方、制御部11は、次のページ情報へのリンク情報が存在する場合には(ステップS205:YES)、ステップS202に移行する。このとき、制御部11は、取得したリンク情報を指定して、ページ情報取得処理を実行する。
ステップS203において、制御部11は、取得されたページ情報が新規レコードの担当ページ情報である場合には(ステップS203:YES)、判断手段として、決定した担当ページ情報に新規レコードが追加可能であるか否かを判定する。具体的に、制御部11は、担当ページ情報には、格納可能なレコード数の上限まで既にレコードが格納されているか否かを判定する(ステップS207)。このとき、制御部11は、格納可能なレコード数の上限までのレコードは格納されていない場合には(ステップS207:YES)、葉ページ情報生成手段として、ステップS208において、現在の担当ページ情報の内容をコピーした新しい担当ページ情報をRAM上に作成する。そして、制御部11は、登録手段として、新しい担当ページ情報に新規レコードを追加して設定する。このとき、制御部11は、ステップS206と同様に必要に応じて、新規レコードの検索キーをインデックスとして追加設定する。
一方、制御部11は、格納可能なレコード数の上限まで既にレコードが格納されている場合には(ステップS207:NO)、葉ページ情報生成手段として、ステップS209において、ページ情報の分割を行う。具体的に、制御部11は、カタログ情報の探索木の構造に対応する分割アルゴリズムに従って、現在の担当ページ情報の内容を分割して複数の新しいページ情報をRAM上に作成する。そして、制御部11は、登録手段として、この新しいページ情報のうち担当ページ情報に、新規レコードを追加して設定する。例えば、担当ページ情報の内容を3つに分割する場合、元の担当ページ情報に格納されているレコードが、そのインデックスの順に、前半、中間及び後半のレコードに分けられる。例えば、元の担当ページ情報に、インデックスの値が1、2、3、4、5及び6の6つのレコードが格納されていたとする。これらのレコードを3つに均等に分ける場合、インデックスの値が1及び2のレコードが前半のレコード、インデックスの値が3及び4のレコードが中間のレコード、インデックスの値が5及び6のレコードが後半のレコードとなる。そして、夫々のレコードを格納するページ情報が作成される。新規レコードをどのページ情報に格納させるかはその検索キーに基づいて判断される。また、制御部11は、ステップS206と同様に必要に応じて、新規レコードの検索キーをインデックスとして追加設定する。
制御部11は、ステップS206、S208又はS209において新しい担当ページを作成した後、ページ情報登録処理を実行する(ステップS210)。このとき、制御部11は、新たに作成したページ情報を指定する。ページ情報登録処理では、指定されたページ情報へのリンク情報が生成され、このページ情報がファイルに保存される。これによりページ情報が登録される。なお、ステップS209において、担当ページ情報が複数の新しいページ情報に分割された場合には、この複数のページ情報夫々に対してページ情報登録処理が実行される。
次いで、制御部11は、登録されたページ情報の親ページ情報が存在するか否かを判定する(ステップS211)。例えば、ステップS205の判定において次のページ情報へのリンク情報が存在する度に、そのとき参照していたページ情報のページ番号をRAMの所定領域に保存してくと良い。この所定領域を参照することによって、親ページ情報が存在するか、及び、この親ページ情報のページ番号を特定することができる。
制御部11は、親ページ情報が存在する場合には(ステップS211:YES)、追加更新手段として、新たに作成した葉ページ情報の親ページ情報からルートページ情報までの各節ページ情報のページ番号及びメッセージダイジェストを更新する。具体的に、根ページ情報生成手段及び節ページ情報生成手段として、子ページ情報のメッセージダイジェストと、この子ページ情報のページ番号を含むリンク情報が格納された親ページ情報を作成する。より詳細に、制御部11は、元の親ページ情報の内容をコピーした新しい親ページ情報をRAM上に作成する(ステップS212)。そして、制御部11は、新しい親ページを現在参照するページ情報とする。
次いで、制御部11は、現在参照するページ情報に格納されている古い子ページ情報を指していたリンク情報を、新しい子ページ情報を指すリンク情報に書き換える(ステップS213)。具体的に、制御部11は、ステップS210のページ情報登録処理で生成されたリンク情報を、新しい子ページ情報を指すリンク情報とする。そして、制御部11は、新しい子ページ情報を指すリンク情報を、古い子ページ情報を指していたリンク情報に上書きする。
次いで、制御部11は、ステップS210に移行する。このとき、制御部11は、新たに作成した現在参照しているページ情報を指定して、ページ情報登録処理を実行する。これにより、現在参照しているページ情報が登録される。
ステップS211において、制御部11は、登録されたページ情報の親ページ情報が存在しない場合、つまり、登録されたページ情報がルートページ情報である場合には(ステップS211)、ルートリンク情報登録処理を実行する(ステップS214)。ルートリンク情報登録処理では、登録された新しいルートページ情報を指すルートリンク情報が作成される。制御部11は、ルートリンク情報登録処理を終えると、レコード追加処理を終了させる。
図13は、本実施形態に係るセンターサーバSAにおける制御部11のレコード削除処理における処理例を示すフローチャートである。
先ず、制御部11は、ステップS251〜S255の処理を実行する。これらの処理は、レコード追加処理におけるステップS201〜S205の処理と同様である。つまり、制御部11は、現在のルートリンク情報をRAMから取得する(ステップS251)。次いで、制御部11は、ページ情報取得処理を実行する(ステップS252)。次いで、制御部11は、削除葉ページ決定手段として、指定された検索キーと、節ページ情報に設定されているインデックスとに基づいて、担当ページ情報を決定する。具体的に、制御部11は、取得されたページ情報が、指定された検索キーに対応する削除対象レコードの担当ページ情報であるか否かを判定する(ステップS253)。制御部11は、取得されたページ情報が削除対象レコードの担当ページ情報ではない場合には(ステップS253:NO)、現在参照しているページ情報から、次のページ情報へのリンク情報を取得する(ステップS254)。次いで、制御部11は、次のページ情報へのリンク情報が存在するか否かを判定する(ステップS255)。このとき、制御部11は、次のページ情報へのリンク情報が存在しない場合には(ステップS255:NO)、レコード追加処理を終了させる。つまり、削除対象レコードを格納しているページ情報は存在しないので、レコード追加処理はここで終了する。
ステップS253において、制御部11は、取得されたページ情報が削除対象レコードの担当ページ情報である場合には(ステップS253:YES)、担当ページ情報は削除対象レコードを格納しているか否かを判定する(ステップS256)。この判定方法は、カタログ情報の構造に依存する。例えば、レコードとこのレコードのインデックスとが対応付けられページ情報に格納される構造の場合には、指定された検索キーで、担当ページ情報に格納されているインデックスが検索される。そして、指定された検索キーに一致するインデックスが存在する場合には、削除対象レコードは格納されていると判定される。その一方で、指定された検索キーに一致するインデックスが存在しない場合には、削除対象レコードは格納されていないと判定される。制御部11は、担当ページ情報は削除対象レコードを格納していない場合には(ステップS256:NO)、レコード削除処理を終了させる。
一方、制御部11は、担当ページ情報は削除対象レコードを格納している場合には(ステップS256:YES)、葉ページ情報生成手段として、一又は複数のレコードが格納された葉ページ情報を作成する。具体的に制御部11は、ステップS257において、現在の担当ページ情報の内容をコピーした新しい担当ページ情報をRAM上に作成する。そして、制御部11は、新しい担当ページ情報から削除対象レコードを削除する。このとき、制御部11は、担当ページ情報に削除対象レコードのインデックスが設定されている場合には、このインデックスも削除する。
次いで、制御部11は、作成した新しいページ情報が格納しているレコードの数とリンク情報の数が何れも0になったか否かを判定する(ステップS258)。つまり、制御部11は、作成した新しいページ情報が空になったか否かを判定する。このとき、制御部11は、作成した新しいページ情報が空になっていない場合には(ステップS258:NO)、このページ情報を指定して、ページ情報登録処理を実行する(ステップS259)。これにより、削除対象レコードが削除された新しいページ情報が登録される。
一方、制御部11は、作成した新しいページ情報が空になった場合には(ステップS258:YES)、ステップS258で空になったと判定されたページ情報をRAM上から削除する(ステップS260)。
制御部11は、ステップS259又はS260の処理を終えると、ステップS261〜S264の処理を実行する。これらの処理は、レコード追加処理におけるステップ211〜S214の処理と基本的には同様である。
つまり、制御部11は、ステップS259において登録されたページ情報、又は、ステップS260において削除されたページ情報の親ページ情報が存在するか否かを判定する(ステップS261)。制御部11は、親ページ情報が存在する場合には(ステップS261:YES)、削除更新手段として、新たに作成した葉ページ情報の親ページ情報からルートページ情報までの各節ページ情報のページ番号及びメッセージダイジェストを更新する。具体的に、制御部11は、根ページ情報生成手段及び節ページ情報生成手段として、子ページ情報のメッセージダイジェストと、この子ページ情報のページ番号を含むリンク情報が格納された親ページ情報を作成する。より詳細に、制御部11は、元の親ページ情報の内容をコピーした新しい親ページ情報をRAM上に作成する(ステップS262)。そして、制御部11は、新しい親ページを現在参照するページ情報とする。
次いで、制御部11は、現在参照するページ情報に格納されている古い子ページ情報を指していたリンク情報を、新しい子ページ情報を指すリンク情報に書き換える(ステップS263)。ただし、制御部11は、子ページ情報がステップS260で削除されている場合には、古い子ページ情報を指していたリンク情報を、何も指していない状態に書き換える。例えば、ページ番号及びメッセージダイジェストに無効な値が設定される。次いで、制御部11は、ステップS261に移行する。ステップS261において、制御部11は、登録されたページ情報の親ページ情報が存在しない場合には(ステップS261:NO)、ルートリンク情報登録処理を実行する(ステップS264)。制御部11は、ルートリンク情報登録処理を終えると、レコード削除処理を終了させる。
図14は、本実施形態に係るセンターサーバSAにおける制御部11のページ情報取得処理における処理例を示すフローチャートである。
先ず、制御部11は、指定されたリンク情報が有効なページ情報を指しているか否かを判定する(ステップS301)。例えば、リンク情報のページ番号が無効な値に設定される場合、このリンク情報は有効なページ情報を指していない。例えば、ページ番号が1から始まるように定められている場合、ページ番号に1以上の値が設定されているリンク情報は有効であり、ページ番号に0が設定されているリンク情報は無効である。このとき、制御部11は、指定されたリンク情報が有効なページ情報を指していない場合には(ステップS301:NO)、ページ情報取得処理を終了させる。この場合、ページ情報無しという情報が、呼び出し元の処理に返却される。
一方、制御部11は、指定されたリンク情報が有効なページ情報を指している場合には(ステップS301:YES)、このリンク情報に含まれるページ番号が指すファイルからページ情報を読み出してRAMに格納する(ステップS302)。
次いで、制御部11は、指定されたリンク情報に含まれるメッセージダイジェストを用いて、読み出したページ情報の改竄をチェックする(ステップS303)。具体的に、制御部11は、読み出したページ情報のメッセージダイジェストを計算する。このメッセージダイジェストの計算には、ページ情報登録処理でメッセージダイジェストを計算したときと同じハッシュ関数が用いられる。そして、制御部11は、計算したメッセージダイジェストと指定されたリンク情報に含まれるメッセージダイジェストとが一致するか否かを判定する。ここで、一致する場合にはルートリンク情報は改竄されていないとされ、一致しない場合には改竄されている。
次いで、制御部11は、読み出したルートページ情報は改竄されているか否かを判定する(ステップS304)。このとき、制御部11は、ページ情報は改竄されている場合には(ステップS304:YES)、エラー終了とさせる。この場合は、例えば、表示部14に、ページ情報が改竄されている旨のエラー表示がなされ、データベース管理プログラムの実行が中断される。
一方、制御部11は、ページ情報は改竄されていない場合には(ステップS304:NO)、読み出したページ情報を呼び出し元の処理に返却し、ページ情報取得処理を終了させる。
図15は、本実施形態に係るセンターサーバSAにおける制御部11のレコード検索処理における処理例を示すフローチャートである。
先ず、制御部11は、ステップS351〜S355の処理を実行する。これらの処理は、レコード追加処理におけるステップS201〜S205の処理と同様である。つまり、制御部11は、現在のルートリンク情報をRAMから取得する(ステップS351)。次いで、制御部11は、ページ情報取得処理を実行する(ステップS352)。次いで、制御部11は、検索手段として、指定された検索キーと、節ページ情報に設定されているインデックスとに基づいて、担当ページ情報を決定する。具体的に、制御部11は、取得されたページ情報が、指定された検索キーに対応するレコードの担当ページ情報であるか否かを判定する(ステップS353)。制御部11は、取得されたページ情報が削除対象レコードの担当ページ情報ではない場合には(ステップS353:NO)、現在参照しているページ情報から、次のページ情報へのリンク情報を取得する(ステップS354)。次いで、制御部11は、次のページ情報へのリンク情報が存在するか否かを判定する(ステップS355)。このとき、制御部11は、次のページ情報へのリンク情報が存在しない場合には(ステップS355:NO)、指定された検索キーに対応するレコードが発見されなかった旨をオペレータに提示する(ステップS356)。例えば、発見されなかった旨のメッセージが表示部14に表示される。
ステップS353において、制御部11は、取得されたページ情報が検索キーに対応するレコードの担当ページ情報である場合には(ステップS353:YES)、担当ページ情報は検索キーに対応するレコードを格納しているか否かを判定する(ステップS357)。このとき、制御部11は、担当ページ情報は検索キーに対応するレコードを格納していない場合には(ステップS357:NO)、指定された検索キーに対応するレコードが発見されなかった旨をオペレータに提示する(ステップS356)。一方、制御部11は、担当ページ情報は検索キーに対応するレコードを格納している場合には、発見したレコードの情報をオペレータに提示する。例えば、レコードの内容が表示部14に表示される。制御部11は、ステップS356又はステップS358の処理を終えると、レコード検索処理を終了させる。
[6.2 ノードNnの動作]
図16は、本実施形態に係るノードNnにおける制御部21の処理例を示すフローチャートである。
図16に示す処理は、例えば、ノードNnが、コンテンツ分散保存システムSに参加したときに開始される。先ず、制御部21は、コンテンツ分散保存システムSに参加している他のノードNnから最新のルートリンク情報及びページ情報を取得する(ステップS501)。例えば、制御部21は、要求先のノードNnにメッセージを送信することにより、この要求先のノードNnから送信されてきたルートリンク情報及びページ情報を受信する。そして、制御部21は、ルートリンク情報をRAMに格納し、ページ情報をファイルに保存する。
次いで、制御部21は、ユーザからの終了指示があったか否かを、入力部30からの入力に基づいて判定する(ステップS502)。
ステップS502において、制御部21は、終了指示がない場合には(ステップS502:NO)、ユーザからのレコードの検索要求があったか否かを、入力部30からの入力に基づいて判定する(ステップS503)。このとき、制御部21は、レコードの検索要求があった場合には(ステップS503:YES)、レコード検索処理を実行する(ステップS504)。このレコード検索処理では、ユーザにより指定された検索キーに対応するレコードがカタログ情報から検索される。なお、レコード検索処理の内容は、センターサーバSAにおけるレコード検索処理の内容と同様であるので、詳細な説明は省略する。
ステップS503において、制御部21は、レコードの検索要求がなかった場合には(ステップS503:NO)、ルートリンク情報メッセージを受信したか否かを判定する(ステップS505)。このとき、制御部21は、ルートリンク情報メッセージを受信した場合には(ステップS505:YES)、このルートリンク情報メッセージに含まれる情報をルートリンク情報としてRAMに設定する(ステップS506)。
ステップS505において、制御部21は、ルートリンク情報メッセージを受信していない場合には(ステップS505:NO)、ページ情報メッセージを受信したか否かを判定する(ステップS507)。このとき、制御部21は、ページ情報メッセージを受信した場合には(ステップS507:YES)、このページ情報メッセージに含まれる情報をページ情報としてファイルに保存する(ステップS508)。
制御部21は、ステップS504、S506又はS508の処理を終えたとき、或いは、ステップS507において、ページ情報メッセージを受信していない場合には(ステップS507:NO)、ステップS502に移行する。そして、制御部11は、ステップS502においてユーザからの終了指示があった場合には(ステップS502:YES)、本処理を終了させる。
以上説明したように、本実施形態によれば、制御部11が、一又は複数のレコードが格納された葉ページ情報を作成する。また、制御部11が、ルートページ情報の子ページ情報のメッセージダイジェストと、この子ページ情報のページ番号を含むリンク情報が格納されたルートページ情報を作成する。また、制御部11が、ルートページ情報以外の節ページ情報の子ページ情報のメッセージダイジェストと、この子ページ情報のページ番号を含むリンク情報が格納された節ページ情報を作成する。そして、制御部11が、作成した葉ページ情報、ルートページ情報及び節ページ情報を、木構造として記憶部12に保存する。
従って、木構造でレコードを管理することで、レコードの改竄チェックもでき、レコードの検索処理の時間が減る。
また、制御部11が、ルートページ情報のメッセージダイジェストと、ルートページ情報のページ番号と、ルートリンク情報の電子署名とが格納されたルートリンク情報を作成する。そして、制御部11が、作成したルートリンク情報を記憶部12に保存する。
従って、従来は全てのレコードに電子署名を施す必要があったのに対し、ルートリンク情報のみに電子署名を施すことで、子に位置するレコードの改竄を保障するために、根ページの電子署名を確かめることで、確認することができる。そのため、各レコードに電子署名を付与するに対し、各レコードのデータ量が小さくなる。また、各レコードに電子署名を施す処理が必要なくなるため、電子署名処理が不要となる。
また、制御部11が、入力部15から入力された検索キーと、節ページ情報に設定されているインデックスとに基づいて、担当ページ情報を決定する。また、制御部11が、決定した担当ページ情報に新規レコードが追加可能であるか否かを判定する。新規レコードが追加可能である場合には、制御部11が、決定した担当ページ情報の内容に新規レコードが追加設定された新たな葉ページ情報を作成する。一方、新規レコードが追加可能ではない場合、制御部11が、新たな葉ページ情報を作成し、新規レコードを新たな葉ページ情報に追加設定する。そして、制御部11が、新たに作成した葉ページ情報の親ページ情報からルートページ情報までの各節ページ情報のページ番号及びメッセージダイジェストを更新する。また、制御部11が、決定した葉ページ情報に、削除対象レコードが格納されている場合には、この削除対象レコードを削除した新たな葉ページ情報を作成する。そして、制御部11が、新たに作成した葉ページ情報の親ページ情報からルートページ情報までの各節ページ情報のページ番号及びメッセージダイジェストを更新する。
従って、木構造における葉ページ情報にレコードを簡単に追加することができる。また、担当ページ情報に新規レコードが追加不可能であっても、新たに追加した葉ページ情報に新規レコードを追加することができる。
また、制御部11が、入力部15から入力された検索キーと、節ページ情報に設定されているインデックスとに基づいて、担当ページ情報を決定する。また、制御部11が、決定した担当ページ情報に、削除対象レコードが格納されている場合には、この削除対象レコードを削除した新たな葉ページ情報を作成する。そして、制御部11が、新たに作成した葉ページ情報の親ページ情報からルートページ情報までの各節ページ情報のページ番号及びメッセージダイジェストを更新する。
従って、例えば古くなり削除したいレコードを排除することができる。
また、制御部11が、入力部15により入力された検索キーと、節ページ情報に設定されているインデックスとに基づいて、担当ページ情報を決定する。制御部11は、決定した担当ページ情報に、検索対象レコードが格納されている場合には、この検索対象レコードの情報をオペレータに提示する。
従って、検索対象のレコードを迅速に検索することができる。
なお、上記実施形態においては、本発明に係る管理装置を、ピアツーピアシステムにおけるサーバ装置に適用していたが、例えば、クライアント−サーバシステムにおけるサーバ装置に適用しても良い。
また、本発明は、コンテンツカタログ情報の検索に限定されるものではない。汎用的なデータベースのレコードとインデックスとしても適用可能である。