(57)【要約】【課題】レコードの検索を効率良く行う。【解決手段】レコードの検索のために入力される検索キー情報との比較対象であるキー情報を有するレコードを一又は複数含む葉ページ情報を生成し、根ページ情報から葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する葉ページ情報に、検索キー情報で検索されるレコードが含まれている可能性の有無を判定するために用いられる判定情報を、当該葉ページ情報に含まれるレコードが有するキー情報に基づいて生成し、当該判定情報を含む節ページ情報を生成し、根ページ情報の子の位置の節ページ情報に含まれる判定情報を含む根ページ情報を生成し、根ページ情報と、節ページ情報と、葉ページ情報とを木構造で記憶する。【選択図】図３
2011070607.tif 000002
【特許請求の範囲】
【請求項１】
複数のページ情報を木構造として、根に位置する根ページ情報から葉に位置する葉ページ情報にかけて関連付けて記憶するページ情報記憶手段と、
レコードの検索のために入力される検索キー情報との比較対象であるキー情報を有するレコードを一又は複数含む前記葉ページ情報を生成する葉ページ情報生成手段と、
前記根ページ情報から前記葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する前記葉ページ情報に、前記検索キー情報で検索される前記レコードが含まれている可能性の有無を判定するために用いられる判定情報を、当該葉ページ情報に含まれる前記レコードが有する前記キー情報に基づいて生成し、当該判定情報を含む前記節ページ情報を生成する節ページ情報生成手段と、
前記根ページ情報の子の位置の前記節ページ情報に含まれる前記判定情報を含む前記根ページ情報を生成する根ページ情報生成手段と、
を備え、
前記ページ情報記憶手段は、前記根ページ情報と、前記節ページ情報と、前記葉ページ情報とを前記木構造で記憶することを特徴とする情報生成装置。
【請求項２】
請求項１に記載の情報生成装置において、
前記節ページ情報生成手段及び前記根ページ情報生成手段は、
生成する前記ページ情報の子の位置に複数の前記節ページ情報が関連付けられている場合に、当該複数の節ページ情報に含まれる前記判定情報を合成して新たな前記判定情報を生成する合成手段を備え、
前記節ページ情報生成手段及び前記根ページ情報生成手段は、
前記合成手段により生成された前記判定情報を含む前記ページ情報を生成することを特徴とする情報生成装置。
【請求項３】
請求項２に記載の情報生成装置において、
前記判定情報はハッシュ値をインデックスとする配列構造を有し、前記判定情報の各配列要素は前記キー情報の有無を少なくとも示し、
前記節ページ情報生成手段は、前記節ページ情報の子の位置以下に位置する前記葉ページ情報に含まれる前記レコードが有する前記キー情報のハッシュ値を算出し、当該ハッシュ値に対応する配列要素が前記キー情報有りを示す前記判定情報を生成し、
前記合成手段は、生成する前記ページ情報の子に位置する複数の前記節ページ情報に含まれる前記判定情報の配列要素毎の論理和を算出することによって前記新たな判定情報を生成することを特徴とする情報生成装置。
【請求項４】
請求項３に記載の情報生成装置において、
前記節ページ情報生成手段及び前記根ページ情報生成手段は、
前記判定情報を圧縮して圧縮判定情報を生成し、前記圧縮判定情報を前記判定情報として含む前記ページ情報を生成し、前記圧縮判定情報の情報量が所定量を超える場合には、前記判定情報を分割してなる複数の分割判定情報の配列要素毎の論理和を算出することによって分割合成判定情報を生成し、当該分割合成判定情報を圧縮して前記圧縮判定情報を生成することを特徴とする情報生成装置。
【請求項５】
請求項２に記載の情報生成装置において、
前記キー情報は、数値情報であるか、又は、数値情報で示される属性を有する情報であり、
前記節ページ情報生成手段は、前記節ページ情報の子の位置以下に位置する前記葉ページ情報に含まれる前記レコードが有する前記キー情報又は当該キー情報の属性の何れか一方が示す数値情報の中から、値が最小の数値情報を下限値とし、値が最大の数値情報を上限値とする範囲を示す前記判定情報を生成し、
前記合成手段は、前記節ページ情報生成手段又は前記根ページ情報生成手段により生成される前記ページ情報の子に位置する複数の前記節ページ情報に含まれる前記判定情報の下限値の中から最小の下限値を新たな下限値とし、当該複数の節ページ情報に含まれる前記判定情報の上限値の中から最大の上限値を新たな上限値とする前記新たな判定情報を生成することを特徴とする情報生成装置。
【請求項６】
請求項１に記載の情報生成装置において、
前記検索キー情報を入力する検索入力手段と、
前記根ページ情報から前記葉ページ情報にかけて、検索対象とする前記ページ情報を移っていきながら、前記検索入力手段により入力された前記検索キー情報を用いて前記レコード情報を検索する検索手段と、
を更に備え、
前記検索手段は、
検索対象となっている前記ページ情報が前記根ページ情報又は前記節ページ情報である場合、当該ページ情報に含まれる前記判定情報と、前記検索入力手段により入力された前記検索キー情報と、に基づいて、当該検索キー情報で検索される前記レコードの存在の可能性の有無を判定する判定手段を備え、
前記判定手段により前記検索キー情報で検索される前記レコードが存在する可能性が無いと判定された場合には、検索対象となっている前記ページ情報の子の位置の子ページ情報から前記葉ページ情報へかけて関連付けられたページ情報を検索対象から除外することを特徴とする情報生成装置。
【請求項７】
根に位置する根ページ情報から葉に位置する葉ページ情報にかけて木構造として関連付けられる複数のページ情報を生成するための情報生成プログラムであって、
入力される検索キー情報との比較対象であるキー情報を有するレコードを一又は複数含む前記葉ページ情報を生成する葉ページ情報生成ステップと、
前記根ページ情報から前記葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する前記葉ページ情報に、前記検索キー情報で検索される前記レコードが含まれている可能性の有無を判定するために用いられる判定情報を、当該葉ページ情報に含まれる前記レコードが有する前記キー情報に基づいて生成し、当該判定情報を含む前記節ページ情報を生成する節ページ情報生成ステップと、
前記根ページ情報の子の位置の前記節ページ情報に含まれる前記判定情報を含む前記根ページ情報を生成する根ページ情報生成ステップと、
前記根ページ情報と、前記節ページ情報と、前記葉ページ情報とを前記木構造で記憶するページ情報記憶ステップと、
をコンピュータに実行させることを特徴とする情報生成プログラム。
【請求項８】
根に位置する根ページ情報から葉に位置する葉ページ情報にかけて木構造として関連付けられる複数のページ情報を生成する情報生成方法であって、
複数のページ情報を木構造として、根に位置する根ページ情報から葉に位置する葉ページ情報にかけて関連付けて記憶するページ情報記憶工程と、
レコードの検索のために入力される検索キー情報との比較対象であるキー情報を有するレコードを一又は複数含む前記葉ページ情報を生成する葉ページ情報生成工程と、
前記根ページ情報から前記葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する前記葉ページ情報に、前記検索キー情報で検索される前記レコードが含まれている可能性の有無を判定するために用いられる判定情報を、当該葉ページ情報に含まれる前記レコードが有する前記キー情報に基づいて生成し、当該判定情報を含む前記節ページ情報を生成する節ページ情報生成工程と、
前記根ページ情報の子の位置の前記節ページ情報に含まれる前記判定情報を含む前記根ページ情報を生成する根ページ情報生成工程と、
前記根ページ情報と、前記節ページ情報と、前記葉ページ情報とを前記木構造で記憶するページ情報記憶工程と、
を有することを特徴とする情報生成方法。
【請求項９】
レコードの検索のために用いられる検索キー情報を入力する第２検索入力手段と、
複数のページ情報を木構造として、根に位置する根ページ情報から葉に位置する葉ページ情報にかけて関連付けて記憶し、
前記第２検索入力手段により入力される前記検索キー情報との比較対象であるキー情報を有するレコードを一又は複数含む前記葉ページ情報と、
前記根ページ情報から前記葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する前記葉ページ情報に前記検索キー情報で検索される前記レコードが含まれている可能性の有無を判定するために、当該葉ページ情報に含まれる前記レコードが有する前記キー情報に基づいて生成された判定情報を含む前記節ページ情報と、
前記根ページ情報の子の位置の前記節ページ情報に含まれる前記判定情報を含む前記根ページ情報と、
を記憶する第２ページ情報記憶手段と、
前記根ページ情報から前記葉ページ情報にかけて、検索対象とする前記ページ情報を移っていきながら、前記第２検索入力手段により入力された前記検索キー情報を用いて前記レコード情報を検索する第２検索手段と、を備え、
前記第２検索手段は、
検索対象となっている前記ページ情報が前記根ページ情報又は前記節ページ情報である場合、当該ページ情報に含まれる前記判定情報と、前記第２検索入力手段により入力された前記検索キー情報と、に基づいて、当該検索キー情報で検索される前記レコードの存在の可能性の有無を判定する第２判定手段を備え、
前記第２判定手段により前記検索キー情報で検索される前記レコードが存在する可能性が無いと判定された場合には、検索対象となっている前記ページ情報の子の位置の子ページ情報から前記葉ページ情報へかけて関連付けられたページ情報を検索対象から除外することを特徴とするノード装置。
【請求項１０】
請求項９に記載のノード装置において、
検索対象となっている前記ページ情報が前記第２ページ情報記憶手段に記憶されていない場合に、当該ページ情報を他のノード装置からネットワークを介して取得するページ情報取得手段を更に備え、
前記第２検索手段は、前記第２ページ情報記憶手段に記憶されたページ情報と、前記ページ情報取得手段により取得されたページ情報とに基づいて検索を行うことを特徴とするノード装置。
【請求項１１】
請求項１０に記載のノード装置において、
前記根ページ情報及び前記節ページ情報は、子の位置の前記ページ情報の改竄をチェックするための改竄チェック情報を含み、
前記ページ情報取得手段により取得された前記ページ情報が改竄されているか否かを、当該ページ情報の親の位置の前記ページ情報に含まれる前記改竄チェック情報に基づいて判定する改竄判定手段を更に備え、
前記第２判定手段は、前記改竄チェック手段により改竄されていないと判定された前記ページ情報が前記根ページ情報又は前記節ページ情報である場合、前記第２検索入力手段により入力された前記検索キー情報で検索される前記レコードの存在の可能性の有無を判定することを特徴とするノード装置。
【請求項１２】
根に位置する根ページ情報から葉に位置する葉ページ情報にかけて木構造として関連付けられる複数のページ情報を用いてレコードを検索するためのノードプログラムであって、
レコードの検索のために入力される検索キー情報との比較対象であるキー情報を有するレコードを一又は複数含む前記葉ページ情報と、
前記根ページ情報から前記葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する前記葉ページ情報に前記検索キー情報で検索される前記レコードが含まれている可能性の有無を判定するために当該葉ページ情報に含まれる前記レコードが有する前記キー情報に基づいて生成された判定情報を含む前記節ページ情報と、
前記根ページ情報の子の位置の前記節ページ情報に含まれる前記判定情報を含む前記根ページ情報と、
を記憶する第２ページ情報記憶手段に記憶された前記根ページ情報から前記葉ページ情報にかけて、検索対象とする前記ページ情報を移っていきながら、前記入力された前記検索キー情報を用いて前記レコード情報を検索する第２検索ステップと、
をコンピュータに実行させ、
前記第２位検索ステップにおいて、検索対象となっている前記ページ情報が前記根ページ情報又は前記節ページ情報である場合、当該ページ情報に含まれる前記判定情報と、前記入力された前記検索キー情報と、に基づいて、当該検索キー情報で検索される前記レコードの存在の可能性の有無を判定する第２判定ステップを前記コンピュータに実行させ、
前記第２判定ステップにより前記検索キー情報で検索される前記レコードが存在する可能性が無いと判定された場合には、検索対象となっている前記ページ情報の子の位置の子ページ情報から前記葉ページ情報へかけて関連付けられたページ情報を検索対象から除外するように、前記第２位検索ステップを前記コンピュータに実行させることを特徴とするノードプログラム。
【請求項１３】
根に位置する根ページ情報から葉に位置する葉ページ情報にかけて木構造として関連付けられる複数のページ情報を用いてレコードを検索する検索方法であって、
レコードの検索のために入力される検索キー情報との比較対象であるキー情報を有するレコードを一又は複数含む前記葉ページ情報と、
前記根ページ情報から前記葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する前記葉ページ情報に前記検索キー情報で検索される前記レコードが含まれている可能性の有無を判定するために当該葉ページ情報に含まれる前記レコードが有する前記キー情報に基づいて生成された判定情報を含む前記節ページ情報と、
前記根ページ情報の子の位置の前記節ページ情報に含まれる前記判定情報を含む前記根ページ情報と、
を記憶する第２ページ情報記憶手段に記憶された前記根ページ情報から前記葉ページ情報にかけて、検索対象とする前記ページ情報を移っていきながら、前記入力された前記検索キー情報を用いて前記レコード情報を検索する第２検索工程と、を有し、
前記第２検索工程は、
検索対象となっている前記ページ情報が前記根ページ情報又は前記節ページ情報である場合、当該ページ情報に含まれる前記判定情報と、前記入力された前記検索キー情報と、に基づいて、当該検索キー情報で検索される前記レコードの存在の可能性の有無を判定する第２判定工程を有し、
前記第２判定工程において前記検索キー情報で検索される前記レコードが存在する可能性が無いと判定された場合には、検索対象となっている前記ページ情報の子の位置の子ページ情報から前記葉ページ情報へかけて関連付けられたページ情報を検索対象から除外することを特徴とする検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンテンツデータの属性情報等のレコードを検索するためのデータ構造及び検索技術に関する。
【背景技術】
【０００２】
従来、ネットワークを介して互いに通信可能な複数のノード装置に複数のコンテンツデータが分散して保存されたコンテンツ分散保存システムが知られている。この種のコンテンツ分散保存システムにおいて、各ノード装置は、コンテンツデータの属性情報が記述されたコンテンツカタログ情報を用いている。各ノード装置は、所望のコンテンツデータを検索し、他のノード装置又はコンテンツ管理サーバからコンテンツを取得可能になっている。この属性情報には、コンテンツ名、公開開始時期、公開終了時期、及びコンテンツデータのキーワード等の情報が含まれている。また、各属性情報は、コンテンツＩＤ等のインデックス情報に対応付けられている。コンテンツカタログ情報は、コンテンツ管理サーバにより生成され、各ノード装置に配信される。また、コンテンツ分散保存システムにおいて、新たなコンテンツデータが追加された場合、又はコンテンツデータの利用が終了した場合には、コンテンツカタログ情報はコンテンツ管理サーバにより更新される。そしてコンテンツカタログ情報は、各ノード装置に配信される。
【０００３】
ところで、コンテンツ分散保存システムにおいて利用可能なコンテンツデータの数が増大すると、コンテンツカタログ情報のデータ量も増大する。このため、１台のノード装置にコンテンツカタログ情報を記憶しきれないという問題があった。この問題を解決するために、特許文献１には、複数に分割されたコンテンツカタログ情報を複数のノード装置が分散して記憶する方法が提案されている。この特許文献１に開示されている方法では、各ノード装置毎にコンテンツデータの担当範囲が決められている。そして、各ノードは、担当範囲のコンテンツデータの属性情報が記述されたコンテンツカタログ情報を記憶する。このときの担当範囲は、インデックス情報としてのコンテンツＩＤの範囲として決められている。従って、コンテンツＩＤを検索キーとして属性情報を検索する場合には、該当する属性情報が記述されたコンテンツカタログ情報を記憶しているノード装置をコンテンツＩＤから絞り込むことができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−２８０３０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、コンテンツＩＤ以外の情報を検索キーとして検索する場合においては、絞り込みを行う手がかりがないため、コンテンツカタログ情報の全検索が必要となる。従ってこの場合は、コンテンツＩＤを検索キーとして検索を行う場合と比較して、検索時間が相当に遅くなる。
【０００６】
本発明は、以上の問題に鑑みてなされたものである。本発明は、コンテンツデータの属性情報等のレコードの検索を効率良く行うことができる情報生成装置、情報生成プログラム、及び情報生成方法等を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、請求項１に記載の発明は、複数のページ情報を木構造として、根に位置する根ページ情報から葉に位置する葉ページ情報にかけて関連付けて記憶するページ情報記憶手段と、レコードの検索のために入力される検索キー情報との比較対象であるキー情報を有するレコードを一又は複数含む前記葉ページ情報を生成する葉ページ情報生成手段と、前記根ページ情報から前記葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する前記葉ページ情報に、前記検索キー情報で検索される前記レコードが含まれている可能性の有無を判定するために用いられる判定情報を、当該葉ページ情報に含まれる前記レコードが有する前記キー情報に基づいて生成し、当該判定情報を含む前記節ページ情報を生成する節ページ情報生成手段と、前記根ページ情報の子の位置の前記節ページ情報に含まれる前記判定情報を含む前記根ページ情報を生成する根ページ情報生成手段と、を備え、前記ページ情報記憶手段は、前記根ページ情報と、前記節ページ情報と、前記葉ページ情報とを前記木構造で記憶することを特徴とする。
【０００８】
この発明によれば、子の位置以下に位置する葉ページ情報に、検索キー情報で検索されるレコードが含まれている可能性の有無を判定するために用いられる判定情報を含む節ページ情報が生成される。また、子の位置の節ページ情報に含まれる判定情報を含む根ページ情報が生成される。
【０００９】
従って、根ページ情報から葉ページ情報にかけて、入力された検索キー情報でレコードを検索する際に、根ページ情報又は節ページ情報に含まれる判定情報と検索キー情報とに基づいて、当該検索キー情報で検索されるレコードが存在する可能性が無いと判定されたとする。その場合は、そのページ情報の子の位置の子ページ情報から葉ページ情報にかけて関連付けられているページ情報のうち葉ページ情報には、検索キー情報によって検索されるレコード情報は含まれていないことが保証される。よって、子ページ情報から葉ページ情報にかけて関連付けられているページ情報を検索する必要がないので、レコードの検索を効率良く行うことができる。
【００１０】
請求項２に記載の発明は、請求項１に記載の情報生成装置において、前記節ページ情報生成手段及び前記根ページ情報生成手段は、生成する前記ページ情報の子の位置に複数の前記節ページ情報が関連付けられている場合に、当該複数の節ページ情報に含まれる前記判定情報を合成して新たな前記判定情報を生成する合成手段を備え、前記節ページ情報生成手段及び前記根ページ情報生成手段は、前記合成手段により生成された前記判定情報を含む前記ページ情報を生成することを特徴とする。
【００１１】
この発明によれば、複数の節ページ情報に含まれる判定情報が合成によってまとめられるので、親の節ページ情報に含まれる判定情報をより効率よく生成することができる。
【００１２】
請求項３に記載の発明は、請求項２に記載の情報生成装置において、前記判定情報はハッシュ値をインデックスとする配列構造を有し、前記判定情報の各配列要素は前記キー情報の有無を少なくとも示し、前記節ページ情報生成手段は、前記節ページ情報の子の位置以下に位置する前記葉ページ情報に含まれる前記レコードが有する前記キー情報のハッシュ値を算出し、当該ハッシュ値に対応する配列要素が前記キー情報有りを示す前記判定情報を生成し、前記合成手段は、生成する前記ページ情報の子に位置する複数の前記節ページ情報に含まれる前記判定情報の配列要素毎の論理和を算出することによって前記新たな判定情報を生成することを特徴とする。
【００１３】
この発明によれば、キー情報のハッシュ値をインデックスとして、各配列要素がキー情報の有無を少なくとも示す配列構造を有する判定情報が生成される。また、判定情報が合成される場合には、複数の節ページ情報に含まれる判定情報の配列要素毎の論理和が算出されて新たな判定情報が生成される。
【００１４】
従って、入力された検索キー情報でレコードを検索する際には、根ページ情報又は節ページ情報に含まれる判定情報の配列要素のうち検索キー情報のハッシュ値に対応する配列要素の内容を判定する。判定情報の配列要素毎の論理和をとって新たな判定情報が生成された場合であっても、ハッシュ値に対応する配列要素がキー情報無しを示していれば、そのページ情報の子の位置の子ページ情報から葉ページ情報にかけて関連付けられているページ情報のうち葉ページ情報には、検索キー情報によって検索されるレコード情報は含まれていないことが保証される。つまり、判定情報が合成されても偽陰性のない判定を行うことができる。よって、情報量が大きいキー情報であっても、判定情報の情報量を所定量に抑えながら、レコードの検索を効率良く行うことができる。
【００１５】
請求項４に記載の発明は、請求項３に記載の情報生成装置において、前記節ページ情報生成手段及び前記根ページ情報生成手段は、前記判定情報を圧縮して圧縮判定情報を生成し、前記圧縮判定情報を前記判定情報として含む前記ページ情報を生成し、前記圧縮判定情報の情報量が所定量を超える場合には、前記判定情報を分割してなる複数の分割判定情報の配列要素毎の論理和を算出することによって分割合成判定情報を生成し、当該分割合成判定情報を圧縮して前記圧縮判定情報を生成することを特徴とする。
【００１６】
この発明によれば、圧縮された判定情報がページ情報に格納される。ただし、圧縮された判定情報の情報量が所定量を超える場合には、圧縮前の判定情報を分割してなる複数の分割判定情報の配列要素毎の論理和が算出されることにより分割合成判定情報が生成される。そして、この分割合成判定情報が圧縮されて、ページ情報に格納される。
【００１７】
従って、入力された検索キー情報でレコードを検索する際には、この圧縮判定情報を解凍して得られる分割合成判定情報を用いて、偽陰性のない判定を行うことができる。また、分割合成判定情報は、元の判定情報よりも情報量が小さい。そして、この分割合成判定情報が更に圧縮されるので、ページ情報中における判定情報の格納領域の容量に制限がある場合等に、判定情報の情報量を制限量以下に確実に圧縮することができる。
【００１８】
請求項５に記載の発明は、請求項２に記載の情報生成装置において、前記キー情報は、数値情報であるか、又は、数値情報で示される属性を有する情報であり、前記節ページ情報生成手段は、前記節ページ情報の子の位置以下に位置する前記葉ページ情報に含まれる前記レコードが有する前記キー情報又は当該キー情報の属性の何れか一方が示す数値情報の中から、値が最小の数値情報を下限値とし、値が最大の数値情報を上限値とする範囲を示す前記判定情報を生成し、前記合成手段は、前記節ページ情報生成手段又は前記根ページ情報生成手段により生成される前記ページ情報の子に位置する複数の前記節ページ情報に含まれる前記判定情報の下限値の中から最小の下限値を新たな下限値とし、当該複数の節ページ情報に含まれる前記判定情報の上限値の中から最大の上限値を新たな上限値とする前記新たな判定情報を生成することを特徴とする。
【００１９】
この発明によれば、範囲を示す判定情報が生成される。この範囲には、子の位置以下に位置する葉ページ情報に含まれるレコードが有するキー情報又は当該キー情報の属性の何れか一方が示す数値情報が含まれる。
【００２０】
従って、入力された検索キー情報でレコードを検索する際に、根ページ情報又は節ページ情報に含まれる判定情報が示す範囲と、検索キー情報としての数値情報とを比較する。そして、判定情報が示す範囲に数値情報が含まれていなければ、そのページ情報の子の位置の子ページ情報から葉ページ情報にかけて関連付けられているページ情報には、検索キー情報によって検索されるレコード情報は含まれていないことが保証される。よって、簡易な方法で、判定情報の生成及びこの判定情報を用いた判定を行うことができる。
【００２１】
請求項６に記載の発明は、請求項１に記載の情報生成装置において、前記検索キー情報を入力する検索入力手段と、前記根ページ情報から前記葉ページ情報にかけて、検索対象とする前記ページ情報を移っていきながら、前記検索入力手段により入力された前記検索キー情報を用いて前記レコード情報を検索する検索手段と、を更に備え、前記検索手段は、検索対象となっている前記ページ情報が前記根ページ情報又は前記節ページ情報である場合、当該ページ情報に含まれる前記判定情報と、前記検索入力手段により入力された前記検索キー情報と、に基づいて、当該検索キー情報で検索される前記レコードの存在の可能性の有無を判定する判定手段を備え、前記判定手段により前記検索キー情報で検索される前記レコードが存在する可能性が無いと判定された場合には、検索対象となっている前記ページ情報の子の位置の子ページ情報から前記葉ページ情報へかけて関連付けられたページ情報を検索対象から除外することを特徴とする。
【００２２】
この発明によれば、根ページ情報から葉ページ情報にかけて、入力された検索キー情報でレコードが検索される。このとき、根ページ情報又は節ページ情報に含まれる判定情報と検索キー情報とに基づいて、当該検索キー情報で検索されるレコードが存在する可能性の有無が判定される。そして、検索キー情報で検索されるレコードが存在する可能性が無いと判定された場合は、そのページ情報の子の位置の子ページ情報から葉ページ情報にかけて関連付けられているページ情報のうち葉ページ情報には、検索キー情報によって検索されるレコード情報は含まれていないことが保証される。
【００２３】
従って、可能性が無いと判定されたページ情報の子ページ情報から葉ページ情報にかけて関連付けられているページ情報を検索する必要がないので、レコードの検索を効率良く行うことができる。
【００２４】
請求項７に記載の発明は、根に位置する根ページ情報から葉に位置する葉ページ情報にかけて木構造として関連付けられる複数のページ情報を生成するための情報生成プログラムであって、入力される検索キー情報との比較対象であるキー情報を有するレコードを一又は複数含む前記葉ページ情報を生成する葉ページ情報生成ステップと、前記根ページ情報から前記葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する前記葉ページ情報に、前記検索キー情報で検索される前記レコードが含まれている可能性の有無を判定するために用いられる判定情報を、当該葉ページ情報に含まれる前記レコードが有する前記キー情報に基づいて生成し、当該判定情報を含む前記節ページ情報を生成する節ページ情報生成ステップと、前記根ページ情報の子の位置の前記節ページ情報に含まれる前記判定情報を含む前記根ページ情報を生成する根ページ情報生成ステップと、前記根ページ情報と、前記節ページ情報と、前記葉ページ情報とを前記木構造で記憶するページ情報記憶ステップと、をコンピュータに実行させることを特徴とする。
【００２５】
請求項８に記載の発明は、根に位置する根ページ情報から葉に位置する葉ページ情報にかけて木構造として関連付けられる複数のページ情報を生成する情報生成方法であって、複数のページ情報を木構造として、根に位置する根ページ情報から葉に位置する葉ページ情報にかけて関連付けて記憶するページ情報記憶工程と、レコードの検索のために入力される検索キー情報との比較対象であるキー情報を有するレコードを一又は複数含む前記葉ページ情報を生成する葉ページ情報生成工程と、前記根ページ情報から前記葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する前記葉ページ情報に、前記検索キー情報で検索される前記レコードが含まれている可能性の有無を判定するために用いられる判定情報を、当該葉ページ情報に含まれる前記レコードが有する前記キー情報に基づいて生成し、当該判定情報を含む前記節ページ情報を生成する節ページ情報生成工程と、前記根ページ情報の子の位置の前記節ページ情報に含まれる前記判定情報を含む前記根ページ情報を生成する根ページ情報生成工程と、前記根ページ情報と、前記節ページ情報と、前記葉ページ情報とを前記木構造で記憶するページ情報記憶工程と、を有することを特徴とする。
【００２６】
請求項９に記載の発明は、レコードの検索のために用いられる検索キー情報を入力する第２検索入力手段と、複数のページ情報を木構造として、根に位置する根ページ情報から葉に位置する葉ページ情報にかけて関連付けて記憶し、前記第２検索入力手段により入力される前記検索キー情報との比較対象であるキー情報を有するレコードを一又は複数含む前記葉ページ情報と、前記根ページ情報から前記葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する前記葉ページ情報に前記検索キー情報で検索される前記レコードが含まれている可能性の有無を判定するために、当該葉ページ情報に含まれる前記レコードが有する前記キー情報に基づいて生成された判定情報を含む前記節ページ情報と、前記根ページ情報の子の位置の前記節ページ情報に含まれる前記判定情報を含む前記根ページ情報と、を記憶する第２ページ情報記憶手段と、前記根ページ情報から前記葉ページ情報にかけて、検索対象とする前記ページ情報を移っていきながら、前記第２検索入力手段により入力された前記検索キー情報を用いて前記レコード情報を検索する第２検索手段と、を備え、前記第２検索手段は、検索対象となっている前記ページ情報が前記根ページ情報又は前記節ページ情報である場合、当該ページ情報に含まれる前記判定情報と、前記第２検索入力手段により入力された前記検索キー情報と、に基づいて、当該検索キー情報で検索される前記レコードの存在の可能性の有無を判定する第２判定手段を備え、前記第２判定手段により前記検索キー情報で検索される前記レコードが存在する可能性が無いと判定された場合には、検索対象となっている前記ページ情報の子の位置の子ページ情報から前記葉ページ情報へかけて関連付けられたページ情報を検索対象から除外することを特徴とする。
【００２７】
この発明によれば、根ページ情報から葉ページ情報にかけて、入力された検索キー情報でレコードが検索される。このとき、根ページ情報又は節ページ情報に含まれる判定情報と検索キー情報とに基づいて、当該検索キー情報で検索されるレコードが存在する可能性の有無が判定される。そして、検索キー情報で検索されるレコードが存在する可能性が無いと判定された場合は、そのページ情報の子の位置の子ページ情報から葉ページ情報にかけて関連付けられているページ情報のうち葉ページ情報には、検索キー情報によって検索されるレコード情報は含まれていないことが保証される。
【００２８】
従って、可能性が無いと判定されたページ情報の子ページ情報から葉ページ情報にかけて関連付けられているページ情報を検索する必要がないので、レコードの検索を効率良く行うことができる。
【００２９】
請求項１０に記載の発明は、請求項９に記載のノード装置において、検索対象となっている前記ページ情報が前記第２ページ情報記憶手段に記憶されていない場合に、当該ページ情報を他のノード装置からネットワークを介して取得するページ情報取得手段を更に備え、前記第２検索手段は、前記第２ページ情報記憶手段に記憶されたページ情報と、前記ページ情報取得手段により取得されたページ情報とに基づいて検索を行うことを特徴とする。
【００３０】
この発明によれば、複数のページ情報を複数のノード装置で分散して記憶する場合に、検索対象から除外されたページ情報をノード装置間でやりとりする必要が無いので、ネットワークの負荷を低減させることができる。
【００３１】
請求項１１に記載の発明は、請求項１０に記載のノード装置において、前記根ページ情報及び前記節ページ情報は、子の位置の前記ページ情報の改竄をチェックするための改竄チェック情報を含み、前記ページ情報取得手段により取得された前記ページ情報が改竄されているか否かを、当該ページ情報の親の位置の前記ページ情報に含まれる前記改竄チェック情報に基づいて判定する改竄判定手段を更に備え、前記第２判定手段は、前記改竄チェック手段により改竄されていないと判定された前記ページ情報が前記根ページ情報又は前記節ページ情報である場合、前記第２検索入力手段により入力された前記検索キー情報で検索される前記レコードの存在の可能性の有無を判定することを特徴とする。
【００３２】
従って、改竄されたページ情報を用いてレコードの検索が行われることを防止することができる。
【００３３】
請求項１２に記載の発明は、根に位置する根ページ情報から葉に位置する葉ページ情報にかけて木構造として関連付けられる複数のページ情報を用いてレコードを検索するためのノードプログラムであって、レコードの検索のために入力される検索キー情報との比較対象であるキー情報を有するレコードを一又は複数含む前記葉ページ情報と、前記根ページ情報から前記葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する前記葉ページ情報に前記検索キー情報で検索される前記レコードが含まれている可能性の有無を判定するために当該葉ページ情報に含まれる前記レコードが有する前記キー情報に基づいて生成された判定情報を含む前記節ページ情報と、前記根ページ情報の子の位置の前記節ページ情報に含まれる前記判定情報を含む前記根ページ情報と、を記憶する第２ページ情報記憶手段に記憶された前記根ページ情報から前記葉ページ情報にかけて、検索対象とする前記ページ情報を移っていきながら、前記入力された前記検索キー情報を用いて前記レコード情報を検索する第２検索ステップと、をコンピュータに実行させ、前記第２位検索ステップにおいて、検索対象となっている前記ページ情報が前記根ページ情報又は前記節ページ情報である場合、当該ページ情報に含まれる前記判定情報と、前記入力された前記検索キー情報と、に基づいて、当該検索キー情報で検索される前記レコードの存在の可能性の有無を判定する第２判定ステップを前記コンピュータに実行させ、前記第２判定ステップにより前記検索キー情報で検索される前記レコードが存在する可能性が無いと判定された場合には、検索対象となっている前記ページ情報の子の位置の子ページ情報から前記葉ページ情報へかけて関連付けられたページ情報を検索対象から除外するように、前記第２位検索ステップを前記コンピュータに実行させることを特徴とする。
【００３４】
請求項１３に記載の発明は、根に位置する根ページ情報から葉に位置する葉ページ情報にかけて木構造として関連付けられる複数のページ情報を用いてレコードを検索する検索方法であって、レコードの検索のために入力される検索キー情報との比較対象であるキー情報を有するレコードを一又は複数含む前記葉ページ情報と、前記根ページ情報から前記葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する前記葉ページ情報に前記検索キー情報で検索される前記レコードが含まれている可能性の有無を判定するために当該葉ページ情報に含まれる前記レコードが有する前記キー情報に基づいて生成された判定情報を含む前記節ページ情報と、前記根ページ情報の子の位置の前記節ページ情報に含まれる前記判定情報を含む前記根ページ情報と、を記憶する第２ページ情報記憶手段に記憶された前記根ページ情報から前記葉ページ情報にかけて、検索対象とする前記ページ情報を移っていきながら、前記入力された前記検索キー情報を用いて前記レコード情報を検索する第２検索工程と、を有し、前記第２検索工程は、検索対象となっている前記ページ情報が前記根ページ情報又は前記節ページ情報である場合、当該ページ情報に含まれる前記判定情報と、前記入力された前記検索キー情報と、に基づいて、当該検索キー情報で検索される前記レコードの存在の可能性の有無を判定する第２判定工程を有し、前記第２判定工程において前記検索キー情報で検索される前記レコードが存在する可能性が無いと判定された場合には、検索対象となっている前記ページ情報の子の位置の子ページ情報から前記葉ページ情報へかけて関連付けられたページ情報を検索対象から除外することを特徴とする。
【発明の効果】
【００３５】
本発明によれば、根ページ情報から葉ページ情報にかけて、入力された検索キー情報でレコードを検索する際に、根ページ情報又は節ページ情報に含まれる判定情報と検索キー情報とに基づいて、当該検索キー情報で検索されるレコードが存在する可能性が無いと判定されたとする。その場合は、そのページ情報の子の位置の子ページ情報から葉ページ情報にかけて関連付けられているページ情報のうち葉ページ情報には、検索キー情報によって検索されるレコード情報は含まれていないことが保証される。よって、子ページ情報から葉ページ情報にかけて関連付けられているページ情報を検索する必要がないので、レコードの検索を効率良く行うことができる。
【図面の簡単な説明】
【００３６】
【図１】一実施形態に係るコンテンツにおける各ノード装置の接続態様の一例を示す図である。
【図２】一実施形態に係るコンテンツカタログ情報の構造の一例を示す図である。
【図３】コンテンツカタログ情報からレコードが検索される様子の一例を示す図である。
【図４】ブルームフィルタをヒント情報に適用した場合におけるヒント情報の構造の一例を示す図である。
【図５】（ａ）は、カタログ情報の一部分のページ情報の一例を示す図であり、（ｂ）は、ヒント情報が合成される様子の一例を示す図である。
【図６】（ａ）は、折り畳み前のブロックに設定されている内容の一例を示す図であり、（ｂ）及び（ｃ）は、夫々ブロックの折り畳み例を示す図である。
【図７】センターサーバＳＡの概要構成例を示す図である。
【図８】ノードＮｎの概要構成例を示す図である。
【図９】一実施形態に係るセンターサーバＳＡにおける制御部１１の処理例を示すフローチャートである。
【図１０】一実施形態に係るセンターサーバＳＡにおける制御部１１のレコード追加処理における処理例を示すフローチャートである。
【図１１】一実施形態に係るセンターサーバＳＡにおける制御部１１のレコード削除処理における処理例を示すフローチャートである。
【図１２】一実施形態に係るセンターサーバＳＡにおける制御部１１のヒント情報生成処理における処理例を示すフローチャートである。
【図１３】（ａ）は、一実施形態に係るセンターサーバＳＡにおける制御部１１のレコード検索処理における処理例を示すフローチャートであり、（ｂ）は、一実施形態に係るセンターサーバＳＡにおける制御部１１のサブツリー検索処理における処理例を示すフローチャートである。
【図１４】一実施形態に係るノードＮｎにおける制御部２１の処理例を示すフローチャートである。
【図１５】一実施形態に係るノードＮｎにおける制御部２１のページ情報取得処理における処理例を示すフローチャートである。
【発明を実施するための形態】
【００３７】
以下、本発明の実施形態を図面に基づいて説明する。なお、以下に説明する実施の形態は、コンテンツ分散保存システムに本発明を適用した場合の実施形態である。
【００３８】
［１．コンテンツ分散保存システムの構成及び動作概要］
始めに、図１等を参照して、本実施形態に係るコンテンツ分散保存システムの構成及び動作概要について説明する。
【００３９】
図１は、本実施形態に係るコンテンツ分散保存システムＳにおける各ノード装置の接続態様の一例を示す図である。図１は、コンテンツ分散保存システムＳの具体的構成図１０１と、概念的構成図１００とから構成される。コンテンツ分散保存システムＳの具体的構成図１０１が示すように、コンテンツ分散保存システムＳは、多数のノード装置Ｎｎ（ｎ＝１，２，３・・・の何れか）から構成される。
【００４０】
図１の具体的構成図１０１内に示すように、コンテンツ分散保存システムＳは、複数のノード装置Ｎｎがインターネットを介して接続されることで構成される。また、図１の下部枠１０１内に示すように、ＩＸ（Internet eＸchange）３、ＩＳＰ（Internet Service Provider）４ａ，４ｂ、ＤＳＬ（Digital Subscriber Line）回線事業者の装置５ａ，５ｂ、ＦＴＴＨ（Fiber To The Home）回線事業者の装置６、及び通信回線７等によって、インターネット等のネットワーク８が構築されている。ネットワーク８は、現実世界の通信ネットワークである。なお、図１の例におけるネットワーク８には、データパケットを転送するためのルータが適宜挿入されているが、図１では図示を省略している。また、通信回線７としては、例えば、電話回線や光ケーブル等が用いられる。
【００４１】
このようなネットワーク８には、複数のノード装置Ｎｎ（ｎ＝１，２，３・・・の何れか）が接続されている。以下、ノード装置を、「ノード」という。また、各ノードＮｎには、固有の製造番号及びＩＰ（Internet Protocol）アドレスが割り当てられている。そして、本実施形態に係るコンテンツ分散保存システムＳは、これらのノードＮｎのうち、図１の概念的構成図１００内に示すように、何れか複数のノードＮｎの接続により形成されるピアツーピア方式のネットワークシステムとなっている。
【００４２】
なお、図１の概念的構成図１００内に示すネットワーク９は、既存のネットワーク８を用いて形成された仮想的なリンクを構成するオーバーレイネットワーク９である。論理的なネットワークであるオーバーレイネットワーク９は、特定のアルゴリズム、例えば、ＤＨＴを利用したアルゴリズムにより実現される。そして、コンテンツ分散保存システムＳに接続されている各ノードＮｎには、所定桁数からなる固有の識別情報であるノードＩＤが割り当てられている。
【００４３】
また、ノードＩＤは、例えば、各ノードＮｎに個別に割り当てられたＩＰアドレス或いは製造番号を共通のハッシュ関数によりハッシュ化した値である。ノードＩＤは、ＩＤ空間に偏りなく分散して配置されることになる。ハッシュ関数としては、例えば、ＳＨＡ−１等が用いられる。また、ハッシュ化した値は、例えば、ｂｉｔ長が１６０ｂｉｔとなる。そして、このノードＩＤは、ＩＤ空間に偏りなく分散して配置されることになる。
【００４４】
なお、コンテンツ分散保存システムＳへの接続は、接続していないノードＮｎ、例えば、ノードＮ８が、接続している任意のノードＮｎに対してコンテンツ分散保存システムへの参加要求を示す参加メッセージを送信することによって行われる。コンテンツ分散保存システムＳへの参加とは、ノード装置Ｎｎがコンテンツ分散保存システムＳに接続され、コンテンツ分散保存システムＳからコンテンツデータを取得可能になることである。任意のノードＮｎは、例えば、システムＳに常時接続しているコンタクトノードである。
【００４５】
また、各ノードＮｎは、夫々、ＤＨＴを用いたルーティングテーブルを保持している。このルーティングテーブルは、コンテンツ分散保存システムＳ上における各種メッセージの転送先を規定している。具体的に、このルーティングテーブルには、ＩＤ空間内で適度に離れたノードＮｎのノードＩＤ、ＩＰアドレス及びポート番号を含むノード情報が複数登録されている。
【００４６】
コンテンツ分散保存システムＳに接続している１台のノードは、必要最低限のノードＮｎのノード情報をルーティングテーブルとして記憶している。各ノードＮｎ間で互いに各種メッセージが転送されることで、ノード情報を記憶していないノードＮｎについてのノード情報が取得される。
【００４７】
このようなＤＨＴを用いたルーティングテーブルについては、特開２００６−１９７４００号公報等で公知であるので、詳しい説明を省略する。
【００４８】
コンテンツ分散保存システムＳは、内容の異なる様々なコンテンツデータのレプリカを所定のファイル形式で複数のノードＮｎに分散して保存する。以下、コンテンツデータを、「コンテンツ」という。そして、各ノードＮｎ間でレプリカが利用可能になっている。各コンテンツのオリジナルはセンターサーバＳＡに保存されている。例えば、ノードＮ５には、タイトルがＸＸＸの映画のコンテンツのレプリカが保存されている。一方、ノードＮ３には、タイトルがＹＹＹの映画のコンテンツのレプリカが保存される。このように、複数のノードＮｎに分散されて保存されている。以下、コンテンツのレプリカが保存されるノードＮを、「コンテンツ保持ノード」という。
【００４９】
上述のコンテンツのレプリカには、夫々、コンテンツ名及びコンテンツ毎に固有の識別情報であるコンテンツＩＤ等の情報が付加されている。このコンテンツＩＤは、例えば、コンテンツ名＋任意の数値が、上記ノードＩＤを得るときと共通のハッシュ関数によりハッシュ化されて生成される。或いは、システム管理者が、コンテンツ毎に一意のＩＤ値を付与しても良い。
【００５０】
分散保存されているコンテンツのレプリカの所在は、インデックス情報として、コンテンツのレプリカの所在を管理（記憶）しているノードＮｎ等により記憶される。以下、レプリカの所在を管理（記憶）しているノードＮｎを、「ルートノード」という。インデックス情報は、レプリカを保存したノードＮｎのノード情報と、コンテンツのコンテンツＩＤと等の組を含む。このようなルートノードは、例えば、コンテンツＩＤと最も近いノードＩＤを有するノードＮｎであるように定められる。コンテンツＩＤと最も近いノードＩＤとは、例えば、ＩＤの上位桁が最も多く一致するノードＩＤである。
【００５１】
例えば、タイトルがＸＸＸの映画のコンテンツのレプリカについてのインデックス情報は、そのコンテンツのルートノードであるノードＮ４により管理される。また、例えば、タイトルがＹＹＹの映画のコンテンツのレプリカについてのインデックス情報は、そのコンテンツのルートノードであるノードＮ７により管理される。また、このようなルートノードは、例えば、コンテンツＩＤと最も近いノードＩＤを有するノードＮｎであるように定められる。コンテンツＩＤと最も近いノードＩＤとは、例えば、コンテンツＩＤと上位桁がより多く一致するノードＩＤである。
【００５２】
そして、或るノードＮｎのユーザが、所望するコンテンツのレプリカを取得したい場合、このレプリカの取得を望むノードＮｎは、メッセージを生成する。以下、ユーザによりレプリカの取得を望むノードＮｎを、「ユーザノード」という。このメッセージは、取得を望むコンテンツのコンテンツＩＤ及びユーザノードのＩＰアドレス等を含むコンテンツ所在問合せメッセージである。コンテンツ所在問合せメッセージは、コンテンツ保持ノードを検索するためのメッセージである。上述のコンテンツ所在問合せメッセージが、ユーザノードが取得するＤＨＴのルーティングテーブルに従って、他のノードＮｎに対して送出される。つまり、ユーザノードは、コンテンツ所在問合せメッセージを、ルートノードに向けて送出する。これにより、コンテンツ所在問合せメッセージは、コンテンツＩＤをキーとするＤＨＴルーティングによって最終的にルートノードに到着することになる。
【００５３】
各ノードＮｎにおいて、コンテンツのコンテンツ名及びコンテンツＩＤ等の属性情報は、コンテンツカタログ情報に記述されている。コンテンツカタログ情報は、センターサーバＳＡにより、ページ情報単位で作成される。ページ情報は、木構造を有するカタログ情報を構成する情報である。このページ情報は、コンテンツカタログ情報において、木構造における節に対応する情報である。このコンテンツカタログ情報の構造、内容等についての詳細は後述する。各ノードＮｎには、保持するページ情報の担当範囲が夫々ある。担当範囲は、例えば、各ノードＮｎのノードＩＤ等に基づいて決定される。そして、各ノードＮｎは、自分の担当範囲内のページ情報をセンターサーバＳＡ又は他のノードＮｎから予め取得する。また、各ノードＮｎは、コンテンツの属性情報を検索する際、必要なページ情報がない場合には、この必要なページ情報をセンターサーバＳＡ又は他のノードＮｎから取得する。
【００５４】
また、上記コンテンツ所在問合せメッセージに含まれるコンテンツＩＤは、ユーザノードによって、コンテンツ名が上記共通のハッシュ関数によりハッシュ化されて生成されるようにしても良い。なお、ＤＨＴルーティングについては、特開２００６−１９７４００号公報等で公知であるので、詳しい説明を省略する。
【００５５】
上記コンテンツ所在問合せメッセージを受信したルートノードは、これに含まれるコンテンツＩＤに対応するインデックス情報をインデックス情報キャッシュから取得する。取得されたインデックス情報は、コンテンツ所在問合せメッセージの送信元であるユーザノードに対して返信される。こうしてインデックス情報を取得したユーザノードは、インデックス情報に基づいてコンテンツのレプリカをダウンロード（取得）することができる。インデックス情報に含まれるコンテンツ保持ノードのＩＰアドレス等に基づいて、ユーザノードはコンテンツ保持ノードにアクセスする。アクセスしたコンテンツ保持ノードから、コンテンツのレプリカをダウンロードすることが可能になる。この場合、ユーザノードは、この複数のコンテンツ保持ノードのうち一つのコンテンツ保持ノードを選択する。そして、ユーザノードは、選択したコンテンツ保持ノードに接続してコンテンツのレプリカをダウンロードすることができる。
【００５６】
なお、ルートノードは、このインデックス情報に含まれるＩＰアドレス等に示されたコンテンツ保持ノードに対してコンテンツ送信要求メッセージを送信する。これにより、ユーザノードは、上記コンテンツ保持ノードからそのレプリカをダウンロードすることもできる。また、上記ユーザノードは、コンテンツ所在問合せメッセージがルートノードに辿り着くまでの間に、このルートノードと同じインデックス情報をキャッシュしているキャッシュノードからこのインデックス情報を取得することもできる。
【００５７】
また、ユーザノードは、コンテンツ保持ノードからコンテンツのレプリカを取得して保存したとき、保存したユーザノードは、パブリッシュメッセージを生成する。パブリッシュメッセージは、レプリカを保存したことをルートノードへ知らせるためのメッセージである。パブリッシュメッセージは、レプリカのコンテンツＩＤ及びレプリカを保存したノード装置のノード情報を含む。パブリッシュメッセージは、ルートノードに向けて送出される。これにより、パブリッシュメッセージは、コンテンツ所在問合せメッセージと同じように、コンテンツＩＤをキーとするＤＨＴルーティングによってルートノードに到着することになる。そして、ルートノードは、パブリッシュメッセージを受信する。ルートノードは、パブリッシュメッセージに含まれるノード情報及びコンテンツＩＤの組を含むインデックス情報をインデックス情報キャッシュ領域に記憶する。こうして、上記ユーザノードは、新たに、上記コンテンツのレプリカを保持するコンテンツ保持ノードとなる。
【００５８】
［２．コンテンツカタログ情報の構造及び内容等］
次に、コンテンツカタログ情報の構造及び内容等について、図２を用いて説明する。
【００５９】
図２は、本実施形態に係るコンテンツカタログ情報の構造の一例を示す図である。なお、コンテンツカタログ情報のことを、今後単にカタログ情報という。
【００６０】
カタログ情報は、コンテンツの属性情報を一覧として管理するための情報である。この属性情報の内容はレコードに格納される。また、カタログ情報は、検索キーから１又は複数のコンテンツを特定することができる情報である。コンテンツを特定することができるとは、コンテンツのレコードを検索することができることを意味する。レコードの検索は、センターサーバＳＡにより行われ、また、ノードＮｎにおいても行われる。
【００６１】
本実施形態において用いられるカタログ情報は、レコードの検索を効率的に行うため、探索木の構造を有している。
【００６２】
図２に示すように、カタログ情報は、木構造における根に位置するルートページ情報から葉に位置する葉ページ情報にかけて、各ページ情報が関連付けられて構成されている。ルートページ情報は、根ページ情報の一例である。直接関連付けられているページ情報同士は、親子関係を形成している。或るページ情報Ｘに対してページ情報Ｙが関連付けられているとする。つまり、ページ情報Ｘとページ情報Ｙとで親子関係を形成している。ページ情報Ｘとページ情報Ｙとのうち、ページ情報Ｘの方がルートページ情報からの距離が短い場合、ページ情報Ｘは、ページ情報Ｙから見て親に位置する親のページ情報となる。そして、ページ情報Ｙは、ページ情報Ｘから見て子に位置する子のページ情報となる。ここで、ルートページ情報からの距離とは、木構造において、根の位置から注目する節点に辿るまでのリンク数に相当する長さである。換言すると、ルートページ情報からの距離とは、ルートページ情報から関連付けを辿って注目するページ情報に至るまでに、注目するページ情報を含めて通過するページ情報の数に相当する。なお、以降の説明においては、親のページ情報を親ページ情報といい、子のページ情報を子ページ情報という。
【００６３】
親ページ情報と子ページ情報との関連付けは、リンク情報に示される。リンク情報は、親ページ情報に格納される情報であり、子ページ情報を指す情報である。このリンク情報は、子ページ情報のページ番号と、子ページ情報の改竄をチェックするためのメッセージダイジェストとを含む。
【００６４】
ページ番号は、ページ情報に固有に割り当てられたシリアル番号である。リンク情報が指すページ情報というときは、リンク情報に含まれるページ番号が割り当てられているページ情報を意味する。また、或るページ情報が更新される場合にはこのページ情報に対して新たなページ番号が割り当てられる。実際、ページ番号は、例えば、ページ情報がＲＡＭに格納される際の格納アドレスに対応したり、ページ情報の格納位置を示すポインタの格納アドレスであったりする。また、ページ情報がファイルとして保存される際には、ページ番号はファイル名に対応したりする。
【００６５】
メッセージダイジェストは、リンク情報が指す子ページ情報又はリンク情報が指す子ページ情報に格納されているレコードの改竄をチェックするための情報である。また、メッセージダイジェストは、改竄をチェックする対象を共通のハッシュ関数によりハッシュ化した値である。
【００６６】
カタログ情報は、更にルートリンク情報を有する（符号１００）。ルートリンク情報には、ルートページ情報へのリンク情報が格納される（符号１０２）。そして、このリンク情報は、ルートページ情報のページ番号及びメッセージダイジェストを含む。また、ルートリンク情報には、電子署名が格納される（符号１０１）。電子署名は、ルートリンク情報の改竄をチェックするための情報である。電子署名には、例えば、署名値、証明書情報等の情報が含まれている。
【００６７】
ページ情報は、大別して節ページ情報（符号２００）と葉ページ情報（符号３００）とがある。
【００６８】
節ページ情報は、一つ以上の子ページ情報と関連付けられる。節ページ情報には、ページ番号（符号２０１）、子ページ情報へのリンク情報（符号２０２）、及びヒント情報（符号２０３）が格納される。ページ番号は、このページ番号が格納されている節ページ情報に割り当てられたページ番号である。節ページ情報には、リンク情報を複数格納することができる。一つあたりの節ページ情報に格納可能なリンク情報の最大数は、カタログ情報の木構造としての次数に一致する。この次数は、一つの親が持ちうる子の最大数を意味する。つまり、次数は、ｎ分探索木のｎの値に該当する。ヒント情報は、検索キーでレコードを検索するための手がかりとなる情報である。このヒント情報の詳細については後述する。
【００６９】
葉ページ情報は、上述したように、探索木における葉に位置するページ情報である。つまり、葉ページ情報は、子ページ情報を持たない。葉ページ情報には、ページ番号（符号３０１）、及びレコード（符号３０２）が格納される。ページ番号は、このページ番号が格納されている葉ページ情報に割り当てられたページ番号である。
【００７０】
レコードは、葉ページ情報に１又は複数格納される。一つのレコードには、１又は複数のコンテンツの属性情報が設定される。例えば、レコードには、コンテンツＩＤ、コンテンツの公開開始日時、公開終了日時、コンテンツ名、キーワード等が設定される。また、属性情報に設定されている情報のうち、レコード検索のために検索キーと比較される情報を、レコードの「キー」という。例えば、レコードのキーがコンテンツ名である場合は、検索キーの内容もコンテンツ名となる。キー及び検索キーは、属性情報に設定されている何れの情報であっても良い。検索キーに関しては、例えば、キーワードの文字列長等といった、属性情報に含まれる情報の属性を示す数値であっても良い。この場合、レコード検索の際には、検索キーが示す数値とキーの属性を示す数値とが比較される。なお、検索キーは、検索キー情報の一例である。また、キーは、キー情報の一例である。
【００７１】
カタログ情報の木構造は、順序性を有している。レコードのインデックスが入力されると、カタログ情報の木構造に対応したアルゴリズムに従って探索が行われることにより、インデックスに対応するレコードが格納されている葉ページ情報を特定することができる。レコードのインデックスは、レコードを一意に特定することができる情報である。レコードのインデックスとしては、例えば、コンテンツＩＤが用いられる。
【００７２】
以上、図２を用いて説明したカタログ情報の構造は、あくまでも一例である。カタログ情報の構造としては、コンテンツのレコードを探索可能な木構造を有していれば、どのような構造であってもかまわない。
【００７３】
例えば、葉ページ情報だけでなく、節ページ情報中にレコードが格納されても良い。また、木構造の次数、つまり、一つの節ページ情報に格納可能なリンク情報の最大数は任意である。また、一つのページ情報に格納可能なレコードの最大数は１個でも複数個でも良い。更に、ページ情報に割り当てられたページ番号がそのページ情報自身に格納されている必要はない。
【００７４】
また、木の種類としては、例えばＢ木、Ｂ＋木、赤黒木等の平衡木であっても良いし、平衡性のない単純なｎ分探索木であっても良い。或いは、トライ木であっても良い。
【００７５】
［３．ヒント情報の概要］
次に、ヒント情報の内容、ヒント情報を用いた検索及び生成の概要について、図３を用いて説明する。
【００７６】
図３は、コンテンツカタログ情報からレコードが検索される様子の一例を示す図である。
【００７７】
ヒント情報は、検索キーを用いてレコードを効率的に検索するための情報である。このヒント情報は、ルートページ情報を含む各節ページ情報に格納される。レコードの検索の際に、ヒント情報と入力された検索キーとに対して、所定のアルゴリズムに従って演算処理が施される。すると、このヒント情報が格納されている節ページ情報の子の位置以下のページ情報に、検索キーによって検索されるレコードが格納されている可能性の有無が判明する。これにより、検索キーによって検索されるレコードの有無を偽陰性なく判断することができる。偽陰性とは、真実は陽性であるのに、誤って陰性であると判断される性質をいう。
【００７８】
図３に示すように、レコードの検索は、検索の対象とするページ情報をルートページ情報から開始して、ルートページ情報から葉ページ情報にかけて、リンク情報による関連付けを辿って、検索の対象とするページ情報順次移っていきながら行われる。なお、図３は、深さ優先探索でレコードを検索する例を示している。
【００７９】
具体的には、例えば図３に示すように、或る検索キーが入力される。先ず、ルートリンク情報が参照され、ルートリンク情報に格納されているリンク情報に基づいて、ルートページ情報２００Ａが参照される。ここで、検索キーとルートページ情報２００Ａに格納されているヒント情報とに基づいて、該当するレコードが検索される可能性が有ると判断されたとする（１）。なお、この場合を、単に「可能性有り」と称する。すると、ルートページ情報２００Ａに格納されているリンク情報に基づいて、ルートページ情報２００Ａの子の位置の節ページ情報２００Ｂが次に参照される。
【００８０】
ここで、検索キーと節ページ情報２００Ｂに格納されているヒント情報に基づいて、「可能性有り」と判断されたとする（２）。すると、節ページ情報２００Ｂに格納されているリンク情報に基づいて、節ページ情報２００Ｂの子の位置の節ページ情報２００Ｅが次に参照される。節ページ情報２００Ｅでも、「可能性有り」と判断されて（３）、節ページ情報２００Ｅに格納されているリンク情報に基づいて、節ページ情報２００Ｅの子の位置の葉ページ情報３００Ａが次に参照される。
【００８１】
葉ページ情報３００Ａでは、例えば、検索キーと各レコードのキーとが比較されることによって、レコード検索が行われる（４）。そして、検索されたレコードが、検索結果に追加される。検索が終わると、葉ページ情報３００Ａの親の位置の節ページ情報２００Ｅに戻って、節ページ情報２００Ｅの次の子の位置の葉ページ情報３００Ｂが参照される。ここでも同様にレコード検索が行われる（５）。
【００８２】
検索が終わると、再び節ページ情報２００Ｅに戻る。節ページ情報２００Ｅには、これ以上の子ページ情報は存在しないので、節ページ情報２００Ｅの親の位置の節ページ情報２００Ｂに戻る。節ページ情報２００Ｂにも、これ以上の子ページ情報は存在しないので、節ページ情報２００Ｂの親の位置のルートページ情報節ページ情報２００Ａに戻る。
【００８３】
ルートページ情報２００Ａにおいては、（１）の段階で既に「可能性有り」と判断されている。そこで、ルートページ情報２００Ａに格納されているリンク情報に基づいて、ルートページ情報２００Ａの次の子の位置の節ページ情報２００Ｃが参照される。ここで、検索キーと節ページ情報２００Ｃに格納されているヒント情報に基づいて、該当するレコードが検索される可能性が無いと判断されたとする（６）。なお、この場合を、単に「可能性無し」と称する。これは、節ページ情報２００Ｃの子の位置のページ情報以下の葉ページ情報には検索キーで検索されるレコードが存在しないことを意味する。具体的には、図３に示すように、節ページ情報２００Ｃの子の位置の節ページ情報２００Ｆの更に子の位置の葉ページ情報３００Ｃ及び３００Ｄには、検索キーで検索されるレコードが存在しない。従って、節ページ情報２００Ｆ、葉ページ情報３００Ｃ及び３００Ｄは、検索対象から除外される（７）。
【００８４】
そしてこの場合は、ルートページ情報２００Ａに戻って、ルートページ情報２００Ａの更に次の子の位置の節ページ情報２００Ｄが次に参照される。
【００８５】
このように、ヒント情報に基づいて、子の位置以下のページ情報に、該当するレコードが格納されていないと分かるので、検索対象から除外することによって検索効率を向上させることができる。
【００８６】
次に、ヒント情報の生成方法について説明する。ヒント情報を含むページ情報は、センターサーバＳＡにより生成される。
【００８７】
ヒント情報の初期状態は、どのような検索キーが入力されても「可能性無し」と判断される状態である。ヒント情報は、レコードが格納された葉ページ情報が追加された場合や、既存の葉ページ情報にレコードが追加又は削除された場合等に更新される。なお、本実施形態において、ヒント情報の更新は、ヒント情報の再生成を意味する。また、ヒント情報が更新されるとき、そのヒント情報を格納するページ情報も再生成される。
【００８８】
先ず、新たに追加された葉ページ情報、もしくは、レコードが追加又は削除された葉ページ情報の親の位置の節ページ情報が、ヒント情報の更新対象となる。この節ページ情報の子の位置の全ての葉ページ情報に格納されている全てのレコードに格納されているキーを用いて、ヒント情報が生成される。このとき、葉ページ情報に格納されているレコードのうちどのレコードのキーに合致する検索キーが入力されても、「可能性有り」と判断されるように、節ページ情報が生成される。
【００８９】
また、ヒント情報の更新対象となっている節ページ情報の子の位置に節ページ情報が関連付けられている場合には、子の位置の節ページ情報に格納されているヒント情報が、親の位置の節ページ情報にそのまま引き継がれる。つまり、子ページ情報に格納されているヒント情報が親ページ情報に格納される。ただし、節ページ情報の子の位置に複数の節ページ情報が関連付けられている場合には、子の位置の全ての節ページ情報に格納されているヒント情報が合成されて新たなヒント情報が生成される。そして、この新たなヒント情報が親の位置の節ページ情報に格納される。この場合においても、偽陰性のない判断が可能なように合成が行われる。
【００９０】
また、節ページの子の位置に節ページ情報と葉ページ情報とが関連付けられている場合には、例えば、先に子の位置の節ページ情報に格納されているヒント情報が引き継がれ、又は合成される。その後、葉ページ情報に格納されているレコードのキーが、引き継がれ又は合成されたヒント情報に反映される。キーの反映とは、葉ページ情報に格納されているレコードのキーに合致する検索キーが入力された場合に、「可能性有り」と判断されるようにヒント情報の変更が行われることをいう。そして、レコードのキーが反映されたヒント情報が、親の位置の節ページ情報に格納される。
【００９１】
このようなヒント情報の更新が、新たに追加された葉ページ情報、もしくは、レコードが追加又は削除された葉ページ情報の親の位置の節ページ情報からルートページ情報にかけて、子の位置のから親の位置へ順次行われる。
【００９２】
なお、ヒント情報は、節ページ情報だけではなく、葉ページ情報にも格納されても良い。この場合、葉ページ情報に格納されるヒント情報は、この葉ページ情報自身に格納されているレコードのキーに基づいて生成される。そしてこの場合は、節ページ情報の子ページ情報には、必ずヒント情報が格納されている。従って、子ページ情報が１個である場合には、節ページ情報には、子ページ情報に格納されているヒント情報がそのまま引き継がれる。子ページ情報が複数ある場合には、節ページ情報には、子ページ情報に格納されているヒント情報が合成されて、合成されたヒント情報が格納される。また、レコードを検索する場合においては、次の処理を行えば良い。或る葉ページ情報が検索対象となったとき、葉ページ情報に格納されているレコードを検索する前に、この葉ページ情報に格納されているヒント情報と、検索キーとに基づいて、該当するレコードがこの葉ページ情報に格納されている可能性が有るか否かが判断される。そして、「可能性有り」と判断された場合には、検索対象の葉ページ情報に格納されているレコードを検索する。一方、「可能性無し」と判断された場合には、検索対象の葉ページ情報に格納されているレコードの検索を行はない。
【００９３】
また、節ページ情報にレコードが格納される場合であっても、ヒント情報を生成することができる。例えば、節ページ情報の子の位置に節ページ情報が関連付けられている場合には、先に子の位置の節ページ情報に格納されているヒント情報が親の位置の節ページ情報に格納されるヒント情報として引き継がれる。或いは、子の位置に複数の節ページ情報が関連付けられている場合には、子の位置の各節ページ情報に格納されているヒント情報が合成される。その後、子の位置の節ページ情報及び葉ページ情報に格納されているレコードのキーがヒント情報に反映される。
【００９４】
［３．１  ヒント情報の具体例］
［３．１．１  ブルームフィルタ］
次に、ヒント情報の具体例として、ブルームフィルタをヒント情報に適用した場合の例について、図４乃至図６を用いて説明する。
【００９５】
ブルームフィルタは、与えられた要素が或る集合に属するか否かの判定に用いられる。ブルームフィルタは、配列構造を有するデータである。この配列としては、各要素が０又は１を示すビット配列が主に用いられる。この配列のインデックスはハッシュ値である。ハッシュ値は、与えられた要素から算出される。そして、例えば、与えられた要素のハッシュ値に対応する配列要素が０である場合、与えられた要素は或る集合に属していない、又は、属している可能性はないことを意味する。一方、与えられた要素のハッシュ値に対応する配列要素が１である場合、与えられた要素は或る集合に属している可能性がある、又は、属しているかもしれないことを意味する。ブルームフィルタを用いた判定では、偽陽性による誤判定はあるが、偽陰性による誤判定はない。つまり、与えられた要素が集合に属していないにもかかわらず、属していると誤って判定されることがある。これは、異なるキーから同一のハッシュ値が算出される場合があるからである。一方、与えられた要素が集合に属しているにもかかわらず、属していないと誤って判定されることはない。
【００９６】
本実施形態においては、要素に相当するものが、検索キー及びキーである。また、本実施形態においては、集合に相当するものが、ヒント情報が格納されているページ情報の子の位置以下に関連付けられているページ情報に格納されているレコードのキーの集合である。
【００９７】
図４は、ブルームフィルタをヒント情報に適用した場合におけるヒント情報の構造の一例を示す図である。
【００９８】
ブルームフィルタを適用した場合のヒント情報は、例えば、図４に示すように、ブロック格納領域（符号２０３１）、ブロック管理情報（符号２０３２）、及びブロックサイズ（符号２０３３）等により構成されている。
【００９９】
ブロック格納領域は、ブルームフィルタが格納される領域である。このブロック格納領域には、夫々が配列構造を有する複数のブロックが格納されている。ブルームフィルタが複数のブロックに分割されている理由は、ヒント情報の生成処理及び検索処理の高速化のためである。全てのブロックの配列の要素数は予め決められている。例えば、１つのブロックの要素数が１００である場合には、ハッシュ値０〜９９に対応する情報はブロック０に格納される。また、ハッシュ値１００〜１９９に対応する情報はブロック１に格納される。つまり、ブロック番号をｉ、要素数をｎとすると、ブロックｉには、
ｉ×ｎ≦ハッシュ値≦（ｉ＋１）×ｎ−１
を満たすハッシュ値に対応する情報が格納される。そして、ブロック数をＮとすると、ハッシュ値の最大値はｎ×Ｎ−１となる。なお、各ブロックは、実際には公知の圧縮アルゴリズムで可逆圧縮されているが、図４においては、圧縮前の状態で各ブロックが示されている。
【０１００】
ブロック管理情報は、各ブロックを管理するための情報である。具体的に、ブロック管理情報には、ブロック種別及びブロックポインタがブロック毎に格納される。
【０１０１】
ブロック種別としては、「０１混在」、「全部０」及び「全部１」がある。ブロック種別が「０１混在」である場合は、対応するブロックに０と１の両方が設定されていることを意味する。また、ブロック種別が「全部０」である場合は、対応するブロックには全て０が設定されていることを意味する。また、ブロック種別が「全部１」である場合は、対応するブロックには全て１が設定されていることを意味する。そして、ブロック種別が「０１混在」である場合、対応するブロックはブロック格納領域に格納される。一方、ブロック種別が「全部０」又は「全部１」である場合、対応するブロックは、実際にはブロック格納領域に格納されない。ブロック種別が「全部０」及び「全部１」の場合は、ブロックが実際にはなくても、ブロックに設定されている情報はブロック種別によって明確である。従って、ブロック格納領域に格納されるブロックを削減することができるので、ヒント情報のデータサイズを小さくすることができる。なお、以降の説明においては、ブロックの設定状態を説明するものとして、ブロック種別を用いる。例えば、「０１混在のブロック」、「このブロックは全部０である」等である。
【０１０２】
ブロックポインタは、対応するブロックの先頭アドレスを示す。ただし、ブロック種別が「全部０」又は「全部１」である場合、ブロックポインタには無効なアドレスが設定される。
【０１０３】
ブロックサイズは、ブロックの折り畳みを考慮した現状のブロックの要素数を示す。折り畳みとは、ブロックを複数のデータに分割して、この複数のデータの論理和を求めて新たなブロックとすることにより、ブロックの要素数を減らすことをいう。折り畳みが行われていない場合、ブロックサイズは、ブロックの本来の要素数そのものである。折り畳みが行われている場合、ブロックサイズは、折り畳みによって生成されたブロックの要素数となる。なお、折り畳まれたブロックを元の要素数のブロックに戻すことを、ブロックの展開という。折り畳みの詳細については後述する。
【０１０４】
本実施形態においては、ハッシュ値の計算に用いられるハッシュ関数は、全てのページ情報に格納されるヒント情報について同一である。また、本実施形態においては、１つのヒント情報に格納されるブルームフィルタの要素数も、全てのページ情報に格納されるヒント情報について同一である。
【０１０５】
ヒント情報が更新、つまりヒント情報が生成される場合、初期値として全ブロックが全部０となるヒント情報がベースとして生成される。つまり、全ブロックのブロック種別が「全部０」に設定され、ブロック格納領域にはブロックが１つも格納されていないヒント情報が生成される。そして、新たに追加された葉ページ情報、もしくは、レコードが追加又は削除された葉ページ情報に格納されているレコードのキーについてハッシュ値が算出される。このハッシュ値をインデックスとして、ハッシュ値に対応する要素を有するブロックが選択される。そして、選択されたブロックにおいてハッシュ値に対応する要素の値が１に設定される。この処理が、格納されている全レコードについて行われる。
【０１０６】
このとき、設定前のブロックが全部０のブロックである場合、全て０が設定されたブロックがブロック格納領域に追加された上で、この追加されたブロックにおいて、ハッシュ値に対応する要素に１が設定される。そして、このブロックのブロック種別は「０１混在」に変更される。また、ブロックへの設定が行われた結果、ブロックを構成する全要素に１が設定されている状態となった場合、このブロックのブロック種別は「全部１」に変更される。そして、このブロックが格納されていた領域が解放されて、その領域には他のブロックが詰められる。
【０１０７】
実際には、ヒント情報の各ブロックは可逆圧縮されている。また、必要な場合には、各ブロックは、折り畳みが施された上で可逆圧縮されている。従って、ブロックに対する設定が行われる場合には、設定が行われるブロックが解凍される。また、解凍されたブロックが折り畳まれている場合にはブロックが展開される。そして、設定が行われた後、必要な場合にはブロックの再折り畳みが行われる。そして、ブロックの再可逆圧縮が行われる。なお、以降の説明においては、可逆圧縮を、単に「圧縮」という。
【０１０８】
ブロックが折り畳まれているか否かは、ブロックサイズとブロック本来の要素数とを比較することにより、判断することができる。ブロック本来の要素数は、例えば、予め定数として設定されている。ヒント情報におけるブルームフィルタは、複数のブロックに分割されているので、対象のブロックに対してのみ解凍、展開、再折り畳み、及び再圧縮を行えば良い。従って、ブルームフィルタ全体に対して解凍、展開、再折り畳み、及び再圧縮を行う必要が無いので、処理を高速化することができる。
【０１０９】
次に、ブルームフィルタをヒント情報に適用した場合におけるヒント情報の合成方法について、図５を用いて説明する。
【０１１０】
図５（ａ）は、カタログ情報の一部分のページ情報の一例を示す図であり、図５（ｂ）は、ヒント情報が合成される様子の一例を示す図である。
【０１１１】
節ページ情報の子の位置に複数の節ページ情報が関連付けられている場合、親の位置の節ページ情報において、ヒント情報の合成が行われる。例えば、図５（ａ）に示すように、節ページ情報２００Ｆの子の位置に、節ページ情報２００Ｇ及び節ページ情報２００Ｈが関連付けられているとする。また、節ページ情報２００Ｇにはヒント情報Ｇが格納され、節ページ情報２００Ｈにはヒント情報Ｈが格納されている。
【０１１２】
ヒント情報の合成は、ヒント情報Ｇとヒント情報Ｈとで、ブロック番号が同じブロック同士で行われる。例えば、図５（ｂ）に示すように、ヒント情報Ｇのブロック０とヒント情報Ｈのブロック０とが両方とも０と１が混在して設定されている場合、このブロック０同士の要素毎の論理和が算出される。そして、算出された論理和のデータが、節ページ情報２００Ｆに格納されるヒント情報Ｆのブロック０となる。例えば、ヒント情報Ｇのブロック０が「１００００１０１」であり、ヒント情報Ｈのブロック０が「０１０１０１１０」である場合、ヒント情報Ｆのブロック０は、「１１０１０１１１」となる。なお、論理演算に際して、ヒント情報Ｇのブロック０とヒント情報Ｈのブロック０とに対して、解凍、展開、再折り畳み、及び再圧縮が行われる。ただし、展開及び再折り畳みは、ブロックサイズがブロック本来の要素数よりも小さい場合にのみ行われる。
【０１１３】
ヒント情報Ｇのブロック１が全部０のブロックであり、ヒント情報Ｈのブロック１が０１混在のブロックである場合、ヒント情報Ｈのブロック１がそのままヒント情報Ｆのブロック１として引き継がれる。例えば、ヒント情報Ｈのブロック１が「１１０１１０００」である場合、ヒント情報Ｆのブロック１も「１１０１１０００」となる。この場合、論理演算を行う必要が無い。更に、ブロックの解凍、展開、再折り畳み、及び再圧縮をする必要も無い。つまり、ヒント情報Ｈのブロック１を圧縮されたままヒント情報Ｆのブロック１として設定すれば良い。従って、ヒント情報の合成処理が高速化される。
【０１１４】
ヒント情報Ｇのブロック２が０１混在のブロックであり、ヒント情報Ｈのブロック２が全部１のブロックである場合、ヒント情報Ｆのブロックは全部１のブロックとなる。この場合も、論理演算を行う必要が無いので、ヒント情報の合成処理が高速化される。
【０１１５】
次に、ブルームフィルタをヒント情報に適用した場合におけるヒント情報の折り畳み方法及び展開方法について、図６を用いて説明する。
【０１１６】
図６（ａ）は、折り畳み前のブロックに設定されている内容の一例を示す図である。また、図６（ｂ）及び（ｃ）は、夫々ブロックの折り畳み例を示す図である。
【０１１７】
ヒント情報の各ブロックは圧縮される。また、全部０のブロック及び全部１のブロックは省略される。従って、ヒント情報のデータサイズは、本来のブルームフィルタのデータサイズよりも基本的には小さくなるはずである。一方、節ページ情報には、ヒント情報を格納するヒント情報格納領域が予め確保されている。このヒント情報格納領域は、ヒント情報のデータサイズが小さくなることを前提として、各ブロックが圧縮されていない本来のヒント情報のデータサイズよりも小さいサイズで確保されている。そして、ヒント情報格納領域のサイズは、ヒント情報の上限サイズとして予め固定されている。その理由は、ページ情報のデータサイズを小さくするためである。ページ情報は、センターサーバＳＡからノードＮｎに送信され、また、ノードＮｎ間で送受信される。従って、ページ情報のデータサイズが小さいほど、ページ情報の交換が高速化される。
【０１１８】
このような理由から、ヒント情報のデータサイズを上限サイズ以下にする必要がある。そのために、圧縮及びブロックの省略が行われるのであるが、ブロックの設定内容によっては、ヒント情報のデータサイズが上限サイズにならなかったり、場合によっては、圧縮前よりもヒント情報が大きくなることもある。そこで、本実施形態においては、ブロックの圧縮前に折り畳みを施すことで、ヒント情報のデータサイズを確実に上限サイズ以下にするようになっている。
【０１１９】
具体的には、圧縮されたヒント情報のデータサイズが上限サイズ以下である場合には、圧縮されたヒント情報がそのままヒント情報格納領域に格納される。一方、圧縮されたヒント情報のデータサイズが上限サイズを超える場合には、その圧縮されたヒント情報は破棄され、圧縮前のヒント情報に対して折り畳みが行われる。具体的には、先ず制限サイズが決定される。制限サイズは、折り畳み後の各ブロックの要素数、すなわち、折り畳み後のブロックサイズを示す。この制限サイズは、各ブロックが、折り畳まれた後に圧縮された場合に、圧縮後のヒント情報のデータサイズが上限サイズ以下となるように決定される。この制限サイズは、例えば、折り畳み前に圧縮されたヒント情報のデータサイズと、圧縮前のヒント情報のデータサイズとに基づいて決定されても良い。制限サイズが決定されると、この制限サイズに基づいて、ブロックが要素単位で複数のデータに分割される。そして、複数のデータ同士の要素毎の論理和が算出されて、折り畳み後のブロックが生成される。そして、折り畳まれたブロックが圧縮される。
【０１２０】
例えば、図６（ａ）に示すように、ブロック本来の要素数は３０であるとする。つまり、ブロックのデータサイズは３０ビットである。そして、図６（ｂ）に示すように、制限サイズが２２と決定されたとする。この場合、図６（ａ）に示すブロックが、図６（ｂ）に示すように、１ビット目から２２ビット目までの前半のデータと、２３ビット目から３０ビット目までの後半のデータとに２分割される。次いで、前半と後半とのうち後半のデータの上位ビットと下位ビットとの位置交換が行われる。後半のデータのビット数をＮ、ビット位置をｉ（ｉ＝１，２，３・・・Ｎ）、位置交換前の後半のデータにおける各ビットの値をＤ１（ｉ）、位置交換後の後半のデータにおける各ビットの値をＤ２（ｉ）とする。この場合において、位置交換とは、
Ｄ２（ｉ）＝Ｄ１（Ｎ−ｉ＋１）
の計算を各ビットについて行うことと等価である。つまり、後半のデータが「０１０００１００」である場合、位置交換後の後半のデータは「００１０００１０」となる。そして、前半のデータの１ビット目から８ビット目までと、位置交換後の後半のデータとの論理和が算出される。そして、算出された論理和のデータが前半のデータの１ビット目から８ビット目までに設定される。このようにして生成された２２ビットの前半のデータが、折り畳み後のブロックとなる。そして、ヒント情報のブロックサイズには２２が設定される。
【０１２１】
また、例えば、図６（ｃ）に示すように、制限サイズが８と決定されたとする。制限サイズがブロック本来の要素数の１／２に満たないため、図６（ｂ）に示したような方法では折り畳みを行うことができない。そこで先ず、第１段階として、ブロックは１／２に折り畳まれる。つまり、図６（ｃ）に示すように、ブロックは、１ビット目から１５ビット目までの前半のデータと、１６ビット目から３０ビット目までの後半のデータに２分割される。後半のデータは、上位ビットと下位ビットとの位置交換が行われる。そして、前半のデータと位置交換後の後半のデータとの論理和が算出されて、１５ビットのブロックが生成される。これで、折り畳みの第１段階が完了する。
【０１２２】
制限サイズの８は、折り畳みの第１段階完了後のブロックサイズの１／２よりも小さい。そこで、折り畳みの第２段階として、図６（ｂ）と同様に折り畳みが行われる。すなわち、折り畳み後のブロックは、１ビット目から８ビット目までの前半のデータと、９ビット目から１５ビット目までの後半のデータに２分割される。後半のデータは、上位ビットと下位ビットとの位置交換が行われる。そして、前半のデータの１ビット目から７ビット目までと、位置交換後の後半のデータとの論理和が算出される。そして、算出された論理和のデータが前半のデータの１ビット目から７ビット目までに設定される。このようにして生成された８ビットのデータが、最終的な折り畳み後のブロックとなる。そして、ヒント情報のブロックサイズには８が設定される。
【０１２３】
もし、制限サイズがブロック本来の要素数の１／４に満たない場合、更に第３段階、第４段階・・・と折り畳みが行われる。
【０１２４】
折り畳まれたブロックを展開するには、折り畳みと逆のプロセスを行えば良い。例えば、図６（ｂ）の場合、つまり、本来の要素数が３０であり、制限サイズが２２である場合には、ブロックサイズが２２であるので、ブロックサイズがブロック本来の要素数よりも８小さい。従って、折り畳まれたブロックの１ビット目から７ビット目までのデータのコピーが生成される。コピーされたデータは、上位ビットと下位ビットとの位置交換が行われる。そして、位置交換が行われたデータが、折り畳まれたブロックの２２ビット目の後ろに接続される。
【０１２５】
また、図６（ｃ）の場合、つまり、本来の要素数が３０であり、制限サイズが８である場合にはブロックサイズが８であるので、ブロックサイズがブロック本来の要素数の１／２よりも小さく、１／４よりも大きい。そこで、ブロック本来の要素数の１／２である１５からブロックサイズの８を引いた７ビット分のデータのコピーが生成される。つまり、折り畳まれたブロックの１ビット目から７ビット目までのデータのコピーが生成され、このコピーに対して、上位ビットと下位ビットとの位置交換が行われる。そして、位置交換が行われたデータが、折り畳まれたブロックの８ビット目の後ろに接続される。こうして１５ビットのブロックが生成される。これで、展開の第１段階が完了する。次に、この展開の第１段階完了後の１５ビットのブロックのコピーが生成され、このコピーに対して、上位ビットと下位ビットとの位置交換が行われる。そして、位置交換が行われたデータが、展開の第１段階が完了後のブロックの１５ビット目の後ろに接続される。このようにして生成された３０ビットのブロックが最終的に展開されたブロックとなる。
【０１２６】
ブロックの折り畳み及び展開を行うと、展開されたブロックの内容は、折り畳み前のブロックの内容と異なる場合がある。折り畳み前には１が設定されていた要素が、展開後には０が設定されることはあり得ない。従って、偽陰性が生じることはない。つまり、入力された検索キーで検索されるレコードが子の位置以下の葉ページ情報に格納されているにもかかわらず、該当するレコードが検索される可能性が無いと誤って判定されることはない。一方、折り畳み前には０が設定されていた要素が、展開後には１が設定されている場合がある。これは、偽陽性が増すことを意味する。つまり、入力された検索キーで検索されるレコードが子の位置以下の葉ページ情報に格納されていないにもかかわらず、該当するレコードが検索される可能性が有ると誤って判定される確率が増加する。例えば、或る節ページ情報のヒント情報の折り畳みが行われることにより、折り畳みが行われていなければ、レコード検索において「可能性無し」と判定されていたところを、「可能性有り」と誤って判定される場合がある。しかしながら、この場合であってもその節ページ情報の子の位置の節ページ情報のヒント情報で、また判定を行うことができる。この子の位置の節ページ情報のヒント情報が折り畳まれていなければ、「可能性有り」と誤って判定されることはない。従って、偽陽性が増すからといって不都合が生じるものではない。
【０１２７】
以上説明したブルームフィルタを適用した場合のヒント情報の構造及び生成方法等はあくまでも一例である。例えば、ブルームフィルタの配列要素のデータサイズを１ビットよりも大きくしても良い。この場合において、ヒント情報にキーを反映する場合には、キーのハッシュ値に対応する要素に１を設定するのではなく、この対応する要素に１を加算しても良い。また、この場合において、ヒント情報を合成する場合には、論理和を算出するのではなく、加算によって要素毎に和を求めても良い。この場合、レコードの検索の際、入力された検索キーのハッシュ値に対応する要素の値が１以上である場合には「可能性有り」と判定し、入力された検索キーのハッシュ値に対応する要素の値が０である場合には「可能性無し」と判定すれば良い。
【０１２８】
また、折り畳みを行う際の、ブロックの分割方法は、上述した方法に限られるものではない。例えば、２分割ではなく、３分割以上であっても良い。更に、分割されたデータの上位ビットと下位ビットとの位置交換はしなくても良い。
【０１２９】
また、ブルームフィルタを複数のブロックに分けて管理すること、圧縮、及び折り畳みは必須ではない。
【０１３０】
［３．１．２  数値範囲］
次に、ヒント情報の具体例として、数値の範囲をヒント情報に適用した場合の例について説明する。これは、例えば、キーが数値情報である場合、又は、キーの属性が数値情報である場合に有効である。数値情報には、整数、実数等のほか、日時等も含まれる。
【０１３１】
ヒント情報は、数値情報の下限値と上限値とで示される。つまり、ヒント情報は、数値情報の範囲を示す。例えば、キーが日付であるとして、各レコードのキーが、2009/08/05、2009/12/01、2008/09/10、20009/04/29であるとする。この場合、これらのキーのうち最小のキー、すなわち、最も古い日付である2008/09/10がヒント情報の下限値となる。また、これらのキーのうち最大のキー、すなわち、最も新しい日付である2009/12/01がヒント情報の上限値となる。つまり、ヒント情報は、2008/09/10〜2009/12/01という日付の範囲を示す。
【０１３２】
レコードの検索が行われる際には、検索キーとヒント情報とが比較される。検索キーが、ヒント情報が示す範囲内にある場合は、「可能性有り」を意味する。一方、検索キーが、ヒント情報が示す範囲内にない場合は、「可能性無し」を意味する。例えば、ヒント情報が2008/09/10〜2009/12/01を示す場合、検索キーとして2008/09/10から2009/12/01までの何れかの日付が入力された場合には、「可能性有り」と判断される。2008/09/10よりも前、又は、2009/12/01よりも後の日付が入力された場合には、「可能性無し」と判定される。このように、数値範囲を用いた判定では、偽陽性による誤判定はあるが、偽陰性による誤判定はない。
【０１３３】
ヒント情報の合成は、子の位置の複数の節ページに夫々格納されているヒント情報が示す範囲に基づいて行われる。具体的に、合成対象となる複数のヒント情報夫々の下限値の中から最小の下限値が新たな下限値となる。また、合成対象となる複数のヒント情報夫々の上限値の中から最大の上限値が新たな上限値となる。そして、新たな下限値と新たな上限値とを示すヒント情報が、親の位置の節ページ情報に格納される。例えば、合成対象のヒント情報が、2008/09/10〜2009/12/01、2008/04/02〜2010/02/15、2009/06/22〜2010/06/03を示す場合、2008/04/02〜2010/06/03を示すヒント情報が生成される。
【０１３４】
以上説明したヒント情報の具体例はあくまでも一例であり、ヒント情報として、ブルームフィルタ及び数値範囲以外のものを適用しても良い。例えば、オートマトンをヒント情報に適用しても良い。
【０１３５】
［４．センターサーバＳＡの構成等］
次に、図７を参照して、センターサーバＳＡの構成及び機能について説明する。
【０１３６】
図７は、センターサーバＳＡの概要構成例を示す図である。
【０１３７】
センターサーバＳＡは、図７に示すように、演算機能を有するＣＰＵ，作業用ＲＡＭ，各種データ及びプログラムを記憶するＲＯＭ等から構成された制御部１１を備えている。また、センターサーバＳＡは、各種データ及び各種プログラム等を記憶保存するためのＨＤ等から構成された記憶部１２を備えている。更に、センターサーバＳＡは、ネットワーク８等を通じてノードＮｎとの間の情報の通信制御を行うための通信部１３を備えている。また更に、センターサーバＳＡは、各種情報を表示するＣＲＴ，液晶ディスプレイ等の表示部１４を備えている。更にまた、センターサーバＳＡは、オペレータからの指示を受け付けこの指示に応じた指示信号を制御部１１に対して与える入力部（例えば、キーボード、マウス等）１５と、を備えている。そして、制御部１１、記憶部１２、通信部１３、表示部１４、及び入力部１５はバス１６を介して相互に接続されている。ここで、記憶部１２は、ページ情報記憶手段の一例である。また、入力部１５は、検索入力手段の一例である。なお、記憶部１２は、揮発性のメモリであっても良いし、不揮発性のメモリであっても良い。
【０１３８】
記憶部１２には、各ノードＮｎのノードＩＤ、ＩＰアドレス及びポート番号等が記憶されている。また、記憶部１２には、カタログ情報がルートリンク情報及びページ情報単位で登録されるカタログデータベースが構築されている。更に、記憶部１２には、カタログデータベースを管理するためのデータベース管理プログラムが記憶されている。なお、データベース管理プログラムは、情報生成プログラムの一例である。
【０１３９】
制御部１１は、ＣＰＵが記憶部１２等に記憶されたデータベース管理プログラム等のプログラムを読み出して実行することにより、葉ページ情報生成手段、節ページ情報生成手段、根ページ情報生成手段、合成手段、検索手段及び判定手段として機能する。
【０１４０】
なお、上記データベース管理プログラムは、例えば、ネットワーク８上の所定のサーバからダウンロードされるようにしても良い。また、上記データベース管理プログラムは、例えば、ＣＤ−ＲＯＭ等の記録媒体に記録されてこの記録媒体のドライブを介して読み込まれるようにしても良い。
【０１４１】
［５．ノードＮｎの構成及び機能等］
次に、図８を参照して、ノードＮｎの構成及び機能について説明する。
【０１４２】
図８は、ノードＮｎの概要構成例を示す図である。
【０１４３】
各ノードＮｎは、図８に示すように、演算機能を有するＣＰＵ，作業用ＲＡＭ，各種データ及びプログラムを記憶するＲＯＭ等から構成されたコンピュータとしての制御部２１を備えている。また、各ノードＮｎは、各種データ及び各種プログラム等を記憶保存するためのＨＤ（ハードディスク）等から構成された記憶部２２と、受信されたコンテンツのレプリカ等を一時蓄積するバッファメモリ２３とを備えている。更に、各ノードＮｎは、コンテンツのレプリカに含まれるエンコードされたビデオデータ（映像情報）及びオーディオデータ（音声情報）等をデコードするデコーダ部２４を備えている。また更に、各ノードＮｎは、このデコードされたビデオデータ等に対して所定の描画処理を施しビデオ信号として出力する映像処理部２５と、この映像処理部２５から出力されたビデオ信号に基づき映像表示するＣＲＴ，液晶ディスプレイ等の表示部２６と、を備えている。更にまた、各ノードＮｎは、上記デコードされたオーディオデータをアナログオーディオ信号にＤ （Digital）／Ａ（Analog）変換した後これをアンプにより増幅して出力する音声処理部２７と、この音声処理部２７から出力されたオーディオ信号を音波として出力するスピーカ２８と、を備えている。また更に、各ノードＮｎは、ネットワーク８を通じて他のノードＮｎ等間の情報の通信制御を行うための通信部２９を備えている。更にまた、各ノードＮｎは、ユーザからの指示を受け付けこの指示に応じた指示信号を制御部２１に対して与える入力部（例えば、キーボード、マウス、或いは、リモコンや操作パネル等）３０を備えている。そして、制御部２１、記憶部２２、バッファメモリ２３、デコーダ部２４、通信部２９、及び入力部３０はバス３１を介して相互に接続されている。ここで、記憶部２２は、第２ページ情報記憶手段の一例である。また、入力部３０は、第２検索入力手段の一例である。なお、ノードＮｎとしては、例えば、パーソナルコンピュータ、ＳＴＢ（Set Top Box）等を適用可能である。
【０１４４】
記憶部２２には、ＤＨＴを用いたルーティングテーブル、インデックス、並びに、コンテンツ分散保存システムＳに参加する際のアクセス先となるコンタクトノードのＩＰアドレス及びポート番号、及びセンターサーバＳＡのＩＰアドレス及びポート番号等が記憶されている。また、記憶部２２には、他のノードＮｎやサーバＳＡから取得したページ情報が、ファイルとして記憶される。
【０１４５】
制御部２１は、ＣＰＵが記憶部２２等に記憶されたプログラム（本発明のノードプログラムを含む）を読み出して実行することにより、第２検索手段、ページ情報取得手段、第２判定手段、及び改竄判定手段として機能する。
【０１４６】
なお、ノードプログラムは、例えば、ネットワーク８上の所定のサーバからダウンロードされるようにしても良いし、例えば、ＣＤ−ＲＯＭ等の記録媒体に記録されてこの記録媒体のドライブを介して読み込まれるようにしても良い。
【０１４７】
［６．コンテンツ分散保存システムＳの動作］
次に、図９乃至図１６を参照して、本実施形態に係るコンテンツ分散保存システムＳの動作について説明する。
【０１４８】
以下においては、カタログ情報が一般的なｎ分探索木の構造を少なくとも有するものとして説明する。木の種類や構造等に特有の処理に関する詳細な説明は省略する。また、ヒント情報には、ビット配列の構造を有するブルームフィルタが適用されているものとする。なお、ヒント情報に数値範囲を適用した場合の動作については、随時補足する。
【０１４９】
［６．１  センターサーバＳＡの動作］
図９は、本実施形態に係るセンターサーバＳＡにおける制御部１１の処理例を示すフローチャートである。
【０１５０】
図９に示す処理は、例えば、データベース管理プログラムが起動されたときに開始される。先ず、制御部１１は、初期化処理を実行する（ステップＳ１）。初期化処理においては、ルートリンク情報が既に作成されている場合には、ルート情報の読み出しと、読み出されたルート情報の改竄チェックが行われる。一方、ルートリンク情報が作成されていない場合には、ルートリンク情報が新規に作成される。ルートリンク情報はＲＡＭに格納される。
【０１５１】
次いで、制御部１１は、オペレータからの終了指示があったか否かを、入力部１５からの入力に基づいて判定する（ステップＳ２）。
【０１５２】
ステップＳ２において、制御部１１は、終了指示がない場合には（ステップＳ２：ＮＯ）、オペレータからのレコードの追加要求があったか否かを、入力部１５からの入力に基づいて判定する（ステップＳ３）。このとき、制御部１１は、レコードの追加要求があった場合には（ステップＳ３：ＹＥＳ）、レコード追加処理を実行する（ステップＳ４）。この場合、制御部１１は、例えばオペレータ操作によって入力部１５から入力された新規レコードを指定する。また、制御部１１は、新規レコードのインデックスを指定する。このレコード追加処理では、入力された新規レコードがカタログ情報に追加される。なお、レコード追加処理の詳細については後述する。
【０１５３】
ステップＳ３において、制御部１１は、レコードの追加要求がなかった場合には（ステップＳ３：ＮＯ）、オペレータからのレコードの削除要求があったか否かを、入力部１５からの入力に基づいて判定する（ステップＳ５）。このとき、制御部１１は、レコードの削除要求があった場合には（ステップＳ５：ＹＥＳ）、レコード削除処理を実行する（ステップＳ６）。この場合、制御部１１は、オペレータ操作によって入力部１５から入力された削除対象レコードのインデックスを指定する。このレコード削除処理では、指定されたインデックスに対応する削除対象レコードがカタログ情報から削除される。なお、レコード削除処理の詳細については後述する。
【０１５４】
ステップＳ５において、制御部１１は、レコードの削除要求がなかった場合には（ステップＳ５：ＮＯ）、オペレータからのレコードの検索要求があったか否かを、入力部１５からの入力に基づいて判定する（ステップＳ７）。このとき、制御部１１は、レコードの検索要求があった場合には（ステップＳ７：ＹＥＳ）、レコード検索処理を実行する（ステップＳ８）。この場合、制御部１１は、オペレータ操作によって入力部１５から入力された検索キーを指定する。このレコード検索処理では、指定された検索キーを用いてカタログ情報からレコードが検索される。なお、レコード検索処理の詳細については後述する。
【０１５５】
ステップＳ７において、制御部１１は、レコードの検索要求がなかった場合には（ステップＳ７：ＮＯ）、ルートリンク情報要求メッセージを受信したか否かを判定する（ステップＳ９）。このとき、制御部１１は、ルートリンク情報要求メッセージを受信した場合には（ステップＳ９：ＹＥＳ）、ルートリンク情報をルートリンク情報メッセージに含ませて、要求元のノードＮｎに送信する（ステップＳ１０）。
【０１５６】
ステップＳ９において、制御部１１は、ルートリンク情報要求メッセージを受信していない場合には（ステップＳ９：ＮＯ）、ページ情報要求メッセージを受信したか否かを判定する（ステップＳ１１）。このとき、制御部１１は、ページ情報要求メッセージを受信した場合には（ステップＳ１１：ＹＥＳ）、ページ情報取得処理を実行する（ステップＳ１２）。このとき、制御部１１は、ページ情報要求メッセージに含まれているリンク情報を指定する。このリンク情報は、要求されたページ情報を指している。ページ情報取得処理では、指定されたリンク情報が指すページ情報がファイルから取得され、ＲＡＭに格納される。制御部１１は、要求されたページ情報を取得すると、このページ情報をページ情報メッセージに含ませて、要求元のノードＮｎに送信する（ステップＳ１３）。
【０１５７】
制御部１１は、ステップＳ４、Ｓ６、Ｓ８、Ｓ１０又はＳ１３の処理を終えたとき、或いは、ステップＳ１１において、ページ情報要求メッセージを受信していない場合には（ステップＳ１１：ＮＯ）、ステップＳ２に移行する。そして、制御部１１は、ステップＳ２においてオペレータからの終了指示があった場合には（ステップＳ２：ＹＥＳ）、本処理を終了させる。
【０１５８】
図１０は、本実施形態に係るセンターサーバＳＡにおける制御部１１のレコード追加処理における処理例を示すフローチャートである。
【０１５９】
先ず、制御部１１は、現在のルートリンク情報をＲＡＭから取得する（ステップＳ２０１）。次いで、制御部１１は、ページ情報取得処理を実行する（ステップＳ２０２）。このとき、制御部１１は、ルートリンク情報を指定する。ページ情報取得処理では、指定されたリンク情報が指すページ情報がファイルから取得され、ＲＡＭに格納される。取得されたページ情報は、現在参照しているページ情報とされる。
【０１６０】
次いで、制御部１１は、指定されたインデックスに基づいて、担当ページ情報を決定する。担当ページ情報とは、或るレコードに対して、このレコードを格納すべきページ情報を意味する。レコードを追加する場合は、入力された新規レコードを格納すべき葉ページ情報が担当ページ情報である。
【０１６１】
具体的に、制御部１１は、取得されたページ情報が新規レコードの担当ページ情報であるか否かを判定する（ステップＳ２０３）。この判定方法は、ページ情報の構造に依存する。
【０１６２】
制御部１１は、取得されたページ情報が新規レコードの担当ページ情報ではない場合には（ステップＳ２０３：ＮＯ）、現在参照しているページ情報から、次のページ情報へのリンク情報を取得する（ステップＳ２０４）。次のページ情報とは、現在参照しているページ情報の子ページ情報のうち、次に参照するページ情報をいう。次に参照するページ情報は、指定されたインデックスに対応する。この処理は、カタログ情報の探索木の構造に対応した探索アルゴリズムに従って行われる。
【０１６３】
次いで、制御部１１は、次のページ情報へのリンク情報が存在するか否かを判定する（ステップＳ２０５）。つまり、制御部１１は、次のページ情報へのリンク情報を取得することができたか否かを判定する。このとき、制御部１１は、次のページ情報へのリンク情報が存在しない場合には（ステップＳ２０５：ＮＯ）、葉ページ情報生成手段として、新しい担当ページ情報をＲＡＭ上に作成する（ステップＳ２０６）。そして、制御部１１は、作成した担当ページ情報上に新規レコードを追加して設定する。
【０１６４】
一方、制御部１１は、次のページ情報へのリンク情報が存在する場合には（ステップＳ２０５：ＹＥＳ）、ステップＳ２０２に移行する。このとき、制御部１１は、ステップＳ２０４において取得したリンク情報を指定して、ページ情報取得処理を実行する。
【０１６５】
ステップＳ２０３において、制御部１１は、取得されたページ情報が新規レコードの担当ページ情報である場合には（ステップＳ２０３：ＹＥＳ）、決定した担当ページ情報に新規レコードが追加可能であるか否かを判定する。具体的に、制御部１１は、担当ページ情報には、格納可能なレコード数の上限まで既にレコードが格納されているか否かを判定する（ステップＳ２０７）。このとき、制御部１１は、格納可能なレコード数の上限までのレコードは格納されていない場合には（ステップＳ２０７：ＮＯ）、葉ページ情報生成手段として、現在の担当ページ情報の内容をコピーした新しい担当ページ情報をＲＡＭ上に作成する（ステップＳ２０８）。そして、制御部１１は、新しい担当ページ情報に新規レコードを追加して設定する。
【０１６６】
一方、制御部１１は、格納可能なレコード数の上限まで既にレコードが格納されている場合には（ステップＳ２０７：ＹＥＳ）、葉ページ情報生成手段として、ページ情報の分割を行う（ステップＳ２０９）。具体的に、制御部１１は、カタログ情報の探索木の構造に対応する分割アルゴリズムに従って、現在の担当ページ情報の内容を分割して複数の新しいページ情報をＲＡＭ上に作成する。そして、制御部１１は、この新しいページ情報のうち担当ページ情報に、新規レコードを追加して設定する。
【０１６７】
制御部１１は、ステップＳ２０６、Ｓ２０８又はＳ２０９において新しい担当ページを作成した後、ページ情報登録処理を実行する（ステップＳ２１０）。このとき、制御部１１は、新たに作成したページ情報を指定する。ページ情報登録処理では、指定されたページ情報へのリンク情報が生成され、このページ情報がファイルに保存される。これによりページ情報が登録される。なお、ステップＳ２０９において、担当ページ情報が複数の新しいページ情報に分割された場合には、この複数のページ情報夫々に対してページ情報登録処理が実行される。
【０１６８】
次いで、制御部１１は、登録されたページ情報の親ページ情報が存在するか否かを判定する（ステップＳ２１１）。例えば、ステップＳ２０５の判定において次のページ情報へのリンク情報が存在する度に、そのとき参照していたページ情報のページ番号をＲＡＭの所定領域に保存してくと良い。この所定領域を参照することによって、親ページ情報が存在するか、及び、この親ページ情報のページ番号を特定することができる。
【０１６９】
制御部１１は、親ページ情報が存在する場合には（ステップＳ２１１：ＹＥＳ）、節ページ情報生成手段及び根ページ情報生成手段として、新たに作成した葉ページ情報の親ページ情報からルートページ情報までの各節ページ情報を再生成する。具体的に、制御部１１は、子ページ情報のメッセージダイジェストと、この子ページ情報のページ番号を含むリンク情報が格納された親ページ情報を作成する。より詳細に、制御部１１は、元の親ページ情報の内容をコピーした新しい親ページ情報をＲＡＭ上に作成する（ステップＳ２１２）。そして、制御部１１は、新しい親ページを現在参照するページ情報とする。
【０１７０】
次いで、制御部１１は、現在参照するページ情報に格納されている古い子ページ情報を指していたリンク情報を、新しい子ページ情報を指すリンク情報に書き換える（ステップＳ２１３）。具体的に、制御部１１は、ステップＳ２１０のページ情報登録処理で生成されたリンク情報を、新しい子ページ情報を指すリンク情報とする。そして、制御部１１は、新しい子ページ情報を指すリンク情報を、古い子ページ情報を指していたリンク情報に上書きする。
【０１７１】
次いで、制御部１１は、ヒント情報生成処理を実行する（ステップＳ２１４）。このヒント情報生成処理では、ヒント情報が生成され、生成されたヒント情報が、現在参照するページ情報に格納される。なお、ヒント情報生成処理の詳細については後述する。
【０１７２】
次いで、制御部１１は、ステップＳ２１０に移行する。このとき、制御部１１は、新たに作成した現在参照しているページ情報を指定して、ページ情報登録処理を実行する。これにより、現在参照しているページ情報が登録される。
【０１７３】
ステップＳ２１１において、制御部１１は、登録されたページ情報の親ページ情報が存在しない場合、つまり、登録されたページ情報がルートページ情報である場合には（ステップＳ２１１：ＮＯ）、ルートリンク情報登録処理を実行する（ステップＳ２１５）。ルートリンク情報登録処理では、登録された新しいルートページ情報を指すルートリンク情報が作成され、作成されたルートリンク情報が、全ノードＮｎに配信される。制御部１１は、ルートリンク情報登録処理を終えると、レコード追加処理を終了させる。
【０１７４】
図１１は、本実施形態に係るセンターサーバＳＡにおける制御部１１のレコード削除処理における処理例を示すフローチャートである。
【０１７５】
先ず、制御部１１は、ステップＳ２５１〜Ｓ２５５の処理を実行する。これらの処理は、レコード追加処理におけるステップＳ２０１〜Ｓ２０５の処理と基本的に同様である。ただし、ステップＳ２５５において、制御部１１は、次のページ情報へのリンク情報が存在しない場合には（ステップＳ２５５：ＮＯ）、レコード削除処理を終了させる。つまり、削除対象レコードを格納しているページ情報は存在しないので、レコード削除処理はここで終了する。
【０１７６】
ステップＳ２５３において、制御部１１は、取得されたページ情報が削除対象レコードの担当ページ情報である場合には（ステップＳ２５３：ＹＥＳ）、担当ページ情報は削除対象レコードを格納しているか否かを判定する（ステップＳ２５６）。この判定方法は、カタログ情報の構造に依存する。このとき、制御部１１は、担当ページ情報は削除対象レコードを格納していない場合には（ステップＳ２５６：ＮＯ）、レコード削除処理を終了させる。
【０１７７】
一方、制御部１１は、担当ページ情報は削除対象レコードを格納している場合には（ステップＳ２５６：ＹＥＳ）、葉ページ情報生成手段として、一又は複数のレコードが格納された葉ページ情報を作成する。具体的に制御部１１は、現在の担当ページ情報の内容をコピーした新しい担当ページ情報をＲＡＭ上に作成する（ステップＳ２５７）。そして、制御部１１は、新しい担当ページ情報から削除対象レコードを削除する。
【０１７８】
次いで、制御部１１は、作成した新しいページ情報が格納しているレコードの数とリンク情報の数が何れも０になったか否かを判定する（ステップＳ２５８）。つまり、制御部１１は、作成した新しいページ情報が空になったか否かを判定する。このとき、制御部１１は、作成した新しいページ情報が空になっていない場合には（ステップＳ２５８：ＮＯ）、このページ情報を指定して、ページ情報登録処理を実行する（ステップＳ２５９）。これにより、削除対象レコードが削除された新しいページ情報が登録される。
【０１７９】
一方、制御部１１は、作成した新しいページ情報が空になった場合には（ステップＳ２５８：ＹＥＳ）、ステップＳ２５８で空になったと判定されたページ情報をＲＡＭ上から削除する（ステップＳ２６０）。
【０１８０】
制御部１１は、ステップＳ２５９又はＳ２６０の処理を終えると、節ページ情報生成手段及び根ページ情報生成手段として、ステップＳ２６１〜Ｓ２６５の処理を実行する。これらの処理は、レコード追加処理におけるステップ２１１〜Ｓ２１５の処理と基本的には同様である。ただし、ステップＳ２６３において、制御部１１は、子ページ情報がステップＳ２６０で削除されている場合には、古い子ページ情報を指していたリンク情報を、何も指していない状態に書き換える。例えば、ページ番号及びメッセージダイジェストに無効な値が設定される。制御部１１は、ステップＳ２６５の処理を終えると、レコード削除処理を終了させる。
【０１８１】
図１２は、本実施形態に係るセンターサーバＳＡにおける制御部１１のヒント情報生成処理における処理例を示すフローチャートである。
【０１８２】
先ず、制御部１１は、全ブロックが全部０であるワーク用のヒント情報をＲＡＭ上に生成する（ステップＳ３０１）。このとき、制御部１１は、ブロックサイズ及びブロック管理情報の初期設定を行う。次いで、制御部１１は、リンク番号Ｘに１を設定する（ステップＳ３０２）。次いで、制御部１１は、ページ情報取得処理を実行する（ステップＳ３０３）。このとき、制御部１１は、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の中からＸ番目のリンク情報を指定する。ページ情報取得処理では、指定されたリンク情報が指す子ページ情報がファイルから取得され、ＲＡＭに格納される。
【０１８３】
次いで、制御部１１は、取得された子ページ情報にヒント情報が格納されているか否かを判定する（ステップＳ３０４）。このとき、制御部１１は、取得された子ページ情報にヒント情報が格納されている場合には（ステップＳ３０４：ＹＥＳ）、合成手段として、ヒント情報の合成を行う（ステップＳ３０５）。具体的に、制御部１１は、ワーク用のヒント情報のブルームフィルタと子ページ情報に格納されているヒント情報のブルームフィルタの論理和を算出する。この論理和の算出は、ブロック毎に行われる。そして、制御部１１は、算出された論理和のデータをワーク用のヒント情報に設定する。
【０１８４】
制御部１１は、ステップＳ３０４において、取得された子ページ情報にヒント情報が格納されていない場合（ステップＳ３０４：ＮＯ）、又は、ステップＳ３０５の処理を終えた場合には、取得された子ページ情報にレコードが格納されているか否かを判定する（ステップＳ３１８）。
【０１８５】
このとき、制御部１１は、取得された子ページ情報にレコードが格納されている場合には（ステップＳ３１８：ＹＥＳ）、レコード番号Ｙに１を設定する（ステップＳ３０６）。次いで、制御部１１は、Ｙ番目のキーに格納されているキーをワーク用のヒント情報に反映する（ステップＳ３０７）。具体的に、制御部１１は、Ｙ番目のキーに格納されているキーのハッシュ値を算出する。次いで、制御部１１は、ワーク用のヒント情報において、ハッシュ値に対応するブロックを選択する。次いで、制御部１１は、選択したブロックにおいて、ハッシュ値に対応する位置の要素を１に設定する。
【０１８６】
制御部１１は、キーの反映を終えると、レコード番号Ｙに１を加算する（ステップＳ３０８）。次いで、制御部１１は、レコード番号Ｙが、取得された子ページ情報に格納されているレコードの総数より大きいか否かを判定する（ステップＳ３０９）。レコードの総数は、取得された子ページ情報に格納されているレコードの個数を数えることによって求められる。このとき、制御部１１は、レコード番号Ｙが、取得された子ページ情報に格納されているレコードの総数以下である場合には（ステップＳ３０９：ＮＯ）、ステップＳ３０７に移行する。
【０１８７】
制御部１１は、ステップＳ３１８において、取得された子ページ情報にレコードが格納されていない場合（ステップＳ３１８：ＮＯ）、又は、ステップＳ３０９において、レコード番号Ｙが、取得された子ページ情報に格納されているレコードの総数より大きい場合には（ステップＳ３０９：ＹＥＳ）、リンク番号Ｘに１を加算する（ステップＳ３１０）。次いで、制御部１１は、リンク番号Ｘが、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の総数より大きいか否かを判定する（ステップＳ３１１）。有効なページ情報を指しているリンク情報の総数は、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の個数を数えることによって求められる。例えば、リンク情報に含まれるページ番号が無効な値に設定される場合、このリンク情報は有効なページ情報を指していない。例えば、ページ番号が１から始まるように定められている場合、ページ番号に１以上の値が設定されているリンク情報は有効であり、ページ番号に０が設定されているリンク情報は無効である。このとき、制御部１１は、リンク番号Ｘが、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の総数以下である場合には（ステップＳ３１１：ＮＯ）、ステップＳ３０３に移行する。
【０１８８】
一方、制御部１１は、リンク番号Ｘが、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の総数より大きい場合には（ステップＳ３１１：ＹＥＳ）、ワーク用のヒント情報のブロック格納領域に格納されている各ブロックを圧縮する（ステップＳ３１２）。次いで、制御部１１は、圧縮後のワーク用のヒント情報のデータサイズが上限サイズ以下であるか否かを判定する（ステップＳ３１３）。このとき、制御部１１は、圧縮後のワーク用のヒント情報のデータサイズが上限サイズより大きい場合には（ステップＳ３１３：ＮＯ）、ブロックの制限サイズを決定する（ステップＳ３１４）。次いで、制御部１１は、ブロックサイズが制限サイズになるように、ワーク用のヒント情報に格納されている各ブロックの折り畳みを行う（ステップＳ３１５）。次いで、制御部１１は、折り畳まれた各ブロックを夫々圧縮する（ステップＳ３１６）。
【０１８９】
制御部１１は、ステップＳ３１３において、圧縮後のワーク用のヒント情報のデータサイズが上限サイズ以下である場合、又は、ステップＳ３１６の処理を終えた場合には、圧縮された各ブロックをワーク用のヒント情報に格納する。そして、制御部１１は、このワーク用のヒント情報を、現在参照するページ情報のヒント情報格納領域に格納する（ステップＳ３１７）。制御部１１は、この処理を終えると、ヒント情報生成処理を終了させる。
【０１９０】
次に、ヒント情報に数値範囲を適用した場合のヒント情報生成処理について、ブルームフィルタを適用した場合と異なる点について補足する。この場合、ステップ３０５において、制御部１１は、ワーク用のヒント情報が示す数値範囲と、子ページ情報が示す数値範囲とが合成される。そして、制御部１１は、合成した数値範囲をワーク用のヒント情報に設定する。
【０１９１】
また、ステップＳ３０７において、キーの値がワーク用のヒント情報が示す数値範囲内にある場合には、ヒント情報の変更は行われない。一方、制御部１１は、キーの値がワーク用のヒント情報が示す数値範囲よりも大きい場合には、キーの値を数値範囲の新たな上限値とするワーク用のヒント情報に設定される。この場合、数値範囲の下限値は変更されない。また、制御部１１は、キーの値がワーク用のヒント情報が示す数値範囲よりも小さい場合には、キーの値を数値範囲の新たな下限値とする数値範囲がワーク用のヒント情報に設定される。この場合、数値範囲の上限値は変更されない。
【０１９２】
また、ステップＳ３１２〜Ｓ３１６のブロックの圧縮及び折り畳みは行われない。
【０１９３】
図１３（ａ）は、本実施形態に係るセンターサーバＳＡにおける制御部１１のレコード検索処理における処理例を示すフローチャートである。
【０１９４】
先ず、制御部１１は、現在のルートリンク情報をＲＡＭから取得する（ステップＳ３５１）。次いで、制御部１１は、ページ情報取得処理を実行する（ステップＳ３５２）。このとき、制御部１１は、ルートリンク情報を指定する。ページ情報取得処理では、指定されたルートリンク情報が指すルートページ情報がファイルから取得され、ＲＡＭに格納される。
【０１９５】
次いで、制御部１１は、検索手段として、サブツリー検索処理を実行する（ステップＳ３５３）。このとき、制御部１１は、取得されたルートページ情報及び入力された検索キーを指定する。サブツリー検索処理では、指定されたページ情報に対して、レコードの検索及びヒント情報を用いた判定が行われる。サブツリー検索処理は、再帰呼び出しが可能である。サブツリー検索処理の再帰呼び出しによって、根ページ情報から葉ページ情報にかけて、検索対象とするページ情報を移っていきながら、入力された検索キーを用いてレコードが検索される。なお、サブツリー検索処理の詳細については後述する。
【０１９６】
次いで、制御部１１は、サブツリー検索処理において検索された検索結果を表示部１４に表示等する（ステップＳ３５４）。制御部１１は、この処理を終えると、レコード検索処理を終了させる。
【０１９７】
図１３（ｂ）は、本実施形態に係るセンターサーバＳＡにおける制御部１１のサブツリー検索処理における処理例を示すフローチャートである。
【０１９８】
先ず、制御部１１は、指定されたページ情報を、現在参照しているページ情報とする。そして、制御部１１は、現在参照しているページ情報が、検索キーで検索されるレコードを格納しているか否かを判定する（ステップＳ３７１）。現在参照しているページ情報がレコードを１つも格納していない場合には、検索キーで検索されるレコードを格納していないこととなる。一方、現在参照しているページ情報がレコードを格納している場合には、制御部１１は、入力された検索キーと、各レコードに格納されているキーとを比較する。この比較の結果、例えば、格納されているキーが検索キーと一致するレコードが、検索キーで検索されるレコードとなる。制御部１１は、現在参照しているページ情報が、検索キーで検索されるレコードを格納している場合には（ステップＳ３７１：ＹＥＳ）、検索されたレコードを検索結果に追加する（ステップＳ３７２）。具体的に、制御部１１は、検索されたレコードを、ＲＡＭ上の所定の領域に追加設定する。
【０１９９】
制御部１１は、現在参照しているページ情報が、検索キーで検索されるレコードを格納していない場合（ステップＳ３７１：ＮＯ）、又は、ステップＳ３７２の処理を終えた場合には、現在参照しているページ情報が葉ページ情報であるか否かを判定する（ステップＳ３７３）。このとき、制御部１１は、現在参照しているページ情報が葉ページ情報である場合には（ステップＳ３７３：ＹＥＳ）、現在参照しているページ情報に子ページ情報が存在しないので、サブツリー検索処理を終了させる。
【０２００】
一方、制御部１１は、現在参照しているページ情報が節ページ情報である場合には（ステップＳ３７３：ＮＯ）、判定手段として、検索キーと現在参照しているページ情報に格納されているヒント情報とに基づいて、「可能性有り」であるか否を判定する。つまり、制御部１１は、現在参照しているページ情報の子の位置のページ情報以下のページ情報に、検索キーで検索されるレコードが存在する可能性が有るか否かを判定する（ステップＳ３７４）。具体的に、制御部１１は、検索キーのハッシュ値を算出する。次いで、制御部１１は、ヒント情報において、ハッシュ値に対応する要素が設定されているブロックを、ハッシュ値に基づいて特定する。次いで、制御部１１は、特定したブロックをヒント情報の中からＲＡＭ上の所定領域にコピーする。次いで、制御部１１は、コピーしたブロックを解凍する。次いで、制御部１１は、ブロックが折り畳まれている場合には、このブロックを展開する。そして、制御部１１は、解凍され又は展開されたブロックから、ハッシュ値に対応する要素を取得する。この取得された要素に１が設定されている場合には、「可能性有り」となり、取得された要素に０が設定されている場合には、「可能性無し」となる。
【０２０１】
このとき、制御部１１は、「可能性無し」である場合には（ステップＳ３７４：ＮＯ）、現在参照しているページ情報の子の位置のページ情報から葉ページ情報まで関連付けられているページ情報を、検索対象から除外する。つまり、制御部１１は、サブツリー検索処理を終了させる。一方、制御部１１は、「可能性有り」である場合には（ステップＳ３７４：ＹＥＳ）、リンク番号Ｘに１を設定する（ステップＳ３７５）。
【０２０２】
次いで、制御部１１は、リンク番号Ｘが、現在参照しているページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の総数以下であるか否かを判定する（ステップＳ３７６）。有効なページ情報を指しているリンク情報の総数は、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の個数を数えることによって求められる。
【０２０３】
このとき、制御部１１は、リンク番号Ｘが、現在参照しているページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の総数以下である場合には（ステップＳ３７６：ＹＥＳ）、ページ情報取得処理を実行する（ステップＳ３７７）。このとき、制御部１１は、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の中からＸ番目のリンク情報を指定する。ページ情報取得処理では、指定されたリンク情報が指す子ページ情報がファイルから取得され、ＲＡＭに格納される。
【０２０４】
次いで、制御部１１は、サブツリー検索処理を再帰呼び出しする（ステップＳ３７８）。このとき、制御部１１は、取得されたページ情報及び入力された検索キーを指定する。次いで、制御部１１は、リンク番号Ｘに１を加算して（ステップＳ３７９）、ステップＳ３７６に移行する。
【０２０５】
ステップＳ３７６において、制御部１１は、リンク番号Ｘが、現在参照しているページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の総数より大きい場合には（ステップＳ３７６：ＮＯ）、サブツリー検索処理を終了させる。
【０２０６】
サブツリー検索処理終了後の移行先は、２通りある。今回のサブツリー検索処理が、サブツリー検索処理の再帰呼び出しによって実行された場合には、呼び出し元のサブツリー検索処理のステップＳ３７９に移行する。一方、今回のサブツリー検索処理が、レコード検索処理から呼び出された場合には、レコード検索処理のステップＳ３５４に移行する。
【０２０７】
次に、ヒント情報に数値範囲を適用した場合のヒント情報生成処理について、ブルームフィルタを適用した場合と異なる点について補足する。この場合、ステップ３７４において、制御部１１は、検索キーとヒント情報が示す数値範囲とを比較する。そして、この比較の結果、検索キーがヒント情報が示す数値範囲内にある場合には、「可能性有り」となる。一方、検索キーがヒント情報が示す数値範囲内にない場合には、「可能性無し」となる。
【０２０８】
［６．２  ノードＮｎの動作］
図１４は、本実施形態に係るノードＮｎにおける制御部２１の処理例を示すフローチャートである。
【０２０９】
図１４に示す処理は、例えば、ノードＮｎが、コンテンツ分散保存システムＳに参加したときに開始される。先ず、制御部２１は、初期化処理を実行する（ステップＳ５０１）。この初期化処理では、ルートリンク情報要求メッセージの送信により、ルートリンク情報が他のノードＮｎ又はセンターサーバＳＡから取得される。
【０２１０】
次いで、制御部２１は、ユーザからの終了指示があったか否かを、入力部３０からの入力に基づいて判定する（ステップＳ５０２）。
【０２１１】
ステップＳ５０２において、制御部２１は、終了指示がない場合には（ステップＳ５０２：ＮＯ）、ユーザからのレコードの検索要求があったか否かを、入力部３０からの入力に基づいて判定する（ステップＳ５０３）。このとき、制御部２１は、レコードの検索要求があった場合には（ステップＳ５０３：ＹＥＳ）、第２検索手段及び第２判定手段として、レコード検索処理を実行する（ステップＳ５０４）。この場合、制御部２１は、ユーザ操作によって入力部３０から入力された検索キーを指定する。このレコード検索処理では、指定された検索キーを用いてがカタログ情報からレコードが検索される。なお、レコード検索処理及びツリー検索処理の内容は、センターサーバＳＡにおけるレコード検索処理及びツリー検索処理の内容と同様であるので、詳細な説明は省略する。ただし、レコード検索処理及びツリー検索処理から実行されるページ情報取得処理の内容は、センターサーバＳＡにおけるページ情報取得処理とは異なる。このページ情報取得処理の詳細については後述する。
【０２１２】
ステップＳ５０３において、制御部２１は、レコードの検索要求がなかった場合には（ステップＳ５０３：ＮＯ）、ルートリンク情報要求メッセージを受信したか否かを判定する（ステップＳ５０５）。このとき、制御部２１は、ルートリンク情報要求メッセージを受信した場合には（ステップＳ５０５：ＹＥＳ）、ＲＡＭに格納されているルートリンク情報をルートリンク情報メッセージに含ませて、要求元のノードＮｎに送信する（ステップＳ５０６）。
【０２１３】
ステップＳ５０５において、制御部２１は、ルートリンク情報要求メッセージを受信していない場合には（ステップＳ５０５：ＮＯ）、ページ情報要求メッセージを受信したか否かを判定する（ステップＳ５０７）。このとき、制御部２１は、ページ情報要求メッセージを受信した場合には、ページ情報取得処理を実行する（ステップＳ５０８）。このとき、制御部２１は、ページ情報要求メッセージに含まれているリンク情報及びインデックスを指定する。ページ情報取得処理では、指定されたリンク情報が指すページ情報がファイルから取得され、ＲＡＭに格納される。また、指定されたリンク情報が指すページ情報を保存するファイルがない場合には、センターサーバＳＡ又は他のノードＮｎからこのページ情報が取得される。なお、ページ情報取得処理の詳細については後述する。制御部２１は、要求されたページ情報を取得すると、このページ情報をページ情報メッセージに含ませて、要求元のノードＮｎに送信する（ステップＳ５０９）。
【０２１４】
ステップＳ５０７において、制御部２１は、ページ情報要求メッセージを受信していない場合には（ステップＳ５０７：ＮＯ）、ルートリンク情報メッセージを受信したか否かを判定する（ステップＳ５１０）。このとき、制御部２１は、ルートリンク情報メッセージを受信した場合には（ステップＳ５１０：ＹＥＳ）、このルートリンク情報メッセージに含まれる情報をルートリンク情報としてＲＡＭに設定する（ステップＳ５１１）。
【０２１５】
ステップＳ５１０において、制御部２１は、ルートリンク情報メッセージを受信していない場合には（ステップＳ５１０：ＮＯ）、ページ情報メッセージを受信したか否かを判定する（ステップＳ５１２）。このとき、制御部２１は、ページ情報メッセージを受信した場合には（ステップＳ５１２：ＹＥＳ）、このページ情報メッセージに含まれる情報をページ情報としてファイルに保存する（ステップＳ５１３）。
【０２１６】
ステップＳ５１２において、制御部２１は、ページ情報メッセージを受信していない場合には（ステップＳ５１２：ＮＯ）、担当ページ情報取得処理を実行する（ステップＳ５１４）。担当ページ情報取得処理では、ノードＮｎの担当範囲内にあるページ情報がサーバＳＡ又は他のノードＮｎから取得され、記憶部２２に記憶される。
【０２１７】
制御部２１は、ステップＳ５０４、Ｓ５０６、Ｓ５０９、Ｓ５１１、Ｓ５１３又はＳ５１４の処理を終えたときには、ステップＳ５０２に移行する。そして、制御部１１は、ステップＳ５０２においてユーザからの終了指示があった場合には（ステップＳ５０２：ＹＥＳ）、本処理を終了させる。
【０２１８】
図１５は、本実施形態に係るノードＮｎにおける制御部２１のページ情報取得処理における処理例を示すフローチャートである。
【０２１９】
先ず、制御部２１は、指定されたリンク情報が有効なページ情報を指しているか否かを判定する（ステップＳ６０１）。例えば、リンク情報のページ番号が無効な値に設定される場合、このリンク情報は有効なページ情報を指していない。このとき、制御部２１は、指定されたリンク情報が有効なページ情報を指していない場合には（ステップＳ６０１：ＮＯ）、ページ情報取得処理を終了させる。この場合、ページ情報無しという情報が、呼び出し元の処理に返却される。
【０２２０】
一方、制御部２１は、指定されたリンク情報が有効なページ情報を指している場合には（ステップＳ６０１：ＮＯ）、このリンク情報に含まれるページ番号が指すファイルが記憶部２２に記憶されているか否かを判定する（ステップＳ６０２）。このとき、制御部２１は、指定されたリンク情報に含まれるページ番号が指すファイルが記憶されている場合には（ステップＳ６０２：ＹＥＳ）、このリンク情報に含まれるページ番号が指すファイルからページ情報を読み出してＲＡＭに格納する（ステップＳ６０３）。
【０２２１】
次いで、制御部２１は、改竄判定手段として、指定されたリンク情報に含まれるメッセージダイジェストを用いて、読み出したページ情報の改竄をチェックする（ステップＳ６０４）。具体的に、制御部１１は、読み出したページ情報のメッセージダイジェストを計算する。このメッセージダイジェストの計算には、ページ情報登録処理でメッセージダイジェストを計算したときと同じハッシュ関数が用いられる。そして、制御部１１は、計算したメッセージダイジェストと指定されたリンク情報に含まれるメッセージダイジェストとが一致するか否かを判定する。ここで、一致する場合にはルートリンク情報は改竄されていないとされ、一致しない場合には改竄されている。
【０２２２】
次いで、制御部２１は、読み出したルートページ情報は改竄されているか否かを判定する（ステップＳ６０５）。このとき、制御部２１は、ページ情報は改竄されていない場合には（ステップＳ６０５：ＮＯ）、読み出したページ情報を呼び出し元の処理に返却し、ページ情報取得処理を終了させる。
【０２２３】
ステップＳ６０２において、制御部２１は、指定されたリンク情報に含まれるページ番号が指すファイルが記憶されていない場合には（ステップＳ６０２：ＮＯ）、リンク情報が指すページ情報を担当するのに制御部２１自身のノードＮｎよりもふさわしいノードＮｎが存在するか否かを判定する（ステップＳ６０６）。リンク情報が指すページ情報を担当するのにふさわしいノードＮｎが存在するか否かは、ルーティングテーブルにノード情報が登録されているノードＮｎの範囲内で判断される。また、ページ情報を担当するのに制御部２１自身のノードＮｎよりもふさわしいノードＮｎとは、例えば、ノードＩＤが、制御部２１自身のノードＮｎのノードＩＤよりも、指定されたインデックスの上位桁の値と多く一致するノードＮｎである。
【０２２４】
制御部２１は、リンク情報が指すページ情報を担当するのに制御部２１自身のノードＮｎよりもふさわしいノードＮｎが存在しない場合（ステップＳ６０６：ＮＯ）、又は、ステップＳ６０５において、ページ情報が改竄されている場合には（ステップＳ６０５：ＹＥＳ）、センターサーバＳＡにページ情報要求メッセージを送信する（ステップＳ６０７）。このとき、制御部２１は、指定されたリンク情報及びインデックスをページ情報要求メッセージに設定する。
【０２２５】
一方、制御部２１は、リンク情報が指すページ情報を担当するのに制御部２１自身のノードＮｎよりもふさわしいノードＮｎが存在する場合には（ステップＳ６０６：ＹＥＳ）、ページ情報取得手段として、リンク情報が指すページ情報を他のノードＮｎから取得する。具体的に、制御部２１は、リンク情報が指すページ情報を担当するのに最もふさわしいノードＮｎにページ情報要求メッセージを送信する（ステップＳ６０８）。ページ情報を担当するのに最もふさわしいノードＮｎとは、例えば、ノードＩＤが、指定されたインデックスの上位桁の値と最も多く一致するノードＮｎである。
【０２２６】
制御部２１は、ステップＳ６０７又はＳ６０８において、ページ情報要求メッセージを送信すると、このページ情報要求メッセージの送信に対応してセンターサーバＳＡ又は他のノードＮｎから送信されてきたページ情報メッセージを受信する（ステップＳ６０９）。次いで、制御部２１は、受信したページ情報メッセージに含まれる情報をページ情報としてファイルに保存する（ステップＳ６１０）。制御部２１は、この処理を終えると、ステップＳ６０３に移行する。ここで、制御部２１は、再度、ページ情報を読み出し、読み出したページ情報の改竄チェックを行う（ステップＳ６０３、Ｓ６０４）。そして、ステップＳ６０５において、制御部２１は、ページ情報は改竄されていない場合には（ステップＳ６０５：ＮＯ）、ページ情報取得処理を終了させる。
【０２２７】
ステップＳ６０８〜Ｓ６１０において他のノードＮｎから取得されたページ情報が改竄されている場合には、ステップＳ６０７において、センターサーバＳＡからページ情報が取得される。これにより、レコード検索処理及びツリー検索処理において、改竄されたページ情報を用いてレコードの検索が行われることが防止される。なお、レコード検索処理又はツリー検索処理において、ページ情報が改竄されていると判明した場合には、レコードの検索を中断しても良い。
【０２２８】
以上説明したように、本実施形態によれば、センターサーバＳＡの制御部１１が、レコードの検索のために入力される検索キーとの比較対象であるキーを有するレコードを一又は複数含む葉ページ情報を生成する。また、制御部１１が、ルートページ情報から葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する葉ページ情報に、検索キーで検索されるレコードが含まれている可能性の有無を判定するために用いられるヒント情報を、当該葉ページ情報に含まれるレコードが有するキーに基づいて生成し、当該ヒント情報を含む節ページ情報を生成する。また、制御部１１が、ルートページ情報の子の位置の節ページ情報に含まれるヒント情報を含むルートページ情報を生成する。そして、記憶部１２は、ルートページ情報と、節ページ情報と、葉ページ情報とを含むカタログ情報を木構造で記憶する。
【０２２９】
従って、子ページ情報から葉ページ情報にかけて関連付けられているページ情報を検索する必要がなく、レコードの検索を効率良く行うことができるカタログ情報を生成することができる。
【０２３０】
また、制御部１１が、ルートページ情報から葉ページ情報にかけて、検索対象とするページ情報を移っていきながら、入力部１５により入力された検索キーを用いてレコード情報を検索する。また、制御部１１が、検索対象となっているページ情報がルートページ情報又は節ページ情報である場合、当該ページ情報に含まれるヒント情報と、入力された検索キーと、に基づいて、当該検索キーで検索されるレコードの存在の可能性の有無を判定する。また、制御部１１が、検索キーで検索されるレコードが存在する可能性が無いと判定された場合には、検索対象となっているページ情報の子の位置の子ページ情報から葉ページ情報へかけて関連付けられたページ情報を検索対象から除外する。
【０２３１】
従って、子ページ情報から葉ページ情報にかけて関連付けられているページ情報を検索する必要がないので、レコードの検索を効率良く行うことができる。
【０２３２】
また、制御部１１が、節ページ情報又はルートページ情報を生成する際、生成するページ情報の子の位置に複数の節ページ情報が関連付けられている場合に、当該複数の節ページ情報に含まれるヒント情報を合成して新たなヒント情報を生成し、生成されたヒント情報を含むページ情報を生成する。
【０２３３】
従って、複数の節ページ情報に含まれるヒント情報が合成によってまとめられるので、親の節ページ情報に含まれるヒント情報をより効率よく生成することができる。
【０２３４】
また、制御部１１が、節ページ情報を生成する際、節ページ情報の子の位置以下に位置する葉ページ情報に含まれるレコードが有するキーのハッシュ値を算出し、当該ハッシュ値に対応する配列要素に１が設定されるヒント情報を生成する。また、制御部１１が、ヒント情報を合成する場合、生成するページ情報の子に位置する複数の節ページ情報に含まれるヒント情報の配列要素毎の論理和を算出することによって新たなヒント情報を生成する。
【０２３５】
従って、入力された検索キーでレコードを検索する際には、ルートページ情報又は節ページ情報に含まれるヒント情報の配列要素のうち検索キーのハッシュ値に対応する配列要素の内容を判定する。ヒント情報の配列要素毎の和をとって新たなヒント情報が生成された場合であっても、ハッシュ値に対応する配列要素がキー無しを示していれば、そのページ情報の子の位置の子ページ情報から葉ページ情報にかけて関連付けられているページ情報のうち葉ページ情報には、検索キーによって検索されるレコード情報は含まれていないことが保証される。つまり、ヒント情報が合成されても偽陰性のない判定を行うことができる。よって、データサイズが大きいキーであっても、ヒント情報のデータサイズを所定量に抑えながら、レコードの検索を効率良く行うことができる。
【０２３６】
また、制御部１１が、節ページ情報又はルートページ情報を生成する際、ヒント情報を圧縮し、圧縮されたヒント情報を含むページ情報を生成する。ただし、制御部１１は、圧縮されたヒント情報のデータサイズが所定量を超える場合には、ヒント情報を分割してなる複数のデータの配列要素毎の和を算出することによってヒント情報の折り畳みを行い、折り畳まれたヒント情報を圧縮する。そして、制御部１１が、圧縮されたヒント情報を含むページ情報を生成する。
【０２３７】
従って、入力された検索キーでレコードを検索する際には、この圧縮ヒント情報を解凍して得られる分割合成ヒント情報を用いて、偽陰性のない判定を行うことができる。また、分割合成ヒント情報は、元のヒント情報よりもデータサイズが小さい。そして、この分割合成ヒント情報が更に圧縮されるので、ページ情報中におけるヒント情報格納領域の容量に上限サイズがある場合に、ヒント情報のデータサイズを上限サイズ以下に確実に圧縮することができる。
【０２３８】
また、キーは、数値情報であるか、又は、数値情報で示される属性を有する情報である場合、制御部１１が、節ページ情報を生成する際、節ページ情報の子の位置以下に位置する葉ページ情報に含まれるレコードが有するキー又は当該キーの属性の何れか一方が示す数値情報の中から、値が最小の数値情報を下限値とし値が最大の数値情報を上限値とする範囲を示すヒント情報を生成する。また制御部１１が、ヒント情報を合成する際、生成されるページ情報の子に位置する複数の節ページ情報に含まれるヒント情報の下限値の中から最小の下限値を新たな下限値とし、当該複数の節ページ情報に含まれるヒント情報の上限値の中から最大の上限値を新たな上限値とする新たなヒント情報を生成する。
【０２３９】
従って、入力された検索キーでレコードを検索する際に、ルートページ情報又は節ページ情報に含まれるヒント情報が示す範囲と、検索キーとしての数値情報とを比較する。そして、ヒント情報が示す範囲に数値情報が含まれていなければ、そのページ情報の子の位置の子ページ情報から葉ページ情報にかけて関連付けられているページ情報には、検索キーによって検索されるレコード情報は含まれていないことが保証される。よって、簡易な方法で、ヒント情報の生成及びこのヒント情報を用いた判定を行うことができる。また、ヒント情報のデータサイズを小さくすることができる。
【０２４０】
また、ノードＮｎの制御部２１が、ルートページ情報から葉ページ情報にかけて、検索対象とするページ情報を移っていきながら、入力部３０により入力された検索キーを用いてレコード情報を検索する。また、制御部２１が、検索対象となっているページ情報が記憶部２２に記憶されていない場合に、当該ページ情報を他のノードＮｎからネットワークを介して取得する。また、制御部２１が、検索対象となっているページ情報がルートページ情報又は節ページ情報である場合、当該ページ情報に含まれるヒント情報と、入力された検索キーと、に基づいて、当該検索キーで検索されるレコードの存在の可能性の有無を判定する。また、制御部２１が、検索キーで検索されるレコードが存在する可能性が無いと判定された場合には、検索対象となっているページ情報の子の位置の子ページ情報から葉ページ情報へかけて関連付けられたページ情報を検索対象から除外する。
【０２４１】
従って、子ページ情報から葉ページ情報にかけて関連付けられているページ情報を検索する必要がないので、レコードの検索を効率良く行うことができる。また、複数のページ情報を複数のノードＮｎで分散して記憶する場合に、検索対象から除外されたページ情報をノードＮｎ間でやりとりする必要が無いので、ネットワークの負荷を低減させることができる。
【０２４２】
また、センターサーバＳＡの制御部１１が、子の位置のページ情報のメッセージダイジェストを含む節ページ情報及びルートページ情報を生成する。一方、ノードＮｎの制御部２１が、他のノードＮｎから取得されたページ情報が改竄されているか否かを、当該ページ情報の親の位置のページ情報に含まれるメッセージダイジェストに基づいて判定する。そして、制御部２１が、改竄されていないと判定されたページ情報がルートページ情報又は節ページ情報である場合、入力された検索キーで検索されるレコードの存在の可能性の有無を判定する。
【０２４３】
従って、改竄されたページ情報を用いてレコードの検索が行われることを防止することができる。
【０２４４】
なお、上記実施形態においては、検索の際に入力される検索キーは１つであった。しかしながら、複数の検索キーを用いて、いわゆるＯＲ検索、ＡＮＤ検索等を行うことができるようにしても良い。例えば、入力された各検索キーについて、ヒント情報を用いて夫々「可能性有り」又は「可能性無し」が判定されるようにする。そして、ＯＲ検索の場合には、１つでも「可能性有り」と判定されたら、現在検索対象となっているページ情報の子の位置のページ情報も検索対象とすれば良い。一方、ＡＮＤ検索の場合には、全ての判定結果が「可能性有り」の場合にのみ、現在検索対象となっているページ情報の子の位置のページ情報も検索対象とすれば良い。
【０２４５】
また、上記実施形態においては、本発明に係る情報生成装置を、ピアツーピアシステムにおけるサーバ装置に適用していたが、例えば、クライアント−サーバシステムにおけるサーバ装置に適用しても良い。
【０２４６】
また、本発明は、コンテンツカタログ情報の検索に限定されるものではない。汎用的なデータベースのレコードに対しても適用可能である。
【符号の説明】
【０２４７】
３  ＩＸ
４ａ、４ｂ  ＩＳＰ
５ａ、５ｂ  ＤＳＬ回線業者の装置
６  ＦＴＴＨ回線業者の装置
７  通信回線
８  ネットワーク
９  オーバーレイネットワーク
１１  制御部
１２  記憶部
１３  通信部
１４  表示部
１５  入力部
１６  バス
２１  制御部
２２  記憶部
２３  バッファメモリ
２４  デコーダ部
２５  映像処理部
２６  表示部
２７  音声処理部
２８  スピーカ
２９  通信部
３０  入力部
３１  バス
Ｎｎ  ノード
ＳＡ  センターサーバ
Ｓ  コンテンツ分散保存システム
【図１】
2011070607.tif 000003
【図２】
2011070607.tif 000004
【図３】
2011070607.tif 000005
【図４】
2011070607.tif 000006
【図５】
2011070607.tif 000007
【図６】
2011070607.tif 000008
【図７】
2011070607.tif 000009
【図８】
2011070607.tif 000010
【図９】
2011070607.tif 000011
【図１０】
2011070607.tif 000012
【図１１】
2011070607.tif 000013
【図１２】
2011070607.tif 000014
【図１３】
2011070607.tif 000015
【図１４】
2011070607.tif 000016
【図１５】
2011070607.tif 000017