JP2008065716A - データ管理装置、データ管理方法及びデータ管理プログラム - Google Patents
データ管理装置、データ管理方法及びデータ管理プログラム Download PDFInfo
- Publication number
- JP2008065716A JP2008065716A JP2006244843A JP2006244843A JP2008065716A JP 2008065716 A JP2008065716 A JP 2008065716A JP 2006244843 A JP2006244843 A JP 2006244843A JP 2006244843 A JP2006244843 A JP 2006244843A JP 2008065716 A JP2008065716 A JP 2008065716A
- Authority
- JP
- Japan
- Prior art keywords
- node
- data
- data management
- nodes
- stack
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
【課題】ノードの平均使用率を向上させ、且つ、より高速に処理を行うデータ管理装置、データ管理方法及びデータ管理プログラムを提供することを目的とする。
【解決手段】B+ツリーデータ構造であって、各ノードが左右の隣り合うノードのリンクを保持し、各子ノードの最小のキーとリンクデータが前記各子ノードの親ノードのエントリであるB+ツリーデータ構造を有するデータのデータ管理装置1であって、データを管理するデータ管理手段21と、ノード情報の格納を行うスタック22と、を有し、当該データ管理装置1においてデータの挿入を行う場合、前記スタック22は、前記データの挿入先ノードを検索する際に辿ったノード順にノード情報を格納し、前記データ管理手段21は、前記挿入先ノードに空き領域がないとき、前記挿入先ノードと該挿入先ノードの左ノードとの間に新しいノードを生成してノード分割を行い、前記スタック22により格納されたノードに係る情報に基づいて親ノードのエントリを更新することを特徴とするデータ管理装置1。
【選択図】図2
【解決手段】B+ツリーデータ構造であって、各ノードが左右の隣り合うノードのリンクを保持し、各子ノードの最小のキーとリンクデータが前記各子ノードの親ノードのエントリであるB+ツリーデータ構造を有するデータのデータ管理装置1であって、データを管理するデータ管理手段21と、ノード情報の格納を行うスタック22と、を有し、当該データ管理装置1においてデータの挿入を行う場合、前記スタック22は、前記データの挿入先ノードを検索する際に辿ったノード順にノード情報を格納し、前記データ管理手段21は、前記挿入先ノードに空き領域がないとき、前記挿入先ノードと該挿入先ノードの左ノードとの間に新しいノードを生成してノード分割を行い、前記スタック22により格納されたノードに係る情報に基づいて親ノードのエントリを更新することを特徴とするデータ管理装置1。
【選択図】図2
Description
本発明は、B+ツリーデータ構造のデータの管理を行うデータ管理装置、データ管理方法及びデータ管理プログラムに関する。
従来、Bツリーと呼ばれる、コンピュータ等においてデータを順序付けて格納するために使われる、コンピュータアルゴリズムがある。これは、与えられたデータをそのキー(インデックス、索引)の順番に並べ替えて格納したり、与えられたキーに基づいてデータを取り出したりする場合に使われるアルゴリズムである。リレーショナルデータベースにおける索引付けや、ファイルシステムにおけるファイル名の管理等で一般的に使われている。
また、B+ツリーと呼ばれる、Bツリーの改良版も開発されている。Bツリーでは、各ノードにはキーとデータの組か、他のノードへのリンクのいずれかが格納されていた。B+ツリーでは、リーフノード(ツリーのいちばん下にある、子ノードを持たないノード)にのみデータを格納するようにしている。このため、キー順にデータを次々と取り出すような処理(データベースにおける全件ピックアップなど)では、リーフノードのみを順番にアクセスすればよい。なお、キーとデータの組み合わせ、或いは、キーと他のノードへのリンクの組み合わせを以降、エントリとよぶ。
Bツリー及びB+ツリーのデータ構造は、バランス多分木構造である。これは、ハードディスク等の2次記憶装置に大量のデータを記憶し、検索するのに適している。2次記憶装置は、主記憶装置に比べて非常に低速である。また、2次記憶装置の特性として、アクセスの回数が同じならば、少量のデータを読み書きするのも、ある程度まとまった量のデータを読み書きするのも大して時間は変わらないことがある。これは、2次記憶装置へのアクセスはディスクブロック等に基づいた或るまとまった単位(ページ)で行われるからである。
このことから、アクセス(読み出し)回数を減らすことが、重要なポイントになる。例えば、オーダー200(1ページに200個のエントリが格納できる)のB+ツリーに100万件のデータが記憶されている場合、100×100×100=100万で、3ページ分の2次記憶装置の参照で済む。なお、正確には、ヘッダー情報が格納されたページがあるので、4ページである。
従来のB+ツリーのデータ構造は、図1に示される。図1は、従来のB+ツリーのデータ構造の例を示す図である。図1において、ヘッダー情報には、後述のルートノードのページID(ここでは、各ノードを一意に定める番号。例えば、ファイル上に実装されている場合には、ファイル内のオフセット値等である)、左端のリーフノードのページID及び右端のリーフノードのページIDが格納されている。ルートノードは、B+ツリー構造の頂点をなすノードであり、下位のインデックスノードの先頭キー値とページIDが格納されている。インデックスノードは、検索のために存在するノードであり、リーフノード、又は下位のインデックスノードの先頭キー値とページIDが格納されている。リーフノードには、実データを格納するためのノードであり、キーとバリュー(格納した値)が格納されている。各ノードのエントリは、キーの昇順にソートされて格納されている。なお、登録件数が少ない場合は、ルートノードがリーフノードになる場合、及び/又は、インデックスノードがない場合等もある。
ここで、図1で示されるデータ構造にキー「いい」を登録する手順を説明する。まず、ヘッダー情報を参照し、ルートノードを得る。次に、ルートノードを探索し、子のインデックスノードを得る。キー「いい」を登録する場合、ページID10のインデックスノードが選択される(「いい」は、「あ行」であるため)。続いて、ページID10のインデックスノードを探索し、子のリーフノードを得る。ページID2のリーフノードが選択される(「いい」は「い」に含まれるため)。次にページID2のリーフノード内を探索し、キー「いい」はキー「い」とキー「いう」の間に登録される。
ここで、ページID2のリーフノードにキー「いい」のデータを登録する際に、リーフノードの容量が一杯である場合には、ノードの分割が行われる。ノードの分割は新しいノードを確保し、一杯になったノードのエントリの半分を新しいノードに移動し、一杯になったノードのエントリから新しいノードに移動したエントリを削除する。更に、新しいノードの先頭のキーと新しいノードのページIDの組を親ノードに挿入する。この方法では、ノードの使用率が50%になる場合もあり、平均ノード使用率が低下してしまう。平均ノード使用率が低下すると、前述のアクセス回数が増えてしまう問題がある。
そのため、平均ノード使用率を向上させるための種々の方法が提案されている。
例えば、ノードの分割が必要なときに、隣のノードも参照し、隣のノードも一杯な場合に、2つのノードを3分割する方法がある。また、隣のノードに空き領域がある場合、分割が必要なノードのデータのいくつかを隣のノードに移動する、再配分という方法もある。これにより、ノード使用率が66%以上になり、平均ノード使用率を高めることができる。また、或るノードにおいて、エントリを削除することによりノードの使用率が50%を割った場合に、隣のノードを参照し、隣のノードの使用率も50%未満の場合には、隣のノードのすべてのエントリを前述の或るノードに移動し、隣のノードを削除する、ノードマージという方法もある。隣のノードの使用率が50%を超えている場合には、同じ使用率になるように再配分する。
以上のような方法を用いて、ノードの平均使用率を高く保つことができ、その結果2次記憶装置へのアクセス回数を減らすことができる。
ところで、或るノードと、その隣のノードとは、同じ親ノードを持っているとは限らない。従来、前述のノード分割、再配分、又はノードマージを行うに当たり、隣のノードの先頭のエントリが変更された場合は、隣のノードの親ノードのエントリを更新する必要があるが、ルートノードから隣のノードの親ノードを検索しなおすことによりこれを行っていたため時間がかかるという問題があった。
そこで、子ノードにその親ノードのページIDを格納する方法が提案されている。これにより、隣のノードの親ノードを速く判定することが可能になり、上記問題を解決することができる。
特許文献1に開示された発明では、左リンクを利用して同時実行性を向上するシステムについての発明が開示されている。また、特許文献2に開示された発明では、ノードの子ノードの件数を保持し、検索時に件数がすぐ求められるようにしたシステムについての発明が開示されている。また、特許文献3に開示された発明では、B+ツリーの同時実行制御に関するシステムについての発明が開示されている。
特開2004―185617号公報
特開2003―288217号公報
特開昭63−191226号公報
しかしながら、ノード分割、再配分、又はノードマージを行うに当たり、移動したエントリに該当する子ノードの親ノードのページIDが格納されている部分をすべて更新しなければならないため時間がかかり非常に非効率であった。また、親ノードに相当するインデックスノードでは、2ページから3ページへのノード分割、再配分等を行わないことにより、この問題を解決することもできるが、インデックスノードの平均使用率が低下してしまう問題があった。
本発明は、上記の点に鑑みて、この問題を解消するために発明されたものであり、ノードの平均使用率を向上させ、且つ、より高速に処理を行うデータ管理装置、データ管理方法及びデータ管理プログラムを提供することを目的とする。
上記の目的を達成するために、本発明のデータ管理装置は、各ノードが左右の隣り合うノードのリンクを保持し、各子ノードの最小のキーとリンクデータが前記各子ノードの親ノードのエントリであるB+ツリーデータ構造を有するデータのデータ管理装置であって、データを管理するデータ管理手段と、ノード情報の格納を行うスタックと、を有し、当該データ管理装置においてデータの挿入を行う場合、前記スタックは、前記データの挿入先ノードを検索する際に辿ったノード順にノードに係る情報を格納し、前記データ管理手段は、前記挿入先ノードに空き領域がないとき、前記挿入先ノードと該挿入先ノードの左ノードとの間に新しいノードを生成してノード分割を行い、前記スタックにより格納されたノードに係る情報に基づいて親ノードのエントリを更新するように構成することができる。
これにより、ノードの平均使用率を向上させ、且つ、より高速に処理を行うことができる。また、ノード分割時に、左ノードと自ノード(例えばデータの挿入先ノード)の内容を左ノードと自ノードとの間に新ノードを確保し3分割することにより、左ノードの先頭エントリは変更されないので、左ノードの親ノードは変更する必要がなく、ノード分割時にアクセスするノードの数を減らすことができ、高速にデータの挿入が行える。
また、上記の目的を達成するために、本発明のデータ管理装置は、当該データ管理装置においてデータの挿入を行う場合、前記スタックは、前記データの挿入先ノードを検索する際に辿ったノード順にノードに係る情報を格納し、前記データ管理手段は、前記挿入先ノードに空き領域がないとき、前記挿入先ノードと該挿入先ノードの左ノードとの間でノード再配分を行い、前記スタックにより格納されたノードに係る情報に基づいて親ノードのエントリを更新するように構成することができる。
これにより、ノード再配分時に、より高速に処理を行うことができる。また、ノード再配分時に、左ノードと自ノード(例えばデータの挿入先ノード)の内容を再配分することにより、左ノードの先頭エントリは変更されないので、左ノードの親ノードは変更する必要がなく、ノードの再配分時にアクセスするノードの数を減らすことができ、高速にデータの挿入が行える。
また、上記の目的を達成するために、本発明のデータ管理装置は、当該データ管理装置においてデータの削除を行う場合、前記スタックは、前記データの削除元ノードを検索する際に辿ったノード順にノードに係る情報を格納し、前記データ管理手段は、前記削除元ノードと該削除元ノードの左ノードとの間でノード再配分を行うとき、前記スタックにより格納されたノードに係る情報に基づいて親ノードのエントリを更新するように構成することができる。
これにより、ノード再配分時に、より高速に処理を行うことができる。また、ノード再配分時に、左ノードと自ノード(例えばデータの削除元ノード)の内容を再配分することにより、左ノードの先頭エントリは変更されないので、左ノードの親ノードは変更する必要がなく、ノードの再配分時にアクセスするノードの数を減らすことができ、高速にデータの削除が行える。
また、上記の目的を達成するために、本発明のデータ管理装置は、当該データ管理装置においてデータの削除を行う場合、前記スタックは、前記データの削除元ノードを検索する際に辿ったノード順にノードに係る情報を格納し、前記データ管理手段は、前記削除元ノードと該削除元ノードの左ノードとの間でノードマージを行うとき、前記スタックにより格納されたノードに係る情報に基づいて親ノードのエントリを更新するように構成することができる。
これにより、ノードマージ時に、より高速に処理を行うことができる。また、ノードマージ時に、左ノードへ自ノード(例えば、データの削除を行うノード)の内容を移してマージすることにより、左ノードの先頭エントリは変更されないので、左ノードの親ノードは変更する必要がなく、ノードマージ時にアクセスするノードの数を減らすことができ、高速にデータの削除が行える。
また、上記の目的を達成するために、本発明のデータ管理装置は、前記B+ツリーデータ構造におけるルートノードへのリンクデータと、左端のリーフノードへのリンクデータと、右端のリーフノードへのリンクデータを保持するヘッダーノードを有するように構成することができる。
これにより、全件に対して逐次アクセスが可能なB+ツリーデータ構造に対しても、ノードの平均使用率を向上させ、且つ、より高速に処理を行うことができる。
また、上記の目的を達成するために、本発明の前記B+ツリーデータ構造における前記各ノードは、ディスクブロックに基づく固定長の大きさであるように構成することができる。
これにより、固定長の大きさのノードを持つBツリーデータ構造に対しても、ノードの平均使用率を向上させ、且つ、高速に処理を行うことができる。
また、上記の目的を達成するために、本発明の前記データ管理手段は、前記データ管理手段は、前記挿入先又は削除元ノードの左ノードが存在しない場合には、右ノードを参照するように構成することができる。
これにより、左リンクのノードが存在しない場合にも、ノードの平均使用率を向上させ、且つ、高速に処理を行うことができる。
また、上記の目的を達成するために、本発明のデータ管理方法は、各ノードが左右の隣り合うノードのリンクを保持し、各子ノードの最小のキーとリンクデータが前記各子ノードの親ノードのエントリであるB+ツリーデータ構造を有するデータのデータ管理装置であって、ノードに係る情報の格納を行うスタックを有するデータ管理装置におけるデータ管理方法において、データを管理するデータ管理工程を有し、当該データ管理装置においてデータの挿入を行う場合、前記スタックは、前記データの挿入先ノードを検索する際に辿ったノード順にノードに係る情報を格納し、前記データ管理工程は、前記挿入先ノードに空き領域がないとき、前記挿入先ノードと該挿入先ノードの左ノードとの間に新しいノードを生成してノード分割を行い、前記スタックにより格納されたノードに係る情報に基づいて親ノードのエントリを更新するように構成することができる。
これにより、ノードの平均使用率を向上させ、且つ、より高速に処理を行うことができるデータ管理方法を提供することができる。
また、上記の目的を達成するために、本発明のデータ管理プログラムは、コンピュータに前記データ管理方法を実現させるように構成することができる。
これにより、ノードの平均使用率を向上させ、且つ、より高速に処理を行うことができるデータ管理プログラムを提供することができる。
本発明のデータ管理装置、データ管理方法及びデータ管理プログラムによれば、ノードの平均使用率を向上させ、且つ、より高速に処理を行うことができる。
以下、本発明を実施するための最良の形態について図面を用いて各実施形態において説明を行う。
[第1の実施形態]
まず、本発明の第1の実施形態におけるデータベース管理システムについて図2〜8を用いて説明する。
(データ管理装置の例)
まず、本発明の第1の実施形態であるデータベース管理システム1の概要について図2を用いて説明する。図2は、本発明の第1の実施形態のデータベース管理システム1の概要を示す図である。
[第1の実施形態]
まず、本発明の第1の実施形態におけるデータベース管理システムについて図2〜8を用いて説明する。
(データ管理装置の例)
まず、本発明の第1の実施形態であるデータベース管理システム1の概要について図2を用いて説明する。図2は、本発明の第1の実施形態のデータベース管理システム1の概要を示す図である。
図2において、データベース管理システム1は、LAN等のネットワークにより接続されたクライアント装置10、サーバー装置20,データベース30を有する。また、クライアント装置10、サーバー20は、図示しないCPU(Central Processing Unit)、RAM(Random Access Memory)、ROM(Read Only Memory)、ドライブ装置等を備えたものである。サーバー20は、データ管理手段21、スタック22等を有する。
クライアント装置10は、データベース管理システム1において、ユーザインタフェース処理を行う。例えば、ユーザは、クライアント装置10を介してサーバー装置20にデータベース30の管理の指示を行う。
サーバー装置20は、データベース管理システム1において、データベース30の処理を行う。例えば、クライアント装置10から受けた指示に基づいてデータベース30を管理する。
データ管理手段21は、後述のデータベース30に格納されたデータ等を管理する。例えば、サーバー装置20の図示しないCPU等が行う処理である。
スタック22は、データを格納するメモリ領域である。例えば、後述のデータベース30に格納されたノードに係る情報、例えばノードのID、ノードのアドレスを示すポインタ等、を格納する。サーバー装置20の図示しないメモリ領域等である。
データベース30は、後述のB+ツリーデータ構造の例で示されるようなデータを格納するデータベースである。
以上の構成により、データベース管理システム1では、データベース30に格納されたB+ツリーデータ構造のデータは、クライアント装置10からの指示をうけたサーバー装置20によりデータの挿入及び削除等が行われ管理される。
なお、本実施形態においては、クライアント装置10とサーバー装置20を区別して以降説明を行うが、この場合には限らない。クライアント装置10とサーバー装置20の2つの装置の行う処理を1つの装置が行っていても良いものとする。
(B+ツリーデータ構造)
次に、本実施形態1に係るB+ツリーのデータ構造の例について図3を用いて説明する。図3は、本実施形態1に係るB+ツリーのデータ構造の例を示す図である。
(B+ツリーデータ構造)
次に、本実施形態1に係るB+ツリーのデータ構造の例について図3を用いて説明する。図3は、本実施形態1に係るB+ツリーのデータ構造の例を示す図である。
図3において、B+ツリーのデータ構造は、ルートノードであるノードN1、インデックスノードであるノードN2及びN3、リーフノードであるノードN4〜N13により構成される。ここでは、同じ階層の隣り合うノード間には、左右のノードとのリンク情報が格納されている。また、ヘッダーノード(図中ヘッダー情報)には、ヘッダー情報としてルートノードのページIDであるN1、左端のリーフノードのページIDであるN4及び右端のリーフノードのページIDであるN13が格納されている。ヘッダーノードを用いることより、全ページに対する逐次アクセスが可能になっている。
なお、本実施形態1では、同じ階層のノードは、ノード内の先頭キー(後述の図3において、ノードN7では「da」、ノードN8では、「ea」、ノードN9では、「fa」)によって昇順にソートされている。即ち、或るノードに対する左右のノードは、ノード内の先頭キーが小さい側の隣り合うノードを左ノード、大きい側に隣り合うノードを右ノードとしている。また、降順に並んでいる場合も、その他の並び方の場合でもよいものとする。
(ノードのデータ構造の例)
次に、図3で示される各ノードのデータ構造の例について図4を用いて説明する。図4は、本実施形態1に係るB+ツリー内のノードのデータの例を示す図である。
(ノードのデータ構造の例)
次に、図3で示される各ノードのデータ構造の例について図4を用いて説明する。図4は、本実施形態1に係るB+ツリー内のノードのデータの例を示す図である。
図4において、図3で示されるノードN1〜N13の内、ルートノードN1、インデックスノードN2及びリーフノードN7〜9が示されている。
ルートノードN1には、キーと他のノードへのリンクの組み合わせが格納されている。ここでは、(キー、他のノードへのリンク)=(aa、N2)(fa、N3)が格納されている。
インデックスノードN2、3には、キーと他のノードへのリンクの組み合わせに加えて、データ先頭に、左右の隣り合うノードへのリンクデータが格納されている。ここでは、インデックスノードN2を例にとると、左右の隣り合うノードへのリンクデータである(なし、N3)(左にはリンクがないため"なし"になっている)がデータ先頭に格納されている。続いて(キー、他のノードへのリンク)=(aa、N4)〜(ea、N8)が格納されている。
リーフノードN4〜13には、キーと値の組み合わせに加えて、データ先頭に左右の隣り合うノードへのリンクデータが格納されている。リーフノードN7を例にとると、左右の隣り合うノードへのリンクデータである(N6、N8)、続いて(キー、値)=(da、値)〜(de、値)が格納されている。
なお、本実施形態1に係るB+ツリーのデータ構造の各ノードにおいて、キーのデータで昇順にソートされ格納されているものとする。また、各ノードは、5つのエントリを格納できるものとしているが、この場合には限らず、ディスクブロックに基づく固定長の大きさをとってもよい。
(動作例)
次に、本実施形態1に係る動作例について図5〜7を用いて説明する。図5は、本実施形態1の動作例に係るデータの変更を説明するための図である。
(動作例)
次に、本実施形態1に係る動作例について図5〜7を用いて説明する。図5は、本実施形態1の動作例に係るデータの変更を説明するための図である。
ここでは、データベース管理システム1において、上記の図3及び4で示されるB+ツリーのデータ構造のデータを有するデータベース30にキー「eb」のデータを挿入する場合を想定して動作の説明を行う。データを挿入する流れは、まず、データベース30上でデータの挿入先となるリーフノードを検索し、次に挿入すべきノードにデータを挿入する。なお、挿入先となるリーフノードと挿入すべきノードを区別したのは、挿入先リーフノードに空き領域がない場合に、所定の処理(本実施形態1では、ノード分割)を行い、挿入すべきノードを求めこれにデータを挿入するため、挿入先となるリーフノードと挿入すべきノードが同じノードとは限らないためである。
まず、後述の図6のステップS1〜S4の処理により、データの挿入先となるリーフノードの検索を行う。更に、後述の図7のステップS11〜S18の処理により、挿入すべきノードを求めこれにデータを挿入する処理を行う。なお、これらの処理は、データ管理手段21により行われる処理であるものとして順次説明を行う。
それでは、図6を用いてデータの挿入先となるリーフノードを検索する流れについて説明を行う。
まず、ヘッダー情報からルートノードを得る(S1)。ここでは、データ管理手段21は、ヘッダー情報にルートノードのページIDとしてN1が格納されているので、ノードN1を取得する。
次に、リーフノードか否かを判定する(S2)。リーフノードであると判定すると(S2、YES)、処理を終了する。リーフノードでないと判定すると(S2、NO)、ステップS3へ移る。
ここでは、ステップS1で取得されたノードN1がリーフノードであるか否かを判定する。ノードN1は、リーフノードではないので、ステップS3へ移る。なお、リーフノードであるときは、データが存在しないと判定して処理を終了する。
ステップS3へ移った場合、ノードをスタック22に積む(S3)。スタック22は、後入れ先出し方式のデータ構造であり、辿ったノードへのリンクが積まれる。ここでは、辿ったノードであるノードN1がスタックに積まれる。
ステップS4へ移って、ノード内を2分探索し、該当する子ノードを得る(S4)。該当する子ノードを得ると、ステップS2へ移る。
ここでは、ノードN1内を2分探索する。2分探索については従来技術であるため、詳細の説明を省略する。ここでは、キー「eb」は、「aa」よりも大きいが、「fa」よりも小さいため、ノードN2を該当する子ノードとして得る。
これらステップS2〜S4の処理を繰り返すことにより、ルートノードからの検索の結果、ノードN8が挿入先リーフノードであることがわかる。なお、探索中に辿ったノードであるN1及びN2は、スタックに積まれる。
以上の処理のように、本実施形態1のデータベース管理装置1では、データベース30上でデータの挿入先リーフノードの検索が行われる。また、挿入先リーフノードの検索は、辿ったノードをスタック22に積みながら行われる。
それでは、図7を用いてデータ(ここでは、キー「eb」のデータ)を挿入する処理を行う。
まず、自ノードの空き領域を得る(S11)。
ここでは、自ノードは挿入先リーフノードN8を示す。ノードN8には、最大5つのエントリが格納でき、空き領域はないことが分かる(図4参照)。
次に、空き領域があるか否かを判定する(S12)。空き領域があると判定すると(S12、YES)、ステップ18へ移る。空き領域がないと判定すると(S12、NO)、ステップS13へ移る。
ステップS12の処理により、挿入先リーフノードにデータが挿入できるか否かを判定する。ここでは、ノードN8には、空き領域はないと判定する。即ち、ノードN8には、これ以上データを挿入することができないことが分かるのでステップS13へ移る。
ステップS13へ移った場合、左ノードを得る(S13)。
ここでは、ノードN8に格納された左リンク情報に基づいて、左ノード、ここではノードN7を得る。
次に、左ノードの空き領域を得る(S14)。
ステップS14では、ノードN7には、空き領域はないことが分かる(図4参照)。
次に、空き領域があるか否かを判定する(S15)。空き領域がないと判定すると(S15、NO)、ステップS16へ移る。
ステップS15の処理により、後述のステップS16以降で示されるノードの分割を行うか否かを決める。自ノード及び自ノードの左ノード、ここでは、ノードN8及びN7に空き領域がない場合、ステップS16へ移ってノード分割を行う。なお、ノードN7に空き領域が或る場合(S15、YES)については、後述の実施形態2において説明を行う。
ステップS16へ移った場合、ノード分割を行う(S16)。
ステップS16のノード分割については、図8で示される後述のステップS101〜S108で示されるノード分割方法の例を用いて説明を行う。図8は、本実施形態1の動作例に係るノードの分割動作を示す動作フローである。
それでは、図5及び図8を用いてノードの分割動作について説明を行う。
まず、新しいノードを得る(S101)。
ここでは、新しいノードとしてノードN14を取得する。
次に、新ノードの左ノードへのリンクを左ノードへ、右ノードへのリンクを自ノードにする(S102)。
ここでは、ノードN14の左ノードへのリンクを左ノード(N7)に、右ノードへのリンクを自ノード(N8)にする。ノードN14内のデータ先頭に格納された左右の隣り合うノードへのリンクデータを、それぞれノードN7,8にすることにより、ノードN14をノードN7,8の間に入れる。
次に、左ノードの右ノードへのリンクを新ノードへ、自ノードの左ノードへのリンクを新ノードにする(S103)。
次に、左ノードの右ノードへのリンクを新ノードへ、自ノードの左ノードへのリンクを新ノードにする(S103)。
ここでは、左ノード(N7)の右ノードへのリンクを新ノード(N14)にする。即ち、ステップS102の処理により新ノードN14がノードN7,8の間に挿入されたことを受けて、ノードN7内の右の隣り合うノードへのリンクデータを更新する。
次に、自ノードの左ノードへのリンクを新ノードにする(S104)。
ここでは、自ノード(N8)の左ノードへのリンクを新ノード(N14)にする。即ち、ステップS102の処理により新ノードN14がノードN7,8の間に挿入されたことをうけて、ノードN8内の左の隣り合うノードへのリンクデータを更新する。
次に、左ノードの下位1/3と自ノードの上位1/3を新ノードに移動する(S105)。
ここでは、左ノード(N7)の下位1/3データ(図5ではキー「de」のデータ)と、自ノード(N8)の上位1/3データ(図5ではキー「ea」のデータ)とを、新ノード(N14)に移動する。これにより、データの3分割が行われる(図5参照)。なお、図5では、キー「eb」のデータが挿入されているが、ステップS105では、まだ挿入されていないものとする。
次に、スタック22から自ノードの親ノードを得る(S105)。
ここでは、スタック22に積まれたノードから、自ノード(N8)の親ノード、ここではノード(N2)が取得される。
次に、親ノード中の自ノードのエントリを更新する(S106)。
ここでは、親ノード(N2)上で、親ノード(N2)に格納された自ノード(N8)のエントリのキー(図4参照)を「ea」から「ec」に更新する。
次に、親ノードに新ノードのエントリを追加する(S107)。
ここでは、親ノード(N2)に新ノード(N14)のエントリを挿入する。なお、この処理については、動作例の最後に説明を行う。
以上のステップS101〜S108により示される処理でノード分割の処理を終了し、ステップS17(図7参照)へ移る。
ステップS17へ移って、挿入すべきノードを求める(S17)。
ここでは、キー「eb」の挿入すべきノードは次のように求める。挿入すべきノードは、キーが新ノードの最小キーよりも小さいときは左ノード、自ノードの最小キーより小さいときは新ノード、それ以外のときは自ノードである。ここでは、キー「eb」は自ノード(N8)の最小キー「ec」より小さいので、新ノード(N14)が挿入すべきノードとして求められる。
ステップS18へ移って、エントリを挿入する(S18)。エントリを挿入すると、処理を終了する。ここでは、ステップS17の処理を受けて、キー「eb」は、新ノードN14に挿入される。
以上の処理により、前述のステップS1〜S4の処理により、データの挿入先となるリーフノードの検索を行う。更に、前述のステップS11〜S18の処理により、挿入すべきリーフノードにデータを挿入する処理を行う。
そのため、以下に掲げる効果を奏する。その効果とは、ノード分割時に、左ノードと自ノード(例えばデータの挿入先ノード)の内容を左ノードと自ノードとの間に新ノードを確保し3分割することにより、左ノードの先頭エントリは変更されないので、左ノードの親ノードは変更する必要がなく、ノード分割時にアクセスするノードの数を減らすことができ、高速にデータの挿入が行える。ノードの平均使用率を向上させ、且つ、より高速にデータの挿入等の処理を行うことができることである。
なお、ステップS107において、インデックスノードであるノード(N2)にもすでに5つのエントリが挿入されている(図4参照)ので、ノードN14のエントリは挿入できない。よって、上記の同じ方法により、ページ分割が行われる。
[第2の実施形態]
次に、本発明の第2の実施形態におけるデータ管理装置について図9〜11を用いて説明する。
(データ管理装置の例)(B+ツリーデータ構造)(ノードのデータ構造の例)については実施形態1と同様のものを用いるとして、ここでは説明を省略する。
[第2の実施形態]
次に、本発明の第2の実施形態におけるデータ管理装置について図9〜11を用いて説明する。
(データ管理装置の例)(B+ツリーデータ構造)(ノードのデータ構造の例)については実施形態1と同様のものを用いるとして、ここでは説明を省略する。
実施形態1では、データベース30にデータを挿入するとき、まず、データベース30上でデータの挿入先となるリーフノードを検索し、挿入先リーフノードに空き領域がない場合に、ノード分割を行い、挿入すべきノードを求めこれにデータを挿入する動作を行った。ここでは、挿入先ノードに空き領域がない場合に、ノード再配分を行う処理について説明を行う。
(動作例)
それでは、本実施形態2に係る動作例について図9〜11を用いて説明する。図9は、本実施形態2の動作例に係るデータの変更を説明するための図である。
(動作例)
それでは、本実施形態2に係る動作例について図9〜11を用いて説明する。図9は、本実施形態2の動作例に係るデータの変更を説明するための図である。
まず、実施形態1と同様に図6のステップS1〜S4の処理により、データの挿入先となるリーフノードの検索を行う。更に、後述の図10のステップS21〜S29の処理により、挿入すべきノードを求めこれにデータを挿入する処理を行う。なお、これらの処理は、データ管理手段21により行われる処理であるものとして順次説明を行う。
図10において、ステップS21〜S28までの処理は、図7のステップS11〜S18までの処理と同様であるとして、ここでは説明を省略する。
ステップS25へ移って、左ノードの空き領域があるか否かを判定する(S25)。空き領域があると判定すると(S25、NO)、ステップS29へ移る。
ステップS25へ移って、左ノードの空き領域があるか否かを判定する(S25)。空き領域があると判定すると(S25、NO)、ステップS29へ移る。
ステップS25の処理により、後述のステップS29以降で示されるノードの再配分を行うか否かを決める。自ノード(N8)の左ノード、ここでは、ノードN7に空き領域がある場合、ステップS29へ移ってノード再配分を行う。
ステップS29へ移った場合、ノード再配分を行う(S29)。
ステップS29のノード再配分については、図11で示される後述のステップS201〜S205で示されるノード再配分方法において詳細の説明を行う。図11は、本実施形態2の動作例に係るノードの再配分動作を示す動作フローである。
それでは、図9及び図11を用いてノードの再配分動作について説明を行う。
まず、左ノードの空き領域が、自ノードの空き領域よりも大きいか否かを判定する(S201)。左ノードの空き領域の方が大きいと判定すると(S201、YES)、ステップS202へ移る。左ノードの空き領域の方が小さいと判定すると(S201,NO)、ステップS203へ移る。
ステップS201の処理により、ノードの再配分を行うに当たりデータの移動元、移動先の判定を行う。ステップS202以降の処理により空き領域が小さい方のノードに含まれたデータを、空き領域が大きい方のノードに移動させることにより、平均ノード使用率の向上を図ることができる。ここでは、図9のように左ノード(N7)には2つのエントリを格納する空き領域があるので、ステップS201、YESへ移る。
ステップS202へ移った場合、自ノードの上位エントリを左ノードへ移動し、空き領域を均等にする(S202)。続いて、ステップS204へ移る。
ここでは、自ノード内に格納されたデータを左ノードへ移動することにより、空き領域の均等化を図る。ここでは、自ノード(N8)のキー「ea」のエントリを左ノード(N7)へ移動し、空き領域を均等にする。これにより、平均ノード使用率の向上を図ることができる。
ステップS203へ移った場合、左ノードの下位エントリを自ノードへ移動し、空き領域を均等にする(S203)。続いて、ステップS204へ移る。
ここでは、左ノード内に格納されたデータを自ノードへ移動することにより、空き領域の均等化を図る。これにより、平均ノード使用率の向上を図ることができる。
ステップS204へ移って、スタック22から自ノードの親ノードを得る(S204)。
ここでは、スタック22に積まれたノード情報から、自ノード(N8)の親ノードノード(N2)が取得される。
次に、親ノード中の自ノードのエントリを更新する(S205)。
ここでは、親ノード(N2)上で、親ノード(N2)に格納された自ノード(N8)のエントリのキー(図4参照)を「ea」から「ec」に更新する。
以上のステップS201〜S205により示される処理でノード再配分の処理を終了し、ステップS27(図10参照)へ移る。
ステップS27へ移って、挿入すべきノードを求める(S27)。
ここでは、キー「eb」を挿入すべきノードは次のように求める。挿入すべきノードは、キーが自ノードの最小キーよりも小さいときは左ノード、それ以外のときは自ノードである。ここでは、「eb」は自ノード(N8)の最小キー「ec」より小さいので、左ノード(N7)が挿入すべきノードとして求められる。
ステップS28へ移って、エントリを挿入する(S28)。エントリを挿入すると、処理を終了する。ここでは、ステップS27の処理を受けて、キー「eb」は、左ノードN7に挿入される(図10参照)。
以上の処理により、前述のステップS1〜S4の処理により、データの挿入先となるリーフノードの検索を行う。更に、前述のステップS201〜S208の処理により、挿入すべきリーフノードにデータを挿入する処理を行う。
そのため、以下に掲げる効果を奏する。その効果とは、ノード再配分時に、左ノードと自ノード(例えば、データの挿入先ノード)の内容を再配分することにより、左ノードの先頭エントリは変更されないので、左ノードの親ノードは変更する必要がなく、ノードの再配分時にアクセスするノードの数を減らすことができ、高速にデータの挿入が行えることである。また、ノードの平均使用率を向上させ、且つ、より高速にデータの挿入の処理を行うことができる。
[第3の実施形態]
次に、本発明の第3の実施形態におけるデータ管理装置について図12、13を用いて説明する。
(データ管理装置の例)(B+ツリーデータ構造)(ノードのデータ構造の例)については実施形態1と同様のものを用いるとして、ここでは説明を省略する。
そのため、以下に掲げる効果を奏する。その効果とは、ノード再配分時に、左ノードと自ノード(例えば、データの挿入先ノード)の内容を再配分することにより、左ノードの先頭エントリは変更されないので、左ノードの親ノードは変更する必要がなく、ノードの再配分時にアクセスするノードの数を減らすことができ、高速にデータの挿入が行えることである。また、ノードの平均使用率を向上させ、且つ、より高速にデータの挿入の処理を行うことができる。
[第3の実施形態]
次に、本発明の第3の実施形態におけるデータ管理装置について図12、13を用いて説明する。
(データ管理装置の例)(B+ツリーデータ構造)(ノードのデータ構造の例)については実施形態1と同様のものを用いるとして、ここでは説明を省略する。
実施形態1、2では、データベース30にデータを挿入するとき、まず、データベース30上でデータの挿入先となるリーフノードを検索し、挿入先リーフノードに空き領域がない場合に、ノード分割(実施形態1)、又はノード再配分(実施形態2)を行い、挿入すべきノードを求めこれにデータを挿入する動作を行った。ここでは、データベース30からデータを削除するとき、まず、データベース30上でデータ、ここではキー「eb」の削除元となるリーフノードを検索し、削除元ノードからデータを削除後、ノードマージ又はノード再配分等を行う処理について説明を行う。
(動作例)
それでは、実施形態3に係る動作例について図12,13を用いて説明する。図12は、実施形態3に係るデータの挿入を説明するための図である。
まず、実施形態1と同様に図6のステップS1〜S4の処理により、データの削除元となるリーフノードの検索を行う。更に、後述の図12のステップS31〜S39の処理により、削除元ノードからデータを削除し、ノードマージ又はノード再配分等の処理を行う。なお、これらの処理は、データ管理手段21により行われる処理であるものとして順次説明を行う。
(動作例)
それでは、実施形態3に係る動作例について図12,13を用いて説明する。図12は、実施形態3に係るデータの挿入を説明するための図である。
まず、実施形態1と同様に図6のステップS1〜S4の処理により、データの削除元となるリーフノードの検索を行う。更に、後述の図12のステップS31〜S39の処理により、削除元ノードからデータを削除し、ノードマージ又はノード再配分等の処理を行う。なお、これらの処理は、データ管理手段21により行われる処理であるものとして順次説明を行う。
まず、実施形態1と同様に図6のステップS1〜S4の処理により、データベース30上でデータの削除元リーフノードの検索が行われる。また、削除元リーフノードの検索は、辿ったノードをスタック22に積みながら行われる。
次に、後述のステップS31〜S39の処理について説明を行う。
まず、自ノードからエントリを削除する(S31)。
ここでは、自ノードは削除元リーフノードN8を示す。ノードN8から削除すべきデータであるキー「eb」のエントリを削除する。
次に、空き領域が50%以上であるか否かを判定する(S32)。50%以上であると判定すると(S32、YES)、ステップS303へ移る。50%以上でないと判定すると(S32、NO)、ステップ37へ移る。
ステップS32の処理により、以降の処理においてノードマージ(S36)又はノード再配分(S37)により平均ノード使用率の向上を図るか否かを決定する。自ノードの空き領域が50%以上のときは、ノードマージ又はノード再配分を行うものとし、それ以外のときには、それらを行わないものとしている。
ステップS33へ移った場合、左ノードを得る(S33)。
ここでは、自ノード(N8)に格納された左リンク情報に基づいて、左ノード、ここではノードN7を得る。
次に、ステップS34へ移って、左ノードの使用領域を得る(S34)。
ここでは、左ノード(N7)の使用領域を調べる。
次に、マージできるか否かを判定する(S35)。マージできると判定すると(S35、YES)、ステップS36へ移る。マージできないと判定すると(S35,NO)、ステップS39へ移る。
ここでは、自ノード(N8)と左ノード(N7)とがマージできるか否かを判定する。
ステップS36へ移った場合、ノードマージを行う(S36)。
ステップS36のノードマージについては、図13で示される後述のステップS301〜S306で示されるノードマージ方法において詳細の説明を行う。図13は、実施形態3の動作例に係るノードマージ動作を示す動作フローである。
それでは、図13を用いてノードマージ動作について説明を行う。
まず、左ノードに自ノードのエントリをすべて挿入する(S301)。
ここでは、自ノード(N8)内のエントリを全て左ノード(N7)に挿入する。
次に、自ノードの親ノードから自ノードのエントリを削除する(S302)。
ここでは、スタック22に積まれたノード情報から、自ノード(N8)の親ノード(N2)を取得し、親ノード(N2)上で、自ノード(N8)のエントリを削除する。
次に、右ノードを得る(S303)。
ここでは、自ノード(N8)の右ノードである(N9)を取得する。
次に、右ノードの左ノードへのリンクを、左ノードにする。(S304)。
ここでは、右ノード(N9)の左ノードへのリンクを左ノード(N7)にする。即ち、ステップS302の処理により自ノード(N8)が削除されたことを受けて、ノードN9内の左の隣り合うノードへのリンクデータを更新する。
次に、左ノードの右ノードへのリンクを、右ノードにする(S305)。
ここでは、左ノード(N7)の右ノードへのリンクを右ノード(N9)にする。即ち、ステップS302の処理により自ノード(N8)が削除されたことを受けて、ノードN7内の右の隣り合うノードへのリンクデータを更新する。
次に、自ノードを削除する(S306)。
前述のステップS301〜S305の処理により、左ノード(N7)と自ノード(N8)とをマージし、自ノード(N8)を削除する。
ステップS37へ移った場合、先頭エントリを削除したか否かを判定する(S37)。先頭エントリを削除したと判定すると(S37、YES)、ステップS38へ移る。先頭エントリを削除していないと判定すると(S37、NO)、処理を終了する。
ステップS37は、ステップS31において自ノード(N8)から削除されたエントリが先頭エントリである場合に、自ノード(N8)の親ノード(N2)において、自ノード(N8)へのリンクデータを更新する必要がでてくるために行う処理である。
ステップS38へ移った場合、親ノードのエントリを更新する(S38)。その後、処理を終了する。
ここでは、自ノード(N8)の親ノード(N2)は、自ノード(N8)の先頭キー及び自ノードへのリンクデータをエントリとして持っている。自ノード(N8)の先頭キーがステップS37の結果により変わったことを受けて、親ノード(N2)においてエントリの更新を行う。
ステップS39へ移った場合、ノード再配分を行う(S39)。
ここでは、マージできない場合には、ノード再配分を行う。ノード再配分については、図11のステップS201〜S205と同様であるとして、ここでは説明を省略する。
以上の処理により、図6のステップS1〜S4の処理により、データの削除元となるリーフノードの検索を行う。更に、後述の図12のステップS31〜S39の処理により、削除元ノードからデータを削除し、ノードマージ又はノード再配分等の処理を行う。
そのため、以下に掲げる効果を奏する。その効果とは、ノード再配分時に、左ノードと自ノード(例えば、データの削除元ノード)の内容を再配分することにより、左ノードの先頭エントリは変更されないので、左ノードの親ノードは変更する必要がなく、ノードの再配分時にアクセスするノードの数を減らすことができ、高速にデータの削除が行えることである。
そのため、以下に掲げる効果を奏する。その効果とは、ノード再配分時に、左ノードと自ノード(例えば、データの削除元ノード)の内容を再配分することにより、左ノードの先頭エントリは変更されないので、左ノードの親ノードは変更する必要がなく、ノードの再配分時にアクセスするノードの数を減らすことができ、高速にデータの削除が行えることである。
また、別の効果として、ノードマージ時に、左ノードへ自ノード(例えば、データの削除元ノード)の内容を移してマージすることにより、左ノードの先頭エントリは変更されないので、左ノードの親ノードは変更する必要がなく、ノードのマージ時にアクセスするノードの数を減らすことができ、高速にデータの削除が行えることである。
また、ノードの平均使用率を向上させ、且つ、より高速にデータの削除の処理を行うことができる。
[第4の実施形態]
次に、本発明の第4の実施形態におけるデータ管理装置について説明する。
(データ管理装置の例)(B+ツリーデータ構造)(ノードのデータ構造の例)については実施形態1と同様のものを用いるとして、ここでは説明を省略する。
[第4の実施形態]
次に、本発明の第4の実施形態におけるデータ管理装置について説明する。
(データ管理装置の例)(B+ツリーデータ構造)(ノードのデータ構造の例)については実施形態1と同様のものを用いるとして、ここでは説明を省略する。
実施形態1、2及び3では、データベース30にデータを挿入及び/又は削除するとき、まず、データベース30上でデータの挿入先及び/又は削除元となるリーフノードを検索し、ノード分割(実施形態1)、ノード再配分(実施形態2)、ノードマージ(実施形態3)を行った。さらに、ノード分割、ノード再配分、ノードマージを行うに当たり、挿入先及び/又は削除元となるリーフノードと、該挿入先及び/又は削除元となるリーフノードと左ノードとの間でこれらを行った。ここでは、左ノードが存在しない場合、即ちデータの挿入先及び/又は削除元となるリーフノードが左端のノードである場合(図3ではノードN4)の動作について説明を行う。
このとき、バランス多分木構造をとるB+ツリーデータ構造では、親ノード(ここではノードN2)には、最低でも2つのエントリが存在しているので、左端のノードの親ノードとその右ノードの親ノードは必ず同じノードである。左ノードが存在しない場合には、左ノードを選択する(実施形態1:図7ステップS13、実施形態2:図10ステップS23、実施形態3:図12ステップS33)ことにより、右ノードとの間でノード分割、ノード再配分、ノードマージを行うことができる。
なお、本発明を実施するための最良の形態では、データ管理装置の一例としてデータベース管理システムを例に説明してきたが、他のデータ管理装置及びシステムであってもよい。
以上、各実施形態に基づき本発明の説明を行ってきたが、上記実施形態にあげたその他の要素との組み合わせなど、ここで示した要件に本発明が限定されるものではない。これらの点に関しては、本発明の主旨をそこなわない範囲で変更することが可能であり、その応用形態に応じて適切に定めることができる。
1 データ管理装置
10 クライアント装置
20 サーバー装置
21 データ管理手段
22 スタック
30 データベース
10 クライアント装置
20 サーバー装置
21 データ管理手段
22 スタック
30 データベース
Claims (9)
- 各ノードが左右の隣り合うノードのリンクを保持し、各子ノードの最小のキーとリンクデータが前記各子ノードの親ノードのエントリであるB+ツリーデータ構造を有するデータのデータ管理装置であって、
データを管理するデータ管理手段と、
ノードに係る情報の格納を行うスタックと、
を有し、
当該データ管理装置においてデータの挿入を行う場合、
前記スタックは、前記データの挿入先ノードを検索する際に辿ったノード順にノードに係る情報を格納し、
前記データ管理手段は、前記挿入先ノードに空き領域がないとき、前記挿入先ノードと該挿入先ノードの左ノードとの間に新しいノードを生成してノード分割を行い、前記スタックにより格納されたノードに係る情報に基づいて親ノードのエントリを更新することを特徴とするデータ管理装置。 - 当該データ管理装置においてデータの挿入を行う場合、
前記スタックは、前記データの挿入先ノードを検索する際に辿ったノード順にノードに係る情報を格納し、前記データ管理手段は、前記挿入先ノードに空き領域がないとき、前記挿入先ノードと該挿入先ノードの左ノードとの間でノード再配分を行い、前記スタックにより格納されたノードに係る情報に基づいて親ノードのエントリを更新することを特徴とする請求項1に記載のデータ管理装置。 - 当該データ管理装置においてデータの削除を行う場合、
前記スタックは、前記データの削除元ノードを検索する際に辿ったノード順にノードに係る情報を格納し、前記データ管理手段は、前記削除元ノードと該削除元ノードの左ノードとの間でノード再配分を行うとき、前記スタックにより格納されたノードに係る情報に基づいて親ノードのエントリを更新することを特徴とする請求項1又は2に記載のデータ管理装置。 - 当該データ管理装置においてデータの削除を行う場合、
前記スタックは、前記データの削除元ノードを検索する際に辿ったノード順にノードに係る情報を格納し、前記データ管理手段は、前記削除元ノードと該削除元ノードの左ノードとの間でノードマージを行うとき、前記スタックにより格納されたノードに係る情報に基づいて親ノードのエントリを更新することを特徴とする請求項1乃至3のいずれか一項に記載のデータ管理装置。 - 前記B+ツリーデータ構造におけるルートノードへのリンクデータと、左端のリーフノードへのリンクデータと、右端のリーフノードへのリンクデータを保持するヘッダーノードを有することを特徴とする請求項1乃至4のいずれか一項に記載のデータ管理装置。
- 前記B+ツリーデータ構造における前記各ノードは、ディスクブロックに基づく固定長の大きさであることを特徴とする請求項1乃至5のいずれか一項に記載のデータ管理装置。
- 前記データ管理手段は、前記挿入先又は削除元ノードの左ノードが存在しない場合には、右ノードを参照することを特徴とする請求項1乃至6のいずれか一項に記載のデータ管理装置。
- 階層構造の各ノードが左右の隣り合うノードのリンクを保持し、各子ノードの最小のキーとリンクデータが前記各子ノードの親ノードのエントリであるB+ツリーデータ構造を有するデータのデータ管理装置であって、ノードに係る情報の格納を行うスタックを有するデータ管理装置におけるデータ管理方法において、
データを管理するデータ管理工程を有し、
当該データ管理装置においてデータの挿入を行う場合、
前記スタックは、前記データの挿入先ノードを検索する際に辿ったノード順にノードに係る情報を格納し、前記データ管理工程は、前記挿入先ノードに空き領域がないとき、前記挿入先ノードと該挿入先ノードの左ノードとの間に新しいノードを生成してノード分割を行い、前記スタックにより格納されたノードに係る情報に基づいて親ノードのエントリを更新することを特徴とするデータ管理方法。 - コンピュータに請求項8記載のデータ管理方法を実現させるためのデータ管理プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006244843A JP2008065716A (ja) | 2006-09-08 | 2006-09-08 | データ管理装置、データ管理方法及びデータ管理プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006244843A JP2008065716A (ja) | 2006-09-08 | 2006-09-08 | データ管理装置、データ管理方法及びデータ管理プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008065716A true JP2008065716A (ja) | 2008-03-21 |
Family
ID=39288363
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006244843A Pending JP2008065716A (ja) | 2006-09-08 | 2006-09-08 | データ管理装置、データ管理方法及びデータ管理プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008065716A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013098918A1 (ja) * | 2011-12-26 | 2013-07-04 | 株式会社日立製作所 | データベースシステム及びデータベース管理方法 |
WO2013154247A1 (ko) * | 2012-04-13 | 2013-10-17 | 연세대학교 산학협력단 | 수정된 b+트리 노드 검색 방법 및 장치 |
WO2014025097A1 (ko) * | 2012-08-10 | 2014-02-13 | 영남대학교 산학협력단 | 비휘발성 램 기반의 b+ 트리 데이터베이스화 방법 |
-
2006
- 2006-09-08 JP JP2006244843A patent/JP2008065716A/ja active Pending
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013098918A1 (ja) * | 2011-12-26 | 2013-07-04 | 株式会社日立製作所 | データベースシステム及びデータベース管理方法 |
JPWO2013098918A1 (ja) * | 2011-12-26 | 2015-04-30 | 株式会社日立製作所 | データベースシステム及びデータベース管理方法 |
US9703829B2 (en) | 2011-12-26 | 2017-07-11 | Hitachi, Ltd. | Database system and database management method |
WO2013154247A1 (ko) * | 2012-04-13 | 2013-10-17 | 연세대학교 산학협력단 | 수정된 b+트리 노드 검색 방법 및 장치 |
KR101341507B1 (ko) | 2012-04-13 | 2013-12-13 | 연세대학교 산학협력단 | 수정된 b+트리 노드 검색 방법 및 장치 |
WO2014025097A1 (ko) * | 2012-08-10 | 2014-02-13 | 영남대학교 산학협력단 | 비휘발성 램 기반의 b+ 트리 데이터베이스화 방법 |
KR101438667B1 (ko) | 2012-08-10 | 2014-09-12 | 영남대학교 산학협력단 | 비휘발성 램 기반의 b+ 트리 데이터베이스화 방법 |
US9454550B2 (en) | 2012-08-10 | 2016-09-27 | Industry Academic Cooperation Foundation Of Yeungnam University | Database method for B+ tree based on PRAM |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI702506B (zh) | 用於合併樹廢棄項目指標之系統、機器可讀媒體及機器實施之方法 | |
TWI682274B (zh) | 鍵值儲存樹 | |
US11238098B2 (en) | Heterogenous key-value sets in tree database | |
TWI719281B (zh) | 用於串流選擇之系統、機器可讀媒體、及機器實施之方法 | |
TWI702503B (zh) | 實施用於維護操作之合併樹修改之系統、方法及電腦可讀媒體 | |
US9672235B2 (en) | Method and system for dynamically partitioning very large database indices on write-once tables | |
US7558802B2 (en) | Information retrieving system | |
CN108446376B (zh) | 数据存储方法与装置 | |
KR101792168B1 (ko) | 개별 액세스 가능한 데이터 유닛의 스토리지 관리 | |
US9495398B2 (en) | Index for hybrid database | |
WO2018064962A1 (zh) | 数据存储方法、电子设备和计算机非易失性存储介质 | |
US7603346B1 (en) | Integrated search engine devices having pipelined search and b-tree maintenance sub-engines therein | |
CN111538724B (zh) | 管理索引的方法 | |
JP4351247B2 (ja) | 格納データを処理するためのコンピュータ利用コンパクト0コンプリートツリーの動的格納構造及び方法 | |
US7725450B1 (en) | Integrated search engine devices having pipelined search and tree maintenance sub-engines therein that maintain search coherence during multi-cycle update operations | |
JP5790755B2 (ja) | データベース管理装置及びデータベース管理方法 | |
JP2008065716A (ja) | データ管理装置、データ管理方法及びデータ管理プログラム | |
JP6006740B2 (ja) | インデックス管理装置 | |
WO2012081165A1 (ja) | データベース管理装置及びデータベース管理方法 | |
KR100859710B1 (ko) | 데이터에 대한 검색을 수행하기 위한 자료구조를 이용하여 데이터를 검색, 저장, 삭제하는 방법 | |
JPH08235040A (ja) | データファイル管理システム | |
JP4825504B2 (ja) | データ登録・検索システムおよびデータ登録・検索方法 | |
US20050060314A1 (en) | System and methods involving a data structure searchable with O(logN) performance | |
EP3995972A1 (en) | Metadata processing method and apparatus, and computer-readable storage medium | |
JP5434500B2 (ja) | 木構造処理装置及びプログラム |