(57)【要約】  管理手段（１０２）はブロック単位のエントリをツリー層構造で管理し、管理手段（１０２）の探索手段は新規エントリの対象ブロックを特定する。管理手段（１０２）の挿入手段は対象ブロックに新規エントリを挿入し、新規エントリを挿入する際に対象ブロックの使用率が分割閾値以上であるか判定し、ブロックを分割する旨の命令を分割手段（１０４）に送信する。分割手段（１０４）は命令に基づき対象ブロックを分割する。分割手段（１０４）は階層毎に設けられ、上位階層に位置する分割手段（１０４）の分割方法の保証使用率は下位階層に位置する分割手段（１０４）の分割方法の保証使用率以上である。分割手段（１０４）は既存エントリを対象ブロックと新規ブロック間で分割する。
2013128788.tif 000002
【特許請求の範囲】
【請求項１】
ブロック単位のエントリをツリー状の階層構造で管理する管理手段と、
階層毎に設けられ、新規エントリを挿入する際に前記ブロックの使用率が一定の分割閾値以上である場合、新規ブロックを追加して、前記ブロックが保持する既存エントリを、前記ブロックと前記新規ブロックとの間で分割する分割手段とを有し、
前記分割を実施した直後に前記ブロックが保持している前記既存エントリの数を、前記ブロックが保持できる前記エントリの最大数で除した値を保証使用率とした場合、任意の前記階層である第１の階層の前記分割手段が使用する分割方法の前記保証使用率は、前記第１の階層より下位に位置する第２の階層の前記分割手段が使用する前記分割方法の前記保証使用率以上であるデータ管理装置。
【請求項２】
請求項１に記載のデータ管理装置において、
前記階層毎に、前記エントリの更新頻度を保持し、
前記分割手段が使用する前記分割方法は、
一定の閾値以上の前記更新頻度を持つ前記階層より上位に位置する階層では、Ｂ＊ツリーの分割アルゴリズムであり、一定の閾値以上の前記更新頻度を持つ前記階層以下に位置する階層では、Ｂ＋ツリーの分割アルゴリズムであるデータ管理装置。
【請求項３】
請求項１に記載のデータ管理装置において、
レベルｋ（ｋ≧１）の階層において前記分割手段は、
前記新規エントリの挿入対象とする前記ブロックを対象ブロックとし、前記対象ブロックと同一の前記階層に位置し、前記対象ブロックにおける最大のキー値よりも大きいキー値を有するエントリを保持する前記ブロックの中で、前記キー値が最小のエントリを保持する前記ブロックを起点として、当該起点となるブロックから数えてｋ−１個の前記ブロックを隣接ブロックとした場合、前記対象ブロックと前記隣接ブロックの全てにおいて前記使用率が前記分割閾値以上であった時に、前記新規ブロックを追加して、前記対象ブロックから前記隣接ブロックにある全ての前記既存エントリを、前記対象ブロック、前記隣接ブロックおよび前記新規ブロックの間で分割し、
前記対象ブロックまたは前記隣接ブロックのうち、いずれかの前記使用率が前記分割閾値未満であった時に、前記新規ブロックを追加せず、前記対象ブロックから前記使用率を判定した前記隣接ブロックまでにある前記既存エントリを、前記対象ブロックから前記使用率を判定した前記隣接ブロックの間で分割するデータ管理装置。
【請求項４】
請求項３に記載のデータ管理装置において、
処理対象とする前記ブロックである対象ブロックからの距離に応じて、前記分割閾値を定める第１閾値補正手段をさらに有するデータ管理装置。
【請求項５】
請求項１〜４のいずれか一項に記載のデータ管理装置において、
前記階層毎に前記分割閾値を定める第２閾値補正手段をさらに有するデータ管理装置。
【請求項６】
コンピュータが、
ブロック単位のエントリを、ツリー状の階層構造で管理し、
新規エントリを挿入する際に前記ブロックの使用率が一定の分割閾値以上である場合、階層毎に設けられた分割手段を用いて、新規ブロックを追加して、前記ブロックが保持する既存エントリを、前記ブロックと前記新規ブロックとの間で分割し、
前記分割を実施した直後に前記ブロックが保持している前記既存エントリの数を、前記ブロックが保持できる前記エントリの最大数で除した値を保証使用率とした場合、任意の前記階層である第１の階層の前記分割手段が使用する分割方法の前記保証使用率は、前記第１の階層より下位に位置する第２の階層の前記分割手段が使用する前記分割方法の前記保証使用率以上となるように設定するデータ管理方法。
【請求項７】
コンピュータを、
ブロック単位のエントリを、ツリー状の階層構造で管理する手段、
新規エントリを挿入する際に前記ブロックの使用率が一定の分割閾値以上である場合、階層毎に設けられた分割手段を用いて、新規ブロックを追加して、前記ブロックが保持する既存エントリを、前記ブロックと前記新規ブロックとの間で分割する手段、
前記分割を実施した直後に前記ブロックが保持している前記既存エントリの数を、前記ブロックが保持できる前記エントリの最大数で除した値を保証使用率とした場合、任意の前記階層である第１の階層の前記分割手段が使用する分割方法の前記保証使用率は、前記第１の階層より下位に位置する第２の階層の前記分割手段が使用する前記分割方法の前記保証使用率以上となるように設定する手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ管理装置、データ管理方法およびプログラムに関する。
【背景技術】
【０００２】
大量のデータの中から少量のデータを高速に検索するには、データにインデックスを付与することが一般的である。単にデータを追記するのは高速に実行できるが、検索時には、例えば線形探索のように、全てのデータに対して条件判定を施す必要が生じるため、検索が低速になる。辞書のようにデータをソートすれば高速な二分木探索が可能になるが、データの更新効率は低下する。ツリー状のインデックスであるインデックスツリーを張れば、更新と検索の双方を高速に実行できる。【０００３】
インデックスツリーが付与されていれば、範囲検索が高速に実行できる。データは単体で扱われるよりも、例えば、＜氏名、住所、商品、日時＞のように、データのまとまり（タプル）で扱うのが便利である。そこで、検索のための条件がつけられるタプル中のデータ（キー）にインデックスツリーを付与する。例えば、前記の「日時」をキーとしてツリーを付与すれば、「２０１１年９月３０日の１１時から１２時に購買された商品」などを高速に検索することができる。【０００４】
非特許文献１に示されるＢ＋ツリーは、広く用いられているインデックスツリーの一つである。Ｂ＋ツリーではデータをブロック単位で管理し、最下位層のブロックをリーフブロック、リーフブロックよりも上位層のブロックをブランチブロック、最上位かつ唯一のブロックをルートブロックと呼ぶ。リーフには特定の範囲のキーとキーに対応するタプルへのポインタを記録し、多くの場合、隣接する範囲のキーを記録したリーフブロック間はポインタでつながれる。インデックスにおいて、このキーとポインタの組をエントリと呼ぶ。ブランチにはキーとリーフまたは隣接下位のブランチへのポインタからなるエントリを記録する。また、Ｂ＋ツリーにおいて、あるブロックに新たなエントリが追加される際、当該ブロックに空き領域がない場合は、ブロック分割が実行される。Ｂ＋ツリーのブロック分割では、分割されるブロックに含まれる全エントリのうちの半分が、キーの大きさに基づいて、新たに追加されるブロックに移動される。なお、本明細書では、あるブロックに関して、「ブロック分割を実施した直後に、そのブロックが保持しているエントリの数」を「ブロックが保持できるエントリの最大数」で除した値を「保証使用率」、「ブロックが現在保持しているエントリの数」を「ブロックが保持できるエントリの最大数」で除した値を「使用率」として定義する。Ｂ＋ツリーは、使用率が１００％となったブロックを分割するアルゴリズムであるため、その保証使用率は約５０％となる。【０００５】
非特許文献２に示されるＢ＊ツリーは、処理対象とする対象ブロックの使用率と、対象ブロックに隣接する隣接ブロックの使用率が共に１００％である場合、新たにブロックを追加する。そして、対象ブロック、隣接ブロックおよび新たに追加したブロックの間で、対象ブロックと隣接ブロックが保持するエントリとを分割し、新規に追加するエントリを挿入するものである。そのため、Ｂ＊ツリーの保証使用率は約６７％となる。【０００６】
非特許文献３では、ＣＰＵ（Ｃｅｎｔｒａｌ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）キャッシュとディスクの双方を意識するＦｒａｃｔａｌ Ｐｒｅｆｅｔｃｈｉｎｇ Ｂ＋−ｔｒｅｅ (ｆｐＢ＋−ｔｒｅｅ)が提案されている。ｆｐＢ＋−ｔｒｅｅでは、ディスクに最適化したサイズのブロックを持つＢ＋ツリーを作り、さらにブロックの中に、キャッシュに最適化したサイズのサブブロックを作る。【０００７】
非特許文献４では、個々のハードウエアに最適化した二進木である「ＦＡＳＴ」が提案されている。ＦＡＳＴにおいて考慮されるのは、ＳＩＭＤ（Ｓｉｎｇｌｅ Ｉｎｓｔｒｕｃｔｉｏｎ Ｍｕｌｔｉｐｌｅ Ｄａｔａ）レジスタのサイズ、ラインサイズ、ページサイズなどである。非特許文献３ではディスクに合わせたサイズのブロックの中にキャッシュに合わせたサイズのブロックを設けていたが、この文献ではキャッシュに合わせたサイズのブロックの中に、さらにＳＩＭＤレジスタに合わせたサイズのブロックを設ける。これら三種のブロック内で、幅優先でエントリを詰める。例えば、あるエントリと、その子にあたる二つのエントリを詰める。【０００８】
非特許文献５では、フラッシュメモリへのランダムライトが低速である問題に取り組むＦＤツリーが提案されている。ＦＤツリーは、ブロックサイズがフラッシュメモリのページサイズに等しい、小さなＢ＋ツリーであるヘッドツリーと、ソートされたブロックの配列からなる。配列は概ねツリーの一つのレベルに対応し、ツリーの低いレベルの配列ほどサイズが大きい。ヘッドツリー、または配列のブロック内を検索すると、一つ下位のレベルの、次に検索すべきブロックを特定できる。ライトはヘッドツリーにバッファされ、バッファがいっぱいになると下位のレベルのバッファへフラッシュされる。【０００９】
特許文献１では、インデックスの開発コストが比較的高いことと、インデックスが複数のデータ構造を持つことに着目したインデックスの実装方法およびインデックスを実装した装置が記載されている。特許文献１では、例えばＢ木、ハッシュ、ヒープなどのデータ構造を部品として用意し、これら部品を組み合わせることで、安価かつ手間をかけずにインデックスを実装する。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平４−１１２２４０号公報
【非特許文献】
【００１１】
【非特許文献１】D. Comer. The Ubiquitous B-tree. ACM Comput. Surv., 11(2), pages 121〜137, 1979.
【非特許文献２】D. E. Knuth. The Art of Computer Programming, Volume 3: (2nd Ed.) Sorting and Searching. 1998.
【非特許文献３】S. Chen, P. B. Gibbons, T. C. Mowry, and G. Valentin. Fractal Prefetching B+-Trees: Optimizing Both Cache and Disk Performance. In SIGMOD, pages 157〜168, 2002.
【非特許文献４】C. Kim, J. Chhugani, N. Stish, E. Sedlar, A. D. Nguyen, T. Kaldewey, V. W. Lee, S. A. Brandt, and P. Dubey. FAST: Fast Architecture Sensitive Tree Search on Modern CPUs and GPUs. In SIGMOD, pages 339〜350, 2010.
【非特許文献５】Y. Li, B. He, R. J. Yang, Q. Luo, and K. Yi. Tree Indexing on Solid State Drives. In PVLDB 2010.
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、保証使用率を高めると検索が高速になる一方で、更新処理が複雑になり更新が低速になってしまう。非特許文献１〜４では、階層構造全体で、ブロックの分割をする際に使用する分割方法が１つである。また、非特許文献５および特許文献１では、異なる複数のデータ構造を持つが、階層構造全体で使用する分割方法はただ１つである。そのため、各文献では、階層毎の更新頻度に応じて、検索速度および更新速度を共に最適化することができない。【００１３】
本発明の目的は、上記問題に鑑み、階層構造を持つデータにおいて、階層毎に検索速度および更新速度を共に最適化するデータ管理装置、データ管理方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００１４】
本発明によれば、
ブロック単位のエントリをツリー状の階層構造で管理する管理手段と、
階層毎に設けられ、新規エントリを挿入する際に前記ブロックの使用率が一定の分割閾値以上である場合、新規ブロックを追加して、前記ブロックが保持する既存エントリを、前記ブロックと前記新規ブロックとの間で分割する分割手段とを有し、
前記分割を実施した直後に前記ブロックが保持している前記既存エントリの数を、前記ブロックが保持できる前記エントリの最大数で除した値を保証使用率とした場合、任意の前記階層である第１の階層の前記分割手段が使用する分割方法の前記保証使用率は、前記第１の階層より下位に位置する第２の階層の前記分割手段が使用する前記分割方法の前記保証使用率以上であるデータ管理装置が提供される。【００１５】
本発明によれば、
コンピュータが、
ブロック単位のエントリを、ツリー状の階層構造で管理し、
新規エントリを挿入する際に前記ブロックの使用率が一定の分割閾値以上である場合、階層毎に設けられた分割手段を用いて、新規ブロックを追加して、前記ブロックが保持する既存エントリを、前記ブロックと前記新規ブロックとの間で分割し、
前記分割を実施した直後に前記ブロックが保持している前記既存エントリの数を、前記ブロックが保持できる前記エントリの最大数で除した値を保証使用率とした場合、任意の前記階層である第１の階層の前記分割手段が使用する分割方法の前記保証使用率は、前記第１の階層より下位に位置する第２の階層の前記分割手段が使用する前記分割方法の前記保証使用率以上となるように設定するデータ管理方法が提供される。【００１６】
本発明によれば、
コンピュータを、
ブロック単位のエントリを、ツリー状の階層構造で管理する手段、
新規エントリを挿入する際に前記ブロックの使用率が一定の分割閾値以上である場合、階層毎に設けられた分割手段を用いて、新規ブロックを追加して、前記ブロックが保持する既存エントリを、前記ブロックと前記新規ブロックとの間で分割する手段、
前記分割を実施した直後に前記ブロックが保持している前記既存エントリの数を、前記ブロックが保持できる前記エントリの最大数で除した値を保証使用率とした場合、任意の前記階層である第１の階層の前記分割手段が使用する分割方法の前記保証使用率は、前記第１の階層より下位に位置する第２の階層の前記分割手段が使用する前記分割方法の前記保証使用率以上となるように設定する手段として機能させるためのプログラムが提供される。
【発明の効果】
【００１７】
本発明によれば、階層構造を持つデータにおいて、検索速度および更新速度を共に最適化することができる。
【図面の簡単な説明】
【００１８】
上述した目的、およびその他の目的、特徴および利点は、以下に述べる好適な実施の形態、およびそれに付随する以下の図面によってさらに明らかになる。【００１９】
【図１】本発明の第１の実施形態に係るデータ管理装置の構成を示すブロック図である。
【図２】本発明の第２の実施形態における対象ブロックと隣接ブロックの関係を示す図である。
【図３】本発明の第２の実施形態における探索処理の流れを示すフローチャートである。
【図４】本発明の第２の実施形態における挿入処理の流れを示すフローチャートである。
【図５】本発明の第２の実施形態における分割処理の流れを示すフローチャートである。
【図６】本発明の第３の実施形態に係るデータ管理装置の構成を示すブロック図である。
【図７】本発明の第３の実施形態における分割処理の流れを示すフローチャートである。
【図８】隣接ブロックの距離に応じた分割閾値の補正がない場合におけるエントリの遷移の例を示す図である。
【図９】隣接ブロックの距離に応じた分割閾値の補正がある場合におけるエントリの遷移の例を示す図である。
【図１０】本発明の第４の実施形態に係るデータ管理装置の構成を示すブロック図である。
【図１１】本発明の第４の実施形態における挿入処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００２０】
以下、本発明の実施の形態について、図面を用いて説明する。尚、すべての図面において、同様な構成要素には同様の符号を付し、適宜説明を省略する。
【００２１】
（第１の実施形態）
図１は、本発明の第１の実施形態に係るデータ管理装置の構成を示すブロック図である。データ管理装置１０は、管理手段１０２と分割手段１０４を有する。
【００２２】
管理手段１０２は、ブロック単位のエントリをツリー状の階層構造で管理し、図示しない探索手段および挿入手段により、ブロックに保持されたエントリの探索およびブロックへの新たなエントリ（以下、新規エントリとする。）の挿入を行う。管理手段１０２の探索手段は、新規エントリのキーの値に基づいて、新規エントリの挿入対象である対象ブロックを特定する。管理手段１０２の挿入手段は、新規エントリのキーの値に基づいて、対象ブロックの所定の箇所に新規エントリを挿入する。また、管理手段１０２の挿入手段は、新規エントリを挿入する際に処理対象とする対象ブロックの使用率が、分割するか否かを決める一定の閾値（以下、分割閾値とする。）以上であるか判定し、その判定結果に基づいてブロックを分割する旨の命令を分割手段１０４に送信する。
【００２３】
分割手段１０４は、ブロックを分割する旨の命令に基づき対象ブロックを分割する。また、分割手段１０４は階層毎に設けられており、上位階層に位置する分割手段１０４が使用する分割方法の保証使用率は、下位階層に位置する分割手段１０４が使用する分割方法が使用する保証使用率以上である。分割手段１０４は、対象ブロックに既に挿入されているエントリ（以下、既存エントリとする。）を、対象ブロックと新規ブロックの間で分割する。
【００２４】
なお、各図に示したデータ管理装置の各構成要素は、ハードウエア単位の構成ではなく、機能単位のブロックを示している。各構成要素は、任意のコンピュータのＣＰＵ、メモリ、メモリにロードされた本図の構成要素を実現するプログラム、そのプログラムを格納するハードディスクなどの記憶メディア、ネットワーク接続用インタフェースを中心にハードウエアとソフトウエアの任意の組合せによって実現される。そして、その実現方法、装置には様々な変形例がある。
【００２５】
ここで、保証使用率が高い分割方法は、保証使用率が低い分割方法と比較して、新規ブロックを追加する頻度が低くなるため、検索速度が向上する。一方で、保証使用率が高い分割方法は、保証使用率が低い分割方法と比較して、ブロックの分割処理が複雑化するため、更新速度が遅くなる。また、一般的に、最上位の階層のブロック（ルートブロック）ほど更新頻度が低く、検索処理がメインとなる。また、最下位の階層のブロック（リーフブロック）ほど更新頻度が高く、更新処理がメインとなる。
【００２６】
本実施形態において、データ管理装置１０内のレベル１およびレベル２の分割手段１０４が使用する分割方法の保証使用率は、レベル３の分割手段１０４が使用する分割方法の保証使用率に比べて高い。例えば、レベル１およびレベル２の分割手段１０４が使用する分割方法は、Ｂ＊ツリーの分割アルゴリズムであり、レベル３の分割手段１０４が使用する分割方法は、Ｂ＋ツリーの分割アルゴリズムなどとすることができる。
【００２７】
Ｂ＊ツリーの分割アルゴリズムでは、対象ブロックの使用率と、対象ブロックに隣接する隣接ブロックの使用率が共に１００％のときに、新規ブロックが追加される。そして、既存エントリが、対象ブロック、隣接ブロックおよび新規ブロックの間で分割される。そして、新規エントリが、そのキーの値に基づいて、いずれかのブロックの所定の位置に挿入される。Ｂ＊ツリーの分割アルゴリズムでは、使用率が１００％である２つのブロックを、３つのブロックに分割しているため、Ｂ＊ツリーの保証使用率は約６７％となる。
【００２８】
Ｂ＋ツリーの分割アルゴリズムでは、対象ブロックの使用率が１００％の時に、新規ブロックが追加される。そして、既存エントリが、対象ブロックおよび新規ブロックの間で分割される。そして、新規エントリが、そのキーの値に基づいて、いずれかのブロックの所定の位置に挿入される。Ｂ＋ツリーの分割アルゴリズムでは、使用率が１００％の１つブロックを、２つのブロックに分割しているため、Ｂ＋ツリーの保証使用率は約５０％となる。
【００２９】
なお、階層毎の分割手段１０４がどの分割方法を使用するかについては、階層毎のデータの更新頻度に基づき決定することができる。データの更新頻度は、例えばブロックへのアクセス回数と分割発生回数を階層毎に記憶しておくなどして、当該回数に基づき算出してもよい。データ更新頻度に基づき、データ更新頻度が一定の閾値以上である階層よりも上位に位置する階層では、保証使用率が高い分割方法を選択し、データの更新頻度が一定の閾値以上である階層以下に位置する階層では、保証使用率が低い分割方法を選択することができる。
【００３０】
以上、本実施形態で、上位の階層ほど、分割手段１０４が保証使用率の高い分割方法を使用し、また、下位の階層ほど、分割手段１０４が保証使用率の低い分割方法を使用する構成を取る。本構成によれば、階層構造全体で１つの分割方法を用いる場合と比較して、検索処理がメインとなる上位階層で検索速度を向上させ、更新処理がメインとなる下位階層で更新速度を向上させることができる。従って、本構成によれば、階層構造全体で１つの分割方法を用いる場合よりも検索速度および更新速度を最適化でき、装置全体の処理速度を向上させることができる。
【００３１】
（第２の実施形態）
本実施形態では、以下の点を除き、第１の実施形態と同様である。
【００３２】
本実施形態では、レベルｋの階層の分割手段１０４は、図２に示すように、隣接ブロックをｋ−１個として分割処理を行う。この隣接ブロックは、対象ブロックと同一の階層に位置する。また、この隣接ブロックは、対象ブロックにおける最大のキー値よりも大きいキー値を有するエントリを保持するブロックの中で、キー値が最小であるエントリを保持するブロックを起点とし、当該起点となるブロックから数えてｋ−１個のブロックとして定義される。また、ツリー構造における対象ブロックの位置により、隣接ブロックがｋ−１個分確保できない場合は、確保できる分のブロックが隣接ブロックとなる。そのため、例えば、対象ブロックが同一階層においてキー値が最大のエントリを保持するブロックである場合、隣接ブロックの個数は０個となる。
【００３３】
本実施形態におけるデータの更新処理の流れを、図３〜５を用いて説明する。更新処理は、データを挿入するブロックを特定する探索処理、探索処理で特定したブロックにデータを挿入する挿入処理を含む。挿入処理は、データ挿入時にブロックの空き領域が十分でない場合、ブロックを分割する分割処理をさらに含む。
【００３４】
まず、探索処理の流れについて説明する。
【００３５】
図３は、探索処理の流れを示すフローチャートである。管理手段１０２の探索手段は、探索対象とする階層を判断する基準として、カウンタｋを用いる。まず、管理手段１０２の探索手段は、カウンタｋに最上位階層を探索対象の階層を示す値を設定する（Ｓ１０２）。例えば、レベルｈまでの階層であった場合、管理手段１０２の探索手段は、カウンタｋ＝ｈと設定する。最上位階層ではブロックは１つであるため、管理手段１０２の探索手段は、当該ブロックが保持している既存エントリの中から、新規エントリのキー値以下で最大のキー値を持つエントリを特定する。そして、管理手段１０２の探索手段は、特定されたエントリに含まれるポインタを取得する（Ｓ１０４）。次に、管理手段１０２の探索手段は、現在探索したブロックが位置する階層が最下層（リーフブロック）の１つ上の階層であるか判定する。管理手段１０２の探索手段は、カウンタｋ＝２の時、次の階層がリーフブロックであると判断できる。次の階層がリーフブロックでない場合（Ｓ１０６のＮＯ）、管理手段１０２の探索手段は、カウンタｋをデクリメントして、探索対象の階層を１つ下げる（Ｓ１０８）。そして、管理手段１０２の探索手段は、Ｓ１０４で取得したポインタに基づいて次の階層で探索対象とするブロックを特定し（Ｓ１１０）、特定したブロックについてＳ１０４からの処理を再度実行する。Ｓ１０６において、次の階層がリーフブロックである場合（Ｓ１０６のＹＥＳ）、管理手段１０２の探索手段は、Ｓ１０４で取得したポインタに基づき、新規エントリの挿入対象とするブロック（対象ブロック）を特定する（Ｓ１１２）。ここで、管理手段１０２は、ルートブロックから対象ブロックまでの経路を記憶手段（不図示）で記憶しておく。
【００３６】
以上が、探索処理の流れである。
【００３７】
次に、挿入処理の流れについて説明する。
【００３８】
図４は、挿入処理の流れを示すフローチャートである。まず、管理手段１０２の挿入手段は、探索処理で特定した対象ブロックに新規エントリを挿入できるか、対象ブロックの使用率と分割閾値とを比較して判定する（Ｓ２０２）。対象ブロックの使用率が分割閾値未満であった場合（Ｓ２０２のＮＯ）、対象ブロックを分割する必要はない。よって、管理手段１０２の挿入手段は、分割処理を実行せず、対象ブロックのエントリを更新する（Ｓ２１２）。具体的には、管理手段１０２の挿入手段は、当該対象ブロックの既存エントリのキー値と新規エントリのキー値とに基づいて、当該新規エントリの挿入位置を特定する。そして、管理手段１０２の挿入手段は、対象ブロックで特定された位置に新規エントリ挿入する。一方、対象ブロックの使用率が分割閾値以上であった場合（Ｓ２０２のＹＥＳ）、対象ブロックを分割する必要がある。よって、管理手段１０２の挿入手段は、分割手段１０４に対して、分割処理を行う旨の命令を送信する（Ｓ２０４）。以下で分割処理の流れについて説明する。
【００３９】
図５は、分割処理の流れを示すフローチャートである。分割手段１０４は、隣接ブロックを判断する基準として、カウンタｉを用いる。まず、管理手段１０２の挿入手段は、カウンタｉを１で初期化する（Ｓ３０２）。次に、管理手段１０２の挿入手段は、使用率を判定していない隣接ブロックが存在するか否か判定する。使用率を判定していない隣接ブロックが存在した場合（Ｓ３０４のＹＥＳ）、管理手段１０２の挿入手段は、カウンタｉによって示される隣接ブロック（第ｉ隣接ブロック）の使用率が分割閾値以上か否かを判定する。
【００４０】
判定の結果、Ｓ３０６で第ｉ隣接ブロックの使用率が分割閾値未満であった場合（Ｓ３０６のＮＯ）、管理手段１０２の挿入手段は、分割手段１０４に既存エントリを分割する旨の命令を送信する。分割手段１０４は、命令を受信するとｉ＋１分位値を算出する（Ｓ３１２）。ここで、ｉ＋１分位値とは、対象ブロックから第ｉ隣接ブロックまでのｉ＋１個のブロックの間で既存エントリを分割する際の基準値である。ｉ＋１分位値は、例えば、対象ブロックから第ｉ隣接ブロックの既存エントリの総数をｉ＋１等分するなどして求めることができる。
【００４１】
次に、分割手段１０４は、求めたｉ＋１分位値に基づき、既存エントリを各ブロックの間で分割する（Ｓ３１４）。そして、管理手段１０２の挿入手段は、分割された既存エントリが保持するキー値に基づき、新規エントリを挿入する位置を特定し、新規エントリを挿入する（Ｓ３１６）。ここで、下位階層の各ブロックの間におけるエントリの分割に伴い、上位階層のエントリの値を更新する必要が生じる可能性があるため、分割処理の対象となったブロック毎に、最小のキー値を持つエントリを取得する（Ｓ３１８）。また、Ｓ３１８で取得された各エントリは、以降の処理で、上位階層のブロックのエントリを更新する際に使用される。
【００４２】
一方、Ｓ３０６の判定の結果、第ｉ隣接ブロックの使用率が分割閾値以上であった場合（Ｓ３０６のＹＥＳ）、管理手段１０２の挿入手段は、次の隣接ブロックを対象とするため、カウンタｉをインクリメントし（Ｓ３０８）、Ｓ３０４の処理を再度実行する。
【００４３】
ここで、Ｓ３０４において、使用率を判定していない隣接ブロックが存在しない場合（Ｓ３０４のＮＯ）は、第１隣接ブロックから第ｋ−１隣接ブロックまでの使用率が分割閾値以上であることを示す。従って、管理手段１０２の挿入手段は、新規エントリを挿入する領域を確保するため、分割手段１０４にブロック分割処理を行う旨の命令を送信する。分割手段１０４は、当該命令を受信後、第ｋ−１隣接ブロックの後ろに新規ブロックを追加する（Ｓ３１０）。以降の処理は、新規ブロックを追加しない場合と同様であり、対象ブロックから新規ブロックまでの間で既存エントリを分割し、新規エントリを挿入する。
【００４４】
以上が、分割処理の流れである。
【００４５】
図４に戻り、下位階層で分割処理を実行した場合、上位階層のブロックが保持するエントリを新たなキー値で更新する必要があるため、上位階層が存在するか否かを判定する。上位階層が存在する場合（Ｓ２０６のＹＥＳ）、カウンタｋをインクリメントして処理対象の階層を１つ上げる（Ｓ２０８）。そして、探索処理において保持していた経路に従い、１つ上の階層で処理対象とするブロックを特定する。ここで、下位階層で新規ブロックが追加された場合、上位階層に位置するブロックがさらに分割される可能性がある。そこで、管理手段１０２の挿入手段は、Ｓ２０４の分割処理で新規ブロックが追加されたか否かを判定する（Ｓ２１４）。これは、例えば新規ブロックが追加されたことを示すフラグなどを用いて判定できる。下位階層で新規ブロックが追加されなかった場合（Ｓ２１４のＮＯ）、上位階層のブロックが分割される可能性はない。よって、管理手段１０２の挿入手段は、特定されたブロックのエントリのうち、下位階層で分割処理の対象となったブロックを示すエントリを、Ｓ３１８で取得されたエントリを用いて更新する（Ｓ２１２）。一方、下位階層で新規ブロックが追加された場合（Ｓ２１４のＹＥＳ）、上位階層のブロックが分割される可能性がある。よって、管理手段１０２の挿入手段は、特定されたブロックの使用率が分割閾値以上か判断する（Ｓ２０２）。上位階層の対象ブロックの使用率が分割閾値未満である場合（Ｓ２０２のＮＯ）、分割処理を実行する必要はない。よって管理手段１０２の挿入手段は、特定されたブロックのエントリのうち、下位階層で分割処理の対象となったブロックを示すエントリを、Ｓ３１８で取得されたエントリを用いて更新する（Ｓ２１２）。なお、上位階層でさらに分割処理を行う場合については、下位階層で実行した処理の繰り返しとなるため、その説明は省略する。
【００４６】
一方、Ｓ２０６において、上位階層が存在しない場合（Ｓ２０６のＮＯ）は、ルートブロックで分割処理が行われたこととなるため、管理手段１０２の挿入手段は、新たにルートブロックを作成する（Ｓ２１０）。管理手段１０２の挿入手段は、旧ルートブロックの分割処理のＳ３１８で取得されたエントリを、新たに作成したルートブロックに挿入する。
【００４７】
以上が、本実施形態におけるデータの更新処理の流れである。
【００４８】
本実施形態で分割が発生する際、最も下位に位置する階層（レベル１）では、対象ブロックのみを分割するため、分割アルゴリズムはＢ＋ツリーと等価である。そのため、レベル１の階層の分割方法の保証使用率は約５０％となる。同様にレベル２の階層では、対象ブロックと第１隣接ブロックの２ブロックを分割するため、Ｂ＊ツリーと等価の分割アルゴリズムとなり保証使用率は約６７％となる。同様に、レベル３では約７５％、レベル４では約８０％と、上位階層ほど保証使用率が高くなる。
【００４９】
以上、本実施形態においても、上位階層ほど分割手段１０４が使用する分割方法の保証使用率が高く、下位階層ほど分割手段１０４が使用する分割方法の保証使用率低い構成を取るため、第１の実施形態と同様の効果を得ることができる。また、本実施形態では、階層が上がるほど保証使用率を高くなる構成を取る。本構成により、一定の更新頻度を持つ階層で分割手段１０４が使用する分割方法を分ける構成よりも、柔軟に保証使用率を変化させることができ、処理速度を向上させることができる。
【００５０】
（第３の実施形態）
本実施形態は、以下の点を除き、第２の実施形態と同様である。
【００５１】
図６は、本発明の第３の実施形態に係るデータ管理装置の構成を示すブロック図である。本実施形態で、データ管理装置１０は、隣接ブロック毎に分割閾値を定める第１補正手段１０６をさらに有する。
【００５２】
図７は、本発明の第３の実施形態における分割処理の流れを示すフローチャートである。第１補正手段１０６は、対象ブロックと隣接ブロックとの距離に応じて、分割閾値を定める（Ｓ４０２）。第１補正手段１０６は、対象ブロックから距離がある隣接ブロックほど分割閾値が小さくなるように定める。例えば、隣接ブロックを判断するカウンタｉを用いて、分割閾値を「１００−ｃ×ｉ％（ｃは任意定数）」などとすることができる。これにより、隣接ブロック毎にブロックの分割が発生する条件を調整できる。
【００５３】
また、分割手段１０４は、各ブロックの間で既存エントリを分割する前に、各隣接ブロックの分割閾値に基づき、既存エントリの分割位置を算出する（Ｓ４０４）。例えば、分割手段１０４は、基本はｉ＋１分位置に基づいて既存エントリを各ブロックの間で分割する。ここでｉ＋１分位置に基づいて分割しようとした際、あるブロックの分割閾値を超えてしまう場合、分割手段１０４は、分割閾値が大きいブロックのほうに多くの既存エントリを割り当て、各ブロックが分割閾値を超えないように調整する。
【００５４】
図８は、隣接ブロックの距離に応じた分割閾値の補正がない場合におけるエントリの遷移の例を示す図である。また、図９は、隣接ブロックの距離に応じた分割閾値の補正がある場合におけるエントリの遷移の例を示す図である。なお、これらの例では、説明の便宜上、１ブロックの最大エントリ数が３６、保証使用率は２／３、一番左のブロックにのみ新規エントリの挿入が発生する場合として説明する。
【００５５】
図８に示すとおり、隣接ブロックの距離に応じた分割閾値の補正がない場合、あるブロックの追加処理が発生してから次のブロックの追加処理が発生するまで、６回の分割処理を呼び出す。一方、図９に示すとおり、隣接ブロックの距離に応じた分割閾値の補正がある場合、あるブロックの追加処理が発生してから次のブロックの追加処理が発生するまで、５回の分割処理を呼び出す。
【００５６】
以上、本実施形態においても、上位階層の分割手段１０４が使用する分割方法ほど保証使用率が高く、下位階層の分割手段１０４が使用する分割方法ほど保証使用率低い構成を取るため、第１、２の実施形態と同様の効果を得ることができる。本実施形態では、対象ブロックと隣接ブロックの距離に応じて、分割閾値を定める構成を取る。本構成により、一定の分割閾値を使用する場合と比較し、同一の保証使用率において分割処理の呼出回数を抑えることができる。そのため、一定の分割閾値を使用する場合と比較し、更新処理を高速化できる。また、本構成により、比較的少数のブロック間における、比較的軽量なブロック分割処理を省略しないようにできる。そのため、保証使用率の低下を抑制し、検索処理の速度低下を抑制することができる。
【００５７】
（第４の実施形態）
本実施形態は、以下の点を除き、第３の実施形態と同様である。
【００５８】
図１０は本発明の第４の実施形態に係るデータ管理装置の構成を示すブロック図である。本実施形態では、データ管理装置１０は、階層毎に分割閾値を定める第２補正手段１０８をさらに有する。
【００５９】
図１１は、本発明の第４の実施形態における挿入処理の流れを示すフローチャートである。第２補正手段１０８は、処理対象の階層に応じて分割閾値を定める（Ｓ５０２）。第２補正手段１０８は、更新頻度の高い下位階層に行くほど分割閾値が小さくなるように定める。例えば、階層を判断するカウンタｋを用いて、分割閾値を「１００−ｃ×（１０−ｋ）％（ｃは任意定数、ｋが１０以上の時はｋ＝１０とみなす。）」などとすることができる。これにより、階層毎にブロックの分割が発生する条件を調整できるようになり、各階層の更新頻度に合わせて、各階層の保証使用率を調整することができる。
【００６０】
以上、本実施形態においても、第１〜第３の実施形態と同様の効果を得ることができる。また、本実施形態では、階層毎に分割閾値を定める構成を取る。本構成により、階層毎の更新頻度に合わせて、柔軟に保証使用率を最適化することができる。よって、全階層で同一の分割閾値を使用する場合と比較して、処理速度を向上させることができる。なお、本実施形態において、階層毎の分割手段１０４が使用する分割方法は、第２の実施形態で記載した分割方法以外であっても、上位階層の分割手段１０４が使用する分割方法の保証使用率が下位階層の分割手段１０４が使用する分割方法の保証使用率以上となればよい。また、本実施形態において、第３の実施形態に記載した第１補正手段１０６がなくても、本実施形態の効果を得ることができる。
【００６１】
なお、上述した実施形態によれば以下の発明が開示されている。
（付記１）
ブロック単位のエントリをツリー状の階層構造で管理する管理手段と、
階層毎に設けられ、新規エントリを挿入する際に前記ブロックの使用率が一定の分割閾値以上である場合、新規ブロックを追加して、前記ブロックが保持する既存エントリを、前記ブロックと前記新規ブロックとの間で分割する分割手段とを有し、
前記分割を実施した直後に前記ブロックが保持している前記既存エントリの数を、前記ブロックが保持できる前記エントリの最大数で除した値を保証使用率とした場合、任意の前記階層である第１の階層の前記分割手段が使用する分割方法の前記保証使用率は、前記第１の階層より下位に位置する第２の階層の前記分割手段が使用する前記分割方法の前記保証使用率以上であるデータ管理装置。
（付記２）
付記１に記載のデータ管理装置において、
前記階層毎に、前記エントリの更新頻度を保持し、
前記分割手段が使用する前記分割方法は、
一定の閾値以上の前記更新頻度を持つ前記階層より上位に位置する階層では、Ｂ＊ツリーの分割アルゴリズムであり、一定の閾値以上の前記更新頻度を持つ前記階層以下に位置する階層では、Ｂ＋ツリーの分割アルゴリズムであるデータ管理装置。
（付記３）
付記１に記載のデータ管理装置において、
レベルｋ（ｋ≧１）の階層において前記分割手段は、
前記新規エントリの挿入対象とする前記ブロックを対象ブロックとし、前記対象ブロックと同一の前記階層に位置し、前記対象ブロックにおける最大のキー値よりも大きいキー値を有するエントリを保持する前記ブロックの中で、前記キー値が最小のエントリを保持する前記ブロックを起点として、当該起点となるブロックから数えてｋ−１個の前記ブロックを隣接ブロックとした場合、前記対象ブロックと前記隣接ブロックの全てにおいて前記使用率が前記分割閾値以上であった時に、前記新規ブロックを追加して、前記対象ブロックから前記隣接ブロックにある全ての前記既存エントリを、前記対象ブロック、前記隣接ブロックおよび前記新規ブロックの間で分割し、
前記対象ブロックまたは前記隣接ブロックのうち、いずれかの前記使用率が前記分割閾値未満であった時に、前記新規ブロックを追加せず、前記対象ブロックから前記使用率を判定した前記隣接ブロックまでにある前記既存エントリを、前記対象ブロックから前記使用率を判定した前記隣接ブロックの間で分割するデータ管理装置。
（付記４）
付記３に記載のデータ管理装置において、
処理対象とする前記ブロックである対象ブロックからの距離に応じて、前記分割閾値を定める第１閾値補正手段をさらに有するデータ管理装置。
（付記５）
付記１〜４のいずれか一つに記載のデータ管理装置において、
前記階層毎に前記分割閾値を定める第２閾値補正手段をさらに有するデータ管理装置。
（付記６）
コンピュータが、
ブロック単位のエントリを、ツリー状の階層構造で管理し、
新規エントリを挿入する際に前記ブロックの使用率が一定の分割閾値以上である場合、階層毎に設けられた分割手段を用いて、新規ブロックを追加して、前記ブロックが保持する既存エントリを、前記ブロックと前記新規ブロックとの間で分割し、
前記分割を実施した直後に前記ブロックが保持している前記既存エントリの数を、前記ブロックが保持できる前記エントリの最大数で除した値を保証使用率とした場合、任意の前記階層である第１の階層の前記分割手段が使用する分割方法の前記保証使用率は、前記第１の階層より下位に位置する第２の階層の前記分割手段が使用する前記分割方法の前記保証使用率以上となるように設定するデータ管理方法。
（付記７）
コンピュータを、
ブロック単位のエントリを、ツリー状の階層構造で管理する手段、
新規エントリを挿入する際に前記ブロックの使用率が一定の分割閾値以上である場合、階層毎に設けられた分割手段を用いて、新規ブロックを追加して、前記ブロックが保持する既存エントリを、前記ブロックと前記新規ブロックとの間で分割する手段、
前記分割を実施した直後に前記ブロックが保持している前記既存エントリの数を、前記ブロックが保持できる前記エントリの最大数で除した値を保証使用率とした場合、任意の前記階層である第１の階層の前記分割手段が使用する分割方法の前記保証使用率は、前記第１の階層より下位に位置する第２の階層の前記分割手段が使用する前記分割方法の前記保証使用率以上となるように設定する手段として機能させるためのプログラム。
（付記８）
付記６に記載のデータ管理方法において、
前記コンピュータが、
前記階層毎に、前記エントリの更新頻度を保持し、
前記分割手段が使用する前記分割方法を用いて、
一定の閾値以上の前記更新頻度を持つ前記階層より上位に位置する階層では、Ｂ＊ツリーの分割アルゴリズムであり、一定の閾値以上の前記更新頻度を持つ前記階層以下に位置する階層では、Ｂ＋ツリーの分割アルゴリズムであるデータ管理方法。
（付記９）
付記６に記載のデータ管理方法において、
前記コンピュータが、
レベルｋ（ｋ≧１）の階層において前記分割手段を用いて、
前記新規エントリの挿入対象とする前記ブロックを対象ブロックとし、前記対象ブロックと同一の前記階層に位置し、前記対象ブロックにおける最大のキー値よりも大きいキー値を有するエントリを保持する前記ブロックの中で、前記キー値が最小のエントリを保持する前記ブロックを起点として、当該起点となるブロックから数えてｋ−１個の前記ブロックを隣接ブロックとした場合、前記対象ブロックと前記隣接ブロックの全てにおいて前記使用率が前記分割閾値以上であった時に、前記新規ブロックを追加して、前記対象ブロックから前記隣接ブロックにある全ての前記既存エントリを、前記対象ブロック、前記隣接ブロックおよび前記新規ブロックの間で分割し、
前記対象ブロックまたは前記隣接ブロックのうち、いずれかの前記使用率が前記分割閾値未満であった時に、前記新規ブロックを追加せず、前記対象ブロックから前記使用率を判定した前記隣接ブロックまでにある前記既存エントリを、前記対象ブロックから前記使用率を判定した前記隣接ブロックの間で分割するデータ管理方法。
（付記１０）
付記９に記載のデータ管理方法において、
前記コンピュータが、
処理対象とする前記ブロックである対象ブロックからの距離に応じて、前記分割閾値を定めるデータ管理方法。
（付記１１）
付記６、８〜１０のいずれか一つに記載のデータ管理方法において、
前記コンピュータが、
前記階層毎に前記分割閾値を定めるデータ管理方法。
（付記１２）
付記７に記載のプログラムにおいて、
前記コンピュータを、
前記階層毎に、前記エントリの更新頻度を保持する手段、
前記分割手段が使用する前記分割方法を、
一定の閾値以上の前記更新頻度を持つ前記階層より上位に位置する階層では、Ｂ＊ツリーの分割アルゴリズムであり、一定の閾値以上の前記更新頻度を持つ前記階層以下に位置する階層では、Ｂ＋ツリーの分割アルゴリズムとして設定する手段として機能させるためのプログラム。
（付記１３）
付記７に記載のプログラムにおいて、
前記コンピュータを、
レベルｋ（ｋ≧１）の階層における前記分割手段を用いて、
前記新規エントリの挿入対象とする前記ブロックを対象ブロックとし、前記対象ブロックと同一の前記階層に位置し、前記対象ブロックにおける最大のキー値よりも大きいキー値を有するエントリを保持する前記ブロックの中で、前記キー値が最小のエントリを保持する前記ブロックを起点として、当該起点となるブロックから数えてｋ−１個の前記ブロックを隣接ブロックとした場合、前記対象ブロックと前記隣接ブロックの全てにおいて前記使用率が前記分割閾値以上であった時に、前記新規ブロックを追加して、前記対象ブロックから前記隣接ブロックにある全ての前記既存エントリを、前記対象ブロック、前記隣接ブロックおよび前記新規ブロックの間で分割し、
前記対象ブロックまたは前記隣接ブロックのうち、いずれかの前記使用率が前記分割閾値未満であった時に、前記新規ブロックを追加せず、前記対象ブロックから前記使用率を判定した前記隣接ブロックまでにある前記既存エントリを、前記対象ブロックから前記使用率を判定した前記隣接ブロックの間で分割する手段として機能させるためのプログラム。
（付記１４）
付記１３に記載のプログラムにおいて、
前記コンピュータを、
処理対象とする前記ブロックである対象ブロックからの距離に応じて、前記分割閾値を定める手段としてさらに機能させるためのプログラム。
（付記１５）
付記７、１２〜１４のいずれか一つに記載のプログラムにおいて、
前記コンピュータを、
前記階層毎に前記分割閾値を定める手段としてさらに機能させるためのプログラム。
【００６２】
以上、図面を参照して本発明の実施形態について述べたが、これらは本発明の例示であり、上記以外の様々な構成を採用することもできる。例えば、各実施形態において、説明の便宜上、データの構造は３層構造としたが、それ以外の階層数を持つ構成であってもよい。
【００６３】
また、上述の説明で用いた複数のフローチャートでは、複数の工程（処理）が順番に記載されているが、各実施形態で実行される工程の実行順序は、その記載の順番に制限されない。各実施形態では、図示される工程の順番を内容的に支障のない範囲で変更することができる。また、上述の各実施形態は、内容が相反しない範囲で組み合わせることができる。
【００６４】
この出願は、２０１２年３月２日に出願された日本出願特願２０１２−４６０８９号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
2013128788.tif 000003
【図２】
2013128788.tif 000004
【図３】
2013128788.tif 000005
【図４】
2013128788.tif 000006
【図５】
2013128788.tif 000007
【図６】
2013128788.tif 000008
【図７】
2013128788.tif 000009
【図８】
2013128788.tif 000010
【図９】
2013128788.tif 000011
【図１０】
2013128788.tif 000012
【図１１】
2013128788.tif 000013
【国際調査報告】
2013128788.tif 000014
2013128788.tif 000015
2013128788.tif 000016
2013128788.tif 000017