以下、本発明の実施形態を図面に基づいて説明する。なお、以下に説明する実施の形態は、コンテンツ分散保存システムに本発明を適用した場合の実施形態である。
[1.コンテンツ分散保存システムの構成及び動作概要]
始めに、図1等を参照して、本実施形態に係るコンテンツ分散保存システムの構成及び動作概要について説明する。
図1は、本実施形態に係るコンテンツ分散保存システムSにおける各ノード装置の接続態様の一例を示す図である。図1は、コンテンツ分散保存システムSの具体的構成図101と、概念的構成図100とから構成される。コンテンツ分散保存システムSの具体的構成図101が示すように、コンテンツ分散保存システムSは、多数のノード装置Nn(n=1,2,3・・・の何れか)から構成される。
図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のノードID等に基づいて決定される。そして、各ノードNnは、自分の担当範囲内のページ情報をセンターサーバSA又は他のノードNnから予め取得する。また、各ノードNnは、コンテンツの属性情報を検索する際、必要なページ情報がない場合には、この必要なページ情報をセンターサーバSA又は他のノードNnから取得する。
また、上記コンテンツ所在問合せメッセージに含まれるコンテンツIDは、ユーザノードによって、コンテンツ名が上記共通のハッシュ関数によりハッシュ化されて生成されるようにしても良い。なお、DHTルーティングについては、特開2006−197400号公報等で公知であるので、詳しい説明を省略する。
上記コンテンツ所在問合せメッセージを受信したルートノードは、これに含まれるコンテンツIDに対応するインデックス情報をインデックス情報キャッシュから取得する。取得されたインデックス情報は、コンテンツ所在問合せメッセージの送信元であるユーザノードに対して返信される。こうしてインデックス情報を取得したユーザノードは、インデックス情報に基づいてコンテンツのレプリカをダウンロード(取得)することができる。インデックス情報に含まれるコンテンツ保持ノードのIPアドレス等に基づいて、ユーザノードはコンテンツ保持ノードにアクセスする。アクセスしたコンテンツ保持ノードから、コンテンツのレプリカをダウンロードすることが可能になる。この場合、ユーザノードは、この複数のコンテンツ保持ノードのうち一つのコンテンツ保持ノードを選択する。そして、ユーザノードは、選択したコンテンツ保持ノードに接続してコンテンツのレプリカをダウンロードすることができる。
なお、ルートノードは、このインデックス情報に含まれるIPアドレス等に示されたコンテンツ保持ノードに対してコンテンツ送信要求メッセージを送信する。これにより、ユーザノードは、上記コンテンツ保持ノードからそのレプリカをダウンロードすることもできる。また、上記ユーザノードは、コンテンツ所在問合せメッセージがルートノードに辿り着くまでの間に、このルートノードと同じインデックス情報をキャッシュしているキャッシュノードからこのインデックス情報を取得することもできる。
また、ユーザノードは、コンテンツ保持ノードからコンテンツのレプリカを取得して保存したとき、保存したユーザノードは、パブリッシュメッセージを生成する。パブリッシュメッセージは、レプリカを保存したことをルートノードへ知らせるためのメッセージである。パブリッシュメッセージは、レプリカのコンテンツID及びレプリカを保存したノード装置のノード情報を含む。パブリッシュメッセージは、ルートノードに向けて送出される。これにより、パブリッシュメッセージは、コンテンツ所在問合せメッセージと同じように、コンテンツIDをキーとするDHTルーティングによってルートノードに到着することになる。そして、ルートノードは、パブリッシュメッセージを受信する。ルートノードは、パブリッシュメッセージに含まれるノード情報及びコンテンツIDの組を含むインデックス情報をインデックス情報キャッシュ領域に記憶する。こうして、上記ユーザノードは、新たに、上記コンテンツのレプリカを保持するコンテンツ保持ノードとなる。
[2.コンテンツカタログ情報の構造及び内容等]
次に、コンテンツカタログ情報の構造及び内容等について、図2を用いて説明する。
図2は、本実施形態に係るコンテンツカタログ情報の構造の一例を示す図である。なお、コンテンツカタログ情報のことを、今後単にカタログ情報という。
カタログ情報は、コンテンツの属性情報を一覧として管理するための情報である。この属性情報の内容はレコードに格納される。また、カタログ情報は、検索キーから1又は複数のコンテンツを特定することができる情報である。コンテンツを特定することができるとは、コンテンツのレコードを検索することができることを意味する。レコードの検索は、センターサーバSAにより行われ、また、ノードNnにおいても行われる。
本実施形態において用いられるカタログ情報は、レコードの検索を効率的に行うため、探索木の構造を有している。
図2に示すように、カタログ情報は、木構造における根に位置するルートページ情報から葉に位置する葉ページ情報にかけて、各ページ情報が関連付けられて構成されている。ルートページ情報は、根ページ情報の一例である。直接関連付けられているページ情報同士は、親子関係を形成している。或るページ情報Xに対してページ情報Yが関連付けられているとする。つまり、ページ情報Xとページ情報Yとで親子関係を形成している。ページ情報Xとページ情報Yとのうち、ページ情報Xの方がルートページ情報からの距離が短い場合、ページ情報Xは、ページ情報Yから見て親に位置する親のページ情報となる。そして、ページ情報Yは、ページ情報Xから見て子に位置する子のページ情報となる。ここで、ルートページ情報からの距離とは、木構造において、根の位置から注目する節点に辿るまでのリンク数に相当する長さである。換言すると、ルートページ情報からの距離とは、ルートページ情報から関連付けを辿って注目するページ情報に至るまでに、注目するページ情報を含めて通過するページ情報の数に相当する。なお、以降の説明においては、親のページ情報を親ページ情報といい、子のページ情報を子ページ情報という。
親ページ情報と子ページ情報との関連付けは、リンク情報に示される。リンク情報は、親ページ情報に格納される情報であり、子ページ情報を指す情報である。このリンク情報は、子ページ情報のページ番号と、子ページ情報の改竄をチェックするためのメッセージダイジェストとを含む。
ページ番号は、ページ情報に固有に割り当てられたシリアル番号である。リンク情報が指すページ情報というときは、リンク情報に含まれるページ番号が割り当てられているページ情報を意味する。また、或るページ情報が更新される場合にはこのページ情報に対して新たなページ番号が割り当てられる。実際、ページ番号は、例えば、ページ情報がRAMに格納される際の格納アドレスに対応したり、ページ情報の格納位置を示すポインタの格納アドレスであったりする。また、ページ情報がファイルとして保存される際には、ページ番号はファイル名に対応したりする。
メッセージダイジェストは、リンク情報が指す子ページ情報又はリンク情報が指す子ページ情報に格納されているレコードの改竄をチェックするための情報である。また、メッセージダイジェストは、改竄をチェックする対象を共通のハッシュ関数によりハッシュ化した値である。
カタログ情報は、更にルートリンク情報を有する(符号100)。ルートリンク情報には、ルートページ情報へのリンク情報が格納される(符号102)。そして、このリンク情報は、ルートページ情報のページ番号及びメッセージダイジェストを含む。また、ルートリンク情報には、電子署名が格納される(符号101)。電子署名は、ルートリンク情報の改竄をチェックするための情報である。電子署名には、例えば、署名値、証明書情報等の情報が含まれている。
ページ情報は、大別して節ページ情報(符号200)と葉ページ情報(符号300)とがある。
節ページ情報は、一つ以上の子ページ情報と関連付けられる。節ページ情報には、ページ番号(符号201)、子ページ情報へのリンク情報(符号202)、及びヒント情報(符号203)が格納される。ページ番号は、このページ番号が格納されている節ページ情報に割り当てられたページ番号である。節ページ情報には、リンク情報を複数格納することができる。一つあたりの節ページ情報に格納可能なリンク情報の最大数は、カタログ情報の木構造としての次数に一致する。この次数は、一つの親が持ちうる子の最大数を意味する。つまり、次数は、n分探索木のnの値に該当する。ヒント情報は、検索キーでレコードを検索するための手がかりとなる情報である。このヒント情報の詳細については後述する。
葉ページ情報は、上述したように、探索木における葉に位置するページ情報である。つまり、葉ページ情報は、子ページ情報を持たない。葉ページ情報には、ページ番号(符号301)、及びレコード(符号302)が格納される。ページ番号は、このページ番号が格納されている葉ページ情報に割り当てられたページ番号である。
レコードは、葉ページ情報に1又は複数格納される。一つのレコードには、1又は複数のコンテンツの属性情報が設定される。例えば、レコードには、コンテンツID、コンテンツの公開開始日時、公開終了日時、コンテンツ名、キーワード等が設定される。また、属性情報に設定されている情報のうち、レコード検索のために検索キーと比較される情報を、レコードの「キー」という。例えば、レコードのキーがコンテンツ名である場合は、検索キーの内容もコンテンツ名となる。キー及び検索キーは、属性情報に設定されている何れの情報であっても良い。検索キーに関しては、例えば、キーワードの文字列長等といった、属性情報に含まれる情報の属性を示す数値であっても良い。この場合、レコード検索の際には、検索キーが示す数値とキーの属性を示す数値とが比較される。なお、検索キーは、検索キー情報の一例である。また、キーは、キー情報の一例である。
カタログ情報の木構造は、順序性を有している。レコードのインデックスが入力されると、カタログ情報の木構造に対応したアルゴリズムに従って探索が行われることにより、インデックスに対応するレコードが格納されている葉ページ情報を特定することができる。レコードのインデックスは、レコードを一意に特定することができる情報である。レコードのインデックスとしては、例えば、コンテンツIDが用いられる。
以上、図2を用いて説明したカタログ情報の構造は、あくまでも一例である。カタログ情報の構造としては、コンテンツのレコードを探索可能な木構造を有していれば、どのような構造であってもかまわない。
例えば、葉ページ情報だけでなく、節ページ情報中にレコードが格納されても良い。また、木構造の次数、つまり、一つの節ページ情報に格納可能なリンク情報の最大数は任意である。また、一つのページ情報に格納可能なレコードの最大数は1個でも複数個でも良い。更に、ページ情報に割り当てられたページ番号がそのページ情報自身に格納されている必要はない。
また、木の種類としては、例えばB木、B+木、赤黒木等の平衡木であっても良いし、平衡性のない単純なn分探索木であっても良い。或いは、トライ木であっても良い。
[3.ヒント情報の概要]
次に、ヒント情報の内容、ヒント情報を用いた検索及び生成の概要について、図3を用いて説明する。
図3は、コンテンツカタログ情報からレコードが検索される様子の一例を示す図である。
ヒント情報は、検索キーを用いてレコードを効率的に検索するための情報である。このヒント情報は、ルートページ情報を含む各節ページ情報に格納される。レコードの検索の際に、ヒント情報と入力された検索キーとに対して、所定のアルゴリズムに従って演算処理が施される。すると、このヒント情報が格納されている節ページ情報の子の位置以下のページ情報に、検索キーによって検索されるレコードが格納されている可能性の有無が判明する。これにより、検索キーによって検索されるレコードの有無を偽陰性なく判断することができる。偽陰性とは、真実は陽性であるのに、誤って陰性であると判断される性質をいう。
図3に示すように、レコードの検索は、検索の対象とするページ情報をルートページ情報から開始して、ルートページ情報から葉ページ情報にかけて、リンク情報による関連付けを辿って、検索の対象とするページ情報順次移っていきながら行われる。なお、図3は、深さ優先探索でレコードを検索する例を示している。
具体的には、例えば図3に示すように、或る検索キーが入力される。先ず、ルートリンク情報が参照され、ルートリンク情報に格納されているリンク情報に基づいて、ルートページ情報200Aが参照される。ここで、検索キーとルートページ情報200Aに格納されているヒント情報とに基づいて、該当するレコードが検索される可能性が有ると判断されたとする(1)。なお、この場合を、単に「可能性有り」と称する。すると、ルートページ情報200Aに格納されているリンク情報に基づいて、ルートページ情報200Aの子の位置の節ページ情報200Bが次に参照される。
ここで、検索キーと節ページ情報200Bに格納されているヒント情報に基づいて、「可能性有り」と判断されたとする(2)。すると、節ページ情報200Bに格納されているリンク情報に基づいて、節ページ情報200Bの子の位置の節ページ情報200Eが次に参照される。節ページ情報200Eでも、「可能性有り」と判断されて(3)、節ページ情報200Eに格納されているリンク情報に基づいて、節ページ情報200Eの子の位置の葉ページ情報300Aが次に参照される。
葉ページ情報300Aでは、例えば、検索キーと各レコードのキーとが比較されることによって、レコード検索が行われる(4)。そして、検索されたレコードが、検索結果に追加される。検索が終わると、葉ページ情報300Aの親の位置の節ページ情報200Eに戻って、節ページ情報200Eの次の子の位置の葉ページ情報300Bが参照される。ここでも同様にレコード検索が行われる(5)。
検索が終わると、再び節ページ情報200Eに戻る。節ページ情報200Eには、これ以上の子ページ情報は存在しないので、節ページ情報200Eの親の位置の節ページ情報200Bに戻る。節ページ情報200Bにも、これ以上の子ページ情報は存在しないので、節ページ情報200Bの親の位置のルートページ情報節ページ情報200Aに戻る。
ルートページ情報200Aにおいては、(1)の段階で既に「可能性有り」と判断されている。そこで、ルートページ情報200Aに格納されているリンク情報に基づいて、ルートページ情報200Aの次の子の位置の節ページ情報200Cが参照される。ここで、検索キーと節ページ情報200Cに格納されているヒント情報に基づいて、該当するレコードが検索される可能性が無いと判断されたとする(6)。なお、この場合を、単に「可能性無し」と称する。これは、節ページ情報200Cの子の位置のページ情報以下の葉ページ情報には検索キーで検索されるレコードが存在しないことを意味する。具体的には、図3に示すように、節ページ情報200Cの子の位置の節ページ情報200Fの更に子の位置の葉ページ情報300C及び300Dには、検索キーで検索されるレコードが存在しない。従って、節ページ情報200F、葉ページ情報300C及び300Dは、検索対象から除外される(7)。
そしてこの場合は、ルートページ情報200Aに戻って、ルートページ情報200Aの更に次の子の位置の節ページ情報200Dが次に参照される。
このように、ヒント情報に基づいて、子の位置以下のページ情報に、該当するレコードが格納されていないと分かるので、検索対象から除外することによって検索効率を向上させることができる。
次に、ヒント情報の生成方法について説明する。ヒント情報を含むページ情報は、センターサーバSAにより生成される。
ヒント情報の初期状態は、どのような検索キーが入力されても「可能性無し」と判断される状態である。ヒント情報は、レコードが格納された葉ページ情報が追加された場合や、既存の葉ページ情報にレコードが追加又は削除された場合等に更新される。なお、本実施形態において、ヒント情報の更新は、ヒント情報の再生成を意味する。また、ヒント情報が更新されるとき、そのヒント情報を格納するページ情報も再生成される。
先ず、新たに追加された葉ページ情報、もしくは、レコードが追加又は削除された葉ページ情報の親の位置の節ページ情報が、ヒント情報の更新対象となる。この節ページ情報の子の位置の全ての葉ページ情報に格納されている全てのレコードに格納されているキーを用いて、ヒント情報が生成される。このとき、葉ページ情報に格納されているレコードのうちどのレコードのキーに合致する検索キーが入力されても、「可能性有り」と判断されるように、節ページ情報が生成される。
また、ヒント情報の更新対象となっている節ページ情報の子の位置に節ページ情報が関連付けられている場合には、子の位置の節ページ情報に格納されているヒント情報が、親の位置の節ページ情報にそのまま引き継がれる。つまり、子ページ情報に格納されているヒント情報が親ページ情報に格納される。ただし、節ページ情報の子の位置に複数の節ページ情報が関連付けられている場合には、子の位置の全ての節ページ情報に格納されているヒント情報が合成されて新たなヒント情報が生成される。そして、この新たなヒント情報が親の位置の節ページ情報に格納される。この場合においても、偽陰性のない判断が可能なように合成が行われる。
また、節ページの子の位置に節ページ情報と葉ページ情報とが関連付けられている場合には、例えば、先に子の位置の節ページ情報に格納されているヒント情報が引き継がれ、又は合成される。その後、葉ページ情報に格納されているレコードのキーが、引き継がれ又は合成されたヒント情報に反映される。キーの反映とは、葉ページ情報に格納されているレコードのキーに合致する検索キーが入力された場合に、「可能性有り」と判断されるようにヒント情報の変更が行われることをいう。そして、レコードのキーが反映されたヒント情報が、親の位置の節ページ情報に格納される。
このようなヒント情報の更新が、新たに追加された葉ページ情報、もしくは、レコードが追加又は削除された葉ページ情報の親の位置の節ページ情報からルートページ情報にかけて、子の位置のから親の位置へ順次行われる。
なお、ヒント情報は、節ページ情報だけではなく、葉ページ情報にも格納されても良い。この場合、葉ページ情報に格納されるヒント情報は、この葉ページ情報自身に格納されているレコードのキーに基づいて生成される。そしてこの場合は、節ページ情報の子ページ情報には、必ずヒント情報が格納されている。従って、子ページ情報が1個である場合には、節ページ情報には、子ページ情報に格納されているヒント情報がそのまま引き継がれる。子ページ情報が複数ある場合には、節ページ情報には、子ページ情報に格納されているヒント情報が合成されて、合成されたヒント情報が格納される。また、レコードを検索する場合においては、次の処理を行えば良い。或る葉ページ情報が検索対象となったとき、葉ページ情報に格納されているレコードを検索する前に、この葉ページ情報に格納されているヒント情報と、検索キーとに基づいて、該当するレコードがこの葉ページ情報に格納されている可能性が有るか否かが判断される。そして、「可能性有り」と判断された場合には、検索対象の葉ページ情報に格納されているレコードを検索する。一方、「可能性無し」と判断された場合には、検索対象の葉ページ情報に格納されているレコードの検索を行はない。
また、節ページ情報にレコードが格納される場合であっても、ヒント情報を生成することができる。例えば、節ページ情報の子の位置に節ページ情報が関連付けられている場合には、先に子の位置の節ページ情報に格納されているヒント情報が親の位置の節ページ情報に格納されるヒント情報として引き継がれる。或いは、子の位置に複数の節ページ情報が関連付けられている場合には、子の位置の各節ページ情報に格納されているヒント情報が合成される。その後、子の位置の節ページ情報及び葉ページ情報に格納されているレコードのキーがヒント情報に反映される。
[3.1 ヒント情報の具体例]
[3.1.1 ブルームフィルタ]
次に、ヒント情報の具体例として、ブルームフィルタをヒント情報に適用した場合の例について、図4乃至図6を用いて説明する。
ブルームフィルタは、与えられた要素が或る集合に属するか否かの判定に用いられる。ブルームフィルタは、配列構造を有するデータである。この配列としては、各要素が0又は1を示すビット配列が主に用いられる。この配列のインデックスはハッシュ値である。ハッシュ値は、与えられた要素から算出される。そして、例えば、与えられた要素のハッシュ値に対応する配列要素が0である場合、与えられた要素は或る集合に属していない、又は、属している可能性はないことを意味する。一方、与えられた要素のハッシュ値に対応する配列要素が1である場合、与えられた要素は或る集合に属している可能性がある、又は、属しているかもしれないことを意味する。ブルームフィルタを用いた判定では、偽陽性による誤判定はあるが、偽陰性による誤判定はない。つまり、与えられた要素が集合に属していないにもかかわらず、属していると誤って判定されることがある。これは、異なるキーから同一のハッシュ値が算出される場合があるからである。一方、与えられた要素が集合に属しているにもかかわらず、属していないと誤って判定されることはない。
本実施形態においては、要素に相当するものが、検索キー及びキーである。また、本実施形態においては、集合に相当するものが、ヒント情報が格納されているページ情報の子の位置以下に関連付けられているページ情報に格納されているレコードのキーの集合である。
図4は、ブルームフィルタをヒント情報に適用した場合におけるヒント情報の構造の一例を示す図である。
ブルームフィルタを適用した場合のヒント情報は、例えば、図4に示すように、ブロック格納領域(符号2031)、ブロック管理情報(符号2032)、及びブロックサイズ(符号2033)等により構成されている。
ブロック格納領域は、ブルームフィルタが格納される領域である。このブロック格納領域には、夫々が配列構造を有する複数のブロックが格納されている。ブルームフィルタが複数のブロックに分割されている理由は、ヒント情報の生成処理及び検索処理の高速化のためである。全てのブロックの配列の要素数は予め決められている。例えば、1つのブロックの要素数が100である場合には、ハッシュ値0〜99に対応する情報はブロック0に格納される。また、ハッシュ値100〜199に対応する情報はブロック1に格納される。つまり、ブロック番号をi、要素数をnとすると、ブロックiには、
i×n≦ハッシュ値≦(i+1)×n−1
を満たすハッシュ値に対応する情報が格納される。そして、ブロック数をNとすると、ハッシュ値の最大値はn×N−1となる。なお、各ブロックは、実際には公知の圧縮アルゴリズムで可逆圧縮されているが、図4においては、圧縮前の状態で各ブロックが示されている。
ブロック管理情報は、各ブロックを管理するための情報である。具体的に、ブロック管理情報には、ブロック種別及びブロックポインタがブロック毎に格納される。
ブロック種別としては、「01混在」、「全部0」及び「全部1」がある。ブロック種別が「01混在」である場合は、対応するブロックに0と1の両方が設定されていることを意味する。また、ブロック種別が「全部0」である場合は、対応するブロックには全て0が設定されていることを意味する。また、ブロック種別が「全部1」である場合は、対応するブロックには全て1が設定されていることを意味する。そして、ブロック種別が「01混在」である場合、対応するブロックはブロック格納領域に格納される。一方、ブロック種別が「全部0」又は「全部1」である場合、対応するブロックは、実際にはブロック格納領域に格納されない。ブロック種別が「全部0」及び「全部1」の場合は、ブロックが実際にはなくても、ブロックに設定されている情報はブロック種別によって明確である。従って、ブロック格納領域に格納されるブロックを削減することができるので、ヒント情報のデータサイズを小さくすることができる。なお、以降の説明においては、ブロックの設定状態を説明するものとして、ブロック種別を用いる。例えば、「01混在のブロック」、「このブロックは全部0である」等である。
ブロックポインタは、対応するブロックの先頭アドレスを示す。ただし、ブロック種別が「全部0」又は「全部1」である場合、ブロックポインタには無効なアドレスが設定される。
ブロックサイズは、ブロックの折り畳みを考慮した現状のブロックの要素数を示す。折り畳みとは、ブロックを複数のデータに分割して、この複数のデータの論理和を求めて新たなブロックとすることにより、ブロックの要素数を減らすことをいう。折り畳みが行われていない場合、ブロックサイズは、ブロックの本来の要素数そのものである。折り畳みが行われている場合、ブロックサイズは、折り畳みによって生成されたブロックの要素数となる。なお、折り畳まれたブロックを元の要素数のブロックに戻すことを、ブロックの展開という。折り畳みの詳細については後述する。
本実施形態においては、ハッシュ値の計算に用いられるハッシュ関数は、全てのページ情報に格納されるヒント情報について同一である。また、本実施形態においては、1つのヒント情報に格納されるブルームフィルタの要素数も、全てのページ情報に格納されるヒント情報について同一である。
ヒント情報が更新、つまりヒント情報が生成される場合、初期値として全ブロックが全部0となるヒント情報がベースとして生成される。つまり、全ブロックのブロック種別が「全部0」に設定され、ブロック格納領域にはブロックが1つも格納されていないヒント情報が生成される。そして、新たに追加された葉ページ情報、もしくは、レコードが追加又は削除された葉ページ情報に格納されているレコードのキーについてハッシュ値が算出される。このハッシュ値をインデックスとして、ハッシュ値に対応する要素を有するブロックが選択される。そして、選択されたブロックにおいてハッシュ値に対応する要素の値が1に設定される。この処理が、格納されている全レコードについて行われる。
このとき、設定前のブロックが全部0のブロックである場合、全て0が設定されたブロックがブロック格納領域に追加された上で、この追加されたブロックにおいて、ハッシュ値に対応する要素に1が設定される。そして、このブロックのブロック種別は「01混在」に変更される。また、ブロックへの設定が行われた結果、ブロックを構成する全要素に1が設定されている状態となった場合、このブロックのブロック種別は「全部1」に変更される。そして、このブロックが格納されていた領域が解放されて、その領域には他のブロックが詰められる。
実際には、ヒント情報の各ブロックは可逆圧縮されている。また、必要な場合には、各ブロックは、折り畳みが施された上で可逆圧縮されている。従って、ブロックに対する設定が行われる場合には、設定が行われるブロックが解凍される。また、解凍されたブロックが折り畳まれている場合にはブロックが展開される。そして、設定が行われた後、必要な場合にはブロックの再折り畳みが行われる。そして、ブロックの再可逆圧縮が行われる。なお、以降の説明においては、可逆圧縮を、単に「圧縮」という。
ブロックが折り畳まれているか否かは、ブロックサイズとブロック本来の要素数とを比較することにより、判断することができる。ブロック本来の要素数は、例えば、予め定数として設定されている。ヒント情報におけるブルームフィルタは、複数のブロックに分割されているので、対象のブロックに対してのみ解凍、展開、再折り畳み、及び再圧縮を行えば良い。従って、ブルームフィルタ全体に対して解凍、展開、再折り畳み、及び再圧縮を行う必要が無いので、処理を高速化することができる。
次に、ブルームフィルタをヒント情報に適用した場合におけるヒント情報の合成方法について、図5を用いて説明する。
図5(a)は、カタログ情報の一部分のページ情報の一例を示す図であり、図5(b)は、ヒント情報が合成される様子の一例を示す図である。
節ページ情報の子の位置に複数の節ページ情報が関連付けられている場合、親の位置の節ページ情報において、ヒント情報の合成が行われる。例えば、図5(a)に示すように、節ページ情報200Fの子の位置に、節ページ情報200G及び節ページ情報200Hが関連付けられているとする。また、節ページ情報200Gにはヒント情報Gが格納され、節ページ情報200Hにはヒント情報Hが格納されている。
ヒント情報の合成は、ヒント情報Gとヒント情報Hとで、ブロック番号が同じブロック同士で行われる。例えば、図5(b)に示すように、ヒント情報Gのブロック0とヒント情報Hのブロック0とが両方とも0と1が混在して設定されている場合、このブロック0同士の要素毎の論理和が算出される。そして、算出された論理和のデータが、節ページ情報200Fに格納されるヒント情報Fのブロック0となる。例えば、ヒント情報Gのブロック0が「10000101」であり、ヒント情報Hのブロック0が「01010110」である場合、ヒント情報Fのブロック0は、「11010111」となる。なお、論理演算に際して、ヒント情報Gのブロック0とヒント情報Hのブロック0とに対して、解凍、展開、再折り畳み、及び再圧縮が行われる。ただし、展開及び再折り畳みは、ブロックサイズがブロック本来の要素数よりも小さい場合にのみ行われる。
ヒント情報Gのブロック1が全部0のブロックであり、ヒント情報Hのブロック1が01混在のブロックである場合、ヒント情報Hのブロック1がそのままヒント情報Fのブロック1として引き継がれる。例えば、ヒント情報Hのブロック1が「11011000」である場合、ヒント情報Fのブロック1も「11011000」となる。この場合、論理演算を行う必要が無い。更に、ブロックの解凍、展開、再折り畳み、及び再圧縮をする必要も無い。つまり、ヒント情報Hのブロック1を圧縮されたままヒント情報Fのブロック1として設定すれば良い。従って、ヒント情報の合成処理が高速化される。
ヒント情報Gのブロック2が01混在のブロックであり、ヒント情報Hのブロック2が全部1のブロックである場合、ヒント情報Fのブロックは全部1のブロックとなる。この場合も、論理演算を行う必要が無いので、ヒント情報の合成処理が高速化される。
次に、ブルームフィルタをヒント情報に適用した場合におけるヒント情報の折り畳み方法及び展開方法について、図6を用いて説明する。
図6(a)は、折り畳み前のブロックに設定されている内容の一例を示す図である。また、図6(b)及び(c)は、夫々ブロックの折り畳み例を示す図である。
ヒント情報の各ブロックは圧縮される。また、全部0のブロック及び全部1のブロックは省略される。従って、ヒント情報のデータサイズは、本来のブルームフィルタのデータサイズよりも基本的には小さくなるはずである。一方、節ページ情報には、ヒント情報を格納するヒント情報格納領域が予め確保されている。このヒント情報格納領域は、ヒント情報のデータサイズが小さくなることを前提として、各ブロックが圧縮されていない本来のヒント情報のデータサイズよりも小さいサイズで確保されている。そして、ヒント情報格納領域のサイズは、ヒント情報の上限サイズとして予め固定されている。その理由は、ページ情報のデータサイズを小さくするためである。ページ情報は、センターサーバSAからノードNnに送信され、また、ノードNn間で送受信される。従って、ページ情報のデータサイズが小さいほど、ページ情報の交換が高速化される。
このような理由から、ヒント情報のデータサイズを上限サイズ以下にする必要がある。そのために、圧縮及びブロックの省略が行われるのであるが、ブロックの設定内容によっては、ヒント情報のデータサイズが上限サイズにならなかったり、場合によっては、圧縮前よりもヒント情報が大きくなることもある。そこで、本実施形態においては、ブロックの圧縮前に折り畳みを施すことで、ヒント情報のデータサイズを確実に上限サイズ以下にするようになっている。
具体的には、圧縮されたヒント情報のデータサイズが上限サイズ以下である場合には、圧縮されたヒント情報がそのままヒント情報格納領域に格納される。一方、圧縮されたヒント情報のデータサイズが上限サイズを超える場合には、その圧縮されたヒント情報は破棄され、圧縮前のヒント情報に対して折り畳みが行われる。具体的には、先ず制限サイズが決定される。制限サイズは、折り畳み後の各ブロックの要素数、すなわち、折り畳み後のブロックサイズを示す。この制限サイズは、各ブロックが、折り畳まれた後に圧縮された場合に、圧縮後のヒント情報のデータサイズが上限サイズ以下となるように決定される。この制限サイズは、例えば、折り畳み前に圧縮されたヒント情報のデータサイズと、圧縮前のヒント情報のデータサイズとに基づいて決定されても良い。制限サイズが決定されると、この制限サイズに基づいて、ブロックが要素単位で複数のデータに分割される。そして、複数のデータ同士の要素毎の論理和が算出されて、折り畳み後のブロックが生成される。そして、折り畳まれたブロックが圧縮される。
例えば、図6(a)に示すように、ブロック本来の要素数は30であるとする。つまり、ブロックのデータサイズは30ビットである。そして、図6(b)に示すように、制限サイズが22と決定されたとする。この場合、図6(a)に示すブロックが、図6(b)に示すように、1ビット目から22ビット目までの前半のデータと、23ビット目から30ビット目までの後半のデータとに2分割される。次いで、前半と後半とのうち後半のデータの上位ビットと下位ビットとの位置交換が行われる。後半のデータのビット数をN、ビット位置をi(i=1,2,3・・・N)、位置交換前の後半のデータにおける各ビットの値をD1(i)、位置交換後の後半のデータにおける各ビットの値をD2(i)とする。この場合において、位置交換とは、
D2(i)=D1(N−i+1)
の計算を各ビットについて行うことと等価である。つまり、後半のデータが「01000100」である場合、位置交換後の後半のデータは「00100010」となる。そして、前半のデータの1ビット目から8ビット目までと、位置交換後の後半のデータとの論理和が算出される。そして、算出された論理和のデータが前半のデータの1ビット目から8ビット目までに設定される。このようにして生成された22ビットの前半のデータが、折り畳み後のブロックとなる。そして、ヒント情報のブロックサイズには22が設定される。
また、例えば、図6(c)に示すように、制限サイズが8と決定されたとする。制限サイズがブロック本来の要素数の1/2に満たないため、図6(b)に示したような方法では折り畳みを行うことができない。そこで先ず、第1段階として、ブロックは1/2に折り畳まれる。つまり、図6(c)に示すように、ブロックは、1ビット目から15ビット目までの前半のデータと、16ビット目から30ビット目までの後半のデータに2分割される。後半のデータは、上位ビットと下位ビットとの位置交換が行われる。そして、前半のデータと位置交換後の後半のデータとの論理和が算出されて、15ビットのブロックが生成される。これで、折り畳みの第1段階が完了する。
制限サイズの8は、折り畳みの第1段階完了後のブロックサイズの1/2よりも小さい。そこで、折り畳みの第2段階として、図6(b)と同様に折り畳みが行われる。すなわち、折り畳み後のブロックは、1ビット目から8ビット目までの前半のデータと、9ビット目から15ビット目までの後半のデータに2分割される。後半のデータは、上位ビットと下位ビットとの位置交換が行われる。そして、前半のデータの1ビット目から7ビット目までと、位置交換後の後半のデータとの論理和が算出される。そして、算出された論理和のデータが前半のデータの1ビット目から7ビット目までに設定される。このようにして生成された8ビットのデータが、最終的な折り畳み後のブロックとなる。そして、ヒント情報のブロックサイズには8が設定される。
もし、制限サイズがブロック本来の要素数の1/4に満たない場合、更に第3段階、第4段階・・・と折り畳みが行われる。
折り畳まれたブロックを展開するには、折り畳みと逆のプロセスを行えば良い。例えば、図6(b)の場合、つまり、本来の要素数が30であり、制限サイズが22である場合には、ブロックサイズが22であるので、ブロックサイズがブロック本来の要素数よりも8小さい。従って、折り畳まれたブロックの1ビット目から7ビット目までのデータのコピーが生成される。コピーされたデータは、上位ビットと下位ビットとの位置交換が行われる。そして、位置交換が行われたデータが、折り畳まれたブロックの22ビット目の後ろに接続される。
また、図6(c)の場合、つまり、本来の要素数が30であり、制限サイズが8である場合にはブロックサイズが8であるので、ブロックサイズがブロック本来の要素数の1/2よりも小さく、1/4よりも大きい。そこで、ブロック本来の要素数の1/2である15からブロックサイズの8を引いた7ビット分のデータのコピーが生成される。つまり、折り畳まれたブロックの1ビット目から7ビット目までのデータのコピーが生成され、このコピーに対して、上位ビットと下位ビットとの位置交換が行われる。そして、位置交換が行われたデータが、折り畳まれたブロックの8ビット目の後ろに接続される。こうして15ビットのブロックが生成される。これで、展開の第1段階が完了する。次に、この展開の第1段階完了後の15ビットのブロックのコピーが生成され、このコピーに対して、上位ビットと下位ビットとの位置交換が行われる。そして、位置交換が行われたデータが、展開の第1段階が完了後のブロックの15ビット目の後ろに接続される。このようにして生成された30ビットのブロックが最終的に展開されたブロックとなる。
ブロックの折り畳み及び展開を行うと、展開されたブロックの内容は、折り畳み前のブロックの内容と異なる場合がある。折り畳み前には1が設定されていた要素が、展開後には0が設定されることはあり得ない。従って、偽陰性が生じることはない。つまり、入力された検索キーで検索されるレコードが子の位置以下の葉ページ情報に格納されているにもかかわらず、該当するレコードが検索される可能性が無いと誤って判定されることはない。一方、折り畳み前には0が設定されていた要素が、展開後には1が設定されている場合がある。これは、偽陽性が増すことを意味する。つまり、入力された検索キーで検索されるレコードが子の位置以下の葉ページ情報に格納されていないにもかかわらず、該当するレコードが検索される可能性が有ると誤って判定される確率が増加する。例えば、或る節ページ情報のヒント情報の折り畳みが行われることにより、折り畳みが行われていなければ、レコード検索において「可能性無し」と判定されていたところを、「可能性有り」と誤って判定される場合がある。しかしながら、この場合であってもその節ページ情報の子の位置の節ページ情報のヒント情報で、また判定を行うことができる。この子の位置の節ページ情報のヒント情報が折り畳まれていなければ、「可能性有り」と誤って判定されることはない。従って、偽陽性が増すからといって不都合が生じるものではない。
以上説明したブルームフィルタを適用した場合のヒント情報の構造及び生成方法等はあくまでも一例である。例えば、ブルームフィルタの配列要素のデータサイズを1ビットよりも大きくしても良い。この場合において、ヒント情報にキーを反映する場合には、キーのハッシュ値に対応する要素に1を設定するのではなく、この対応する要素に1を加算しても良い。また、この場合において、ヒント情報を合成する場合には、論理和を算出するのではなく、加算によって要素毎に和を求めても良い。この場合、レコードの検索の際、入力された検索キーのハッシュ値に対応する要素の値が1以上である場合には「可能性有り」と判定し、入力された検索キーのハッシュ値に対応する要素の値が0である場合には「可能性無し」と判定すれば良い。
また、折り畳みを行う際の、ブロックの分割方法は、上述した方法に限られるものではない。例えば、2分割ではなく、3分割以上であっても良い。更に、分割されたデータの上位ビットと下位ビットとの位置交換はしなくても良い。
また、ブルームフィルタを複数のブロックに分けて管理すること、圧縮、及び折り畳みは必須ではない。
[3.1.2 数値範囲]
次に、ヒント情報の具体例として、数値の範囲をヒント情報に適用した場合の例について説明する。これは、例えば、キーが数値情報である場合、又は、キーの属性が数値情報である場合に有効である。数値情報には、整数、実数等のほか、日時等も含まれる。
ヒント情報は、数値情報の下限値と上限値とで示される。つまり、ヒント情報は、数値情報の範囲を示す。例えば、キーが日付であるとして、各レコードのキーが、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を示すヒント情報が生成される。
以上説明したヒント情報の具体例はあくまでも一例であり、ヒント情報として、ブルームフィルタ及び数値範囲以外のものを適用しても良い。例えば、オートマトンをヒント情報に適用しても良い。
[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は、ページ情報記憶手段の一例である。また、入力部15は、検索入力手段の一例である。なお、記憶部12は、揮発性のメモリであっても良いし、不揮発性のメモリであっても良い。
記憶部12には、各ノードNnのノードID、IPアドレス及びポート番号等が記憶されている。また、記憶部12には、カタログ情報がルートリンク情報及びページ情報単位で登録されるカタログデータベースが構築されている。更に、記憶部12には、カタログデータベースを管理するためのデータベース管理プログラムが記憶されている。なお、データベース管理プログラムは、情報生成プログラムの一例である。
制御部11は、CPUが記憶部12等に記憶されたデータベース管理プログラム等のプログラムを読み出して実行することにより、葉ページ情報生成手段、節ページ情報生成手段、根ページ情報生成手段、合成手段、検索手段及び判定手段として機能する。
なお、上記データベース管理プログラムは、例えば、ネットワーク8上の所定のサーバからダウンロードされるようにしても良い。また、上記データベース管理プログラムは、例えば、CD−ROM等の記録媒体に記録されてこの記録媒体のドライブを介して読み込まれるようにしても良い。
[5.ノードNnの構成及び機能等]
次に、図8を参照して、ノードNnの構成及び機能について説明する。
図8は、ノードNnの概要構成例を示す図である。
各ノードNnは、図8に示すように、演算機能を有するCPU,作業用RAM,各種データ及びプログラムを記憶するROM等から構成されたコンピュータとしての制御部21を備えている。また、各ノードNnは、各種データ及び各種プログラム等を記憶保存するためのHD(ハードディスク)等から構成された記憶部22と、受信されたコンテンツのレプリカ等を一時蓄積するバッファメモリ23とを備えている。更に、各ノードNnは、コンテンツのレプリカに含まれるエンコードされたビデオデータ(映像情報)及びオーディオデータ(音声情報)等をデコードするデコーダ部24を備えている。また更に、各ノードNnは、このデコードされたビデオデータ等に対して所定の描画処理を施しビデオ信号として出力する映像処理部25と、この映像処理部25から出力されたビデオ信号に基づき映像表示するCRT,液晶ディスプレイ等の表示部26と、を備えている。更にまた、各ノードNnは、上記デコードされたオーディオデータをアナログオーディオ信号にD (Digital)/A(Analog)変換した後これをアンプにより増幅して出力する音声処理部27と、この音声処理部27から出力されたオーディオ信号を音波として出力するスピーカ28と、を備えている。また更に、各ノードNnは、ネットワーク8を通じて他のノードNn等間の情報の通信制御を行うための通信部29を備えている。更にまた、各ノードNnは、ユーザからの指示を受け付けこの指示に応じた指示信号を制御部21に対して与える入力部(例えば、キーボード、マウス、或いは、リモコンや操作パネル等)30を備えている。そして、制御部21、記憶部22、バッファメモリ23、デコーダ部24、通信部29、及び入力部30はバス31を介して相互に接続されている。ここで、記憶部22は、第2ページ情報記憶手段の一例である。また、入力部30は、第2検索入力手段の一例である。なお、ノードNnとしては、例えば、パーソナルコンピュータ、STB(Set Top Box)等を適用可能である。
記憶部22には、DHTを用いたルーティングテーブル、インデックス、並びに、コンテンツ分散保存システムSに参加する際のアクセス先となるコンタクトノードのIPアドレス及びポート番号、及びセンターサーバSAのIPアドレス及びポート番号等が記憶されている。また、記憶部22には、他のノードNnやサーバSAから取得したページ情報が、ファイルとして記憶される。
制御部21は、CPUが記憶部22等に記憶されたプログラム(本発明のノードプログラムを含む)を読み出して実行することにより、第2検索手段、ページ情報取得手段、第2判定手段、及び改竄判定手段として機能する。
なお、ノードプログラムは、例えば、ネットワーク8上の所定のサーバからダウンロードされるようにしても良いし、例えば、CD−ROM等の記録媒体に記録されてこの記録媒体のドライブを介して読み込まれるようにしても良い。
[6.コンテンツ分散保存システムSの動作]
次に、図9乃至図16を参照して、本実施形態に係るコンテンツ分散保存システムSの動作について説明する。
以下においては、カタログ情報が一般的なn分探索木の構造を少なくとも有するものとして説明する。木の種類や構造等に特有の処理に関する詳細な説明は省略する。また、ヒント情報には、ビット配列の構造を有するブルームフィルタが適用されているものとする。なお、ヒント情報に数値範囲を適用した場合の動作については、随時補足する。
[6.1 センターサーバSAの動作]
図9は、本実施形態に係るセンターサーバSAにおける制御部11の処理例を示すフローチャートである。
図9に示す処理は、例えば、データベース管理プログラムが起動されたときに開始される。先ず、制御部11は、初期化処理を実行する(ステップS1)。初期化処理においては、ルートリンク情報が既に作成されている場合には、ルート情報の読み出しと、読み出されたルート情報の改竄チェックが行われる。一方、ルートリンク情報が作成されていない場合には、ルートリンク情報が新規に作成される。ルートリンク情報はRAMに格納される。
次いで、制御部11は、オペレータからの終了指示があったか否かを、入力部15からの入力に基づいて判定する(ステップS2)。
ステップS2において、制御部11は、終了指示がない場合には(ステップS2:NO)、オペレータからのレコードの追加要求があったか否かを、入力部15からの入力に基づいて判定する(ステップS3)。このとき、制御部11は、レコードの追加要求があった場合には(ステップS3:YES)、レコード追加処理を実行する(ステップS4)。この場合、制御部11は、例えばオペレータ操作によって入力部15から入力された新規レコードを指定する。また、制御部11は、新規レコードのインデックスを指定する。このレコード追加処理では、入力された新規レコードがカタログ情報に追加される。なお、レコード追加処理の詳細については後述する。
ステップS3において、制御部11は、レコードの追加要求がなかった場合には(ステップS3:NO)、オペレータからのレコードの削除要求があったか否かを、入力部15からの入力に基づいて判定する(ステップS5)。このとき、制御部11は、レコードの削除要求があった場合には(ステップS5:YES)、レコード削除処理を実行する(ステップS6)。この場合、制御部11は、オペレータ操作によって入力部15から入力された削除対象レコードのインデックスを指定する。このレコード削除処理では、指定されたインデックスに対応する削除対象レコードがカタログ情報から削除される。なお、レコード削除処理の詳細については後述する。
ステップS5において、制御部11は、レコードの削除要求がなかった場合には(ステップS5: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は、ステップS4、S6、S8、S10又はS13の処理を終えたとき、或いは、ステップS11において、ページ情報要求メッセージを受信していない場合には(ステップS11:NO)、ステップS2に移行する。そして、制御部11は、ステップS2においてオペレータからの終了指示があった場合には(ステップS2:YES)、本処理を終了させる。
図10は、本実施形態に係るセンターサーバSAにおける制御部11のレコード追加処理における処理例を示すフローチャートである。
先ず、制御部11は、現在のルートリンク情報をRAMから取得する(ステップS201)。次いで、制御部11は、ページ情報取得処理を実行する(ステップS202)。このとき、制御部11は、ルートリンク情報を指定する。ページ情報取得処理では、指定されたリンク情報が指すページ情報がファイルから取得され、RAMに格納される。取得されたページ情報は、現在参照しているページ情報とされる。
次いで、制御部11は、指定されたインデックスに基づいて、担当ページ情報を決定する。担当ページ情報とは、或るレコードに対して、このレコードを格納すべきページ情報を意味する。レコードを追加する場合は、入力された新規レコードを格納すべき葉ページ情報が担当ページ情報である。
具体的に、制御部11は、取得されたページ情報が新規レコードの担当ページ情報であるか否かを判定する(ステップS203)。この判定方法は、ページ情報の構造に依存する。
制御部11は、取得されたページ情報が新規レコードの担当ページ情報ではない場合には(ステップS203:NO)、現在参照しているページ情報から、次のページ情報へのリンク情報を取得する(ステップS204)。次のページ情報とは、現在参照しているページ情報の子ページ情報のうち、次に参照するページ情報をいう。次に参照するページ情報は、指定されたインデックスに対応する。この処理は、カタログ情報の探索木の構造に対応した探索アルゴリズムに従って行われる。
次いで、制御部11は、次のページ情報へのリンク情報が存在するか否かを判定する(ステップS205)。つまり、制御部11は、次のページ情報へのリンク情報を取得することができたか否かを判定する。このとき、制御部11は、次のページ情報へのリンク情報が存在しない場合には(ステップS205:NO)、葉ページ情報生成手段として、新しい担当ページ情報をRAM上に作成する(ステップS206)。そして、制御部11は、作成した担当ページ情報上に新規レコードを追加して設定する。
一方、制御部11は、次のページ情報へのリンク情報が存在する場合には(ステップS205:YES)、ステップS202に移行する。このとき、制御部11は、ステップS204において取得したリンク情報を指定して、ページ情報取得処理を実行する。
ステップS203において、制御部11は、取得されたページ情報が新規レコードの担当ページ情報である場合には(ステップS203:YES)、決定した担当ページ情報に新規レコードが追加可能であるか否かを判定する。具体的に、制御部11は、担当ページ情報には、格納可能なレコード数の上限まで既にレコードが格納されているか否かを判定する(ステップS207)。このとき、制御部11は、格納可能なレコード数の上限までのレコードは格納されていない場合には(ステップS207:NO)、葉ページ情報生成手段として、現在の担当ページ情報の内容をコピーした新しい担当ページ情報をRAM上に作成する(ステップS208)。そして、制御部11は、新しい担当ページ情報に新規レコードを追加して設定する。
一方、制御部11は、格納可能なレコード数の上限まで既にレコードが格納されている場合には(ステップS207:YES)、葉ページ情報生成手段として、ページ情報の分割を行う(ステップS209)。具体的に、制御部11は、カタログ情報の探索木の構造に対応する分割アルゴリズムに従って、現在の担当ページ情報の内容を分割して複数の新しいページ情報をRAM上に作成する。そして、制御部11は、この新しいページ情報のうち担当ページ情報に、新規レコードを追加して設定する。
制御部11は、ステップS206、S208又はS209において新しい担当ページを作成した後、ページ情報登録処理を実行する(ステップS210)。このとき、制御部11は、新たに作成したページ情報を指定する。ページ情報登録処理では、指定されたページ情報へのリンク情報が生成され、このページ情報がファイルに保存される。これによりページ情報が登録される。なお、ステップS209において、担当ページ情報が複数の新しいページ情報に分割された場合には、この複数のページ情報夫々に対してページ情報登録処理が実行される。
次いで、制御部11は、登録されたページ情報の親ページ情報が存在するか否かを判定する(ステップS211)。例えば、ステップS205の判定において次のページ情報へのリンク情報が存在する度に、そのとき参照していたページ情報のページ番号をRAMの所定領域に保存してくと良い。この所定領域を参照することによって、親ページ情報が存在するか、及び、この親ページ情報のページ番号を特定することができる。
制御部11は、親ページ情報が存在する場合には(ステップS211:YES)、節ページ情報生成手段及び根ページ情報生成手段として、新たに作成した葉ページ情報の親ページ情報からルートページ情報までの各節ページ情報を再生成する。具体的に、制御部11は、子ページ情報のメッセージダイジェストと、この子ページ情報のページ番号を含むリンク情報が格納された親ページ情報を作成する。より詳細に、制御部11は、元の親ページ情報の内容をコピーした新しい親ページ情報をRAM上に作成する(ステップS212)。そして、制御部11は、新しい親ページを現在参照するページ情報とする。
次いで、制御部11は、現在参照するページ情報に格納されている古い子ページ情報を指していたリンク情報を、新しい子ページ情報を指すリンク情報に書き換える(ステップS213)。具体的に、制御部11は、ステップS210のページ情報登録処理で生成されたリンク情報を、新しい子ページ情報を指すリンク情報とする。そして、制御部11は、新しい子ページ情報を指すリンク情報を、古い子ページ情報を指していたリンク情報に上書きする。
次いで、制御部11は、ヒント情報生成処理を実行する(ステップS214)。このヒント情報生成処理では、ヒント情報が生成され、生成されたヒント情報が、現在参照するページ情報に格納される。なお、ヒント情報生成処理の詳細については後述する。
次いで、制御部11は、ステップS210に移行する。このとき、制御部11は、新たに作成した現在参照しているページ情報を指定して、ページ情報登録処理を実行する。これにより、現在参照しているページ情報が登録される。
ステップS211において、制御部11は、登録されたページ情報の親ページ情報が存在しない場合、つまり、登録されたページ情報がルートページ情報である場合には(ステップS211:NO)、ルートリンク情報登録処理を実行する(ステップS215)。ルートリンク情報登録処理では、登録された新しいルートページ情報を指すルートリンク情報が作成され、作成されたルートリンク情報が、全ノードNnに配信される。制御部11は、ルートリンク情報登録処理を終えると、レコード追加処理を終了させる。
図11は、本実施形態に係るセンターサーバSAにおける制御部11のレコード削除処理における処理例を示すフローチャートである。
先ず、制御部11は、ステップS251〜S255の処理を実行する。これらの処理は、レコード追加処理におけるステップS201〜S205の処理と基本的に同様である。ただし、ステップS255において、制御部11は、次のページ情報へのリンク情報が存在しない場合には(ステップS255:NO)、レコード削除処理を終了させる。つまり、削除対象レコードを格納しているページ情報は存在しないので、レコード削除処理はここで終了する。
ステップS253において、制御部11は、取得されたページ情報が削除対象レコードの担当ページ情報である場合には(ステップS253:YES)、担当ページ情報は削除対象レコードを格納しているか否かを判定する(ステップS256)。この判定方法は、カタログ情報の構造に依存する。このとき、制御部11は、担当ページ情報は削除対象レコードを格納していない場合には(ステップS256:NO)、レコード削除処理を終了させる。
一方、制御部11は、担当ページ情報は削除対象レコードを格納している場合には(ステップS256:YES)、葉ページ情報生成手段として、一又は複数のレコードが格納された葉ページ情報を作成する。具体的に制御部11は、現在の担当ページ情報の内容をコピーした新しい担当ページ情報をRAM上に作成する(ステップS257)。そして、制御部11は、新しい担当ページ情報から削除対象レコードを削除する。
次いで、制御部11は、作成した新しいページ情報が格納しているレコードの数とリンク情報の数が何れも0になったか否かを判定する(ステップS258)。つまり、制御部11は、作成した新しいページ情報が空になったか否かを判定する。このとき、制御部11は、作成した新しいページ情報が空になっていない場合には(ステップS258:NO)、このページ情報を指定して、ページ情報登録処理を実行する(ステップS259)。これにより、削除対象レコードが削除された新しいページ情報が登録される。
一方、制御部11は、作成した新しいページ情報が空になった場合には(ステップS258:YES)、ステップS258で空になったと判定されたページ情報をRAM上から削除する(ステップS260)。
制御部11は、ステップS259又はS260の処理を終えると、節ページ情報生成手段及び根ページ情報生成手段として、ステップS261〜S265の処理を実行する。これらの処理は、レコード追加処理におけるステップ211〜S215の処理と基本的には同様である。ただし、ステップS263において、制御部11は、子ページ情報がステップS260で削除されている場合には、古い子ページ情報を指していたリンク情報を、何も指していない状態に書き換える。例えば、ページ番号及びメッセージダイジェストに無効な値が設定される。制御部11は、ステップS265の処理を終えると、レコード削除処理を終了させる。
図12は、本実施形態に係るセンターサーバSAにおける制御部11のヒント情報生成処理における処理例を示すフローチャートである。
先ず、制御部11は、全ブロックが全部0であるワーク用のヒント情報をRAM上に生成する(ステップS301)。このとき、制御部11は、ブロックサイズ及びブロック管理情報の初期設定を行う。次いで、制御部11は、リンク番号Xに1を設定する(ステップS302)。次いで、制御部11は、ページ情報取得処理を実行する(ステップS303)。このとき、制御部11は、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の中からX番目のリンク情報を指定する。ページ情報取得処理では、指定されたリンク情報が指す子ページ情報がファイルから取得され、RAMに格納される。
次いで、制御部11は、取得された子ページ情報にヒント情報が格納されているか否かを判定する(ステップS304)。このとき、制御部11は、取得された子ページ情報にヒント情報が格納されている場合には(ステップS304:YES)、合成手段として、ヒント情報の合成を行う(ステップS305)。具体的に、制御部11は、ワーク用のヒント情報のブルームフィルタと子ページ情報に格納されているヒント情報のブルームフィルタの論理和を算出する。この論理和の算出は、ブロック毎に行われる。そして、制御部11は、算出された論理和のデータをワーク用のヒント情報に設定する。
制御部11は、ステップS304において、取得された子ページ情報にヒント情報が格納されていない場合(ステップS304:NO)、又は、ステップS305の処理を終えた場合には、取得された子ページ情報にレコードが格納されているか否かを判定する(ステップS318)。
このとき、制御部11は、取得された子ページ情報にレコードが格納されている場合には(ステップS318:YES)、レコード番号Yに1を設定する(ステップS306)。次いで、制御部11は、Y番目のキーに格納されているキーをワーク用のヒント情報に反映する(ステップS307)。具体的に、制御部11は、Y番目のキーに格納されているキーのハッシュ値を算出する。次いで、制御部11は、ワーク用のヒント情報において、ハッシュ値に対応するブロックを選択する。次いで、制御部11は、選択したブロックにおいて、ハッシュ値に対応する位置の要素を1に設定する。
制御部11は、キーの反映を終えると、レコード番号Yに1を加算する(ステップS308)。次いで、制御部11は、レコード番号Yが、取得された子ページ情報に格納されているレコードの総数より大きいか否かを判定する(ステップS309)。レコードの総数は、取得された子ページ情報に格納されているレコードの個数を数えることによって求められる。このとき、制御部11は、レコード番号Yが、取得された子ページ情報に格納されているレコードの総数以下である場合には(ステップS309:NO)、ステップS307に移行する。
制御部11は、ステップS318において、取得された子ページ情報にレコードが格納されていない場合(ステップS318:NO)、又は、ステップS309において、レコード番号Yが、取得された子ページ情報に格納されているレコードの総数より大きい場合には(ステップS309:YES)、リンク番号Xに1を加算する(ステップS310)。次いで、制御部11は、リンク番号Xが、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の総数より大きいか否かを判定する(ステップS311)。有効なページ情報を指しているリンク情報の総数は、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の個数を数えることによって求められる。例えば、リンク情報に含まれるページ番号が無効な値に設定される場合、このリンク情報は有効なページ情報を指していない。例えば、ページ番号が1から始まるように定められている場合、ページ番号に1以上の値が設定されているリンク情報は有効であり、ページ番号に0が設定されているリンク情報は無効である。このとき、制御部11は、リンク番号Xが、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の総数以下である場合には(ステップS311:NO)、ステップS303に移行する。
一方、制御部11は、リンク番号Xが、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の総数より大きい場合には(ステップS311:YES)、ワーク用のヒント情報のブロック格納領域に格納されている各ブロックを圧縮する(ステップS312)。次いで、制御部11は、圧縮後のワーク用のヒント情報のデータサイズが上限サイズ以下であるか否かを判定する(ステップS313)。このとき、制御部11は、圧縮後のワーク用のヒント情報のデータサイズが上限サイズより大きい場合には(ステップS313:NO)、ブロックの制限サイズを決定する(ステップS314)。次いで、制御部11は、ブロックサイズが制限サイズになるように、ワーク用のヒント情報に格納されている各ブロックの折り畳みを行う(ステップS315)。次いで、制御部11は、折り畳まれた各ブロックを夫々圧縮する(ステップS316)。
制御部11は、ステップS313において、圧縮後のワーク用のヒント情報のデータサイズが上限サイズ以下である場合、又は、ステップS316の処理を終えた場合には、圧縮された各ブロックをワーク用のヒント情報に格納する。そして、制御部11は、このワーク用のヒント情報を、現在参照するページ情報のヒント情報格納領域に格納する(ステップS317)。制御部11は、この処理を終えると、ヒント情報生成処理を終了させる。
次に、ヒント情報に数値範囲を適用した場合のヒント情報生成処理について、ブルームフィルタを適用した場合と異なる点について補足する。この場合、ステップ305において、制御部11は、ワーク用のヒント情報が示す数値範囲と、子ページ情報が示す数値範囲とが合成される。そして、制御部11は、合成した数値範囲をワーク用のヒント情報に設定する。
また、ステップS307において、キーの値がワーク用のヒント情報が示す数値範囲内にある場合には、ヒント情報の変更は行われない。一方、制御部11は、キーの値がワーク用のヒント情報が示す数値範囲よりも大きい場合には、キーの値を数値範囲の新たな上限値とするワーク用のヒント情報に設定される。この場合、数値範囲の下限値は変更されない。また、制御部11は、キーの値がワーク用のヒント情報が示す数値範囲よりも小さい場合には、キーの値を数値範囲の新たな下限値とする数値範囲がワーク用のヒント情報に設定される。この場合、数値範囲の上限値は変更されない。
また、ステップS312〜S316のブロックの圧縮及び折り畳みは行われない。
図13(a)は、本実施形態に係るセンターサーバSAにおける制御部11のレコード検索処理における処理例を示すフローチャートである。
先ず、制御部11は、現在のルートリンク情報をRAMから取得する(ステップS351)。次いで、制御部11は、ページ情報取得処理を実行する(ステップS352)。このとき、制御部11は、ルートリンク情報を指定する。ページ情報取得処理では、指定されたルートリンク情報が指すルートページ情報がファイルから取得され、RAMに格納される。
次いで、制御部11は、検索手段として、サブツリー検索処理を実行する(ステップS353)。このとき、制御部11は、取得されたルートページ情報及び入力された検索キーを指定する。サブツリー検索処理では、指定されたページ情報に対して、レコードの検索及びヒント情報を用いた判定が行われる。サブツリー検索処理は、再帰呼び出しが可能である。サブツリー検索処理の再帰呼び出しによって、根ページ情報から葉ページ情報にかけて、検索対象とするページ情報を移っていきながら、入力された検索キーを用いてレコードが検索される。なお、サブツリー検索処理の詳細については後述する。
次いで、制御部11は、サブツリー検索処理において検索された検索結果を表示部14に表示等する(ステップS354)。制御部11は、この処理を終えると、レコード検索処理を終了させる。
図13(b)は、本実施形態に係るセンターサーバSAにおける制御部11のサブツリー検索処理における処理例を示すフローチャートである。
先ず、制御部11は、指定されたページ情報を、現在参照しているページ情報とする。そして、制御部11は、現在参照しているページ情報が、検索キーで検索されるレコードを格納しているか否かを判定する(ステップS371)。現在参照しているページ情報がレコードを1つも格納していない場合には、検索キーで検索されるレコードを格納していないこととなる。一方、現在参照しているページ情報がレコードを格納している場合には、制御部11は、入力された検索キーと、各レコードに格納されているキーとを比較する。この比較の結果、例えば、格納されているキーが検索キーと一致するレコードが、検索キーで検索されるレコードとなる。制御部11は、現在参照しているページ情報が、検索キーで検索されるレコードを格納している場合には(ステップS371:YES)、検索されたレコードを検索結果に追加する(ステップS372)。具体的に、制御部11は、検索されたレコードを、RAM上の所定の領域に追加設定する。
制御部11は、現在参照しているページ情報が、検索キーで検索されるレコードを格納していない場合(ステップS371:NO)、又は、ステップS372の処理を終えた場合には、現在参照しているページ情報が葉ページ情報であるか否かを判定する(ステップS373)。このとき、制御部11は、現在参照しているページ情報が葉ページ情報である場合には(ステップS373:YES)、現在参照しているページ情報に子ページ情報が存在しないので、サブツリー検索処理を終了させる。
一方、制御部11は、現在参照しているページ情報が節ページ情報である場合には(ステップS373:NO)、判定手段として、検索キーと現在参照しているページ情報に格納されているヒント情報とに基づいて、「可能性有り」であるか否を判定する。つまり、制御部11は、現在参照しているページ情報の子の位置のページ情報以下のページ情報に、検索キーで検索されるレコードが存在する可能性が有るか否かを判定する(ステップS374)。具体的に、制御部11は、検索キーのハッシュ値を算出する。次いで、制御部11は、ヒント情報において、ハッシュ値に対応する要素が設定されているブロックを、ハッシュ値に基づいて特定する。次いで、制御部11は、特定したブロックをヒント情報の中からRAM上の所定領域にコピーする。次いで、制御部11は、コピーしたブロックを解凍する。次いで、制御部11は、ブロックが折り畳まれている場合には、このブロックを展開する。そして、制御部11は、解凍され又は展開されたブロックから、ハッシュ値に対応する要素を取得する。この取得された要素に1が設定されている場合には、「可能性有り」となり、取得された要素に0が設定されている場合には、「可能性無し」となる。
このとき、制御部11は、「可能性無し」である場合には(ステップS374:NO)、現在参照しているページ情報の子の位置のページ情報から葉ページ情報まで関連付けられているページ情報を、検索対象から除外する。つまり、制御部11は、サブツリー検索処理を終了させる。一方、制御部11は、「可能性有り」である場合には(ステップS374:YES)、リンク番号Xに1を設定する(ステップS375)。
次いで、制御部11は、リンク番号Xが、現在参照しているページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の総数以下であるか否かを判定する(ステップS376)。有効なページ情報を指しているリンク情報の総数は、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の個数を数えることによって求められる。
このとき、制御部11は、リンク番号Xが、現在参照しているページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の総数以下である場合には(ステップS376:YES)、ページ情報取得処理を実行する(ステップS377)。このとき、制御部11は、現在参照するページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の中からX番目のリンク情報を指定する。ページ情報取得処理では、指定されたリンク情報が指す子ページ情報がファイルから取得され、RAMに格納される。
次いで、制御部11は、サブツリー検索処理を再帰呼び出しする(ステップS378)。このとき、制御部11は、取得されたページ情報及び入力された検索キーを指定する。次いで、制御部11は、リンク番号Xに1を加算して(ステップS379)、ステップS376に移行する。
ステップS376において、制御部11は、リンク番号Xが、現在参照しているページ情報に格納されているリンク情報のうち有効なページ情報を指しているリンク情報の総数より大きい場合には(ステップS376:NO)、サブツリー検索処理を終了させる。
サブツリー検索処理終了後の移行先は、2通りある。今回のサブツリー検索処理が、サブツリー検索処理の再帰呼び出しによって実行された場合には、呼び出し元のサブツリー検索処理のステップS379に移行する。一方、今回のサブツリー検索処理が、レコード検索処理から呼び出された場合には、レコード検索処理のステップS354に移行する。
次に、ヒント情報に数値範囲を適用した場合のヒント情報生成処理について、ブルームフィルタを適用した場合と異なる点について補足する。この場合、ステップ374において、制御部11は、検索キーとヒント情報が示す数値範囲とを比較する。そして、この比較の結果、検索キーがヒント情報が示す数値範囲内にある場合には、「可能性有り」となる。一方、検索キーがヒント情報が示す数値範囲内にない場合には、「可能性無し」となる。
[6.2 ノードNnの動作]
図14は、本実施形態に係るノードNnにおける制御部21の処理例を示すフローチャートである。
図14に示す処理は、例えば、ノードNnが、コンテンツ分散保存システムSに参加したときに開始される。先ず、制御部21は、初期化処理を実行する(ステップS501)。この初期化処理では、ルートリンク情報要求メッセージの送信により、ルートリンク情報が他のノードNn又はセンターサーバSAから取得される。
次いで、制御部21は、ユーザからの終了指示があったか否かを、入力部30からの入力に基づいて判定する(ステップS502)。
ステップS502において、制御部21は、終了指示がない場合には(ステップS502:NO)、ユーザからのレコードの検索要求があったか否かを、入力部30からの入力に基づいて判定する(ステップS503)。このとき、制御部21は、レコードの検索要求があった場合には(ステップS503:YES)、第2検索手段及び第2判定手段として、レコード検索処理を実行する(ステップS504)。この場合、制御部21は、ユーザ操作によって入力部30から入力された検索キーを指定する。このレコード検索処理では、指定された検索キーを用いてがカタログ情報からレコードが検索される。なお、レコード検索処理及びツリー検索処理の内容は、センターサーバ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)、本処理を終了させる。
図15は、本実施形態に係るノードNnにおける制御部21のページ情報取得処理における処理例を示すフローチャートである。
先ず、制御部21は、指定されたリンク情報が有効なページ情報を指しているか否かを判定する(ステップS601)。例えば、リンク情報のページ番号が無効な値に設定される場合、このリンク情報は有効なページ情報を指していない。このとき、制御部21は、指定されたリンク情報が有効なページ情報を指していない場合には(ステップS601:NO)、ページ情報取得処理を終了させる。この場合、ページ情報無しという情報が、呼び出し元の処理に返却される。
一方、制御部21は、指定されたリンク情報が有効なページ情報を指している場合には(ステップS601:NO)、このリンク情報に含まれるページ番号が指すファイルが記憶部22に記憶されているか否かを判定する(ステップS602)。このとき、制御部21は、指定されたリンク情報に含まれるページ番号が指すファイルが記憶されている場合には(ステップS602:YES)、このリンク情報に含まれるページ番号が指すファイルからページ情報を読み出してRAMに格納する(ステップS603)。
次いで、制御部21は、改竄判定手段として、指定されたリンク情報に含まれるメッセージダイジェストを用いて、読み出したページ情報の改竄をチェックする(ステップS604)。具体的に、制御部11は、読み出したページ情報のメッセージダイジェストを計算する。このメッセージダイジェストの計算には、ページ情報登録処理でメッセージダイジェストを計算したときと同じハッシュ関数が用いられる。そして、制御部11は、計算したメッセージダイジェストと指定されたリンク情報に含まれるメッセージダイジェストとが一致するか否かを判定する。ここで、一致する場合にはルートリンク情報は改竄されていないとされ、一致しない場合には改竄されている。
次いで、制御部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が存在する場合には(ステップS606:YES)、ページ情報取得手段として、リンク情報が指すページ情報を他のノードNnから取得する。具体的に、制御部21は、リンク情報が指すページ情報を担当するのに最もふさわしいノードNnにページ情報要求メッセージを送信する(ステップS608)。ページ情報を担当するのに最もふさわしいノードNnとは、例えば、ノードIDが、指定されたインデックスの上位桁の値と最も多く一致するノードNnである。
制御部21は、ステップS607又はS608において、ページ情報要求メッセージを送信すると、このページ情報要求メッセージの送信に対応してセンターサーバSA又は他のノードNnから送信されてきたページ情報メッセージを受信する(ステップS609)。次いで、制御部21は、受信したページ情報メッセージに含まれる情報をページ情報としてファイルに保存する(ステップS610)。制御部21は、この処理を終えると、ステップS603に移行する。ここで、制御部21は、再度、ページ情報を読み出し、読み出したページ情報の改竄チェックを行う(ステップS603、S604)。そして、ステップS605において、制御部21は、ページ情報は改竄されていない場合には(ステップS605:NO)、ページ情報取得処理を終了させる。
ステップS608〜S610において他のノードNnから取得されたページ情報が改竄されている場合には、ステップS607において、センターサーバSAからページ情報が取得される。これにより、レコード検索処理及びツリー検索処理において、改竄されたページ情報を用いてレコードの検索が行われることが防止される。なお、レコード検索処理又はツリー検索処理において、ページ情報が改竄されていると判明した場合には、レコードの検索を中断しても良い。
以上説明したように、本実施形態によれば、センターサーバSAの制御部11が、レコードの検索のために入力される検索キーとの比較対象であるキーを有するレコードを一又は複数含む葉ページ情報を生成する。また、制御部11が、ルートページ情報から葉ページ情報までの間に位置する節ページ情報の子の位置以下に位置する葉ページ情報に、検索キーで検索されるレコードが含まれている可能性の有無を判定するために用いられるヒント情報を、当該葉ページ情報に含まれるレコードが有するキーに基づいて生成し、当該ヒント情報を含む節ページ情報を生成する。また、制御部11が、ルートページ情報の子の位置の節ページ情報に含まれるヒント情報を含むルートページ情報を生成する。そして、記憶部12は、ルートページ情報と、節ページ情報と、葉ページ情報とを含むカタログ情報を木構造で記憶する。
従って、子ページ情報から葉ページ情報にかけて関連付けられているページ情報を検索する必要がなく、レコードの検索を効率良く行うことができるカタログ情報を生成することができる。
また、制御部11が、ルートページ情報から葉ページ情報にかけて、検索対象とするページ情報を移っていきながら、入力部15により入力された検索キーを用いてレコード情報を検索する。また、制御部11が、検索対象となっているページ情報がルートページ情報又は節ページ情報である場合、当該ページ情報に含まれるヒント情報と、入力された検索キーと、に基づいて、当該検索キーで検索されるレコードの存在の可能性の有無を判定する。また、制御部11が、検索キーで検索されるレコードが存在する可能性が無いと判定された場合には、検索対象となっているページ情報の子の位置の子ページ情報から葉ページ情報へかけて関連付けられたページ情報を検索対象から除外する。
従って、子ページ情報から葉ページ情報にかけて関連付けられているページ情報を検索する必要がないので、レコードの検索を効率良く行うことができる。
また、制御部11が、節ページ情報又はルートページ情報を生成する際、生成するページ情報の子の位置に複数の節ページ情報が関連付けられている場合に、当該複数の節ページ情報に含まれるヒント情報を合成して新たなヒント情報を生成し、生成されたヒント情報を含むページ情報を生成する。
従って、複数の節ページ情報に含まれるヒント情報が合成によってまとめられるので、親の節ページ情報に含まれるヒント情報をより効率よく生成することができる。
また、制御部11が、節ページ情報を生成する際、節ページ情報の子の位置以下に位置する葉ページ情報に含まれるレコードが有するキーのハッシュ値を算出し、当該ハッシュ値に対応する配列要素に1が設定されるヒント情報を生成する。また、制御部11が、ヒント情報を合成する場合、生成するページ情報の子に位置する複数の節ページ情報に含まれるヒント情報の配列要素毎の論理和を算出することによって新たなヒント情報を生成する。
従って、入力された検索キーでレコードを検索する際には、ルートページ情報又は節ページ情報に含まれるヒント情報の配列要素のうち検索キーのハッシュ値に対応する配列要素の内容を判定する。ヒント情報の配列要素毎の和をとって新たなヒント情報が生成された場合であっても、ハッシュ値に対応する配列要素がキー無しを示していれば、そのページ情報の子の位置の子ページ情報から葉ページ情報にかけて関連付けられているページ情報のうち葉ページ情報には、検索キーによって検索されるレコード情報は含まれていないことが保証される。つまり、ヒント情報が合成されても偽陰性のない判定を行うことができる。よって、データサイズが大きいキーであっても、ヒント情報のデータサイズを所定量に抑えながら、レコードの検索を効率良く行うことができる。
また、制御部11が、節ページ情報又はルートページ情報を生成する際、ヒント情報を圧縮し、圧縮されたヒント情報を含むページ情報を生成する。ただし、制御部11は、圧縮されたヒント情報のデータサイズが所定量を超える場合には、ヒント情報を分割してなる複数のデータの配列要素毎の和を算出することによってヒント情報の折り畳みを行い、折り畳まれたヒント情報を圧縮する。そして、制御部11が、圧縮されたヒント情報を含むページ情報を生成する。
従って、入力された検索キーでレコードを検索する際には、この圧縮ヒント情報を解凍して得られる分割合成ヒント情報を用いて、偽陰性のない判定を行うことができる。また、分割合成ヒント情報は、元のヒント情報よりもデータサイズが小さい。そして、この分割合成ヒント情報が更に圧縮されるので、ページ情報中におけるヒント情報格納領域の容量に上限サイズがある場合に、ヒント情報のデータサイズを上限サイズ以下に確実に圧縮することができる。
また、キーは、数値情報であるか、又は、数値情報で示される属性を有する情報である場合、制御部11が、節ページ情報を生成する際、節ページ情報の子の位置以下に位置する葉ページ情報に含まれるレコードが有するキー又は当該キーの属性の何れか一方が示す数値情報の中から、値が最小の数値情報を下限値とし値が最大の数値情報を上限値とする範囲を示すヒント情報を生成する。また制御部11が、ヒント情報を合成する際、生成されるページ情報の子に位置する複数の節ページ情報に含まれるヒント情報の下限値の中から最小の下限値を新たな下限値とし、当該複数の節ページ情報に含まれるヒント情報の上限値の中から最大の上限値を新たな上限値とする新たなヒント情報を生成する。
従って、入力された検索キーでレコードを検索する際に、ルートページ情報又は節ページ情報に含まれるヒント情報が示す範囲と、検索キーとしての数値情報とを比較する。そして、ヒント情報が示す範囲に数値情報が含まれていなければ、そのページ情報の子の位置の子ページ情報から葉ページ情報にかけて関連付けられているページ情報には、検索キーによって検索されるレコード情報は含まれていないことが保証される。よって、簡易な方法で、ヒント情報の生成及びこのヒント情報を用いた判定を行うことができる。また、ヒント情報のデータサイズを小さくすることができる。
また、ノードNnの制御部21が、ルートページ情報から葉ページ情報にかけて、検索対象とするページ情報を移っていきながら、入力部30により入力された検索キーを用いてレコード情報を検索する。また、制御部21が、検索対象となっているページ情報が記憶部22に記憶されていない場合に、当該ページ情報を他のノードNnからネットワークを介して取得する。また、制御部21が、検索対象となっているページ情報がルートページ情報又は節ページ情報である場合、当該ページ情報に含まれるヒント情報と、入力された検索キーと、に基づいて、当該検索キーで検索されるレコードの存在の可能性の有無を判定する。また、制御部21が、検索キーで検索されるレコードが存在する可能性が無いと判定された場合には、検索対象となっているページ情報の子の位置の子ページ情報から葉ページ情報へかけて関連付けられたページ情報を検索対象から除外する。
従って、子ページ情報から葉ページ情報にかけて関連付けられているページ情報を検索する必要がないので、レコードの検索を効率良く行うことができる。また、複数のページ情報を複数のノードNnで分散して記憶する場合に、検索対象から除外されたページ情報をノードNn間でやりとりする必要が無いので、ネットワークの負荷を低減させることができる。
また、センターサーバSAの制御部11が、子の位置のページ情報のメッセージダイジェストを含む節ページ情報及びルートページ情報を生成する。一方、ノードNnの制御部21が、他のノードNnから取得されたページ情報が改竄されているか否かを、当該ページ情報の親の位置のページ情報に含まれるメッセージダイジェストに基づいて判定する。そして、制御部21が、改竄されていないと判定されたページ情報がルートページ情報又は節ページ情報である場合、入力された検索キーで検索されるレコードの存在の可能性の有無を判定する。
従って、改竄されたページ情報を用いてレコードの検索が行われることを防止することができる。
なお、上記実施形態においては、検索の際に入力される検索キーは1つであった。しかしながら、複数の検索キーを用いて、いわゆるOR検索、AND検索等を行うことができるようにしても良い。例えば、入力された各検索キーについて、ヒント情報を用いて夫々「可能性有り」又は「可能性無し」が判定されるようにする。そして、OR検索の場合には、1つでも「可能性有り」と判定されたら、現在検索対象となっているページ情報の子の位置のページ情報も検索対象とすれば良い。一方、AND検索の場合には、全ての判定結果が「可能性有り」の場合にのみ、現在検索対象となっているページ情報の子の位置のページ情報も検索対象とすれば良い。
また、上記実施形態においては、本発明に係る情報生成装置を、ピアツーピアシステムにおけるサーバ装置に適用していたが、例えば、クライアント−サーバシステムにおけるサーバ装置に適用しても良い。
また、本発明は、コンテンツカタログ情報の検索に限定されるものではない。汎用的なデータベースのレコードに対しても適用可能である。