以下、本発明の実施形態を図面に基づいて説明する。なお、以下に説明する実施の形態は、コンテンツ分散保存システムに本発明を適用した場合の実施形態である。
[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には、保持するページ情報の担当範囲が夫々ある。そして、各ノードNnは、自分の担当範囲内のページ情報をセンターサーバSA又は他のノードNnから予め取得する。また、各ノードNnは、コンテンツの属性情報を検索する際、必要なページ情報がない場合には、この必要なページ情報をセンターサーバSA又は他のノードNnから取得する。ノード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やコンテンツ名等が用いられる場合、この情報は、レコードの設定内容に含める必要はない。このインデックスは、インデックス情報の一例である。
本実施形態においては、上述したようにルートリンク情報に対してのみ電子署名を作成しているが、全てのページ情報に対して電子署名を作成することを排除するものではない。ただし、電子署名は、証明書情報等の情報を設定する等して作成されることで、一般的に電子署名の方がメッセージダイジェストよりもセキュリティが高められている。このセキュリティを高めるための暗号化や改竄チェック時の復号化等の処理による計算量が大きく、また、電子証明書情報等の電子署名に必要なデータ量も大きくなる。そのため、電子署名よりもメッセージダイジェストの方が、計算量及びページ情報のデータ量ともに節約することができる。一方、全てのページ情報に対して電子署名を作成する場合、ルートリンク情報は必須ではない。この場合、ルートページ情報に対する電子署名を保存しておけば良い。
なお、本実施形態においては、ページ情報を更新する場合、上述したように新しいページ情報を作成しているが、ページ情報自体の内容を書き換えてもかまわない。
以上、図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分探索木であっても良い。
レコードの追加又は削除を行う場合には、カタログ情報の更新、つまり、ページ情報の更新が必要となる。このとき、本実施形態におけるページ情報の更新の原則は以下の通りである。
(1)ページ情報を追加するときは勿論のこと、ページ情報を更新するときも、元のページ情報の内容を更新したページ情報を新たに作成する。例えば、ページ情報をRAM上に作成する場合には、元のページ情報が格納されるアドレスとは異なるアドレスに新しいページ情報を作成する。また、ルートリンク情報を更新するときも、内容を更新したルートリンク情報を新たに作成する。
(2)ページ情報を新しく作成するときは、作成順にページ番号を割り当てる。
(3)ページ情報を新しく作成するときは、新しいページ情報のメッセージダイジェストを計算する。
(4)ルートリンク情報を新しく作成するときは、新しいルートリンク情報に対する電子署名を作成する。
(5)新しく作成されたページ情報のページ番号及びメッセージダイジェストを、このページ情報への新たなリンク情報として、親ページ情報に設定する。つまり、親ページ情報も更新する必要がある。また、ルートページ情報を新しく作成した場合は、このルートページ情報のページ番号及びメッセージダイジェストを、このページ情報への新たなリンク情報として、ルートリンク情報に設定する。つまり、ルートリンク情報も更新する必要がある。
(6)ページ情報の更新は、レコードが追加又は削除されるページ情報から開始し、このページ情報からルートページ情報までのパス(経路)上にあるページ情報を、ルートページ情報からの距離が長いページ情報から順に更新する。つまり、ルートページ情報が上方に、葉ページ情報が下方に位置すると仮定すると、下から順にページ情報を更新する。
(1)及び(2)の原則は、古いページ情報がカタログ情報に挿入されないためのものである。また、(3)乃至(5)の原則は、カタログ情報の内容の改竄を防止するためのものである。また、(6)の原則は、カタログ情報の改竄を防止するため、(5)の原則から当然に導き出されるものである。なお、これらの原則は、あくまでも本実施形態における原則である。例えば、前述したように、(1)の原則は本発明において必須ではない。
新しいページ情報が作成されることにより、古くなったページ情報、つまり、参照されなくなったページ情報は、参照されなくなった時点で削除しても良いし、削除しなくても良い。また、古くなったページ情報を定期的に削除するようにしても良い。
更に、本実施形態においては、各ページ情報に、合計ファイルサイズが設定される。合計ファイルサイズとは、合計ファイルサイズが設定されるページ情報を頂点とするサブツリーに含まれる全てのページ情報のファイルサイズの合計値である。この合計ファイルサイズは、例えば、レコードが追加されたとき、レコードが削除されたとき、ページ情報が生成されたとき、ページ情報が削除されたときに計算されて、ページ情報に設定される。また、各ノードNnにおいても、ページ情報の担当範囲を決定するときに、合計ファイルサイズの計算が行われる。また、適当なタイミングで合計ファイルサイズの計算が行われるようにしても良い。なお、ページ情報の担当範囲についての詳細は後述する。
[3.ページ情報の担当範囲及びレコードの検索]
次に、ノードNnのページ情報の担当範囲と、ノードNnによるレコードの検索について、図3乃至図6を用いて説明する。
レコードの検索は、センターサーバSAの後述するレコード検索処理において行われる。レコードを検索する場合において、目的のレコードを格納しているページ情報を探索する方法は、木構造における探索方法と同じである。つまり、ページ情報の探索方法は、カタログ情報の木構造に対応する探索アルゴリズムに依存する。また、レコードを追加、削除する場合にも、同様の探索方法が用いられる。
各ノードNnは、サーバSAと同様に、カタログ情報からコンテンツのレコードを検索する。従って、この検索の際、最新のページ情報が必要となる。ここで、全ノードNnが、最新のページ情報全てを保持するようにすれば、各ノードNnにて検索は可能である。しかし、登録されたコンテンツが膨大となると、カタログ情報が肥大化し、ページ情報も膨大な数となる。そうすると、一つのノードNnでは、全てのページ情報を保持しきれないおそれが生じる。
そこで、本実施形態では、各ノードNnが、自分の担当範囲を決定するようになっている。担当範囲とは、予め保持するページ情報の範囲である。担当範囲は、各ノードNnのノードIDに基づいて決定される。更に、担当範囲は、ファイルキャッシュ容量に基づいて確定する。ファイルキャッシュ容量は、担当範囲とするページ情報を記憶可能な最大容量である。このファイルキャッシュ容量は、全ノードNnに対して同一の値が用いられても良いし、各ノードNnのハードディスクの容量等に応じて個別に決定されるようにしても良い。このファイルキャッシュ容量は、記憶容量の一例である。
以下、担当範囲について具体的に説明するが、ここでは一例として、ノードIDが4進数4桁であるものとして説明する。また、コンテンツのインデックス及び検索キーとしては、コンテンツIDが用いられるものとする。また、コンテンツIDも4進数4桁であるものとする。
この前提で述べたように、ノードIDとコンテンツIDは、ID空間が一致する。つまり、ノードIDとコンテンツのインデックスも、取り得る値の範囲が一致する。そこで、ノードIDを検索キーとしてカタログ情報に挿入した場合に、その挿入位置からルートページ情報までのパス上にあるページ情報は、必ず担当範囲内となる。更に、ノードIDの挿入位置からルートページ情報までのパス上において、或るページ情報を頂点とするサブツリーに含まれる全てのページ情報の合計ファイルサイズが、ファイルキャッシュ容量以下である場合には、このサブツリーに含まれる全てのページ情報は担当範囲内となる。この合計ファイルサイズは、各ページ情報に設定されている。各ページ情報には、このページ情報を頂点とするサブツリーに含まれる全てのページ情報の合計ファイルサイズが設定されている。例えば、ルートページ情報には、全てのページ情報の合計ファイルサイズが設定されている。また、葉ページ情報には、この葉ページ情報自身のファイルサイズが設定されている。合計ファイルサイズは、総データ量の一例である。なお、サブツリーに含まれるページ情報とは、或るページ情報をサブツリーの頂点とした場合、頂点となるページ情報、及びこのページ情報から葉ページ情報へかけて関連付けられたページ情報である。
図3は、ノードNnのページ情報の担当範囲の一例を示す図である。
一例として、ノードIDが1102である場合について説明する。ルートリンク情報は、ページ情報を取得するために必ず必要である。従って、ルートリンク情報は、サーバSAから全ノードNnに配信される。また、本実施形態においては、ノードIDがどのような値をとろうとも、ノードIDの挿入位置からルートページ情報までのパス上に、ルートページ情報は必ず含まれる。そこで、本実施形態においては、ルートページ情報は担当範囲に含まれるものとする。図3においては、担当範囲のページ情報は実線で示されている。
ルートページ情報に格納されているリンク情報から、ルートページ情報には、例えばインデックスの上位一桁が「0」のページ情報、「1」のページ情報、「2」のページ情報、及び「3」の子ページ情報が存在することが分かる。ルートページ情報を頂点とするサブツリーに含まれる全てのページ情報の合計ファイルサイズが、例えばファイルキャッシュ容量より大きい場合には、サブツリーに含まれる全てのページ情報を担当範囲とすることはできない。そこで、ルートページ情報の子ページ情報の中から、担当範囲とするページ情報が決定される。具体的には、ノードIDの上位一桁が1であるので、このノードIDと上位桁の値同士が一致する「1」のページ情報が担当範囲内となる。一方、「0」のページ情報、「2」のページ情報、及び「3」の子ページ情報は、担当範囲とはならない。図3においては、担当範囲ではないページ情報は破線で示されている。
次に、「1」のページ情報に格納されているリンク情報から、「1」のページ情報には、例えばインデックスの上位二桁が「10」のページ情報、「11」のページ情報、「12」のページ情報、及び「13」の子ページ情報が存在することが分かる。「1」のページ情報を頂点とするサブツリーに含まれる全てのページ情報の合計ファイルサイズが、例えばファイルキャッシュ容量より大きい場合には、「1」のページ情報の子ページ情報の中から、担当範囲とするページ情報が決定される。ノードIDの上位一桁が11であるので、このノードIDと上位桁の値同士が一致する「11」のページ情報が担当範囲内となる。一方、「10」のページ情報、「12」のページ情報、及び「13」の子ページ情報は、担当範囲とはならない。
次に、「11」のページ情報に格納されているリンク情報から、「11」のページ情報には、例えばインデックスが「1101」のページ情報、「1113」のページ情報、「1122」のページ情報、及び「1130」の子ページ情報が存在することが分かる。これらの子ページ情報は葉ページ情報である。ここで、ノードIDである1101が挿入される位置は、「1101」のページ情報と「1113」のページ情報との間である。「11」のページ情報を頂点とするサブツリーに含まれる全てのページ情報の合計ファイルサイズが、例えばファイルキャッシュ容量以下である場合は、このサブツリーに含まれる全てのページ情報が担当範囲内となる。つまり、「1101」のページ情報、「1113」のページ情報、「1122」のページ情報、及び「1130」のページ情報が担当範囲内となる。
以上により、ノードIDが1102のノードNnは、ルートページ情報、「1」、「11」、「1101」、「1113」、「1122」及び「1130」のページ情報が担当範囲となる。ノードIDが1102のノードNnは、この担当範囲のページ情報を、サーバSA又は他のノードNnから取得し保持する。
他のノードNnにおいても、これと共通するルールによって担当範囲が決定される。この共通のルールでは、ルートページ情報以外にも、各ノードNn間で担当範囲が重複することもある。
次に、ノードNnによるレコードの検索と、検索の際のページ情報の取得方法について説明する。
図4乃至図6は、ノードNnがレコードを検索する際にページ情報を取得する様子の一例を示す図である。
例えば、ノードIDが1102であるノードN1が、コンテンツIDが2130のレコードを検索するとする。先ず、ルートリンク情報が指すルートページ情報が参照される。ルートページ情報には、「0」、「1」、「2」、及び「3」の子ページ情報が存在する。コンテンツIDの上位一桁は2であるので、次に「2」のページ情報を参照する必要がある。しかし、「2」のページ情報は、ノードN1の担当範囲ではなく、且つ、ノードN1は保持していない。従って、「2」のページ情報を他のノードから取得する必要がある。
この場合、ノードN1は、ノードN1が知っているノードNnの中で、「2」のページ情報を担当するのにノードN1自身よりふさわしいノードNnに、「2」のページ情報を要求する(1)。ここで、知っているノードNnとは、ルーティングテーブルにノード情報が登録されているノードNnをいう。また、「2」のページ情報の要求は、ページ情報要求メッセージの送信によって行われる。このページ情報要求メッセージには、例えば、「2」のページ情報のページ番号、検索キーとしてのコンテンツIDである2130等が設定される。また、ページ情報を担当するのにノードN1自身よりふさわしいノードNnとは、例えば、ノードIDが、ノードN1のノードIDよりもコンテンツIDの上位桁の値と多く一致するノードNnである。図4の例では、「2」のページ情報を担当するのにノードN1自身よりふさわしいノードNnとしては、例えば、ノードIDの上位一桁の値がコンテンツIDの上位一桁の値と同じ2であるノードNnが選択される。図4の例では、ノードIDが2301であるノードN2が選択される。もし、「2」のページ情報を担当するのにノードN1自身よりふさわしいノードNnが存在しなかった場合には、サーバSAに要求が行われる。
ノードN1から要求を受けたノードN2は、担当範囲内として「2」のページ情報を保持している。従って、ノードN2からノードN1に「2」のページ情報が送信される(2)。そして、図5に示すように、ノードN1において「2」のページ情報が保持される。図5においては、担当範囲ではないが、保持しているページ情報は太い実線で示されている。ここで、ルートページ情報には、「2」のページ情報のメッセージダイジェストが設定されているので、このメッセージダイジェストで「2」のページ情報の改竄チェックを行うことができる。
次に、「2」のページ情報には、「20」、「21」、「22」、及び「23」の子ページ情報が存在する。コンテンツIDの上位二桁は21であるので、次に「21」のページ情報を参照する必要がある。この「21」のページ情報は、ノードN1が保持していない。従って、前記と同様に、ノードIDの上位一桁の値がコンテンツIDの上位一桁の値と同じ2であるノードN2に、「21」のページ情報が要求される(3)。
ノードN1から要求を受けたノードN2は、「2」のページ情報を担当範囲としておらず、且つ、保持していない。この場合は、要求の転送が行われる。具体的には、ノードN2が知っているノードNnの中で、「21」のページ情報を担当するのにノードN2自身よりふさわしいノードNnに、「21」を要求するためのページ情報要求メッセージを転送する(4)。例えば、ノードIDの上位二桁の値がコンテンツIDの上位二桁の値と同じ21であるノードNnが選択される。図5の例では、ノードIDが2122であるノードN3が選択される。
ノードN2から要求の転送を受けたノードN3は、担当範囲内として「21」のページ情報を保持している。従って、ノードN3からノードN2に「21」のページ情報が送信される(5)。そして、ノードN2からノード1に「21」のページ情報が転送される(6)。なお、ノードN3からノードN1に直接ページ情報が送信されるようにしても良い。
このように、ページ情報要求メッセージは、要求されたページ情報を保持しているノードNnに辿り着くまで、次々と転送される。また、要求されたページ情報を担当するのに最もふさわしいノードNnが、要求されたページ情報を保持していない場合には、センターサーバSAにページ情報要求メッセージが転送される。
以下同様にして、「2130」のページ情報も取得される。このページ情報には、インデックスの値が2130であるレコードが格納されているので、検索が完了する。この結果、図6に示すように、ノードN1は、「2」、「21」及び「2130」を新たに保持する。これら担当範囲ではないページ情報は、検索後、必要な処理が終わったら削除しても良いし、削除しなくても良い。また、担当範囲ではないページ情報を削除する場合は、例えば、LRU(Least Recently Used)アルゴリズムに従って削除しても良い。
なお以上においては、ページ情報にインデックスが格納されていない場合について説明したが、ページ情報にインデックスが格納されている場合について補足的に説明する。
この場合、先ずルートリンク情報が指すルートページ情報に格納されている1又は複数のインデックスと検索キーとが比較される。このインデックスと検索キーとの大小比較によって、検索キーの値がどのインデックスの値の範囲であるのかが分かる。例えば、インデックスが、数値である場合、数値で表された検索キーと、数値で表されたインデックスとの大小比較が行われる。そこで、このインデックスの範囲に対応してルートページ情報に格納されているリンク情報が参照される。次に、このリンク情報が指すルートページ情報の子ページ情報が参照される。そして、この子ページ情報に関しても、ルートページ情報と同様に、インデックスと検索キーの大小比較が行われる。このようにして、ルートページ情報から葉ページ情報まで探索が行われる。葉ページ情報まで辿り着くと、葉ページ情報にも1又は複数のインデックスが夫々レコードと対応付けて格納されている。そこで、このインデックスと検索キーとが比較される。そして、インデックスの値と検索キーの値とが一致した場合、このときのインデックスに対応するレコードが検索対象のレコードである。
[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を介して相互に接続されている。ここで、記憶部12は、本発明におけるページ情報記憶手段の一例である。記憶部12は、揮発性のメモリであっても良いし、不揮発性のメモリであっても良い。
記憶部12には、各ノードNnのノードID、IPアドレス及びポート番号等が記憶されている。また、記憶部12には、カタログ情報がルートリンク情報及びページ情報単位で登録されるカタログデータベースが構築されている。更に、記憶部12には、カタログデータベースを管理するためのデータベース管理プログラムが記憶されている。データベース管理プログラムは、情報生成プログラムの一例である。
制御部11は、CPUが記憶部12等に記憶されたデータベース管理プログラム等のプログラムを読み出して実行することにより、ルートリンク情報やルートページ情報の作成等の処理を行う。
制御部11は、ページ情報を作成する際、作成しようとするページ情報を頂点とするサブツリーに含まれる全てのページ情報の合計ファイルサイズを、作成しようとするページ情報に設定する。作成しようとするページ情報の各子ページ情報には、この子ページ情報を頂点とするサブツリーに含まれる全てのページ情報の合計ファイルサイズが設定されている。設定されている情報により、子ページ情報以下のサブツリーに含まれる全てのページ情報の合計ファイルサイズを算出することができる。この算出された値に、作成しようとするページ情報のファイルサイズを加算すれば、合計ファイルサイズが得られる。
また、制御部11は、新たなルートリンク情報を作成すると、作成したルートリンク情報を、コンテンツ分散保存システムSに参加している全ノードNnに配信する。この配信は、例えば、オーバーレイマルチキャストで行われても良い。
レコードを検索する場合、制御部11は、入力部15により入力された検索キーと、節ページ情報に設定されているインデックスとに基づいて、担当ページ情報を決定する。レコードを検索する場合は、入力された検索キーに対応する検索対象レコードを格納する葉ページ情報が担当ページ情報である。制御部11は、決定した担当ページ情報に、検索対象レコードが格納されている場合には、この検索対象レコードの情報をオペレータに提示する。
なお、上記データベース管理プログラムは、例えば、ネットワーク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から配信されてきたページ情報が、ファイルとして記憶される。記憶部22は、所定の記憶領域の一例である。
制御部21は、CPUが記憶部22等に記憶されたプログラム(本発明のノードプログラムを含む)を読み出して実行することにより、ルートリンク情報取得手段、担当範囲決定手段、担当範囲判断手段、担当範囲ページ情報取得手段、担当範囲ページ情報記憶手段、記憶容量決定手段及び記憶容量判断手段として機能する。
また、制御部21は、コンテンツのレコードの検索を行う。この検索方法は、基本的にセンターサーバSAにおけるレコードの検索方法と同じである。ただし、必要なページ情報が保持されていない場合、制御部21は、センターサーバSA又は他のノードNnからページ情報を取得する。そして、制御部21は、検索されたレコードの内容に基づいて、必要な処理を行う。例えば、制御部21は、レコードの情報を表示部26に表示させたり、コンテンツが公開されているか否かを判断したり、レコードに含まれているコンテンツIDに基づいて、コンテンツ保持ノードからコンテンツを取得したりする。
なお、ノードプログラムは、例えば、ネットワーク8上の所定のサーバからダウンロードされるようにしても良いし、例えば、CD−ROM等の記録媒体に記録されてこの記録媒体のドライブを介して読み込まれるようにしても良い。
[6.コンテンツ分散保存システムSの動作]
次に、図9乃至図15を参照して、本実施形態に係るコンテンツ分散保存システム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から入力された検索キーを指定する。このレコード検索処理では、指定された検索キーに対応するレコードがカタログ情報から検索される。なお、レコード検索処理の詳細については後述する。
ステップS7において、制御部11は、レコードの検索要求がなかった場合には(ステップS7:NO)、ルートリンク情報要求メッセージを受信したか否かを判定する(ステップS9)。このとき、制御部11は、ルートリンク情報要求メッセージを受信した場合には(ステップS9:YES)。ルートリンク情報をルートリンク情報メッセージに含ませて、要求元のノードNnに送信する(ステップS10)。
ステップS9において、制御部11は、ルートリンク情報要求メッセージを受信していない場合には(ステップS9:NO)、ページ情報要求メッセージを受信したか否かを判定する(ステップS11)。このとき、制御部11は、ページ情報要求メッセージを受信した場合には(ステップS11:YES)、ページ情報取得処理を実行する(ステップS12)。このとき、制御部11は、ページ情報要求メッセージに含まれているリンク情報を指定する。このリンク情報は、要求されたページ情報を指している。ページ情報取得処理では、指定されたリンク情報が指すページ情報がファイルから取得され、RAMに格納される。なお、ページ情報取得処理の詳細な説明は省略する。制御部11は、要求されたページ情報を取得すると、このページ情報をページ情報メッセージに含ませて、要求元のノードNnに送信する(ステップS13)。
制御部11は、ステップS8、S10又はS13の処理を終えたとき、或いは、ステップS11において、ページ情報要求メッセージを受信していない場合には(ステップS11:NO)、ステップS6に移行する。そして、制御部11は、ステップS6においてオペレータからの終了指示があった場合には(ステップS6:YES)、本処理を終了させる。
図10は、本実施形態に係るセンターサーバSAにおける制御部11のページ情報登録処理における処理例を示すフローチャートである。
ページ情報登録処理は、例えば、ルートリンク情報登録処理において空のルートページ情報が作成された場合、レコードの追加に伴って新たなページ情報が作成された場合、及び、レコードの削除に伴って新たなページ情報が作成された場合に実行される。ページ情報登録処理が実行される際、新たに作成されたページ情報が指定される。この新たに作成されたページ情報は、例えばRAMに格納されている。
先ず、制御部11は、登録対象として指定されたページ情報に、今までに割り当てられていない最新のページ番号を割り当てる(ステップS151)。
次いで、制御部11は、登録対象のページ情報を頂点とするサブツリーに含まれるページ情報を全て保存するのに必要なファイルサイズを計算する(ステップS152)。例えば、制御部11は、登録対象のページ情報に格納されているリンク情報から、登録対象のページ情報の子ページ情報を特定する。子ページ情報を特定すると、制御部11は、特定された各子ページ情報に設定されている合計ファイルサイズを取得する。そして、制御部11は、取得した合計ファイルサイズを合算する。最後に、制御部11は、合算したファイルサイズに、登録対象のページ情報のファイルサイズを加算する。
次いで、制御部11は、計算されたファイルサイズを、登録対象のページ情報に、合計ファイルサイズとして設定する(ステップS153)。
次いで、制御部11は、登録対象のページ情報のメッセージダイジェストを計算する(ステップS154)。
次いで、制御部11は、登録対象のページ情報をファイルに保存する(ステップS155)。このとき、ページ情報がどこに保存されているかが特定することができるよう、例えば、ファイル名にページ番号が付加される。制御部11は、この処理を終えると、ページ情報登録処理を終了させ、割り当てたページ番号と計算したメッセージダイジェストとからなるリンク情報を、呼び出し元の処理に返却する。
図11は、本実施形態に係るセンターサーバSAにおける制御部11のレコード検索処理における処理例を示すフローチャートである。
先ず、制御部11は、現在のルートリンク情報をRAMから取得する(ステップS351)。次いで、制御部11は、ページ情報取得処理を実行する(ステップS352)。次いで、制御部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の動作]
図12は、本実施形態に係るノードNnにおける制御部21の処理例を示すフローチャートである。
図12に示す処理は、例えば、ノードNnが、コンテンツ分散保存システムSに参加したときに開始される。先ず、制御部21は、初期化処理を実行する(ステップS501)。この初期化処理では、ルートリンク情報が取得される。なお、初期化処理の詳細は後述する。
次いで、制御部21は、ユーザからの終了指示があったか否かを、入力部30からの入力に基づいて判定する(ステップS502)。
ステップS2において、制御部21は、終了指示がない場合には(ステップS502:NO)、ユーザからのレコードの検索要求があったか否かを、入力部30からの入力に基づいて判定する(ステップS503)。このとき、制御部21は、レコードの検索要求があった場合には(ステップS503:YES)、レコード検索処理を実行する(ステップS504)。このレコード検索処理では、ユーザにより指定された検索キーに対応するレコードがカタログ情報から検索される。なお、レコード検索処理の内容は、センターサーバSAにおけるレコード検索処理の内容と同様であるので、詳細な説明は省略する。ただし、レコード検索処理から実行されるページ情報取得処理の内容は、センターサーバSAにおけるページ情報取得処理とは異なる。
ステップS503において、制御部21は、レコードの検索要求がなかった場合には(ステップS503:NO)、ルートリンク情報要求メッセージを受信したか否かを判定する(ステップS505)。このとき、制御部21は、ルートリンク情報要求メッセージを受信した場合には(ステップS505:YES)、RAMに格納されているルートリンク情報をルートリンク情報メッセージに含ませて、要求元のノードNnに送信する(ステップS506)。
ステップS505において、制御部21は、ルートリンク情報要求メッセージを受信していない場合には(ステップS505:NO)、ページ情報要求メッセージを受信したか否かを判定する(ステップS507)。このとき、制御部21は、ページ情報要求メッセージを受信した場合には、ページ情報取得処理を実行する(ステップS508)。このとき、制御部21は、ページ情報要求メッセージに含まれているリンク情報及び検索キーを指定する。ページ情報取得処理では、指定されたリンク情報が指すページ情報がファイルから取得され、RAMに格納される。また、指定されたリンク情報が指すページ情報を保存するファイルがない場合には、センターサーバSA又は他のノードNnからこのページ情報が取得される。なお、ページ情報取得処理の詳細については後述する。制御部21は、要求されたページ情報を取得すると、このページ情報をページ情報メッセージに含ませて、要求元のノードNnに送信する(ステップS509)。
ステップS507において、制御部21は、ページ情報要求メッセージを受信していない場合には(ステップS507:NO)、ルートリンク情報取得手段として、ルートリンク情報メッセージを受信したか否かを判定する(ステップS510)。このとき、制御部21は、ルートリンク情報メッセージを受信した場合には(ステップS510:YES)、このルートリンク情報メッセージに含まれる情報をルートリンク情報としてRAMに設定する(ステップS511)。
ステップS510において、制御部21は、ルートリンク情報メッセージを受信していない場合には(ステップS510:NO)、ページ情報メッセージを受信したか否かを判定する(ステップS512)。このとき、制御部21は、ページ情報メッセージを受信した場合には(ステップS512:YES)、このページ情報メッセージに含まれる情報をページ情報としてファイルに保存する(ステップS513)。
ステップS512において、制御部21は、ページ情報メッセージを受信していない場合には(ステップS512:NO)、担当ページ情報取得処理を実行する(ステップS514)。担当ページ情報取得処理では、ノードNnの担当範囲内にあるページ情報がサーバSA又は他のノードNnから取得され、記憶部22に記憶される。
制御部21は、ステップS504、S506、S509、S511、S513又はS514の処理を終えたときには、ステップS502に移行する。そして、制御部11は、ステップS502においてユーザからの終了指示があった場合には(ステップS502:YES)、本処理を終了させる。
図13は、本実施形態に係るノードNnにおける制御部21の初期化処理における処理例を示すフローチャートである。
先ず、制御部21は、コンテンツ分散保存システムSに参加中の他のノードNnに、ルートリンク情報要求メッセージを送信する(ステップS551)。ルートリンク情報要求メッセージの送信先のノードNnとしては、例えば、ルーティングテーブルにノード情報が登録されているノードNnのうち任意のノードNnが選択される。
次いで、制御部21は、ルートリンク情報要求メッセージの送信に対応して、送信先のノードNnから送信されてきたルートリンク情報メッセージを受信する(ステップS552)。次いで、制御部21は、受信されたルートリンク情報メッセージから、ルートリンク情報をRAM上に設定する(ステップS553)。次いで、制御部21は、ルートリンク情報メッセージに添付されている電子署名でルートリンク情報の改竄をチェックする(ステップS554)。このチェック方法は、センターサーバSAの初期処理におけるルートリンク情報の改竄チェックと同様である。
次いで、制御部21は、ルートリンク情報は改竄されているか否かを判定する(ステップS555)。このとき、制御部21は、ルートリンク情報は改竄されていない場合には(ステップS555:NO)、初期化処理を終了させる。
一方、制御部21は、ルートリンク情報は改竄されている場合には(ステップS555:YES)、センターサーバSAにルートリンク情報要求メッセージを送信する(ステップS556)。次いで、ステップS552に移行する。ここで、制御部21は、再度、センターサーバSAからルートリンク情報メッセージを受信し、ルートリンク情報を設定し、改竄チェックを行う(ステップS552〜S554)。
そして、ステップS555において、制御部21は、センターサーバSAから受信したルートリンク情報が改竄されていない場合には(ステップS555:NO)、初期化処理を終了させる。
図14は、本実施形態に係るノードNnにおける制御部21のページ情報取得処理における処理例を示すフローチャートである。
先ず、制御部21は、指定されたリンク情報が有効なページ情報を指しているか否かを判定する(ステップS601)。例えば、リンク情報のページ番号が無効な値に設定される場合、このリンク情報は有効なページ情報を指していない。例えば、ページ番号が1から始まるように定められている場合、ページ番号に1以上の値が設定されているリンク情報は有効であり、ページ番号に0が設定されているリンク情報は無効である。このとき、制御部21は、指定されたリンク情報が有効なページ情報を指していない場合には(ステップS601:NO)、ページ情報取得処理を終了させる。この場合、ページ情報無しという情報が、呼び出し元の処理に返却される。
一方、制御部21は、指定されたリンク情報が有効なページ情報を指している場合には(ステップS601:NO)、このリンク情報に含まれるページ番号が指すファイルが記憶部22に記憶されているか否かを判定する(ステップS602)。このとき、制御部21は、指定されたリンク情報に含まれるページ番号が指すファイルが記憶されている場合には(ステップS602:YES)、このリンク情報に含まれるページ番号が指すファイルからページ情報を読み出してRAMに格納する(ステップS603)。
次いで、制御部21は、指定されたリンク情報に含まれるメッセージダイジェストを用いて、読み出したページ情報の改竄をチェックする(ステップS604)。このチェック方法は、センターサーバSAのページ情報取得処理におけるページ情報の改竄チェックと同様である。
次いで、制御部21は、読み出したルートページ情報は改竄されているか否かを判定する(ステップS605)。このとき、制御部21は、ページ情報は改竄されていない場合には(ステップS605:NO)、読み出したページ情報を呼び出し元の処理に返却し、ページ情報取得処理を終了させる。
ステップS602において、制御部21は、指定されたリンク情報に含まれるページ番号が指すファイルが記憶されていない場合には(ステップS602:NO)、リンク情報が指すページ情報を担当するのに制御部21自身のノードNnよりもふさわしいノードNnが存在するか否かを判定する(ステップS606)。リンク情報が指すページ情報を担当するのにふさわしいノードNnが存在するか否かは、ルーティングテーブルにノード情報が登録されているノードNnの範囲内で判断される。また、ページ情報を担当するのに制御部21自身のノードNnよりもふさわしいノードNnとは、例えば、ノードIDが、制御部21自身のノードNnのノードIDよりも、指定された検索キーの上位桁の値と多く一致するノードNnである。
制御部21は、リンク情報が指すページ情報を担当するのに制御部21自身のノードNnよりもふさわしいノードNnが存在しない場合(ステップS606:NO)、又は、ステップS605において、ページ情報が改竄されている場合には(ステップS605:YES)、センターサーバSAにページ情報要求メッセージを送信する(ステップS607)。このとき、制御部21は、指定されたリンク情報及び検索キーをページ情報要求メッセージに設定する。
一方、制御部21は、リンク情報が指すページ情報を担当するのに制御部21自身のノードNnよりもふさわしいノードNnが存在する場合には、リンク情報が指すページ情報を担当するのに最もふさわしいノードNnにページ情報要求メッセージを送信する(ステップS608)。ページ情報を担当するのに最もふさわしいノードNnとは、例えば、ノードIDが、指定された検索キーの上位桁の値と最も多く一致するノードNnである。
制御部21は、ステップS607又はS608において、ページ情報要求メッセージを送信すると、このページ情報要求メッセージの送信に対応してセンターサーバSA又は他のノードNnから送信されてきたページ情報メッセージを受信する(ステップS609)。次いで、制御部21は、受信したページ情報メッセージに含まれる情報をページ情報としてファイルに保存する(ステップS610)。制御部21は、この処理を終えると、ステップS603に移行する。ここで、制御部21は、再度、ページ情報を読み出し、読み出したページ情報の改竄チェックを行う(ステップS603、S604)。そして、ステップS605において、制御部21は、ページ情報は改竄されていない場合には(ステップS605:NO)、ページ情報取得処理を終了させる。
図15は、本実施形態に係るノードNnにおける制御部21の担当ページ情報取得処理における処理例を示すフローチャートである。
先ず、制御部21は、現在のルートリンク情報をRAMから取得する(ステップS651)。次いで、制御部21は、ページ情報取得処理を実行する(ステップS652)。このとき、制御部21は、担当範囲ページ情報取得手段として、取得したルートリンク情報を指定する。また、制御部21は、検索キーとして、制御部21自身のノードNnのノードIDを指定する。ページ情報取得処理において取得されたページ情報は、現在参照しているページ情報とされる。
次いで、制御部21は、記憶容量判断手段として、ページ情報の保存のためのファイルキャッシュ容量が、取得したページ情報に設定されている合計ファイルサイズ以上であるか否かを判定する(ステップS653)。なお、制御部21は、記憶容量決定手段として、少なくともステップS653の判定よりも前に、ファイルキャッシュ容量を決定する。このファイルキャッシュ容量は、固定値であっても良いし、記憶部22の容量に応じて決定されても良い。
制御部21は、ファイルキャッシュ容量が、取得したページ情報に設定されている合計ファイルサイズ未満である場合には(ステップS653:NO)、現在参照しているページ情報から、次のページ情報へのリンク情報を取得する(ステップS654)。ここで、次のページ情報とは、現在参照しているページ情報の子ページ情報のうち、担当範囲内にあるページ情報をいう。制御部21は、先ず、担当範囲決定手段として、制御部21自身のノードNnのノードIDに基づいて担当範囲を決定する。この担当範囲の決定は、カタログ情報の探索木の構造に対応した探索アルゴリズムに従って行われる。一例としては、現在参照しているページ情報がルートページ情報である場合には、インデックスの上位一桁の値がノードIDの上位一桁の値と一致するページ情報が担当範囲となる。また、現在参照しているページ情報がルートページ情報の子ページ情報である場合には、インデックスの上位二桁の値がノードIDの上位二桁の値と一致するページ情報が担当範囲となる。次いで、制御部21は、担当範囲判断手段として、現在参照している子ページ情報が、決定した担当範囲内のページ情報であるか否かを判断する。例えば、制御部21は、ルートページ情報の子ページ情報のうち、格納されているインデックスが、決定された担当範囲内のインデックスであるページ情報があるか否かを判断する。より具体的には、制御部21は、現在参照しているページ情報の子ページ情報のうちどの子ページ情報が、決定した担当範囲内のページ情報であるか判断する。そして、制御部21は、担当範囲内であると判断したページ情報を指すリンク情報を取得する。
次いで、制御部21は、次のページ情報へのリンク情報が存在するか否かを判定する(ステップS655)。つまり、制御部21は、次のページ情報へのリンク情報を取得することができたか否かを判定する。このとき、制御部21は、次のページ情報へのリンク情報が存在する場合には(ステップS655:YES)、ステップS652に移行する。このとき、制御部21は、取得したリンク情報を指定し、且つ、制御部21自身のノードNnのノードIDを検索キーとして指定して、ページ情報取得処理を実行する。
ステップS653において、制御部21は、ファイルキャッシュ容量が、取得したページ情報に設定されている合計ファイルサイズ以上である場合には(ステップS653:YES)、担当範囲ページ情報取得手段として、取得したページ情報を頂点とするサブツリーに含まれる全てのページ情報を取得する(ステップS656)。ただし、頂点とするページ情報は、既にステップS652のページ情報取得処理で取得されているので、ステップS656における取得対象からは除かれる。ステップS656の処理では、サブツリーに含まれる各ページ情報を取得するために、夫々ページ情報取得処理が実行される。つまり、取得対象のページ情報を保存するファイルが記憶部22に記憶されていない場合に、この取得対象のページ情報が、センターサーバSA又は他のノードNnから取得される。
制御部21は、ステップS656の処理を終えたとき、又は、ステップS655において次のページ情報へのリンク情報が存在しない場合には(ステップS655:NO)、担当ページ情報取得処理を終了させる。
以上説明したように、本実施形態によれば、センターサーバSAの記憶部12が、一又は複数のレコードが格納された葉ページ情報を記憶する。また、記憶部12が、ルートページ情報の子ページ情報のメッセージダイジェストと、この子ページ情報のページ番号を含むリンク情報が格納されたルートページ情報を記憶する。また、記憶部12が、ルートページ情報以外の節ページ情報の子ページ情報のメッセージダイジェストと、この子ページ情報のページ番号を含むリンク情報が格納された節ページ情報を記憶する。また、記憶部12が、ルートページ情報のメッセージダイジェストと、ルートページ情報のページ番号と、ルートリンク情報の電子署名とが格納されたルートリンク情報を記憶する。一方、ノードNnの制御部21が、サーバSA又は他のノードNnからルートリンク情報を取得する。また制御部21が、ページ情報の担当範囲を決定する。また、制御部21が、取得したルートリンク情報が指すルートページ情報の子ページ情報が、決定した担当範囲内のページ情報であるか否かを判定する。また、制御部21が、担当範囲内であると判断した子ページ情報を頂点とするサブツリーに含まれる全てのページ情報を、サーバSA又は他のノードNnから取得する。そして、制御部21が、取得したページ情報を記憶部12に記憶させる。
従って、木構造でレコードを管理することで、レコードの改竄チェックもでき、レコードの検索処理の時間を減らすことができる。更に、各ノードNnは、自己の担当範囲のページ情報を取得して記憶すればよいので、各ノードNnの記憶負担を低減しつつ、各ノードNnに記憶されるページ情報を効率良く分散させることができる。
また、ノードNnの制御部21が、ファイルキャッシュ容量を決定する。また、制御部21が、担当範囲内であると判断した子ページ情報を取得する。また、制御部21が、担当範囲内であると判断した子ページ情報を頂点とするサブツリーに含まれる全てのページ情報の合計ファイルサイズが、ファイルキャッシュ容量以下であるか否かを判定する。サブツリーに含まれる全てのページ情報の合計ファイルサイズが、ファイルキャッシュ容量以下である場合、制御部21が、サブツリーに含まれる全てのページ情報をサーバSA又は他のノードNnから取得する。
従って、ファイルキャッシュ容量に空きがある場合、各ノードNnは可能な限りページ情報を保持しておくことができる。従って、ページ情報を取得するための通信負荷を低減することができる。
また、ノードNnの制御部21が、担当範囲内であると判断した子ページ情報を頂点とするサブツリーに含まれる全てのページ情報の合計ファイルサイズが、ファイルキャッシュ容量以下でない場合には、担当範囲内であると判断した子ページ情報の次の子ページ情報が担当範囲内であるか否かを判定する。また、制御部21が、担当範囲内であると判断した次の子ページ情報を取得する。また、制御部21が、担当範囲内であると判断した次の子ページ情報を頂点とするサブツリーに含まれる全てのページ情報の合計ファイルサイズが、ファイルキャッシュ容量以下であるか否かを判定する。サブツリーに含まれる全てのページ情報の合計ファイルサイズが、ファイルキャッシュ容量以下である場合、制御部21が、サブツリーに含まれる全てのページ情報をサーバSA又は他のノードNnから取得する。
従って、各ノードNnは、自己のファイルキャッシュ容量に応じたデータ量のページ情報を取得して記憶することができる。
また、各ページ情報には、このページ情報を頂点とするサブツリーに含まれる全てのページ情報の合計ファイルサイズが設定されている。
従って、ノードNnは、合計ファイルサイズがファイルキャッシュ容量以下であるか否かの判断に当たって、ページ情報から合計ファイルサイズを取得すればよいので、この判断を迅速に行うことができる。
また、ノードNnの制御部21が、ノードNnに割り当てられたノードIDに基づいて、ルートページ情報の子ページ情報に含まれるインデックスが、担当範囲内のインデックスであるか判断する。そして、制御部21が、担当範囲内のインデックスと判断した子ページ情報を、サーバSA又は他のノードNnから取得する。
従って、ノードIDに基づいて、担当範囲が決まるので、各ノードIDごとに自動で担当範囲を決定することができ、各ノードNnに記憶される担当範囲のページ情報を効率良く分散させることができる。
なお、上記実施形態においては、ファイルキャッシュ容量に応じて担当範囲が最終的に決まるようになっていたが、ファイルキャッシュ容量を考慮しなくても良い。この場合は、例えば、インデックスの上位所定数の桁の値が、ノードIDの上位所定数の桁の値と一致するページ情報を担当範囲としても良い。
また、上記実施形態においては、ノードNnがレコードを検索する際、ノードNn自身が保持していないページ情報を、コンテンツサーバSA又は他のノードNnから取得し、取得したページ情報を参照して、自らが検索を行うようにしていた。しかし例えば、ノードNnは、ノードIDから必要なページ情報を保持していると思われる他のノードNnにレコードの検索をリクエストしても良い。この場合は、リクエスト先のノードNnが、保持しているページ情報を検索し、検索結果としてのレコードをリクエスト元のノードNnに送信する。また、リクエスト先のノードNnは、必要なページ情報ほほ持していない場合には、検索のリクエストを更に他のノードNnに転送する。この転送は、ページ情報要求メッセージの転送と同様である。
また、上記実施形態においては、本発明に係る管理装置を、ピアツーピアシステムにおけるサーバ装置に適用していたが、例えば、クライアント−サーバシステムにおけるサーバ装置に適用しても良い。
また、本発明は、コンテンツカタログ情報の検索に限定されるものではない。汎用的なデータベースのレコードとインデックスとしても適用可能である。