JPWO2006046669A1 - データベース管理装置、方法、プログラム - Google Patents
データベース管理装置、方法、プログラム Download PDFInfo
- Publication number
- JPWO2006046669A1 JPWO2006046669A1 JP2006543268A JP2006543268A JPWO2006046669A1 JP WO2006046669 A1 JPWO2006046669 A1 JP WO2006046669A1 JP 2006543268 A JP2006543268 A JP 2006543268A JP 2006543268 A JP2006543268 A JP 2006543268A JP WO2006046669 A1 JPWO2006046669 A1 JP WO2006046669A1
- Authority
- JP
- Japan
- Prior art keywords
- array
- value
- chunk
- record
- column
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
レコード挿入部は、新たなカラム値を持つレコードを挿入するとき、CVTにそのカラム値を登録して、拡張可能配列を拡張し、経歴値テーブルおよび係数テーブルに配列拡張の時間的順序である経歴値およびサブ配列内の要素のオフセットを計算する1次関数の係数をそれぞれ登録し、レコード数テーブルに初期値を登録するとともに、当該拡張可能配列の要素の経歴値およびオフセットの2項組表現をキー値としてRDTへ挿入する。これにより、実行時に動的に新たなカラム値を持つレコードを追加することができ、かつ、存在するレコードのみを登録することができるとともに、高速にレコード検索ができる関係データベースを実現する。
Description
本発明は、関係データベースを用いるデータベースに関するものであり、詳細には、データベース装置、データベースの管理方法、データベースのデータ構造、データベースの管理プログラムおよびそれを記録したコンピュータ読み取り可能な記録媒体に関するものである。
現在、広く使われているデータベースは関係データベースである。関係データベースは、図43に示すような関係テーブルの集合であり、関係テーブルはその中のレコードの集合である。その検索はカラム名や検索の条件を指定することにより、行われる。
このような、関係テーブルは通常2次記憶に置かれ、各レコードは入力された順に逐次、配置される。したがって、次のような欠点がある。
(1)例えば、年齢が23のレコードを検索する場合、テーブル中のすべてのレコードをメモリ上にロードして年齢カラムをチェックする必要がある。従って、検索時間が大きくなる。
(2)例えば、出身地が福井のレコードは数多く現れ、文字列「福井」を重複して多く格納する必要がある。したがって、ディスク使用量が大きくなる。
(1)例えば、年齢が23のレコードを検索する場合、テーブル中のすべてのレコードをメモリ上にロードして年齢カラムをチェックする必要がある。従って、検索時間が大きくなる。
(2)例えば、出身地が福井のレコードは数多く現れ、文字列「福井」を重複して多く格納する必要がある。したがって、ディスク使用量が大きくなる。
このような欠点を回避するための方法として、図44に示すような多次元配列を使用することが考えられる。配列の各次元はテーブルのカラムに対応し、配列の要素は対応するレコードを表す。
このとき、図44の例では、年齢が23のレコード集合は「年齢」次元の値が23の平面上に空でない配列要素として、存在する。配列要素[*,*,23](*は平面上の任意の添字)の番地はアドレス関数により高速に求めることができる。したがって、(1)の欠点は回避される。また、各次元の値は値順にソートされて並べられ、1度しか現れないので、(2)の欠点も回避される。
なお、本願発明に関連する先行技術文献としては、次の非特許文献1〜4がある。
〔非特許文献1〕
A.L.Rosenberg、“Allocating Storage for Extendible Arrays”、JACM、Vol.21、pp.652−670(1974)
〔非特許文献2〕
E.J.Otoo、T.H.Merrett、“A Storage Scheme for Extendible Arrays”、Computing、Vol.31、pp.1−9(1983)
〔非特許文献3〕
D.Rotem and J.L.Zhao,“Extendible Arrays for Statistical Databases and OLAP Applications”,Procceedings of 7−th International Working Conference on Scientific and Statistical Database Management,pp.108−117(1996)
〔非特許文献4〕
都司達夫、水野剛、宝珍輝尚、樋口健、“拡張可能配列の遅延割付け方式”、電子情報通信学会論文誌 D−I、Vol.J86−D−I、No.5、pp.351−356(2003)
しかしながら、従来の固定サイズの多次元配列によるテーブルの表現には次のような欠点がある。
(a)各次元のサイズは固定である。固定であるから、アドレス関数が作成できる。したがって、新たなカラム値を持つレコードの追加は不可能である。
(b)各次元の値の組み合わせがすべて存在するような密なテーブルは稀であるので、配列内の有効要素は少ない(疎配列)。有効要素の割合は通常数%以下、場合によっては0.1%以下であることが多い。このような疎配列に対しても、アドレス関数によって配列要素にアクセスできるためには空の要素(存在しないレコード)についても記憶領域を確保する必要があり、途方もないディスクスペースの無駄になる。
A.L.Rosenberg、“Allocating Storage for Extendible Arrays”、JACM、Vol.21、pp.652−670(1974)
〔非特許文献2〕
E.J.Otoo、T.H.Merrett、“A Storage Scheme for Extendible Arrays”、Computing、Vol.31、pp.1−9(1983)
〔非特許文献3〕
D.Rotem and J.L.Zhao,“Extendible Arrays for Statistical Databases and OLAP Applications”,Procceedings of 7−th International Working Conference on Scientific and Statistical Database Management,pp.108−117(1996)
〔非特許文献4〕
都司達夫、水野剛、宝珍輝尚、樋口健、“拡張可能配列の遅延割付け方式”、電子情報通信学会論文誌 D−I、Vol.J86−D−I、No.5、pp.351−356(2003)
しかしながら、従来の固定サイズの多次元配列によるテーブルの表現には次のような欠点がある。
(a)各次元のサイズは固定である。固定であるから、アドレス関数が作成できる。したがって、新たなカラム値を持つレコードの追加は不可能である。
(b)各次元の値の組み合わせがすべて存在するような密なテーブルは稀であるので、配列内の有効要素は少ない(疎配列)。有効要素の割合は通常数%以下、場合によっては0.1%以下であることが多い。このような疎配列に対しても、アドレス関数によって配列要素にアクセスできるためには空の要素(存在しないレコード)についても記憶領域を確保する必要があり、途方もないディスクスペースの無駄になる。
本発明は、上記の問題点に鑑みてなされたものであり、その目的は、実行時に動的に新たなカラム値を持つレコードを追加することができる、かつ、存在するレコードのみを登録することができるとともに、高速にレコード検索ができるデータベース装置、データベースの管理方法、データベースのデータ構造、データベースの管理プログラムおよびそれを記録したコンピュータ読み取り可能な記録媒体を提供することにある。
上記の課題を解決するために、本発明に係るデータベース装置は、関係テーブルを用いたデータベース装置であって、関係テーブルの各レコードに対応する拡張可能配列の要素の位置を示す位置情報をキー値として登録した要素位置B+木データを格納したデータベース記憶部を具備するとともに、上記位置情報が、要素が属する拡張可能配列の区画の先頭要素の位置を示す区画位置情報と区画内における要素の位置を示す区画内オフセットとを含む情報であることを特徴としている。
ここで、本発明では、拡張可能配列の区画を様々に選択可能である。そして、上記要素位置B+木データとして、区画に応じた要素位置データを登録する。
例えば、(1)区画を拡張可能配列のサブ配列とすれば、上記要素位置B+木データとして、上記区画位置情報を、関係テーブルの各レコードに対応する拡張可能配列の要素が属するサブ配列の経歴値とし、上記区画内オフセットを、このサブ配列内の該要素のサブ配列内オフセットとした、2項組表現をキー値として登録した2項組B+木データを利用できる。(2)また、区画をチャンク化拡張可能配列のチャンクとすれば、上記要素位置B+木データとして、上記区画位置情報を、関係テーブルの各レコードに対応するチャンク化拡張可能配列の要素が属するチャンクのチャンク番号とし、上記区画内オフセットを該要素のチャンク内オフセットとした、2項組表現をキー値として登録した2項組B+木データを利用できる。
具体的には、拡張可能配列の区画の先頭要素の位置を示す区画位置情報と区画内における要素の位置を示す区画内オフセットとの2項組表現は、(1)の場合、<経歴値,サブ配列内オフセット>であり、(2)の場合、<チャンク番号,チャンク内オフセット>となる。なお、チャンク番号は、要素の添字<i1,i2,...,in>より、チャンク拡張可能配列の要素(チャンク)の位置決定機構により決定される。
よって、上記データベース装置では、2項組B+木データ(要素位置B+木データ)を参照することにより、区画位置情報と区画内オフセットとの2項組表現に基づいて、拡張可能配列の要素の位置を特定することが可能となる。
なお、「区画位置情報」および「区画内オフセット」は以下のように記述・定義できる。
拡張可能配列の全要素集合Eを互いに共通な要素を持たない部分集合の集合に類別(partition)したとき、その任意の部分集合Sを拡張可能配列の「区画」と定義する。そして、部分集合Sに対応する記憶表現の先頭要素の要素集合E内での位置を特定するために必要な情報を「区画位置情報」と定義する。また、部分集合S内における要素の位置を特定するための部分集合Sの先頭要素の位置からの変位を「区画内オフセット」と定義する。
以上の定義による「区画位置情報」および「区画内オフセット」の両者により、拡張可能配列の任意の要素について、その位置が一意的に決定される。このような定義の下で、(1)では区画である部分集合Sをサブ配列としており、(2)では区画である部分集合Sをチャンクとしている。
さらに、(1)(2)では、「(これら2つの)2項組表現をキー値として登録した2項組B+木データ」と記述しているが、必ずしも2項組として、キー値の記憶表現において位置的に連接している必要はない。すなわち、要素位置B+木データには、キー値の記憶表現にこれら2つの情報(「区画位置情報」および「区画内オフセット」)が含まれていればよい。そして、本発明に係るデータベース装置には、これらの2つの情報を使って要素に迅速にアクセスするための手段を具備していればよい。
(1)2項組B+木データに、関係テーブルの各レコードに対応する拡張可能配列の要素の経歴値とサブ配列内オフセットとの2項組表現をキー値として登録する場合のデータベースの構成と、データを検索、挿入、削除する機能は以下のとおりである。
本発明に係るデータベース装置は、上記データベース記憶部に、上記区画位置情報である、関係テーブルの各レコードに対応する拡張可能配列の要素の経歴値と、上記区画内オフセットであるサブ配列内オフセットとの2項組表現をキー値として登録した、上記要素位置B+木データである第2のB+木データとともに、関係テーブルのカラム値ごとに設けられ、該カラム値から拡張可能配列の添字に変換するための第1のB+木データと、配列拡張の時間的順序を登録した経歴値テーブルと、サブ配列内の要素のサブ配列内オフセットを計算する1次関数の係数からなる係数ベクトルをサブ配列ごとに登録した係数テーブルと、拡張可能配列の添字ごとにその添字に対応するカラム値を持つすべてのレコード数を登録したレコード数テーブルと、を格納したことを特徴としている。
また、本発明に係るデータベース装置は、検索要求に対して、上記第2のB+木データより検索要求に対応する経歴値とサブ配列内オフセットの2項組を検索するレコード検索部を具備することを特徴としている。
また、本発明に係るデータベース装置は、新たなカラム値を持つレコードを挿入するとき、上記第1のB+木データにそのカラム値を登録して、拡張可能配列を拡張し、上記経歴値テーブルおよび上記係数テーブルに経歴値および係数をそれぞれ登録し、上記レコード数テーブルに初期値を登録するとともに、当該拡張可能配列の要素の経歴値およびサブ配列内オフセットの2項組表現をキー値として上記第2のB+木データへ挿入するレコード挿入部を具備することを特徴としている。
また、本発明に係るデータベース装置は、1つのレコードを削除するとき、経歴値とサブ配列内オフセットの2項組を上記第2のB+木データから削除するとともに、上記レコード数テーブルのレコード数を1だけ減算するレコード削除部を具備することを特徴としている。
そして、上記の構成により、本発明のデータベースは、関係テーブルのカラム値ごとに設けられ、該カラム値から拡張可能配列の添字に変換するための第1のB+木データと、関係テーブルの各レコードに対応する拡張可能配列の要素の経歴値およびサブ配列内オフセットの2項組表現をキー値として登録した第2のB+木データと、配列拡張の時間的順序を登録した経歴値テーブルと、サブ配列内の要素のサブ配列内オフセットを計算する1次関数の係数からなる係数ベクトルをサブ配列ごとに登録した係数テーブルと、拡張可能配列の添字ごとにその添字に対応するカラム値を持つすべてのレコード数を登録したレコード数テーブルとよりなるデータ構造を有している。
n個のカラムからなる関係テーブルのレコードは、n次元拡張可能配列のn個の添字の組で表される。
本発明では、この添字の組は新たなカラム値を持つレコードの追加により拡張付加されるn−1次元のサブ配列の付加順を表す拡張経歴値とサブ配列内のサブ配列内オフセットの2項組で表される。すなわち、nが大きくなれば関係テーブルのレコード長は大きくなるが、nにかかわらず、経歴値およびサブ配列内オフセットの2項組でレコードを表している。したがって、特にカラム数の多い関係テーブルの場合でも、極めて記憶効率がよいという効果を奏する。また、存在しているレコードについてのみ、対応する2項組をキー値としてB+木に登録しており、この点からも記憶効率が向上するという効果を奏する。さらに、B+木の利用により、高速検索処理が可能であるという効果を奏する。
(2)2項組B+木データに、関係テーブルの各レコードに対応するチャンク化拡張可能配列の要素が属するチャンクのチャンク番号とチャンク内オフセットとの2項組表現をキー値として登録する場合のデータベースの構成と、データを検索、挿入、削除する機能は以下のとおりである。
本発明に係るデータベース装置は、上記拡張可能配列がチャンク化拡張可能配列であって、上記データベース記憶部に、上記区画位置情報である、関係テーブルの各レコードに対応するチャンク化拡張可能配列の要素が属するチャンクのチャンク番号と、上記区画内オフセットであるチャンク内オフセットとの2項組表現をキー値として登録した、上記要素位置B+木データである第2のB+木データとともに、関係テーブルのカラム値ごとに設けられ、該カラム値からチャンク化拡張可能配列のチャンクサブ配列情報の位置を表す添字とチャンク内での添字の2項組表現に変換するための第1のB+木データと、チャンクサブ配列情報としてチャンク配列拡張の時間的順序を登録した経歴値テーブルと、チャンクサブ配列内のチャンクの番号を計算する1次関数の係数からなる係数ベクトルをチャンクサブ配列ごとに登録した係数テーブルと、カラム値の情報として、拡張可能配列の添字ごとに対応する該カラム値またはカラム値が格納されている記憶領域へのポインタからなるカラム値テーブルと、該カラム値を持つすべてのレコード数を登録したレコード数テーブルと、を格納したことを特徴としている。
また、本発明に係るデータベース装置は、検索要求に対して、上記第2のB+木データより検索要求に対応するチャンク番号とチャンク内オフセットとの2項組を検索するレコード検索部を具備することを特徴としている。
また、本発明に係るデータベース装置は、新たなカラム値を持つレコードを挿入するとき、上記第1のB+木データにそのカラム値を登録して、チャンク化拡張可能配列を拡張し、上記経歴値テーブルおよび上記係数テーブルに経歴値および係数をそれぞれ登録し、上記レコード数テーブルに初期値を登録するとともに、当該拡張可能配列の要素が所属するチャンクのチャンク番号とチャンク内オフセットとの2項組表現をキー値として上記第2のB+木データへ挿入するレコード挿入部を具備することを特徴としている。
また、本発明に係るデータベース装置は、1つのレコードを削除するとき、チャンク番号とチャンク内オフセットの2項組を上記第2のB+木データから削除するとともに、上記レコード数テーブルのレコード数を1だけ減算するレコード削除部を具備することを特徴としている。
そして、上記の構成により、本発明のデータベースは、関係テーブルのカラム値ごとに設けられ、該カラム値からチャンク化拡張可能配列のチャンクサブ配列情報の位置を表す添字とチャンク内での添字の2項組表現に変換するための第1のB+木データと、関係テーブルの各レコードに対応するチャンク化拡張可能配列の要素が属するチャンクのチャンク番号とチャンク内オフセットの2項組表現をキー値として登録した第2のB+木データと、チャンクサブ配列情報としてチャンク配列拡張の時間的順序を登録した経歴値テーブルと、チャンクサブ配列内のチャンクの番号を計算する1次関数の係数からなる係数ベクトルをチャンクサブ配列ごとに登録した係数テーブルと、カラム値の情報として、拡張可能配列の添字ごとに対応するカラム値またはカラム値が格納されている記憶領域へのポインタからなるカラム値テーブルと、該カラム値を持つすべてのレコード数を登録したレコード数テーブルとよりなるデータ構造を有している。
n個のカラムからなる関係テーブルのレコードは、n次元拡張可能配列のn個の添字の組で表される。
本発明では、この添字の組は新たなカラム値を持つレコードの追加により拡張付加されるn次元のチャンクサブ配列の付加順を表す拡張経歴値とチャンクサブ配列内のオフセットの2項組で表される。すなわち、nが大きくなれば関係テーブルのレコード長は大きくなるが、nにかかわらず、チャンク番号およびチャンク内オフセットの2項組でレコードを表している。したがって、特にカラム数の多い関係テーブルの場合でも、極めて記憶効率がよいという効果を奏する。また、存在しているレコードについてのみ、対応する2項組をキー値としてB+木に登録しており、この点からも記憶効率が向上するという効果を奏する。さらに、B+木の利用により、高速検索処理が可能であるという効果を奏する。
上述の(1)(2)のデータベース構成のいずれにおいても、拡張可能配列を使用するとき、存在しないレコードは実際に記憶域として確保する必要はないものの、膨大な論理記憶空間を必要とする。この記憶空間は、使用するコンピュータのアドレス長をaとすると2aとなり、このサイズを超えるアドレス(オフセット値)を扱うことができない。従来の研究では、この点に関する指摘はなく、したがって、その解決策も示されていない。このことに関する本発明の重要なポイントの1つは、この解決策を関係テーブルの垂直分割技法として提示している点である(〔発明を実施するための最良の形態〕の2.2節参照)。また、本技法は、一意キーテーブルに基づいている(同2.1節参照)。この垂直分割技法を使えば、大規模関係テーブルを効率よく取り扱うことが可能であり、検索速度がさらに向上するという効果を奏する。
本発明のさらに他の目的、特徴、および優れた点は、以下に示す記載によって十分わかるであろう。また、本発明の利益は、添付図面を参照した次の説明で明白になるであろう。
本発明は、拡張可能配列の考え方に基づき、経歴・オフセット法と呼ぶ関係データベーステーブル(関係テーブル)の新しい実装方式を示している。n個のカラムからなる関係テーブルのレコードはn次元拡張可能配列のn個の添字の組で表される。本発明では、この添字の組は、新たなカラム値を持つレコードの追加により拡張付加されるn−1次元のサブ配列の付加順を表す拡張経歴値とサブ配列内のオフセットとの2項組で表される。本発明の実装方式は、2項組をキー値とするB+木を主データ構造として、従来の実装方式より高速処理可能であり、かつ、記憶コストも低い。また、本発明の実装方式では、関係テーブルのカラム数が多く、カラム値の数が増加する場合にはオフセットの空間がオーバーフローする可能性があるが、この点についても、後述のとおり経歴・オフセット法の利点を劣化させずに克服できる。
上記のように、本発明は、関係テーブルのレコード集合を拡張可能な多次元配列で実装することにより、新たなカラム値を持つレコード挿入に対処できるとともに、アドレス関数を使ってレコードの格納位置を高速に検索可能とするものである。それゆえ、本発明によれば、大規模なテーブルを従来技術より効率よく扱うことが可能であり、産業上の多くの分野に適用できる。
以下、本発明の実施の形態について詳細に説明する。
〔前提となる技術〕
まず、本発明の前提となる技術である「拡張可能配列」について説明する。なお、本発明のテーブル実装方式を、「経歴・オフセット法」(History−offset implementation of Relational Table:HORT)と呼ぶこととする。HORTは以下に説明する拡張可能配列の考え方に基づいている。
まず、本発明の前提となる技術である「拡張可能配列」について説明する。なお、本発明のテーブル実装方式を、「経歴・オフセット法」(History−offset implementation of Relational Table:HORT)と呼ぶこととする。HORTは以下に説明する拡張可能配列の考え方に基づいている。
拡張可能配列(extendible array)は、実行時に動的に任意の次元方向にそのサイズを拡張できる配列である。拡張可能配列では拡張部分のみが動的に割付けられ、拡張前の配列要素のデータは再配置することなくそのまま利用される。配列サイズがあらかじめ予測不能な場合や、必要サイズが実行環境の変化に応じて動的に変化し得るような種々のアプリケーション分野において使用することができる。拡張可能配列のモデルとしてE.J.Otoo等により提案されたインデックス配列モデル(非特許文献2)はインデックス配列用の記憶域を付加することにより高速に配列要素を参照することができ、例えばハッシュを使った他の方式(非特許文献1)より優れていることが示されている。また、非特許文献3は、このインデックス配列の構造化について述べているが、このことは本発明とは視点が全く異なる。また、非特許文献2〜4はいずれも、〔発明が解決しようとする課題〕の問題点(b)は取り上げておらず、拡張可能配列のサブ配列のための連続記憶領域を必要としており、実用的には使用できない。なお、本発明のベースは、このインデックス配列モデルの考え方に基づいており、ここでは、このモデルについてその概略を述べる。
ある次元方向の配列拡張はその次元を除くn−1次元の配列断面に相当するサイズの連続するメモリ領域(サブ配列という)を確保し、Aに追加することによって行われる。非特許文献2では、拡張時に確保されるサブ配列はメモリ領域の0番地から拡張の順に、順次、連続領域に割り付けられることを前提としている。通常行われるメモリの動的割付けにおいては、必ずしもメモリの連続領域を割り付けるとは限らない。このことをはじめ、現実の使用に即したいくつかの改良を施したモデルが非特許文献4で提案されている。以下では、非特許文献4のモデルについて述べる。
n次元拡張可能配列Aは1つの経歴値カウンタと次元ごとに3種類の補助テーブルを有している。これらの補助テーブルは経歴値テーブル、アドレステーブル、および係数テーブルと呼ばれる。経歴値テーブルは、配列拡張の時間的順序を表す1次元配列であり、配列拡張が行われるたびに、固定配列のn−1次元のサブ配列が動的に割り付けられ、アドレス番地テーブルにその先頭番地が記録される。また、現在の経歴値カウンタが1インクリメントされ、その値が経歴値テーブルに順次記録される。拡張可能配列およびサブ配列の各次元の添字はいずれも0から始まり、次元は1から数えるものとし、配列の1要素のサイズは1とする。
例えば、各次元のサイズが[s1,s2,s3,s4]の通常の固定サイズの4次元配列要素をメモリ上に次元1〜4の順に優先して割り付ける場合、要素<i1,i2,i3,i4>のアドレスはよく知られているように、
s2s3s4i1+s3s4i2+s4i3+i4 (1)
なるi1,i2,i3,i4に関する1次関数を計算して得られる。
s2s3s4i1+s3s4i2+s4i3+i4 (1)
なるi1,i2,i3,i4に関する1次関数を計算して得られる。
これに対して、例えば現在のサイズが[s1,s2,s3,s4]の4次元拡張可能配列の場合には、次元2の方向に一つ拡張するとき、サイズ[s2,s3,s4]の3次元サブ配列Sが動的に確保される。アドレステーブルは各サブ配列の先頭アドレスを保持する1次元配列である。要素<i1,i2,i3,i4>が格納されているアドレスはSの先頭番地に数式(1)で計算されるオフセットを加えればよい。
Aが3次元以上の拡張可能配列の場合には、サブ配列内の要素のオフセットを計算する1次関数のn−2個の係数からなる係数ベクトルをサブ配列ごとに記録する係数テーブルを各次元について必要とする。例えば、上記サブ配列Sの要素<i1,i2,i3>のオフセットは数式(1)と同様、1次関数s3s4i1+s4i2+i3となる。このとき、(s3s4,s4)がSの係数ベクトルである。係数ベクトルの値は拡張時のAの各次元のサイズに依存しているので、拡張時に係数ベクトルを計算し、それを拡張次元の係数テーブルのスロットに書き込む。
配列要素へのアクセスは次のように行われる。図45において、次元1方向および次元2方向の経歴値テーブルをそれぞれH1,H2とし、またアドレステーブルをそれぞれA1,A2とする。例えば配列要素<3,4>のアドレス計算は次のように行われる。H1[3]<H2[4]であるから、要素<3,4>を含むサブ配列Sは経歴値H2[4]=7のときに割付けられ、その先頭アドレスはA2[4]=60である。また、要素[3,4]はSでは要素<3>であるので、求めるアドレスは63となる。
〔実施の形態〕
本発明の一実施の形態について図1から図42に基づいて説明すれば、以下のとおりである。まず、本発明に係る関係テーブルの記憶、操作方式とその実現ソフトウェアについて説明する。
本発明の一実施の形態について図1から図42に基づいて説明すれば、以下のとおりである。まず、本発明に係る関係テーブルの記憶、操作方式とその実現ソフトウェアについて説明する。
1.HORTの基本データ構造とその操作
1.1 HORTの基本データ構造
図2は、本実施の形態に係る関係テーブルのHORTによる表現例を示す説明図である。n個のカラムからなる関係テーブルTはn次元HORTにより実装される。n次元HORTは次のデータ構造からなる。
(1)n個のCVT(key−subscript ConVersion Tree)とRDT(Real Data Tree)のn+1個のB+木。
(2)〔前提となる技術〕において説明した「拡張可能配列」の3種類の補助テーブルの内、経歴値テーブル、および係数テーブル。
(3)添字ごとにその添字に対応するカラム値を持つすべてのレコード数を記録するレコード数テーブル。
1.1 HORTの基本データ構造
図2は、本実施の形態に係る関係テーブルのHORTによる表現例を示す説明図である。n個のカラムからなる関係テーブルTはn次元HORTにより実装される。n次元HORTは次のデータ構造からなる。
(1)n個のCVT(key−subscript ConVersion Tree)とRDT(Real Data Tree)のn+1個のB+木。
(2)〔前提となる技術〕において説明した「拡張可能配列」の3種類の補助テーブルの内、経歴値テーブル、および係数テーブル。
(3)添字ごとにその添字に対応するカラム値を持つすべてのレコード数を記録するレコード数テーブル。
(2)と(3)は拡張可能配列の各次元サイズと同一要素数を持つ一次元配列であることから、次元ごとに確保されるこれら3種類の補助テーブルを以降において、まとめて“HORTテーブル”と呼ぶ。したがって、HORTテーブルは一次元配列でありその添字iのスロット(要素)はこれら3種類の補助テーブルの添字iのスロットをまとめたものである。さらに、上記(1)(2)(3)のデータ構造からなるHORTは以降でHORTデータ構造とも言う。
Tの各カラムに対して1つのCVTが作成される。CVTはカラム値から〔前提となる技術〕において説明した拡張可能配列の添字に変換するB+木である。テーブルレコードのカラム値のn項組をr=<c1,c2,・・・,cn>とすれば、これらn個のCVTを使って、rは配列添字のn項組I=<i1,i2,・・・,in>に変換される。上述した拡張可能配列が記憶領域上にrとIの対応を保って実現されているならば、要素1について、拡張可能配列の要素のアドレス計算手順にしたがって、そのアドレスを求めることができる。
本発明では、経歴値とサブ配列が1対1に対応していることに注目して、添字の組Iで表される配列要素をそれが属するサブ配列の経歴値hとサブ配列内でのオフセット(サブ配列内オフセット、以下単に「オフセットと表記することがある)oの2項組<h,o>で表す。次元数nが大きくても2項組で表現できることに注意されたい。HORTデータ構造により表現される関係テーブルのレコード集合をR={r1,r2,・・・,rm}とする。このとき、レコードri∈R(i=1,・・・,m)について、それに対応する拡張可能配列要素の経歴値とオフセットの2項組表現<hi,oi>がキー値としてRDTに格納される。なお、上述した拡張可能配列のサブ配列のための連続記憶領域は確保されない。この意味で、キー値が置かれる論理空間である拡張可能配列を以後、論理拡張可能配列という。キー値は関係テーブルのレコードそのものを表現しており、Rに存在しているレコードについてのみ、そのキー値がRDTに登録される。従って、発明が解決しようとする課題で述べた問題点(b)は解決される。なお、キー値である2項組<h,o>においてhの記憶バイトはoの記憶バイトよりも上位に配置される。したがって、同一経歴値を持つキー値集合はRDTのシーケンスセット上でoの昇順に連続的に配置されている。
存在しているレコードのみ登録されることから、各次元のCVTへの挿入、削除に伴って、CVTの保守をする必要がある。すなわち、新たなカラム値vを持つレコードがHORTデータ構造に登録されるときには、CVTにそのカラム値を登録後、論理拡張可能配列が拡張される。このとき、経歴値テーブル、および係数テーブルに値を記入後、上記(3)のレコード数を記録する補助テーブルに初期値として1を記入する。以後、同じカラム値vを持つレコードの挿入、削除が行われるたびに、RDTへの挿入、削除が行われると共に、この補助テーブルの当該レコード数の値が増減される。削除により、カラム値vを有するレコードが無くなった場合には、CVTからもカラム値vは削除される。なお、このレコード数の情報は、Tに対する検索処理の最適化等において、参照できる。
CVTに登録されていたカラム値が削除される場合、HORTテーブルに使用しない空きスロットができてしまう。ここではこのような空きスロットがリストで繋がれて、再利用される。リストの連結には、上記HORTの基本データ構造の(3)のレコード数のフィールドが使われ、経歴値をはじめ他の情報はすべてそのまま、再利用時に使用される。CVTに新たなカラム値が登録される場合には、まず、この空きスロットリストが調べられ、リストが空でない場合には、その先頭空きスロットをそのまま使用し、その添字をCVTに登録する。論理拡張配列の拡張は行われない。リストが空の場合に、はじめてその次元の論理拡張配列の拡張を行う。
1.2関係テーブル操作に対するHORT基本データ構造の操作
関係テーブルTのカラムの組をC=<C1,C2,・・・,Cn>として、Tのレコード集合をRとする。重複を排したCiのカラム値の集合をVi={vi|r=<v1,・・・,vi,・・・,vn>∈R,1≦i≦n}とする。また、Viの各カラム値を経歴値テーブルの添字の値にマッピングする次元iのCVTをCVTiと表記する。さらに次元iのHORTテーブルをHTiと表記し、その空きスロットリストをSLiと表記する。
関係テーブルTのカラムの組をC=<C1,C2,・・・,Cn>として、Tのレコード集合をRとする。重複を排したCiのカラム値の集合をVi={vi|r=<v1,・・・,vi,・・・,vn>∈R,1≦i≦n}とする。また、Viの各カラム値を経歴値テーブルの添字の値にマッピングする次元iのCVTをCVTiと表記する。さらに次元iのHORTテーブルをHTiと表記し、その空きスロットリストをSLiと表記する。
(1)レコードr=<v1,v2,・・・,vn>の検索
まず、関係テーブルTのレコードr=<v1,v2,・・・,vn>のすべてのカラム値が指定された場合のレコードの存在判定について述べる。n個のCVTを検索して添字のn項組I=<CVT1(v1),CVT2(v2),・・・,CVTn(vn)>を求める。すべてのカラム値Vi(1≦i≦n)がCVTiに登録されていれば、上述した拡張可能配列の要素のアドレス計算手順にしたがって、経歴値とオフセットの組<h,o>を求める。この<h,o>をキー値としてRDTを検索し、存在していれば、rがTに存在する。対応するCVTに登録されていないカラム値が存在するときには、rはTに存在しない。
まず、関係テーブルTのレコードr=<v1,v2,・・・,vn>のすべてのカラム値が指定された場合のレコードの存在判定について述べる。n個のCVTを検索して添字のn項組I=<CVT1(v1),CVT2(v2),・・・,CVTn(vn)>を求める。すべてのカラム値Vi(1≦i≦n)がCVTiに登録されていれば、上述した拡張可能配列の要素のアドレス計算手順にしたがって、経歴値とオフセットの組<h,o>を求める。この<h,o>をキー値としてRDTを検索し、存在していれば、rがTに存在する。対応するCVTに登録されていないカラム値が存在するときには、rはTに存在しない。
つづいて、rのカラム値の内、{Vi1,・・・,Vik}の値が検索条件として指定された場合、該当レコードの検索について述べる。k個のCVTを検索して添字CVTi1(vi1),CVTi2(vi2),・・・,CVTik(vik)を求める。指定されたカラム値が登録されていないCVTが存在すれば、当該レコードは存在しない。すべて登録されているときには、求めた添字に対応するサブ配列の拡張経歴値を得て、最小と最大の拡張経歴値hminおよびhmaxを選び出す。さらに、hmin≦h≦hmaxなる拡張経歴値hを持つサブ配列全てにおいて各指定添字を持つレコードを検索する。同一経歴値を持つキー値集合はRDTのシーケンスセット上でオフセットoの昇順に連続的に配置されている。hを経歴値として持つRDTのキー値<h,o>を逐次シーケンスセット上でアクセスし、下記〔1.3 経歴値、オフセットからカラム値への逆変換〕に述べる手順にしたがって、<h,o>から、添字のn項組I=<i1,i2,・・・,in>を求める。検索条件で指定されたk個の次元について、先に求めたk個の添字CVTi1(vi1),CVTi2(vi2),・・・,CVTik(vik)にすべて、一致しているならば、<h,o>を検索結果に含める。
図3に、後者、すなわち、複数のカラム値が指定されない場合の検索アルゴリズムの擬似コードリストを示す。
(2)レコードr=<v1,v2,・・・,vn>の挿入
n個のCVTを検索して添字のn項組I=<CVT1(v1),CVT2(v2),・・・,CVTn(vn)>を求める。すべてのカラム値vi(1≦i≦n)がCVTiに登録されていれば、(1)と同様にして<h,o>をキー値としてRDTを検索する。存在していなければ、<h,o>をキー値としてRDTに登録する。rのn個のカラム値の内、対応するCVTに登録されていないカラム値が存在する場合、それらの拡張可能配列での対応次元を次元の昇順にd1,d2,・・・,dk(1≦k≦n)とする。この次元順で各次元di(1≦i≦k)について、順次、以下の(a)(b)を行う。
n個のCVTを検索して添字のn項組I=<CVT1(v1),CVT2(v2),・・・,CVTn(vn)>を求める。すべてのカラム値vi(1≦i≦n)がCVTiに登録されていれば、(1)と同様にして<h,o>をキー値としてRDTを検索する。存在していなければ、<h,o>をキー値としてRDTに登録する。rのn個のカラム値の内、対応するCVTに登録されていないカラム値が存在する場合、それらの拡張可能配列での対応次元を次元の昇順にd1,d2,・・・,dk(1≦k≦n)とする。この次元順で各次元di(1≦i≦k)について、順次、以下の(a)(b)を行う。
(a)次元diの空きスロットリストSLiが空でなければ、SLiの先頭が指示するHTiの空きスロットを得て、そのレコード数のフィールドを0に初期化する。SLiが空の時には論理拡張可能配列の次元diを1つ拡張して、拡張したHTiの空きスロットに、経歴値カウンタの値を1増加させて、拡張経歴値として書き込むと同時に係数ベクトルを計算して書き込む。
(b)CVTiに(Vdi、(a)で確保した空きスロット番号)を挿入するとともに、(a)で確保した空きスロットのレコード数のフィールドを1インクリメントする。
なお、図4は、以上のレコード挿入のアルゴリズムを示す擬似コードリストである。
(3)レコードr=<v1,v2,・・・,vn>の削除
(1)に従って、rを検索する。存在するならば、rに対応するのキー値を削除してから、CVTおよびHTのメンテナンスを行う。
(1)に従って、rを検索する。存在するならば、rに対応するのキー値を削除してから、CVTおよびHTのメンテナンスを行う。
なお、図5は、以上のレコード削除のアルゴリズムを示す擬似コードリストである。
1.3 経歴値、オフセットからカラム値への逆変換
関係テーブルTのレコードはHORTデータ構造においては、論理拡張可能配列の経歴値とオフセットの組で表され、キー値としてRDTに格納される。そのため、検索結果をユーザに返す際には該当するレコードのキー値の集合が返されることになる。検索要求を発行したユーザに対して検索結果を返すには、キー値からカラム値の組としてのレコードに逆変換する必要がある。ここではこの逆変換の方法を示す。
関係テーブルTのレコードはHORTデータ構造においては、論理拡張可能配列の経歴値とオフセットの組で表され、キー値としてRDTに格納される。そのため、検索結果をユーザに返す際には該当するレコードのキー値の集合が返されることになる。検索要求を発行したユーザに対して検索結果を返すには、キー値からカラム値の組としてのレコードに逆変換する必要がある。ここではこの逆変換の方法を示す。
まずHORTから得られた経歴値とオフセットの組を経歴・オフセット法の逆変換により論理多次元配列の各次元の添字に変換する。この変換を高速に行うために、経歴値を添字とする一次元配列SHを用意する。レコード挿入時には経歴値とオフセットの組<h,o>に対して、SH[h]にhが記されるHORTテーブルの次元dとその添字の値kを記入する。変換後の添字の値の組の内、次元dの添字の値はkである。他の次元の添字の値を次元順に<i1,i2,・・・,in−1>とする。これらの添字の値はHTd[k]に記されている係数ベクトルを使って、オフセットoから一意的に求めることができる。上述した拡張可能配列のアドレスを求める一次関数の係数が係数ベクトルに記されているので、係数ベクトルの第1項の係数でオフセットoを割算した商をi1として、余りを順次、第2項から、第n−2項までの係数で割り、商と余りを求めることを繰り返す。i1,i2,・・・,in−2はこの割算の過程で得られる商であり、in−1は最後の割算の余りである。
続いて次元ごとにその添字値をカラム値に変換する。CVTはB+木であるためカラム値から配列添字値の変換はできるが、配列添字値からカラム値への変換はできない。そこで、各次元のHORTテーブルの各スロットにそれぞれ対応するカラム値を格納する領域を増設し、新たなレコードを挿入する時にその領域にカラム値を格納することにする。ただし、カラム値の型が文字列型やLONG型のサイズを超える場合、カラム値を格納する領域にはカラム値そのものではなくカラム値が格納されている記憶領域へのポインタを格納する。これによりカラム値と配列添字値の双方向変換が可能になり、次元ごとに得た配列添字値からカラム値を得、それらを次元順に並べてレコードとして得ることができる。
2.経歴値、オフセット空間のオーバーフローとその対策
RDTに格納するキー値である<経歴値,オフセット>の型は最大サイズの単純型であるlong型とすれば、実装上、効率がよい。例えば、long型が64bitの計算機上では上位24bitに拡張経歴値、下位40bitにオフセットというように分割する。この場合、特にオフセットの空間の制限が厳しく、HORTが表現する関係テーブルのカラム数やそのカラム値の種類が多くなった時、経歴値、オフセットのどちらかがオーバーフローしてしまつ危険性がある。そこでここでは、キー値空間を拡張するために変数を2つ持つことの出来るB+木を作成し、1つ目のキー値に拡張経歴値(int型:32bit)、2つ目のキー値にはオフセット(long型:64bit)をRDTのB+木に格納することとする。ただし、上記の方法を用いたとしてもオーバーフローの発生を遅らせる効果しかなく、根本的な解決にはならない。以下では、このオーバーフローに対する対策を説明する。なお、2.3節では「チャンク化経歴・オフセット法」として、異なる発想による、経歴値・オフセット空間のオーバーフローの遅延対策を提案している。
RDTに格納するキー値である<経歴値,オフセット>の型は最大サイズの単純型であるlong型とすれば、実装上、効率がよい。例えば、long型が64bitの計算機上では上位24bitに拡張経歴値、下位40bitにオフセットというように分割する。この場合、特にオフセットの空間の制限が厳しく、HORTが表現する関係テーブルのカラム数やそのカラム値の種類が多くなった時、経歴値、オフセットのどちらかがオーバーフローしてしまつ危険性がある。そこでここでは、キー値空間を拡張するために変数を2つ持つことの出来るB+木を作成し、1つ目のキー値に拡張経歴値(int型:32bit)、2つ目のキー値にはオフセット(long型:64bit)をRDTのB+木に格納することとする。ただし、上記の方法を用いたとしてもオーバーフローの発生を遅らせる効果しかなく、根本的な解決にはならない。以下では、このオーバーフローに対する対策を説明する。なお、2.3節では「チャンク化経歴・オフセット法」として、異なる発想による、経歴値・オフセット空間のオーバーフローの遅延対策を提案している。
2.1 一意キーテーブル
経歴値−オフセット空間のオーバーフローの原因の一つとして、一意キーの存在がある。一意キーとは、例えば「学生番号」、「運転免許証の登録番号」、「社員番号」のように、カラム値の重複が起こり得ないカラムのことである。このようなカラムが、HORTで表現しようとする関係テーブルに存在していた場合、レコードが1つ挿入されるたびに必ず論理拡張可能配列の拡張が起こるため、経歴値やサブ配列のサイズが大きくなり、経歴値−オフセット空間のオーバーフローが早まる。
経歴値−オフセット空間のオーバーフローの原因の一つとして、一意キーの存在がある。一意キーとは、例えば「学生番号」、「運転免許証の登録番号」、「社員番号」のように、カラム値の重複が起こり得ないカラムのことである。このようなカラムが、HORTで表現しようとする関係テーブルに存在していた場合、レコードが1つ挿入されるたびに必ず論理拡張可能配列の拡張が起こるため、経歴値やサブ配列のサイズが大きくなり、経歴値−オフセット空間のオーバーフローが早まる。
例として5次元のHORTにおいて、一意キーが1つ存在する場合と、一意キーが存在しない場合それぞれの挿入可能レコード数を、カラム値の重複度(レコード数/カラム値の種類)の関係とともに図6に示す。ここで、あるカラムの“カラム値の重複度”とはあるカラム値を持つレコード数の平均であり、テーブルのレコード総数をカラム値の種類の数で割った値である。図6では全てのカラムについて、カラム値の重複度は同一である。
図6からわかるように、関係テーブルに一意キーが存在する場合、それを表現するHORTに挿入することができるレコード数が極端に減少している。そこで、経歴値−オフセット空間のオーバーフローを加速させる一意キーを、他のカラムとは別に管理し、一意キー以外のカラムのみによって論理拡張可能配列を構成することによって、一意キーの存在による経歴値−オフセット空間のオーバーフローを遅らせることができる。
一意キー「学生番号」をもつ関係テーブル「学生名簿」を想定し、この例を用いたHORTの構成について説明する。図7にその構成を示す。
一意キーではないカラム「氏名」、「性別」によって2次元の論理拡張可能配列を持つHORTデータ構造を構成し、そのRDTには、HORTの2次元論理拡張可能配列上でのレコードの位置を示す、経歴値とオフセットの組を得る。
次に、一意キーである「学生番号」についてはこれまでのHORTデータ構造とは別に、従来の手法で実現される関係テーブルとして一意キーテーブルを二次記憶上に構成する。その1レコードには一意キーのカラム値と、他のカラム値によってHORTデータ構造から得られる経歴値とオフセットの組を格納する。さらにRDTには、キー値として、経歴値とオフセットの組を、また、データ値として、一意キーのカラム値に対する一意キーテーブルのスロットの添字を挿入しておく。
上記のような構成にすることにより、一意キーの値が指定された場合には、一意キーテーブルの該当スロットに格納されている経歴値とオフセットの組から、経歴、オフセット法の逆変換により一意キーではない他のカラムの値を得ることができ、逆に一意キー以外のカラム値が指定された場合には、HORTデータ構造であるRDTから経歴値とオフセットの組をキー値として、そのデータ値、つまり対象のレコードが格納されている一意キーテーブルのスロット番号を得ることができるので、対応する一意キーの値を得ることができる。
図8は、図6のグラフに一意キーを上記の方法で別に管理した場合を追加したグラフである。図8からわかるように、一意キーを別管理した場合のHORTに挿入することができるレコード数が、格段に増大している。これは、一意キーを別に管理することによって、HORTが管理する論理拡張可能配列の次元が5次元から4次元に減り、さらに一意キーであるカラムが論理拡張可能配列内に存在しない状態になるため、HORTテーブルや論理サブ配列のサイズを抑えられているためである。
一意キーに対してはHORTテーブルが不要になる。HORTテーブルは拡張経歴値や係数ベクトル、レコード数のカウンタ、などを持っているため一意キーブルよりも大きな領域を要するテーブルであった。そのため、上記の一意キーの別管理方式を用いることで、空間的コストを減少させることができる。以下では、一意キーを別管理した場合のHORTにおけるレコードの挿入、削除、検索の各アルゴリズムについて説明する。
2.1.1 レコードの挿入
一意キーテーブルを用いたHORTにレコードを挿入する場合、まず、一意キーに対応するCVTに一意キーの値がすでに挿入されているかどうかを調べる。もし、すでにその値がCVT内に挿入されていた場合、一意キーの重複が発生してしまうため例外処理としてレコードの挿入を中止する。存在しなかった場合、一意キーテーブルの空きスロットの添字(空きスロットが無ければ最後尾に追加する)を得、挿入するレコードの一意キーの値をキー値、得た空きスロットの添字をデータ値としてCVTに格納する。
一意キーテーブルを用いたHORTにレコードを挿入する場合、まず、一意キーに対応するCVTに一意キーの値がすでに挿入されているかどうかを調べる。もし、すでにその値がCVT内に挿入されていた場合、一意キーの重複が発生してしまうため例外処理としてレコードの挿入を中止する。存在しなかった場合、一意キーテーブルの空きスロットの添字(空きスロットが無ければ最後尾に追加する)を得、挿入するレコードの一意キーの値をキー値、得た空きスロットの添字をデータ値としてCVTに格納する。
次に、一意キー以外の各カラム値を従来と同じように論理拡張可能配列に挿入する。これにはまず、カラム値の集合に対応する経歴値とオフセットの組を得る。そして、経歴値とオフセットの組をキー値、一意キーテーブルの空きスロットの添字をデータ値としてRDTに挿入し、一意キーテーブルの空きスロットには、一意キーの値と経歴値とオフセットの組を格納する。
なお、図9は、以上の一意キーを持つレコードの挿入のアルゴリズムを示す擬似コードリストである。
2.1.2 レコードの削除
一意キーテーブルを用いたHORTからレコードを削除する場合は、まず、削除したいレコードについて、一意キーカラムの値が格納されている一意キーテーブルのスロットを調べ、該当するスロットが無い場合は、エラーを返す。存在した場合には、一意キーテーブルのスロットから得られた経歴値とオフセットの組が、削除対象のレコードに対する経歴値とオフセットの組と等しいかを調べる。一致した場合には、一意キーテーブルの空きスロットを管理するリストに削除対象のレコードの情報が格納されているスロットの添字を追加し、一意キーカラム値に対応するCVTから、削除したいレコードの一意キーカラム値を削除する。
一意キーテーブルを用いたHORTからレコードを削除する場合は、まず、削除したいレコードについて、一意キーカラムの値が格納されている一意キーテーブルのスロットを調べ、該当するスロットが無い場合は、エラーを返す。存在した場合には、一意キーテーブルのスロットから得られた経歴値とオフセットの組が、削除対象のレコードに対する経歴値とオフセットの組と等しいかを調べる。一致した場合には、一意キーテーブルの空きスロットを管理するリストに削除対象のレコードの情報が格納されているスロットの添字を追加し、一意キーカラム値に対応するCVTから、削除したいレコードの一意キーカラム値を削除する。
次に、RDTから削除したいレコードの経歴値とオフセットの組を削除する。このとき、同じ経歴値とオフセットの組を持つレコードが複数存在した場合には、先ほど削除した一意キーテーブルのスロットの添字をデータ値として持つエントリのみを削除する。
さらに、従来のHORTからのレコードの削除と同様に、各CVTおよびHORTテーブルについて、削除に必要なメンテナンス行う。
なお、図10は、以上の一意キーを持つレコードの削除のアルゴリズムを示す擬似コードリストである。
2.1.3 レコードの検索
検索において、一意キーの値が指定された場合には、まず一意キーに対応するCVTを検索し、一意キーテーブルの添字を得る。一意キーテーブルには、一意キー以外のカラムで構成された論理拡張可能配列の経歴値とオフセットの組が格納されているので、従来どおり経歴値・オフセットの逆変換により、他の指定カラムが指定された値であるかどうかを調べればよい。このように、一意キーが指定された場合には、RDTの検索を行う必要がないため、高速に検索を行うことができる。
検索において、一意キーの値が指定された場合には、まず一意キーに対応するCVTを検索し、一意キーテーブルの添字を得る。一意キーテーブルには、一意キー以外のカラムで構成された論理拡張可能配列の経歴値とオフセットの組が格納されているので、従来どおり経歴値・オフセットの逆変換により、他の指定カラムが指定された値であるかどうかを調べればよい。このように、一意キーが指定された場合には、RDTの検索を行う必要がないため、高速に検索を行うことができる。
また、一意キーが検索条件として指定されなかった場合には、従来どおり、論理拡張可能配列内でレコードが存在し得る範囲の経歴値とオフセットの組を求めて、RDTの検索を行えばよい。さらに、RDTには経歴値とオフセットの組とともに一意キーテーブルの添字が格納されているので、この添字を用いて一意キーテーブルにアクセスし、一意キーの値を得ることができる。
なお、図11は、以上の一意キーを持つレコードの検索のアルゴリズムを示す擬似コードリストである。
2.1.4 一意キーが複数存在する場合のHORTの構成
関係テーブルに一意キー値を持つカラムが複数存在する場合は、一意キーテーブルに全ての一意キーカラムの値を格納し、各一意キーのカラム値を管理するCVTそれぞれにその一意キーテーブルのスロットの添字を格納しておく。
関係テーブルに一意キー値を持つカラムが複数存在する場合は、一意キーテーブルに全ての一意キーカラムの値を格納し、各一意キーのカラム値を管理するCVTそれぞれにその一意キーテーブルのスロットの添字を格納しておく。
図12に、図7の例に、一意キーとしてメールアドレスが追加されたときの一意キーテーブルの様子を示す。一意キーテーブルには、各レコードの一意キーカラムの値である、学生番号とメールアドレス、RDTに格納されている経歴値とオフセットの組を格納する。そして、各一意キーに対応するCVTには、一意キーのカラム値と一意キーテーブルの添字の組を格納する。一意キーテーブルを共有することで、さらに空間的コストの減少が可能である。また、レコードの挿入や削除、検索のアルゴリズムは、一意キーテーブルに複数の一意キーのカラム値が格納されていること以外、一意キーが1つの場合とほぼ同じである。
2.2 関係テーブルの垂直分割管理
HORTが扱っている関係テーブルに新たなレコードが挿入され、その際に論理拡張可能配列の拡張が行われて経歴値−オフセット空間のオーバーフローがおきる場合、現在扱っている関係テーブルを2つのカラム集合の組に分割する。そして、分割したそれぞれの関係テーブルについて、従来どおり論理拡張可能配列を構成し、経歴値とオフセットの組をそれぞれのRDTに格納する。この時、2つに分割された関係テーブル間の関係を保つために、上述した一意キーテーブルを利用する。一意キーテーブルには、1個もしくは複数個の一意キーカラムの値と、経歴値とオフセットの組を格納していた。この一意キーテーブルには、元の関係テーブルが持つ1個もしくは複数個の一意キーの値と、分割された関係テーブル全てがそれぞれに持つRDTに格納されている経歴値とオフセットの組を格納する。これにより、一意キーの値が1つわかれば、各分割テーブルに対応するRDTの経歴値とオフセットの組と、すべての一意キーの値が得られる。また、一つのRDTに格納されている経歴値とオフセットの組がわかれば、他のRDTに格納されている経歴値とオフセットの組とすべての一意キーの値を知ることができる。
HORTが扱っている関係テーブルに新たなレコードが挿入され、その際に論理拡張可能配列の拡張が行われて経歴値−オフセット空間のオーバーフローがおきる場合、現在扱っている関係テーブルを2つのカラム集合の組に分割する。そして、分割したそれぞれの関係テーブルについて、従来どおり論理拡張可能配列を構成し、経歴値とオフセットの組をそれぞれのRDTに格納する。この時、2つに分割された関係テーブル間の関係を保つために、上述した一意キーテーブルを利用する。一意キーテーブルには、1個もしくは複数個の一意キーカラムの値と、経歴値とオフセットの組を格納していた。この一意キーテーブルには、元の関係テーブルが持つ1個もしくは複数個の一意キーの値と、分割された関係テーブル全てがそれぞれに持つRDTに格納されている経歴値とオフセットの組を格納する。これにより、一意キーの値が1つわかれば、各分割テーブルに対応するRDTの経歴値とオフセットの組と、すべての一意キーの値が得られる。また、一つのRDTに格納されている経歴値とオフセットの組がわかれば、他のRDTに格納されている経歴値とオフセットの組とすべての一意キーの値を知ることができる。
図13に、関係テーブルの垂直分割とそのHORT表現を使った実装例を示す。
元の関係テーブルに一意キーが存在せず、一意キーテーブルが存在しない場合には、経歴値−オフセット空間のオーバーフローが起こった時点で、関係テーブルの各レコードに一意的に付した番号をカラム値とする一意キーカラムを増設する。この一意キーカラムにより、一意キーテーブルを作成し、分割された各論理拡張可能配列のRDTに格納されている経歴値とオフセットの組を格納する。このように、対象とする関係テーブルを2つのカラム集合の組に分割する方式を垂直分割と呼ぶこととする。
垂直分割では分割する時に、RDT、CVT、HORTテーブル及び一意キーテーブル、これら全てを再構成するため、分割時に大きな時間的コストがかかる。さらに、RDTの分割により、分割前と同じ大きさのB+木が2つ出来るので空間的なコストもかかる。
垂直分割時には、ただ単に2つに分割しただけでは2つの分割テーブルにおける次の分割タイミングに大きな差ができてしまう可能性がある。この差を出来るだけ等しくすることにより、時間的コストの大きい分割タイミングを遅らせることが出来る。2つの分割テーブルにおける次の分割タイミングを出来るだけ等しくするためには、現在の各カラムのカラム値の種類数を調べ、その数がほぼ平等になるように振り分ける。
図14は、以上の関係テーブルの垂直分割のアルゴリズムを示す擬似コードリストである。
また、図15に、HORTのカラム数と各カラムが持つことのできるカラム値の数の関係を示す(各カラムがもつカラム値の数は、全て等しいものとする)。HORTが扱う関係テーブルを垂直に2つに分割すると、前述の通り、分割数分だけのRDTの作成を必要とするため、空間的コストがかかる上、テーブルの分割を行う際に、論理拡張可能配列の再編成と、RDT及び一意キーテーブルの再構築が必要であるので、分割時に大きな時間的コストがかかってしまう。しかし、図15からわかるように、各カラムが持つことのできるカラム値の数は2倍ではなく、2乗のオーダーで増加することになるため、経歴値−オフセット空間のオーバーフローを大きく遅らせることが出来る。
また、さらにレコードの追加により、分割した関係テーブルの経歴値−オフセット空間のオーバーフローが起きた場合には、オーバーフローが起きた関係テーブルについて同様に分割を行うことにより、ほぼ制限なくレコードを挿入することが可能になる。
2.2.1 垂直分割後のレコードの挿入
垂直分割後のHORTへのレコードの挿入は、まず、レコード中の一意キーではないカラムの値を、それぞれの分割テーブルごとに分割する。分割された各カラム値集合をレコードとして対応するHORTに挿入する。各RDTにキー値として挿入した経歴値とオフセットの組を一意キーテーブルに格納する。続いて、一意キーの値をキー値、一意キーテーブルの添字をデータ値として、対応するCVTに挿入し、さらに一意キーテーブルに挿入する。また、各RDTに経歴値とオフセットの組を挿入する際には、一意キーテーブルのスロットの添字をデータ値として一緒に格納しておく。挿入時に経歴一オフセット空間のオーバーフローが起こった場合にはオーバーフローを起こした分割テーブルをさらに垂直に分割する。
垂直分割後のHORTへのレコードの挿入は、まず、レコード中の一意キーではないカラムの値を、それぞれの分割テーブルごとに分割する。分割された各カラム値集合をレコードとして対応するHORTに挿入する。各RDTにキー値として挿入した経歴値とオフセットの組を一意キーテーブルに格納する。続いて、一意キーの値をキー値、一意キーテーブルの添字をデータ値として、対応するCVTに挿入し、さらに一意キーテーブルに挿入する。また、各RDTに経歴値とオフセットの組を挿入する際には、一意キーテーブルのスロットの添字をデータ値として一緒に格納しておく。挿入時に経歴一オフセット空間のオーバーフローが起こった場合にはオーバーフローを起こした分割テーブルをさらに垂直に分割する。
なお、図16は、以上の垂直分割後のレコードの挿入のアルゴリズムを示す擬似コードリストである。
2.2.2 垂直分割後のレコードの削除
分割後のHORTからのレコードの削除は、レコードに一意キーが存在する場合、まず、一意キーに対応するCVTを検索し、削除したいレコードの一意キーカラム値が格納されている一意キーテーブルの添字を得る。そして、その一意キーテーブルのスロットに格納されている、各論理拡張可能配列の経歴値とオフセットの組から各カラム値を求め、削除したいレコードであるかどうかを確認する。その上で、一意キーテーブルのスロットおよび各論理拡張可能配列からレコードの削除を行う。
分割後のHORTからのレコードの削除は、レコードに一意キーが存在する場合、まず、一意キーに対応するCVTを検索し、削除したいレコードの一意キーカラム値が格納されている一意キーテーブルの添字を得る。そして、その一意キーテーブルのスロットに格納されている、各論理拡張可能配列の経歴値とオフセットの組から各カラム値を求め、削除したいレコードであるかどうかを確認する。その上で、一意キーテーブルのスロットおよび各論理拡張可能配列からレコードの削除を行う。
また、レコードに一意キーが存在しない場合は、まず、分割した関係テーブルのうち、1つの関係テーブルについて削除したいレコードに対応する経歴値とオフセットの組を求める。次に、その経歴値とオフセットの組を用いてRDTを検索し、一意キーテーブルの添字を求める。そして、その一意キーテーブルのスロットに格納されている他の論理拡張可能配列の経歴値とオフセットの組から各カラム値を求め、削除したいレコードであるかどうかを確認する。その上で、一意キーテーブルのスロット、各論理拡張可能配列からレコードの削除を行う。
なお、図17は、以上の垂直分割後のレコードの削除のアルゴリズムを示す擬似コードリストである。
2.2.3 垂直分割後のレコードの検索
分割後のレコードの検索は、一意キーカラムの値が指定された場合、まず、その値に対応するCVTを検索し、一意キーテーブルの添字を得る。一意キーテーブルには各論理拡張可能配列の経歴値とオフセットの組が格納されているので、それらを基に各カラムの値が指定された値と一致するかどうかを調べればよい。
分割後のレコードの検索は、一意キーカラムの値が指定された場合、まず、その値に対応するCVTを検索し、一意キーテーブルの添字を得る。一意キーテーブルには各論理拡張可能配列の経歴値とオフセットの組が格納されているので、それらを基に各カラムの値が指定された値と一致するかどうかを調べればよい。
また、一意キーの値が指定されなかった場合には、分割された関係テーブルのうち、指定されたカラムが属している分割テーブル1つについて、従来どおり論理拡張可能配列内でレコードが存在し得る範囲の経歴値とオフセットの組を求めて、RDTの検索を行う。RDTには、経歴値とオフセットの組とともに、一意キーテーブルの添字が格納されているので、この添字を用いて一意キーテーブルにアクセスし、一意キーの値と他の論理拡張可能配列に格納されている経歴値とオフセットの組を得て、それらを基に各カラムの値が指定された値と一致するかどうかを調べればよい。
このように、関係テーブルの垂直分割を行った場合の検索では、一意キーテーブルに対応するCVT、もしくは1つのRDTのみの検索で全てのカラム値を求めることができるため、時間的コストの増大を抑えることができる。
なお、図18は、以上の垂直分割後のレコードの検索のアルゴリズムを示す擬似コードリストである。
2.3 チャンク化経歴・オフセット法
2.3.1 経歴・オフセット空間の問題
上述した経歴・オフセット法では、経歴値が若い部分配列ではオフセット空間のほとんどが使われない。例えば、経歴値が0や1の部分配列のサイズは1である。例として経歴値を32bit、部分配列内での先頭からのオフセットを64bitとする。図19は、n次元の拡張可能配列を、なるべく各次元のサイズが同じになるように拡張していったとき、経歴・オフセット空間がオーバーフローする直前の状態において、有効なアドレスの割合すなわち(拡張可能配列サイズ/296)を示したものである。
2.3.1 経歴・オフセット空間の問題
上述した経歴・オフセット法では、経歴値が若い部分配列ではオフセット空間のほとんどが使われない。例えば、経歴値が0や1の部分配列のサイズは1である。例として経歴値を32bit、部分配列内での先頭からのオフセットを64bitとする。図19は、n次元の拡張可能配列を、なるべく各次元のサイズが同じになるように拡張していったとき、経歴・オフセット空間がオーバーフローする直前の状態において、有効なアドレスの割合すなわち(拡張可能配列サイズ/296)を示したものである。
図19によれば、最もアドレス空間を有効に利用している3次元のときでもアドレス空間の3(%)程度しか使用できないことがわかる。
ここで、図20に示すように、当該拡張可能配列の次元数と同じ次元数で各次元サイズが等しい部分多次元配列をチャンクとして、このチャンクの集合として当該拡張可能配列を管理する。すなわち、これまで、拡張単位は配列要素の集合からなるサブ配列であったが、ここではチャンクの集合からなるチャンクサブ配列単位の拡張とする。拡張可能配列の要素の位置はそれが属するチャンクの番号(チャンク番号)とチャンク内オフセットの対で表す。チャンク番号は、拡張の順に0,1,2,・・・の番号が昇順で付与される。なお、拡張可能配列要素位置の上記指定法をチャンク化経歴・オフセット法と呼ぶ。
チャンク番号の決定にはこれまでの拡張可能配列の要素アドレス決定の手法を用いることとする。すなわち、HORTテーブルは経歴・オフセット法と同じように、チャンク番号を32bit、チャンク内オフセットを64bitとしたとき、チャンクのサイズは264を超えない最大のサイズにすることができる。そのため、有効なアドレスの割合が格段に増加する。
図21は、チャンク単位で拡張を行うn次元の拡張可能配列を、なるべく各次元のサイズが同じになるように拡張していったとき、経歴・オフセット空間がオーバーフローする直前の状態において、有効なアドレスの割合である(拡張可能配列サイズ/296)を示したものである。
図21によれば、チャンク化を行うことで96bitのアドレス空間をより有効に利用可能であることがわかる。アドレス空間をより有効に利用することで、前述の経歴・オフセット法を用いたときよりも、1カラムあたりのカラム値の種類を増やすことができる。
図22に、従来の経歴・オフセット法を用いた場合とチャンク化経歴・オフセット法を用いた場合の1カラムあたりのカラム値の種類を示す。
2.3.2 チャンク化HORTの構造
チャンク化したHORTでは、図20に示すように経歴値テーブル等、前述のHORTテーブル(1.1節HORTの基本データ構造参照)に相当するデータ構造は2段構造となり、これをチャンク化HORTテーブルという。チャンク化HORTテーブルの上段(上位)にはチャンクサブ配列の情報を、下段(下位)にはカラム値の情報を格納する。チャンクサブ配列の情報として、チャンクサブ配列の経歴値、チャンクサブ配列内の先頭チャンク番号、チャンクサブ配列の係数ベクトルを格納する。また、カラム値の情報として、カラム値またはカラム値が格納されている記憶領域へのポインタ、ならびにそのカラム値を持つレコード数のカウンタを保持する。
チャンク化したHORTでは、図20に示すように経歴値テーブル等、前述のHORTテーブル(1.1節HORTの基本データ構造参照)に相当するデータ構造は2段構造となり、これをチャンク化HORTテーブルという。チャンク化HORTテーブルの上段(上位)にはチャンクサブ配列の情報を、下段(下位)にはカラム値の情報を格納する。チャンクサブ配列の情報として、チャンクサブ配列の経歴値、チャンクサブ配列内の先頭チャンク番号、チャンクサブ配列の係数ベクトルを格納する。また、カラム値の情報として、カラム値またはカラム値が格納されている記憶領域へのポインタ、ならびにそのカラム値を持つレコード数のカウンタを保持する。
なお、チャンクの各次元サイズは同一で固定であるので、唯一保持すればよい。
CVTに格納するキー値は前述のCVTと同様、その次元のカラム値またはカラム値が格納されている記憶領域へのポインタであり、データ値は、チャンク化HORTテーブルの上段の添字(例えば32bit)とチャンク内での添字(例えば32bit)の2つの値の連接(例えば64bit)である。また、チャンク番号を、(そのチャンクが含まれるチャンクサブ配列が属している次元、その添字)の組に対応付けるための一次元配列が必要になるが、これは前述のHORTの経歴値−次元・添字変換テーブル(1.3節経歴値、オフセットからカラム値への逆変換参照)よりも小さくなる。
RDTには関係テーブルのレコードに対応する論理拡張可能配列の有効要素が属するチャンクのチャンク番号と配列要素のチャンク内オフセットの対がキー値として格納される。
2.3.3 関係テーブル操作に対するチャンク化HORT基本データ構造の操作
(1)レコードr=<v1,v2,・・・,vn>の検索
n個のCVTを検索してデータ値のn項組<CVT1(v1),CVT2(v2),・・・,CVTn(vn)>を求める。すべてのカラム値vi(1≦i≦n)がCVTiに登録されているとする。レコードrを含む拡張可能チャンク配列のチャンクの添字の組は各CVTi(vi)の上位32ビットに格納されており、各データ値を右に32ビットシフトすることにより求まる。拡張可能チャンク配列のチャンク番号をチャンク番号の計算手順にしたがって求める。なお、〔前提となる技術〕では、図45を参照しながら、チャンク化しない通常の拡張可能配列要素の添字の組に対して、要素のアドレス計算手順が示されている。各チャンク化HORTテーブルHTi(1≦i≦n)上段のチャンクサブ配列の情報を使用して、まったく同様の手順により、レコードrが属するチャンクの番号cを求めることができる。すなわち、各次元の拡張経歴値のうち、最大経歴値に対応する次元のチャンクサブ配列の先頭チャンク番号を求め、チャンクサブ配列の係数ベクトルによりチャンク番号cが求まる。
(1)レコードr=<v1,v2,・・・,vn>の検索
n個のCVTを検索してデータ値のn項組<CVT1(v1),CVT2(v2),・・・,CVTn(vn)>を求める。すべてのカラム値vi(1≦i≦n)がCVTiに登録されているとする。レコードrを含む拡張可能チャンク配列のチャンクの添字の組は各CVTi(vi)の上位32ビットに格納されており、各データ値を右に32ビットシフトすることにより求まる。拡張可能チャンク配列のチャンク番号をチャンク番号の計算手順にしたがって求める。なお、〔前提となる技術〕では、図45を参照しながら、チャンク化しない通常の拡張可能配列要素の添字の組に対して、要素のアドレス計算手順が示されている。各チャンク化HORTテーブルHTi(1≦i≦n)上段のチャンクサブ配列の情報を使用して、まったく同様の手順により、レコードrが属するチャンクの番号cを求めることができる。すなわち、各次元の拡張経歴値のうち、最大経歴値に対応する次元のチャンクサブ配列の先頭チャンク番号を求め、チャンクサブ配列の係数ベクトルによりチャンク番号cが求まる。
チャンクcにおける配列要素の添字は各CVT(vi)の下位32ビットに格納されており、これらの添字の組に対して配列要素のオフセットoを計算する。<c,o>をキー値としてRDTを検索し、存在しておれば、rが関係テーブルにに存在し、存在していなければ、rは関係テーブルに存在しない。
対応するCVTに登録されていないカラム値が存在するときには、rは関係テーブルに存在しない。
(2)レコードr=<v1,v2,・・・,vn>の挿入
n個のCVTを検索してデータ値のn項組<CVT1(v1),CVT2(v2),・・・,CVTn(vn)>を求める。すべてのカラム値vi(1≦i≦n)がCVTiに登録されていれば、(1)と同様にして<c,o>を求め、キー値としてRDTを検索する。存在していなければ、<c,o>をキー値としてRDTに登録する。rのn個のカラム値の内、対応するCVTに登録されていないカラム値が存在する場合、それらの拡張可能配列での対応次元を次元の昇順にd1,d2,…,dk(1≦k≦n)とする。この次元順で各次元di(1≦i≦k)について、順次、以下を行う。なお、論理拡張可能配列の現在の次元diのサイズをsdi、チャンクの各次元サイズをSとする。
n個のCVTを検索してデータ値のn項組<CVT1(v1),CVT2(v2),・・・,CVTn(vn)>を求める。すべてのカラム値vi(1≦i≦n)がCVTiに登録されていれば、(1)と同様にして<c,o>を求め、キー値としてRDTを検索する。存在していなければ、<c,o>をキー値としてRDTに登録する。rのn個のカラム値の内、対応するCVTに登録されていないカラム値が存在する場合、それらの拡張可能配列での対応次元を次元の昇順にd1,d2,…,dk(1≦k≦n)とする。この次元順で各次元di(1≦i≦k)について、順次、以下を行う。なお、論理拡張可能配列の現在の次元diのサイズをsdi、チャンクの各次元サイズをSとする。
ここで、HTdiの下段の空きスロットリストが空でなければ、次の空きスロットの(対応する上段の添字,チャンク内添字)をCVTdiに登録し、下段のカラム値の情報のうちレコード数のフィールドを0に初期化する。以下、下段の空きスロットリストが空であるとする。sdiがチャンク境界に達している時、次元diの方向に1チャンク分論理拡張可能配列を拡張する。この時,HTdiの上段が1個、下段がS個一度に拡張され、CVTdi(vdi)には対(拡張したチャンクの添字、0)が格納される。拡張したHTdiのスロットの上段には、チャンクサブ配列の拡張経歴値など、チャンクサブ配列の情報が格納される。また、下段にはカラム値の情報が格納される。sdiがチャンク境界に達していない時には、CVTdi(vdi)にはデータ値(sdi/S、sdi%S)(/,%はそれぞれ、商と剰余を表す)を格納し、HTdiの当該下段にはカラム値vdiの情報を格納する。
全てのdiについて上記が終了すれば、(1)と同様にして<c,o>を求め、キー値としてRDTに登録する。
(3)レコードr=<v1,v2,・・・,vn>の削除
(1)に従って、rを検索する。存在するならば、rに対応するキー値をRDTより削除してから、CVTおよびHTのメンテナンスを行う。
(1)に従って、rを検索する。存在するならば、rに対応するキー値をRDTより削除してから、CVTおよびHTのメンテナンスを行う。
2.3.4 キー値−カラム値逆変換
レコードの検索結果としてRDTの該当するレコードのキー値、すなわち、チャンク番号とチャンク内オフセットの組の集合が返される。検索要求を発行したユーザに対して検索結果を返すには、キー値からカラム値の組としてのレコードに逆変換する必要があり、以下にその方法を示す。
レコードの検索結果としてRDTの該当するレコードのキー値、すなわち、チャンク番号とチャンク内オフセットの組の集合が返される。検索要求を発行したユーザに対して検索結果を返すには、キー値からカラム値の組としてのレコードに逆変換する必要があり、以下にその方法を示す。
まずチャンク番号から拡張可能チャンク配列Aのチャンク化HORTテーブルの次元とチャンクの添字に変換する。この変換を高速に行うために、2.3.2節で述べたチャンク番号を添字として、(そのチャンクが含まれるチャンクサブ配列が属している次元、その添字)の組に対応付けるための一次元配列SHを用意する。レコード挿入時にはチャンク番号とオフセットの組<c,o>に対して、SH[c]にチャンクcが含まれるチャンクサブ配列の先頭チャンク番号が記されるHORTテーブルの次元dとAにおけるチャンクcの添字の値kを記入する。
チャンクcのAにおける添字の値の組の内、次元dの添字の値はkである。他の次元の添字の値はHTd[k]に記されているチャンクサブ配列の係数ベクトルを使って、1.3節と同様にしてオフセット(c−HTd[k])から割算の繰り返しにより一意的に求めることができる。このようにして求めたチャンクcのAにおける添字の値の組を<i1,i2,・・・,in>とする。
つづいてチャンク内オフセットoから、チャンクcにおける当該レコードに対応する要素の添字の組<j1,j2,・・・,jn>を求める。どのチャンクも同じ一辺サイズの超立方体であることから、このための係数ベクトルはAについて1組グローバルに所持している。最後に、<i1,i2,・・・,in>と<j1,j2,・・・,jn>より当該レコードの各カラム値を求める。すなわち、各ik(k=1,・・・,n)よりHTkの上段のスロットを決定し、それに対応する下段のjk番目のスロットを決定する。そのスロットの中にはk番目のカラム値が格納されている。
2.3.5 アドレス空間のオーバフローに対する対策
上記で示したとおり、HORTをチャンク化することでチャンク化拡張可能配列内での要素の位置を示すアドレス空間を有効に利用することができる。これによって、アドレス空間のオーバーフローを大幅に遅らせることができる。しかし、図22によれば、次元数が大きい場合、カラム値の種類が少なくなり、アドレス空間のオーバーフローは回避できない。
上記で示したとおり、HORTをチャンク化することでチャンク化拡張可能配列内での要素の位置を示すアドレス空間を有効に利用することができる。これによって、アドレス空間のオーバーフローを大幅に遅らせることができる。しかし、図22によれば、次元数が大きい場合、カラム値の種類が少なくなり、アドレス空間のオーバーフローは回避できない。
これに対しては、「一意キーテーブル」や「テーブルの垂直分割の手法」の採用により、前述の経歴・オフセット法と同様、新たなカラム値の追加に対しても無制限に対応することが可能である。また、アドレス空間のオーバーフローそのものを大幅に遅らせることができるために、従来の経歴・オフセット法より、テーブル分割数は少ない。
図23,図24に、チャンク化HORTデータ構造における一意キーとテーブルの垂直分割の方式をそれぞれ示す。
一意キーについて、図23のような構成にすることにより、一意キーの値が指定された場合には、一意キーテーブルの該当スロットに格納されているチャンク番号とオフセットの組から、2.3.4節で述べた逆変換により一意キーではない他のカラムの値を得ることができ、逆に一意キー以外のカラム値が指定された場合には、RDTからチャンク番号とオフセットの組をキー値として、そのデータ値、つまり対象のレコードが格納されている一意キーテーブルのスロット番号を得ることができるので、該当スロットから同様に対象レコードの全てのカラム値を得ることができる。
また、関係テーブルの垂直分割を図24の構成とすることにより、一意キーテーブルに格納されているチャンク番号とオフセットの組が複数存在するが、上記と同様の手順で対象レコードの全てのカラム値を得ることができる。このとき、一意キー以外のカラム値が指定された場合には、前述の経歴・オフセット法の場合と同様、当該RDTのみを検索するのみで、他のRDTを検索する必要はない。
2.3.6 チャンク化のメリットとデメリット
2.3.5はチャンク化の大きなメリットである。さらに、ファイルサイズやメモリの使用量が減少することもメリットである。CVTのデータ値としてチャンク配列の添字とチャンク内添字の二つを必要とするため、CVTのサイズは大きくなるが、経歴値等のチャンクサブ配列の情報のサイズは配列要素単位ではなく、チャンク単位に確保されるために(1/チャンクの一辺サイズ)と大幅に小さくなる。配列の次元数をnとすれば係数テーブルのスロットサイズはn−2を必要とするために、特に、係数テーブルは前述の経歴・オフセット法に比べて有利である。また、前述の経歴値−次元・添字変換テーブルに相当するチャンク番号−次元・添字変換テーブルのサイズも同様に減少できる。さらに分割数が少ないため、一意キーテーブルのサイズも減少できる(図13参照)。以上より、チャンク化HORTデータ構造全体のサイズは前述の経歴・オフセット法の場合に比べて小さくなる。
2.3.5はチャンク化の大きなメリットである。さらに、ファイルサイズやメモリの使用量が減少することもメリットである。CVTのデータ値としてチャンク配列の添字とチャンク内添字の二つを必要とするため、CVTのサイズは大きくなるが、経歴値等のチャンクサブ配列の情報のサイズは配列要素単位ではなく、チャンク単位に確保されるために(1/チャンクの一辺サイズ)と大幅に小さくなる。配列の次元数をnとすれば係数テーブルのスロットサイズはn−2を必要とするために、特に、係数テーブルは前述の経歴・オフセット法に比べて有利である。また、前述の経歴値−次元・添字変換テーブルに相当するチャンク番号−次元・添字変換テーブルのサイズも同様に減少できる。さらに分割数が少ないため、一意キーテーブルのサイズも減少できる(図13参照)。以上より、チャンク化HORTデータ構造全体のサイズは前述の経歴・オフセット法の場合に比べて小さくなる。
検索時間においても向上が期待できる。前述の経歴・オフセット法では、カラム値指定のレコード検索において、検索カラム値に依存して検索対象となる部分配列の数が変化し、検索時間が一定ではないという検索カラム値依存性が存在する。しかし、チャンク化を行うことで検索対象となるチャンク数は次元ごとに一定で、部分配列の数の平均よりも少なくなり、検索時間も一定で平均的に短くなり、検索カラム値依存性が解消される。
最後に、チャンク化経歴・オフセット法のデメリットして、チャンクの次元数が固定であるために、スキーマ進化に対応できないことが挙げられる。前述の経歴・オフセット法では次元の追加(関係テーブルのカラムの増設)に対しては、拡張可能配列の特性を生かして、HORTデータ構造の再編成なしに対応することができる。すなわち、増設カラムに対応して、論理拡張可能配列の次元を1増やすことによって対処できる。これについては、増やした次元のHORTテーブルの増設のみで対処可能であるが、チャンク化経歴・オフセット法ではデータ実体であるRDTの再編をはじめチャンク化HORTデータ構造全体の再編成を必要とし、処理コストが大きくなる。
3.HORTの拡張と応用
HORTは関係テーブルという極めて単純で抽象度の高いデータ表現に対する実装方式である。データベース応用のみならず、一般に関係テーブルで表現できるか、関係テーブルにマッピングできるようなアプリケーションデータは広範に存在する。したがって、HORTはこれらのアプリケーションデータの極めて時間・空間効率の良い実装方式として、広く使用できる。ここでは、関係テーブルにマッピングするための付加的なデータ構造を必要とするHORTの拡張と応用として、オブジェクト指向データベースにおいて使用される複合オブジェクトの実装および近年広く使用されているXML文書の実装について提案する。さらにHORTデータ構造の並列処理の方式について提案する。
HORTは関係テーブルという極めて単純で抽象度の高いデータ表現に対する実装方式である。データベース応用のみならず、一般に関係テーブルで表現できるか、関係テーブルにマッピングできるようなアプリケーションデータは広範に存在する。したがって、HORTはこれらのアプリケーションデータの極めて時間・空間効率の良い実装方式として、広く使用できる。ここでは、関係テーブルにマッピングするための付加的なデータ構造を必要とするHORTの拡張と応用として、オブジェクト指向データベースにおいて使用される複合オブジェクトの実装および近年広く使用されているXML文書の実装について提案する。さらにHORTデータ構造の並列処理の方式について提案する。
3.1 複合オブジェクトのHORTデータ構造による実現
オブジェクト指向データベースにおける複合オブジェクトはスキーマ(データ定義)に従って表現される。複合オブジェクトはその属性として他のインスタンスオブジェクトへの参照をオブジェクトID(oid)として持つオブジェクトである。複合オブジェクトの集合はHORTデータ構造を使って表現できる。
オブジェクト指向データベースにおける複合オブジェクトはスキーマ(データ定義)に従って表現される。複合オブジェクトはその属性として他のインスタンスオブジェクトへの参照をオブジェクトID(oid)として持つオブジェクトである。複合オブジェクトの集合はHORTデータ構造を使って表現できる。
クラスCの属性集合を{a1,a2,…,an}としたとき、カラムをa1,a2,…,an、および、Cのレコード(インスタンス)を一意的に識別するための整数型のIDとする関係テーブルTによりCを表す。このIDは、レコードが挿入されたとき、システムによって与えられる。このとき、カラムaiの名前はaiの属性名となる。Cの属性aiのデータ型が整数型や文字列型などの単純型であるときには、カラムaiのカラム値はCの属性aiの属性値となる。aiが他のインスタンスオブジェクトを参照するオブジェクトID型の属性のときには、新たな関係テーブルTiが上記手順を再帰的に適用して構成される。この場合もカラム名はaiの属性名となり、また、そのカラム値はTiをHORTデータ構造で表現したときの当該レコードのオブジェクトIDとなる。このオブジェクトIDは当該レコードが属するTiを識別するためのテーブルIDとTiにおける当該レコードIDの対(テーブルID,レコードID)である。このようにレコードIDを定めることにより、被参照レコードのカラムa1,a2,…,anが更新されても、参照する側のオブジェクトIDを変更する必要はない。aiが単純型の値の集合または他のオブジェクトへの参照の集合型の時には、対応する集合型のカラムを下記に示すようにHORTデータ構造に付加されるデータ構造として他のカラムとは別に管理する。
複合オブジェクトの実体は、上述のように、複数のクラスを上記の定義によりそれぞれ複数の関係テーブルとしたときに、個々の関係テーブルに対応する複数のHORTで表現される。
図25に複合オブジェクトの定義例を示す。図25において、クラスbookの属性authorはクラスchoshaのインスタンスへの参照の集合であり、クラスchoshaの属性affiliateはクラスshozokuのインスタンスへの参照である。
図26に、図25の定義例による、複合オブジェクトインスタンス例の関係テーブル表現を示す。テーブルbookのauthorカラムは共著者の場合にはテーブルchoshaのレコードへの参照の集合であり、したがって、bookは非正規型の関係テーブルとなり、このままでは、HORTデータ構造でbookを実装できない。
この問題を解決するために、集合型のカラムを他のカラムとは別に管理する方法を提案する。集合型以外のカラム集合はHORTにより実装される。この方法によれば、テーブルbookは、図27のように実装される。参照されるテーブルchoshaのoidカラム値をキーとするとデータ値として、そのoidを参照しているテーブルbook内の全てのレコードのoidの集合を返すB+木を設ける。このB+木により、どの著者がどの本を書いているかの情報が得られる。
各テーブルのレコードに付与されるoidはそのテーブルの一意キーであり、2.1節に示したHORTにおける実装方式に従えば、一意キーテーブルが構成される。テーブルbookのレコードのoidはこの一意キーのテーブルのレコードを参照する。また、参照先の一意キーテーブルのレコードにはauthorカラムのoid集合が保持される。すなわち、上述のoidの集合を返すB+木と一意キーテーブルoid集合は互いに逆参照の関係にある。一意キーに対するCVTが存在しないのはキー値が当該一意キーテーブルのレコードの所在を表す整数値であるからCVTによるキー−添字変換機構を必要としないからである。
経歴・オフセット空間の大きさの制限が厳しくない時には一意キーを別扱いとせずに、一意キーであるoidカラムも含めて、HORTデータ構造を構成することも可能である(図28)。このときには、一意キーテーブルは存在しない。
3.2 XML文書への応用
3.2.1 DTDを持つXML文書への応用
図29は、DTD(Document Type Definition)付きのXML文書例である。図30は、図29の関係テーブルによる表現である。
3.2.1 DTDを持つXML文書への応用
図29は、DTD(Document Type Definition)付きのXML文書例である。図30は、図29の関係テーブルによる表現である。
DTDを有するXML文書について要素eの直下のタグまたはPCDATAの順序集合をT={e1,e2,…,en}として、カラムをe1,e2,…,enおよびTのレコード(インスタンス)を一意的に識別するためのIDとする関係テーブルでTを表す。このIDはレコードが挿入されたとき、システムによって与えられる。eiがタグ要素であり、その要素が唯一のPCDATAからなるときには、eiがTのカラムとなり、そのカラム名はeiのタグ名となる。また、カラム値はそのPCDATAとなる。eiがi番目のPCDATAのときには、eiがTのカラムとなり、そのカラム名はPCDATAiとなる。また、カラム値はそのPCDATAとなる。eiがタグ要素であり、その要素が複数の要素を含むときには、eiに対して、新たな関係テーブルTiが上記手順を再帰的に適用して構成される。この場合、カラム名はeiのタグ名となり、そのカラム値はTiをHORTデータ構造で表現したときの当該レコードのオブジェクトID(oid)となる。このオブジェクトIDは当該レコードが属するTiを識別するためのテーブルIDとTiにおける当該レコードIDの対(テーブルID,レコードID)であり、レコードIDのデータ型は浮動小数点数とする。図30を参照されたい。
このようにレコードIDを定めることにより、被参照レコードのカラムa1,a2,…,anが更新されても、参照する側のオブジェクトIDを変更する必要はない。また、レコードIDを浮動小数点数としたのは、XML文書の特性によっている。すなわち、XML文書では、タグの表れる文書中の行の順番には意味があり、例えば、図31と図32とは、XML文書としては異なる。
したがって、レコードに固有のIDを付加することと、文書上に表れる行の順序を表現することが、簡潔な情報により、同時に表現できることが望ましい。例えば、図29において、図33のXML文書のすぐ下に、図34のXML文書を追加したならば、図30の関係テーブル表現では、テーブルbooksに
レコード(1.5 4.0)
が追加され、さらに、テーブルbook、author、affiliateには、それぞれ、
レコード(4.0 ハードウエア入門 1.0 サイエンス社)
レコード(5.0 柴山一郎 5.0)
レコード(5.0 京都大学 京都)
が追加される。
レコード(1.5 4.0)
が追加され、さらに、テーブルbook、author、affiliateには、それぞれ、
レコード(4.0 ハードウエア入門 1.0 サイエンス社)
レコード(5.0 柴山一郎 5.0)
レコード(5.0 京都大学 京都)
が追加される。
関係テーブルとのこのような対応付けを行うと、XML文書は3.1.1節で述べた複合オブジェクトで表される。HORTをベースとしているために、記憶領域サイズおよびアクセス速度の両面で高いパフォーマンスを発揮する。一般に、XML文書はタグの記憶に多くの記憶領域を消費するので、適切な圧縮方式が望まれている。HORTのCVTの利用とRDTによる圧縮により、高い記憶領域の利用率を保証することができる。
また、要素のタグにおいて定義されている属性および属性値は文書全体に対して、唯一のテーブルで表現する(図30の「属性テーブル」を参照)。ここでは、要素のタグをグローバルに識別する必要があるため、テーブルIDとレコードIDの双方をカラムとして与えている。
3.3.2 XML木のノードメタ情報に注目した実装
図29のXML文書の木グラフ表現を図35に示す。ここでは、図35の木グラフのノードのメタ情報をカラムとする関係テーブル表現を図36に示す。
図29のXML文書の木グラフ表現を図35に示す。ここでは、図35の木グラフのノードのメタ情報をカラムとする関係テーブル表現を図36に示す。
このテーブルは6つのカラムを有する。“ノードID”は3.2.1における場合と同様、ノードの文書上の位置を表すIDである。“種類”は要素、アトリビュート、PCDATAの種類区別であり、“つづり”はノードが要素の時には要素名、アトリビュートの時にはアトリビュート名、PCDATAのときには、文字列値である。“親ノードID”は親ノードのID、子ノードは文書上の出現順にリストにつながれ、“第1子ノードID”は第1子ノードのID、“弟ノードID”は次順の兄弟ノードのIDである。“属性ノードID”は要素に付随する属性ノードのIDであり、同じ要素の属性集合は文書に出現順にリストにつながれている。
なお、3.2.1節における手法とは異なり、XML文書を関係テーブルに変換する上記手法は、元のXML文書にDTDが付与されていることを必ずしも必要としない。すなわち、対象とするXML文書は要素の入れ子関係が整合している(well formed)ことのみを条件とする半構造データであってもよい。
以上のようなXML文書の木グラフ表現におけるノードのメタ情報を格納する関係テーブルをHORTにより実装する。メタ情報にはノードの種類やグラフの接続情報等が含まれる。メタ情報を記録する分、記憶域は増大するが、単一のテーブルとして実装することが可能である。また、XML文書に対する構造検索を必要とする種々の操作要求をメタ情報を利用して簡便に表現することが可能である。HORTを使用してこの関係テーブルを実装することにより、高速な構造検索が可能である。また、文書内容や構造の更新に対するHORTデータ構造の更新は容易に行うことができる。
3.3 HORTの並列化
図45より分かるように、インデックス配列による拡張可能配列モデルでは拡張可能配列のサブ配列集合は次元により類別される。すなわち、各サブ配列は経歴値で識別され、その経歴値が付されているHORTテーブルの次元に所属するとみなすことができる。RDTは関係テーブルのすべてのレコードについて、そのキー値である経歴値とオフセットの組を単一のB+木に格納するものであったが、これらのキー値を次元ごとに類別し、個別のB+木で管理する。これにより、CVT同様、RDTについても関係テーブルのカラムの数だけ必要となる。単一のRDTの場合には、マルチトランザクション時にはRDT全体に対して排他制御(ロッキング)する必要があるため、並列性が阻害される。しかし、この方式では、例えば、次元ごとにプロセッサを割り当て、その次元のRDTの制御を専用に行わせた場合、その次元のRDTのみの排他制御で済み、並列性の阻害は抑制される。なお、CVTやHORTテーブルなど他のHORTデータ構造はそのまま変更せずに使用できる。
図45より分かるように、インデックス配列による拡張可能配列モデルでは拡張可能配列のサブ配列集合は次元により類別される。すなわち、各サブ配列は経歴値で識別され、その経歴値が付されているHORTテーブルの次元に所属するとみなすことができる。RDTは関係テーブルのすべてのレコードについて、そのキー値である経歴値とオフセットの組を単一のB+木に格納するものであったが、これらのキー値を次元ごとに類別し、個別のB+木で管理する。これにより、CVT同様、RDTについても関係テーブルのカラムの数だけ必要となる。単一のRDTの場合には、マルチトランザクション時にはRDT全体に対して排他制御(ロッキング)する必要があるため、並列性が阻害される。しかし、この方式では、例えば、次元ごとにプロセッサを割り当て、その次元のRDTの制御を専用に行わせた場合、その次元のRDTのみの排他制御で済み、並列性の阻害は抑制される。なお、CVTやHORTテーブルなど他のHORTデータ構造はそのまま変更せずに使用できる。
4.データベース装置
つづいて、図1を参照しながら、上述した関係テーブルの記憶、操作方式を実現するデータベース装置の一構成例について説明する。図1は、本発明の一実施の形態に係るデータベース装置1の構成の概略を示す機能ブロック図である。
つづいて、図1を参照しながら、上述した関係テーブルの記憶、操作方式を実現するデータベース装置の一構成例について説明する。図1は、本発明の一実施の形態に係るデータベース装置1の構成の概略を示す機能ブロック図である。
図1に示すように、データベース装置1は、データ格納部(データベース記憶部)10、補助テーブル部(データベース記憶部)20、テーブル管理部30、入出力部40を備えて構成されている。
データ格納部10は、ディスク装置2上に、CVT(第1のB+木データ)11、RDT(第2のB+木データ、要素位置B+木データ)12、一意キーテーブル13、および各種補助テーブル(経歴値テーブル21、係数テーブル22、レコード数テーブル23)を格納している。CVT11は、関係テーブルのカラムごとに設けられ、該カラム値から拡張可能配列の添字に変換するB+木である。RDT12は、関係テーブルの各レコードに対応する拡張可能配列要素の経歴値(区画位置情報)とオフセット(サブ配列内オフセット、区画内オフセット)の2項組表現がキー値として格納されているB+木である。すなわち、関係テーブルがn個のカラムからなる場合、データ格納部10には、n個のCVT(key−subscript ConVersion Tree)とRDT(Real Data Tree)とからなるn+1個のB+木のデータが格納されている。データベースは、複数の関係テーブルから構成されるため、このn+1個のB+木のセットが複数存在する。
補助テーブル部20は、経歴値テーブル21、係数テーブル22、レコード数テーブル23を、主メモリ3上に保持している。
なお、CVT11、RDT12、一意キーテーブル13、および補助テーブル群(経歴値テーブル21、係数テーブル22、レコード数テーブル23)は、データ格納部10に格納されている。データ格納部10は、ハードディスク等のディスク装置2上に配置されている。経歴値テーブル21、係数テーブル22、レコード数テーブル23の補助テーブル群は、データベース装置1の処理開始時にディスク装置2から読み出されて主メモリ3上の補助テーブル部20に保持され、データベース処理中に変更が加えられた場合に、ディスク装置2上のデータ格納部10の対応部分に書き戻される。
経歴値テーブル21は、配列拡張の時間的順序を表す1次元配列である。係数テーブル22は、サブ配列内の要素のオフセットを計算する1次関数の係数からなる係数ベクトルをサブ配列ごとに記録したものである。レコード数テーブル23は、添字ごとにその添字に対応するカラム値を持つすべてのレコード数を記録している。一意キーテーブル13は、カラム値の重複が起こり得ないカラムである一意キーのカラム値と、HORTデータ構造から得られる経歴値およびオフセットの組とを格納した関係テーブルである。なお、RDT12には、キー値として、経歴値とオフセットの組を、また、データ値として、一意キーのカラム値に対する一意キーテーブルのスロットの添字を挿入しておく。
テーブル管理部30は、レコード検索部(レコード検索手段)31、レコード挿入部(レコード挿入手段)32、レコード削除部(レコード削除手段)33、キー値−カラム値逆変換部(キー値−カラム値逆変換手段)34、一意キー管理部(一意キー管理手段)35、垂直分割管理部(垂直分割管理手段)36を備えている。
レコード検索部31は、レコードの検索の処理を行う。レコード挿入部32は、レコードの挿入の処理を行う。垂直分割管理部36は、経歴値・オフセット空間が新たなカラム値の挿入によりオーバーフローした場合、当該テーブルを2つのテーブルに分割して、経歴値・オフセット空間の縮小を行う。レコード削除部33は、レコードの削除の処理を行う。特に、レコード挿入部32、レコード削除部33、垂直分割管理部36は、CVT11、RDT12、経歴値テーブル21、係数テーブル22、レコード数テーブル23、一意キーテーブル13に対して、必要な保守を行う。なお、レコード検索部31、レコード挿入部32、レコード削除部33は、一意キーを持つレコードおよび垂直分割後のレコードに対する処理も行う。
ここで、レコード挿入部32は、新たなカラム値を持つレコードを挿入するとき、CVT11にそのカラム値を登録して、論理拡張可能配列を拡張し、経歴値テーブル21および係数テーブル22に配列拡張の時間的順序である経歴値およびサブ配列内の要素のオフセットを計算する1次関数の係数をそれぞれ登録し、レコード数テーブル23に初期値として“1”を登録するとともに、当該論理拡張可能配列の要素の経歴値およびオフセットの2項組表現をキー値としてRDT12へ挿入する。
入出力部40を介してユーザから得た検索要求は、レコード挿入部32により、(経歴値、オフセット値)対であるキー値の集合として検索されるが、キー値は本データベースにおけるレコードの内部表現であり、ユーザには理解できない。そこで、キー値−カラム値逆変換部34は、この検索結果をユーザが理解できる表現として返すために、キー値からカラム値の組としてのレコードに逆変換する。具体的には、キー値−カラム値逆変換部34は、入出力部40を介して取得した検索要求に対して、RDT12より検索要求に対応する経歴値とオフセットの2項組を検索し、経歴値とオフセットの2項組を拡張可能配列の各次元の添字に変換し、該変換した添字に従って各次元の経歴値テーブル21、係数テーブル22、レコード数テーブル23の各スロットにあらかじめ格納されているカラム値あるいはカラム値が格納されている記憶領域へのポインタを取得する。そして、次元ごとに得た配列添字値から得たカラム値を、次元順に並べてレコードを得る。
一意キー管理部35は、一意キーテーブル13の管理を行う。特に、一意キー管理部35は、一意キーを持つレコードの挿入、削除に伴う、一意キーテーブル13およびRDT12の保守を行う。また、一意キー管理部35は、一意キーテーブル13に基づいて、一意キーと一意キー以外のカラム値との対応関係を管理する。
垂直分割管理部36は、レコードを挿入すると経歴値・オフセット空間がオーバーフローしてしまう関係テーブルを2つのカラム集合の組に分割する。そして、分割したそれぞれの関係テーブルについて、論理拡張可能配列を構成し、経歴値とオフセットの組をそれぞれのRDT12に格納する。このとき、2つに分割された関係テーブル間の関係を保つための一意キーテーブル13を生成し利用する。具体的には、この一意キーテーブル13には、元の関係テーブルが持つ1個もしくは複数個の一意キーの値と、分割された関係テーブル全てがそれぞれに持つRDT12に格納されている経歴値とオフセットの組を格納する。なお、2つの分割テーブルにおける分割タイミングをできるだけ等しくするために、各カラムのカラム値の種類数を調べ、その数がほぼ平等になるようにカラム集合を振り分けることが望ましい。
なお、テーブル管理部30は、データベースの管理全般を行うものである。よって、レコード検索部31などのように機能ブロックとして記載しないが、データベースの管理に付随する処理(例えば、範疇属性を持つカラムに関わる処理)なども行うことは言うまでもない。ここで、範疇属性を持つカラムとは、「性別」、「血液型」、「会社の所属部署名」等のようにカラム値の種類数の最大値が限定されるようなカラムのことである。これらは、あらかじめ予測できるサイズ以上に拡張されることはない。通常の拡張次元とは異なり、範疇属性値の数が少ない場合には、ユーザの指定に従って、CVTを構成せずにHORTテーブルのみ主メモリ上に実装し、これを順次検索してもよい。あらかじめ確定しているサイズ以上に当該次元サイズが拡張されることはないからである。
入出力部40は、データベース装置1を操作するためのインターフェイスである。すなわち、入出力部40は、データベース装置1に対して、ユーザが直接、処理要求を入力して、データベース装置1からその結果を出力するためのユーザインターフェイス、および、それらの送受信をネットワーク経由で制御するための通信インターフェイスである。
なお、2.3節で説明したチャンク化経歴・オフセット法の場合には、上記データ記録システム1を以下のように変更すればよい。
CVT(第1のB+木データ)11は、関係テーブルのカラム値ごとに設けられ、該カラム値からチャンク化拡張可能配列のチャンクサブ配列情報の位置を表す添字とチャンク内での添字の2項組み表現に変換するためのB+木である。
RDT(第2のB+木データ、要素位置B+木データ)12は、関係テーブルの各レコードに対応するチャンク化拡張可能配列の要素が属するチャンクのチャンク番号(区画位置情報)とチャンク内オフセット(区画内オフセット)の2項組表現をキー値として登録したB+木である。
経歴値テーブル21は、チャンクサブ配列情報としてチャンク配列拡張の時間的順序が登録される。
係数テーブル22は、チャンクサブ配列内のチャンクの番号を計算する1次関数の係数からなる係数ベクトルがチャンクサブ配列ごとに登録される。
レコード数テーブル23は、カラム値を持つすべてのレコード数が登録される。
加えて、カラム値の情報として、拡張可能配列の添字ごとに対応するカラム値またはカラム値が格納されている記憶領域へのポインタが登録されるカラム値テーブル(図示せず)が、データ格納部10に格納されている。このカラム値テーブルは、CVT11、RDT12、一意キーテーブル13、および補助テーブル群(経歴値テーブル21、係数テーブル22、レコード数テーブル23)と同様に、データベース装置1の処理開始時にディスク装置2から読み出されて主メモリ3上の補助テーブル部20に保持され、データベース処理中に変更が加えられた場合に、ディスク装置2上のデータ格納部10の対応部分に書き戻される。なお、カラム値テーブルも、上記補助テーブル群に含まれる。
また、レコード検索部(レコード検索手段)32は、検索要求に対して、上記RDT12より検索要求に対応するチャンク番号とチャンク内オフセットの2項組を検索する。
また、レコード挿入部(レコード挿入手段)32は、新たなカラム値を持つレコードを挿入するとき、上記CVT11にそのカラム値を登録して、チャンク化拡張可能配列を拡張し、上記経歴値テーブル21および上記係数テーブル22に経歴値および係数をそれぞれ登録し、上記レコード数テーブル23に初期値を登録するとともに、当該拡張可能配列の要素が所属するチャンクの番号とオフセットの2項組表現をキー値として上記RDT12へ挿入する。
また、レコード削除部(レコード削除手段)33は、上記レコード検索部31が検索したチャンク番号とチャンク内オフセットの2項組を上記RDT12から削除するとともに、上記レコード数テーブル23のレコード数を1だけ減算する。そして、この減算の結果、レコード数が0となった時、経歴値および係数を上記経歴値テーブル21および上記係数テーブル22からそれぞれ削除する。
また、キー値−カラム値逆変換部(キー値−カラム値逆変換手段)34は、上記レコード検索部31が検索したチャンク番号とチャンク内オフセットの2項組を拡張可能配列の各次元の添字に変換し、該変換した添字に従ってあらかじめ上記カラム値テーブルに格納されているカラム値あるいはカラム値が格納されている記憶領域へのポインタを取得する。
また、一意キーテーブル13は、カラム値の重複が起こり得ないカラムである一意キーと、チャンク化拡張可能配列の要素の属するチャンク番号およびチャンク内オフセットの2項組表現とが登録される。
そして、一意キー管理部(一意キー管理手段)35は、上記一意キーテーブル13に基づいて、一意キーと一意キー以外のカラム値との対応関係を管理する。
また、垂直分割管理部(垂直分割管理手段)36は、関係テーブルを2つのカラム集合の組に分割し、分割したそれぞれの関係テーブルについて、チャンク化拡張可能配列を構成し、チャンク番号およびチャンク内オフセットの2項組表現をそれぞれ登録したRDT12を生成するとともに、元の関係テーブルが持つ1個もしくは複数個の一意キーの値と、分割したそれぞれの関係テーブルに対応する上記RDT12に格納されているチャンク番号およびチャンク内オフセットの2項組表現とを登録した一意キーテーブル13を生成する。
最後に、データベース装置1は、ワークステーションやパーソナルコンピュータ等の汎用のコンピュータをベースに構成できる。よって、データベース装置1の各ブロック、特にテーブル管理部30は、次のようにCPUを用いてソフトウェアによって実現することができる。なお、データベース装置1は、その機能を複数の装置に分散させたシステムとして構成することもできる。
すなわち、データベース装置1は、各機能を実現する制御プログラムの命令を実行するCPU(central processing unit)、上記プログラムおよびデータベースデータを格納した二次記憶装置(磁気ディスク装置)、上記プログラムおよびデータベースデータを展開するRAM(random access memory)などを備えている。そして、本発明の目的は、上述した機能を実現するソフトウェアであるテーブル管理部30の制御プログラム(データベースの管理プログラム)のプログラムコード(実行形式プログラム、中間コードプログラム、ソースプログラム)をコンピュータで読み取り可能に記録した記録媒体を、上記データベース装置1に供給し、そのコンピュータ(またはCPUやMPU)が記録媒体に記録されているプログラムコードを読み出し実行することによって、達成可能である。
上記記録媒体としては、例えば、磁気テープやカセットテープ等のテープ系、フロッピー(登録商標)ディスク/ハードディスク等の磁気ディスクやCD−ROM/MO/MD/DVD/CD−R等の光ディスクを含むディスク系、ICカード(メモリカードを含む)/光カード等のカード系、あるいはマスクROM/EPROM/EEPROM/フラッシュROM等の半導体メモリ系などを用いることができる。
また、データベース装置1を通信ネットワークと接続可能に構成し、上記プログラムコードを通信ネットワークを介して供給してもよい。この通信ネットワークとしては、特に限定されず、例えば、インターネット、イントラネット、エキストラネット、LAN、ISDN、VAN、CATV通信網、仮想専用網(virtual private network)、電話回線網、移動体通信網、衛星通信網等が利用可能である。また、通信ネットワークを構成する伝送媒体としては、特に限定されず、例えば、IEEE1394、USB、電力線搬送、ケーブルTV回線、電話線、ADSL回線等の有線でも、IrDAやリモコンのような赤外線、Bluetooth(登録商標)、802.11無線、HDR、携帯電話網、衛星回線、地上波デジタル網等の無線でも利用可能である。なお、本発明は、上記プログラムコードが電子的な伝送で具現化された、搬送波に埋め込まれたコンピュータデータ信号の形態でも実現され得る。
本実施の形態は本発明の範囲を限定するものではなく、本発明の範囲内で種々の変更が可能である。
5.本発明の有効性
(1)従来技術との違いについて
本発明は、先行技術である「拡張可能配列」の考え方を基盤としている。この考え方は、〔発明を実施するための最良の形態〕の〔前提となる技術〕において説明したとおりである。
(1)従来技術との違いについて
本発明は、先行技術である「拡張可能配列」の考え方を基盤としている。この考え方は、〔発明を実施するための最良の形態〕の〔前提となる技術〕において説明したとおりである。
従来、拡張可能配列は通常の固定サイズ配列と同様、主メモリ上に展開して操作されるデータ構造として扱われることを前提としていた。すなわち、拡張可能配列の各サブ配列中の各要素はすべて有効要素であり、それぞれの要素はすべて、主メモリにそのサイズを占めている。サブ配列の各次元のサイズが[s1,s2,・・・,sn]として、1要素のサイズをeとするとき、必ずs1s2・・・sneのサイズの連続記憶領域を占める。本発明では、この拡張可能配列の考え方を関係テーブルを表現するのに用いている。
関係テーブルTがn個のカラムc1,c2,・・・,cnからなり、かつカラムciの値の数(種類)がkiであり、配列要素サイズがeであるとすると、関係テーブルをそのまま拡張可能配列で表そうとすると少なくともk1k2・・・kneのサイズを必要とする。例えば、n=10、ci=10(i=1,・・・,10)、e=4(バイト)であるとき、1010レコード、すなわち、1010×4=40Gバイトの記憶空間に相当する記憶領域が必要となる。
しかし、実際にはTのレコード数が1010個存在することはごくまれであり(カラムci(i=1,・・・,10)のすべての組み合わせがレコードとして存在する場合)、nが大きいときにはほとんどの場合、1010に比べて無視できる程度のレコード数であるといえる。〔前提となる技術〕における数式(1)のアドレス関数を計算して、要素のアドレスが決定できるためには、40Gバイトの記憶領域を確保して、実際には存在しないレコードのための場所を割り当てる必要がある。以上のような状況では、主メモリ上はおろか、二次記憶上において、データベースとして物理的に格納不可能か格納できても極めて効率が悪くなり、実用的に使用できない。
本発明は、以上の状況に注目して、存在するレコードのみを効率よく格納し、従来の関係テーブルの実装より、はるかに高速にレコードを検索するデータ構造とそれを基盤とするデータベース装置を提案している。経歴値とサブ配列が1対1に対応していることに注目して、添字の組Iで表される配列要素をそれが属するサブ配列の経歴値hとサブ配列内でのオフセットoの2項組<h,o>で表すことを提案している。これは、従来、提案されていない配列要素に対する番地付けの方法である。この方法により、次元数nが大きくても(カラム数が多くても)常に2項組として、簡潔に表現でき、記憶域の消費をnに関わらず最小限に抑制できる。
HORTデータ構造により表現される関係テーブルのレコード集合をR={r1,r2,・・・,rm}とする。このとき、レコードri∈R(i=1,・・・,m)について、それに対応する拡張可能配列要素の経歴値とオフセットの2項組表現<hi,oi>がキー値としてRDTに格納される。キー値は関係テーブルのレコードそのものを表現しており、Rに存在しているレコードについてのみ、そのキー値がRDTに登録される。このRDTはB+木で実装されるので、キー値の検索は高速であり、B+木のシーケンスセットをたどることにより、キー値の範囲検索も従来の関係テーブルの実装より、はるかに高速化できる。
なお、上で述べた、拡張可能配列のサブ配列のための連続記憶領域は実際には確保されない。この意味で、キー値が置かれる拡張可能配列はあくまでも論理的に存在するのみであり、従来の拡張可能配列のように実体を持つ連続記憶領域を実際に必要としない。この意味で、以後、本願発明における拡張可能配列を論理拡張可能配列という。
実用化における、ここでの重要な問題は、上述の論理拡張可能配列を使用するとき、実際に記憶域として確保する必要はないものの、先に述べたように膨大な論理記憶空間を必要とすることである。この記憶空間は、使用するコンピュータのアドレス長をaとすると2aとなり、このサイズを超えるアドレス(オフセット値)を扱うことができなくなる。従来の研究では、この点に関する指摘はなく、従って、その解決策も示されていない。本願発明の重要なポイントの1つとして、この点の解決策を関係テーブルの垂直分割技法として提示している点であり、〔発明を実施するための最良の形態〕の2.2節において述べている。また、本技法は同2.1節で提案されている一意キーテーブルに基づいている。この垂直分割技法を使えば、大規模関係テーブルのHORTデータ構造表現が可能であり、この表現法の採用により、検索速度が劣化することはない。
(2)本発明のデータベース装置のパフォーマンスについて
本発明のデータベース装置のパフォーマンスを調べるために、プロトタイプとしてチャンク化HORTではない通常のHORTによって、実際に構築したシステムについて計測した。比較にはフリーソフトウェアとして広く流通しているPostgresデータベース管理システム(バージョン7.2.1)を用いた。関係テーブルのレコード数は、下記(a)(b)(c)のいずれにおいても、100万レコードとした。「カラム値の重複度」を「レコード総数100万/カラム値の種類の数」、すなわち同じカラム値を持つレコード数とする。このカラム値の重複度は一意キーカラムを除くすべてのカラムにおいて同一であるとする。以下のI,IIの計測結果より、関係テーブルの垂直分割があり、かつカラム長が短い場合の、二次記憶サイズを除いて、どの場合でも二次記憶サイズおよび検索速度共にPostgresシステムより、大幅に優れていることが分かる。
本発明のデータベース装置のパフォーマンスを調べるために、プロトタイプとしてチャンク化HORTではない通常のHORTによって、実際に構築したシステムについて計測した。比較にはフリーソフトウェアとして広く流通しているPostgresデータベース管理システム(バージョン7.2.1)を用いた。関係テーブルのレコード数は、下記(a)(b)(c)のいずれにおいても、100万レコードとした。「カラム値の重複度」を「レコード総数100万/カラム値の種類の数」、すなわち同じカラム値を持つレコード数とする。このカラム値の重複度は一意キーカラムを除くすべてのカラムにおいて同一であるとする。以下のI,IIの計測結果より、関係テーブルの垂直分割があり、かつカラム長が短い場合の、二次記憶サイズを除いて、どの場合でも二次記憶サイズおよび検索速度共にPostgresシステムより、大幅に優れていることが分かる。
I.一意キーなし、垂直分割なしの場合
カラム値の重複度を変化させて、カラムのデータ型がすべて文字列(20バイト長)の場合、および整数値(4バイト長)の場合について計測した。計測はカラム集合の中から、1つのカラムの値を固定して、その値をカラム値として持つ全レコードを検索する時間、関係テーブルを格納するのに必要な二次記憶全サイズ、およびこの内RDTの占めるサイズについて計測した。なお、検索時間をカラムごとに計測しているが、これは次元依存性を調べるためである。
カラム値の重複度を変化させて、カラムのデータ型がすべて文字列(20バイト長)の場合、および整数値(4バイト長)の場合について計測した。計測はカラム集合の中から、1つのカラムの値を固定して、その値をカラム値として持つ全レコードを検索する時間、関係テーブルを格納するのに必要な二次記憶全サイズ、およびこの内RDTの占めるサイズについて計測した。なお、検索時間をカラムごとに計測しているが、これは次元依存性を調べるためである。
(a)カラム数6、カラムの型が文字列型の場合
図37は、カラム数6、カラムの型が文字列型の場合のHORTシステムの計測結果である。図38は、カラム数6、カラムの型が文字列型の場合のPostgresシステムの計測結果である。
図37は、カラム数6、カラムの型が文字列型の場合のHORTシステムの計測結果である。図38は、カラム数6、カラムの型が文字列型の場合のPostgresシステムの計測結果である。
図37、図38の計測結果より、HORTシステムとPostgresシステムでは、関係テーブルの記憶に必要な二次記憶全サイズはHORTシステムではPostgresシステムでの21〜23%程度、検索時間はHORTシステムではPostgresシステムでの10〜14%程度であることが分かる。HORTシステムでは、重複度が増加するほど二次記憶全サイズ、検索時間とも有利になっている。
(b)カラム数6、整数型(4バイト長)の場合
図39は、カラム数6、整数型(4バイト長)の場合のHORTシステムの計測結果である。図40は、カラム数6、整数型(4バイト長)の場合のPostgresシステムの計測結果である。
図39は、カラム数6、整数型(4バイト長)の場合のHORTシステムの計測結果である。図40は、カラム数6、整数型(4バイト長)の場合のPostgresシステムの計測結果である。
図39、図40の計測結果より、HORTシステムとPostgresシステムでは、関係テーブルの記憶に必要な二次記憶全サイズはHORTシステムではPostgresシステムでの50〜55%程度、検索時間はHORTシステムではPostgresシステムでの14〜20%程度であることが分かる。HORTシステムでは、重複度が増加するほど二次記憶全サイズ、検索時間とも有利になっている。カラムのサイズが大きいほど、また、二次記憶全サイズ、検索時間ともHORTシステムの方がPostgresシステムより有利になっている。したがって、(a)の場合の方が、(b)の場合より、優れている。
II.一意キーカラムがある場合の、垂直分割がない場合と垂直分割がある場合との比較
10カラムからなる関係テーブルについて計測する。最初のカラムのみ整数型の一意キーカラムであり、残りの9つのカラムは重複度10000である。この最初のカラムは一意キーであるので、一意キーテーブルが二次記憶上に形成され、論理拡張可能配列は残りの9つのカラムについて構成される。重複度を10000としているのは、64ビットマシンのアドレス空間が264であり、x9≦264を満足する最大のxに近い数として100を各カラム値の種類の数としている。したがって、この場合、各カラムの重複度は10000としている。
10カラムからなる関係テーブルについて計測する。最初のカラムのみ整数型の一意キーカラムであり、残りの9つのカラムは重複度10000である。この最初のカラムは一意キーであるので、一意キーテーブルが二次記憶上に形成され、論理拡張可能配列は残りの9つのカラムについて構成される。重複度を10000としているのは、64ビットマシンのアドレス空間が264であり、x9≦264を満足する最大のxに近い数として100を各カラム値の種類の数としている。したがって、この場合、各カラムの重複度は10000としている。
(i)HORTシステムにおいて、垂直分割しない場合(HORT)
(ii)HORTシステムにおいて、垂直分割した場合(HORT_分割)
(iii)Postgresシステムの場合(POST)
の3つの場合について計測した。
(ii)HORTシステムにおいて、垂直分割した場合(HORT_分割)
(iii)Postgresシステムの場合(POST)
の3つの場合について計測した。
(a)9つのカラムのデータ型が文字列型(20バイト長)の場合
図41は、9つのカラムのデータ型が文字列型(20バイト長)の場合の計測結果である。
図41は、9つのカラムのデータ型が文字列型(20バイト長)の場合の計測結果である。
図41の計測結果より、HORTおよびHORT_分割のPOSTに対する全二次記憶サイズの割合を求めると、それぞれ24.8%および40.2%となっており、また、平均検索時間を求めると、それぞれ12.6%および11.1%となっている。1カラム目の値を固定したときの検索時間がいずれの場合も極端に速いのは1カラム目は一意キーカラムであり、検索件数が1件であるからである。このとき、POSTの場合には索引が付与される。
テーブルの垂直分割がある場合(HORT_分割の場合)、二次記憶全サイズは一意キーテーブルを必要とすることとRDTの増加により、垂直分割がない場合(HORTの場合)に比べて大きくなっているが、これらのデータ構造の導入により検索速度は速くなっている。
(b)9つのカラムのデータ型が整数型(4バイト長)の場合
図42は、9つのカラムのデータ型が整数型(4バイト長)の場合の計測結果である。
図42は、9つのカラムのデータ型が整数型(4バイト長)の場合の計測結果である。
図42の計測結果より、HORTおよびHORT_分割のPOSTに対する全二次記憶サイズの割合を求めると、それぞれ67.4%および108%となっており、また、平均検索時間を求めると、それぞれ19.8%および16.7%となっている。1カラム目の値を固定したときの検索時間がいずれの場合も極端に速いのは1カラム目は一意キーカラムであり、検索件数が1件であるからである。このとき、POSTの場合には索引が付与される。
テーブルの垂直分割がある場合(HORT_分割の場合)、二次記憶全サイズは一意キーテーブルを必要とすることとRDTの増加により、垂直分割がない場合(HORTの場合)に比べて大きくなっているが、これらのデータ構造の導入により検索速度は速くなっている。
最後に、本発明に係るデータベース装置は、関係テーブルを用いたデータベース装置であって、関係テーブルのカラム値ごとに設けられ、該カラム値から拡張可能配列の添字に変換するための第1のB+木データと、関係テーブルの各レコードに対応する拡張可能配列の要素の経歴値およびオフセットの2項組表現をキー値として登録した第2のB+木データと、配列拡張の時間的順序を登録した経歴値テーブルと、サブ配列内の要素のオフセットを計算する1次関数の係数からなる係数ベクトルをサブ配列ごとに登録した係数テーブルと、拡張可能配列の添字ごとにその添字に対応するカラム値を持つすべてのレコード数を登録したレコード数テーブルとを格納したデータベース記憶部と、新たなカラム値を持つレコードを挿入するとき、上記第1のB+木データにそのカラム値を登録して、拡張可能配列を拡張し、上記経歴値テーブルおよび上記係数テーブルに経歴値および係数をそれぞれ登録し、上記レコード数テーブルに初期値を登録するとともに、当該拡張可能配列の要素の経歴値およびオフセットの2項組表現をキー値として上記第2のB+木データへ挿入するレコード挿入手段と、を具備することを特徴としている。
また、本発明に係るデータベースの管理方法は、関係テーブルを用いたデータベース装置におけるデータベースの管理方法であって、上記データベース装置は、データベース記憶部に、関係テーブルのカラム値ごとに設けられ、該カラム値から拡張可能配列の添字に変換するための第1のB+木データと、関係テーブルの各レコードに対応する拡張可能配列の要素の経歴値およびオフセットの2項組表現をキー値として登録した第2のB+木データと、配列拡張の時間的順序を登録した経歴値テーブルと、サブ配列内の要素のオフセットを計算する1次関数の係数からなる係数ベクトルをサブ配列ごとに登録した係数テーブルと、拡張可能配列の添字ごとにその添字に対応するカラム値を持つすべてのレコード数を登録したレコード数テーブルと、を格納しており、新たなカラム値を持つレコードを挿入するとき、上記第1のB+木データにそのカラム値を登録して、拡張可能配列を拡張し、上記経歴値テーブルおよび上記係数テーブルに経歴値および係数をそれぞれ登録し、上記レコード数テーブルに初期値を登録するとともに、当該拡張可能配列の要素の経歴値およびオフセットの2項組表現をキー値として上記第2のB+木データへ挿入することを特徴としている。
上記の構成によれば、新たなカラム値を持つレコードを挿入するとき、第1のB+木データにそのカラム値を登録して、拡張可能配列を拡張し、経歴値テーブルおよび係数テーブルに経歴値および係数をそれぞれ登録し、レコード数テーブルに初期値(例えば、1)を登録するとともに、当該拡張可能配列の要素の経歴値およびオフセットの2項組表現をキー値として第2のB+木データへ挿入する。そして、以後、同じカラム値を持つレコードの挿入するたびに、第2のB+木データへの挿入を行うとともに、レコード数テーブルの当該レコード数の値を増加させればよい。
よって、上記のようなデータ構造を有するデータベースに対して、上記のようにレコードを挿入することにより、実行時に動的に新たなカラム値を持つレコードを追加することができる。また、存在するレコードのみを登録することができる。換言すれば、存在しないレコードについては記憶領域を確保する必要がないため、ディスクスペースを効率よく利用できる。よって、配列内の有効要素は少ない、いわゆる疎配列が存在してもディスクスペースが無駄にならない。加えて、アドレス関数を使って高速にレコードの格納位置を検索することが可能である。
また、本発明に係るデータベース装置は、関係テーブルを用いたデータベース装置であって、関係テーブルのカラム値ごとに設けられ、該カラム値から拡張可能配列の添字に変換するための第1のB+木データと、関係テーブルの各レコードに対応する拡張可能配列の要素の経歴値およびオフセットの2項組表現をキー値として登録した第2のB+木データと、配列拡張の時間的順序を登録した経歴値テーブルと、サブ配列内の要素のオフセットを計算する1次関数の係数からなる係数ベクトルをサブ配列ごとに登録した係数テーブルと、拡張可能配列の添字ごとにその添字に対応するカラム値を持つすべてのレコード数を登録したレコード数テーブルとを格納したデータベース記憶部と、検索要求に対して、上記第2のB+木データより検索要求に対応する経歴値とオフセットの2項組を検索するレコード検索手段と、を具備することを特徴としている。
また、本発明に係るデータベースの管理方法は、関係テーブルを用いたデータベース装置におけるデータベースの管理方法であって、上記データベース装置は、データベース記憶部に、関係テーブルのカラム値ごとに設けられ、該カラム値から拡張可能配列の添字に変換するための第1のB+木データと、関係テーブルの各レコードに対応する拡張可能配列の要素の経歴値およびオフセットの2項組表現をキー値として登録した第2のB+木データと、配列拡張の時間的順序を登録した経歴値テーブルと、サブ配列内の要素のオフセットを計算する1次関数の係数からなる係数ベクトルをサブ配列ごとに登録した係数テーブルと、拡張可能配列の添字ごとにその添字に対応するカラム値を持つすべてのレコード数を登録したレコード数テーブルと、を格納しており、検索要求に対して、上記第2のB+木データより検索要求に対応する経歴値とオフセットの2項組を検索することを特徴としている。
上記の構成によれば、アドレス関数を使って高速にレコードの格納位置を検索することが可能である。加えて、データベースが上記のようなデータ構造を有することにより、実行時に動的に新たなカラム値を持つレコードを追加することができる。また、存在するレコードのみを登録することができる。換言すれば、存在しないレコードについては記憶領域を確保する必要がないため、ディスクスペースを効率よく利用できる。よって、配列内の有効要素は少ない、いわゆる疎配列であってもディスクスペースが無駄にならない。
さらに、本発明に係るデータベース装置は、上記レコード検索手段が検索した経歴値とオフセットの2項組を拡張可能配列の各次元の添字に変換し、該変換した添字に従って各次元の経歴値テーブル、係数テーブル、レコード数テーブルの各スロットにあらかじめ格納されているカラム値あるいはカラム値が格納されている記憶領域へのポインタを取得するキー値−カラム値逆変換手段をさらに具備することを特徴としている。
上記の構成によれば、さらに、カラム値と配列添字値の双方向変換が可能になり、次元ごとに得た配列添字値からカラム値を得て、それらを次元順に並べることによって、検索結果のレコードを得ることができる。
さらに、本発明に係るデータベース装置は、上記レコード検索手段が検索した経歴値とオフセットの2項組を上記第2のB+木データから削除するとともに、上記レコード数テーブルのレコード数を1だけ減算するレコード削除手段をさらに具備することを特徴としている。そして、レコード削除手段は、この減算の結果、レコード数が0となった時、経歴値および係数を経歴値テーブルおよび係数テーブルからそれぞれ削除する。
上記の構成によれば、さらに、同じカラム値を持つレコードの削除を行うたびに、第2のB+木データから削除するとともに、レコード数テーブルの当該レコード数の値を減少させる。そして、レコードの削除により、当該カラム値を有するレコードが無くなった場合には、第1のB+木データからもカラム値を削除すればよい。
よって、上記のようなデータ構造を有するデータベースからレコードを削除することが可能となる。したがって、また、存在するレコードのみが登録されているようにデータベースを管理することができる。それゆえ、存在しないレコードについては記憶領域を確保する必要がないため、ディスクスペースを効率よく利用できる。
さらに、本発明に係るデータベース装置においては、上記データベース記憶部は、さらに、カラム値の重複が起こり得ないカラムである一意キーと、拡張可能配列の要素の経歴値およびオフセットの2項組表現とを登録した一意キーテーブルを格納しており、かつ、上記一意キーテーブルに基づいて、一意キーと一意キー以外のカラム値との対応関係を管理する一意キー管理手段を具備することを特徴としている。
また、本発明に係るデータベースの管理方法は、上記データベース装置は、データベース記憶部に、さらに、カラム値の重複が起こり得ないカラムである一意キーと、拡張可能配列の要素の経歴値およびオフセットの2項組表現とを登録した一意キーテーブルを格納しており、上記一意キーテーブルに基づいて、一意キーと一意キー以外のカラム値との対応関係を管理することを特徴としている。
上記の構成によれば、さらに、一意キーの値が指定された場合には、一意キーテーブルの該当スロットに格納されている経歴値とオフセットの組から、一意キーではない他のカラムの値を得ることができる。また逆に、一意キー以外のカラム値が指定された場合には、第2のB+木データから経歴値とオフセットの組をキー値として、そのデータ値、つまり対象のレコードが格納されている一意キーテーブルのスロット番号を得ることができるので、対応する一意キーの値を得ることができる。
よって、一意キーを、他のカラムとは別に管理し、一意キー以外のカラムのみによって拡張可能配列を構成することが可能となる。したがって、経歴値−オフセット空間のオーバーフローを遅らせることが可能となる。
さらに、本発明に係るデータベース装置は、関係テーブルを2つのカラム集合の組に分割し、分割したそれぞれの関係テーブルについて、拡張可能配列を構成し、経歴値とオフセットの組をそれぞれ登録した第2のB+木データを生成するとともに、元の関係テーブルが持つ1個もしくは複数個の一意キーの値と、分割したそれぞれの関係テーブルに対応する上記第2のB+木データに格納されている経歴値とオフセットの組とを登録した一意キーテーブルを生成する垂直分割管理手段をさらに具備することを特徴としている。
上記の構成によれば、さらに、関係テーブルを2つのカラム集合に分割して(テーブルの垂直分割)、2つのテーブルとすることにより、経歴値−オフセット空間を縮小することができる。よって、経歴値−オフセット空間がオーバーフローした時点で関係テーブルを垂直分割することにより、新たなカラム値の追加に対しても無制限に対応することが可能となる。なお、経歴値−オフセット空間は使用するコンピュータのアドレス長をaとすると2aとなり、このサイズを超えるオフセット値はソフトウェアにより計算されるので、実行効率が極端に低下する。
また、本発明に係るデータベースのデータ構造は、関係テーブルを用いたデータベースのデータ構造であって、関係テーブルのカラム値ごとに設けられ、該カラム値から拡張可能配列の添字に変換するための第1のB+木データと、関係テーブルの各レコードに対応する拡張可能配列の要素の経歴値およびオフセットの2項組表現をキー値として登録した第2のB+木データと、配列拡張の時間的順序を登録した経歴値テーブルと、サブ配列内の要素のオフセットを計算する1次関数の係数からなる係数ベクトルをサブ配列ごとに登録した係数テーブルと、拡張可能配列の添字ごとにその添字に対応するカラム値を持つすべてのレコード数を登録したレコード数テーブルと、よりなることを特徴としている。
n個のカラムからなる関係テーブルのレコードは、n次元拡張可能配列のn個の添字の組で表される。
上記の構成によれば、この添字の組は新たなカラム値を持つレコードの追加により拡張付加されるn−1次元のサブ配列の付加順を表す拡張経歴値とサブ配列内のオフセットの2項組で表される。すなわち、nが大きくなれば関係テーブルのレコード長は大きくなるが、nにかかわらず、経歴値およびオフセットの2項組でレコードを表している。したがって、特にカラム数の多い関係テーブルの場合でも、極めて記憶効率がよい。また、存在しているレコードについてのみ、対応する2項組をキー値としてB+木に登録しており、この点からも記憶効率が向上する。さらに、B+木の利用により、高速検索処理が可能である。
さらに、本発明に係るデータベースのデータ構造は、上記第2のB+木データは、拡張可能配列の次元ごとに設けられ、キー値である経歴値およびオフセットの2項組表現を次元ごとに管理することを特徴としている。
上記の構成によれば、さらに、第2のB+木データに対する処理を次元ごとに並列化することができる。例えば、次元ごとにプロセッサを割り当て、その次元の第2のB+木データの制御を専用に行わせた場合、その次元の第2のB+木データのみの排他制御で済み、並列性の阻害が抑制される。なお、第1のB+木データや他のテーブル(経歴値テーブル、係数テーブル、レコード数テーブル等)はそのまま変更せずに使用できる。また、第2のB+木データが単一の場合には、マルチトランザクション時に第2のB+木データ全体に対して排他制御(ロッキング)する必要があるため、並列化できない。
さらに、本発明に係るデータベースのデータ構造は、複合オブジェクトを用いたオブジェクト指向データベースのデータ構造であって、上記複合オブジェクトは、その属性として他のインスタンスオブジェクトへの参照をオブジェクトIDとして持つオブジェクトであり、クラスの各属性が上記関係テーブルの各カラムにそれぞれ割り当てられ、カラムが他のインスタンスオブジェクトを参照するオブジェクトID型の属性であるとき、カラム値が、参照する関係テーブルのレコードのオブジェクトIDであることを特徴としている。
上記の構成によれば、さらに、関係テーブルとオブジェクトとを上記のように対応づけることによって、複合オブジェクトを用いたオブジェクト指向データベースが実現できる。そして、上述したデータ構造に従ってデータが管理されるため、記憶領域サイズおよびアクセス速度の両面で高いパフォーマンスを発揮できる。
また、本発明に係る文書データのデータ構造は、上述のデータベースのデータ構造を利用した文書データのデータ構造であって、文書データに含まれるタグ要素が上記関係テーブルのカラムに割り当てられ、タグ要素が複数のタグ要素を含むとき、カラム値が、参照する関係テーブルのレコードのオブジェクトIDであることを特徴としている。
上記の構成によれば、さらに、関係テーブルとタグとを上記のように対応づけることによって、XML文書等の文書データを管理できる。そして、上述したデータ構造に従ってデータが管理されるため、記憶領域サイズおよびアクセス速度の両面で高いパフォーマンスを発揮できる。
なお、上記データベース装置は、コンピュータによって実現してもよく、この場合には、コンピュータを上記各手段として動作させることにより上記データベース装置をコンピュータにて実現させるデータベース管理プログラム、およびそれを記録したコンピュータ読み取り可能な記録媒体も、本発明の範疇に入る。
発明の詳細な説明の項においてなされた具体的な実施態様または実施例は、あくまでも、本発明の技術内容を明らかにするものであって、そのような具体例にのみ限定して狭義に解釈されるべきものではなく、本発明の精神と特許請求事項との範囲内で、いろいろと変更して実施することができるものである。
本発明は関係データベースに広く適用できるのものであり、特に、大規模関係テーブルの高速検索処理が必要な産業上の多くの分野に好適である。記憶効率も優れている。また、本発明は、関係テーブルのみではなく、オブジェクト指向データベースにおけるクラスの実装にも適用でき、オブジェクトIDの導入により、複合オブジェクトの効率よい実装方式も提供できる。さらに、大規模なXML(EXtensible Markup Language)文書の効率よい記憶構造としての使用の他、多次元データ一般の実装にも応用できる。
Claims (28)
- 関係テーブルを用いたデータベース装置であって、
関係テーブルの各レコードに対応する拡張可能配列の要素の位置を示す位置情報をキー値として登録した要素位置B+木データを格納したデータベース記憶部を具備するとともに、
上記位置情報が、要素が属する拡張可能配列の区画の先頭要素の位置を示す区画位置情報と区画内における要素の位置を示す区画内オフセットとを含む情報であることを特徴とするデータベース装置。 - 上記区画が拡張可能配列のサブ配列であって、
上記データベース記憶部に、
上記区画位置情報である、関係テーブルの各レコードに対応する拡張可能配列の要素が属する区画の経歴値と、上記区画内オフセットであるサブ配列内オフセットとの2項組表現をキー値として登録した、上記要素位置B+木データである第2のB+木データとともに、
関係テーブルのカラム値ごとに設けられ、該カラム値から拡張可能配列の添字に変換するための第1のB+木データと、
配列拡張の時間的順序を登録した経歴値テーブルと、
サブ配列内の要素のサブ配列内オフセットを計算する1次関数の係数からなる係数ベクトルをサブ配列ごとに登録した係数テーブルと、
拡張可能配列の添字ごとにその添字に対応するカラム値を持つすべてのレコード数を登録したレコード数テーブルと、を格納したことを特徴とする請求項1に記載のデータベース装置。 - 検索要求に対して、上記第2のB+木データより検索要求に対応する経歴値とサブ配列内オフセットの2項組を検索するレコード検索手段を具備することを特徴とする請求項2に記載のデータベース装置。
- 新たなカラム値を持つレコードを挿入するとき、上記第1のB+木データにそのカラム値を登録して、拡張可能配列を拡張し、上記経歴値テーブルおよび上記係数テーブルに経歴値および係数をそれぞれ登録し、上記レコード数テーブルに初期値を登録するとともに、当該拡張可能配列の要素の経歴値およびサブ配列内オフセットの2項組表現をキー値として上記第2のB+木データへ挿入するレコード挿入手段を具備することを特徴とする請求項2に記載のデータベース装置。
- 1つのレコードを削除するとき、経歴値とサブ配列内オフセットの2項組を上記第2のB+木データから削除するとともに、上記レコード数テーブルのレコード数を1だけ減算するレコード削除手段を具備することを特徴とする請求項2に記載のデータベース装置。
- 上記レコード検索手段が検索した経歴値とオフセットの2項組を拡張可能配列の各次元の添字に変換し、該変換した添字に従って各次元の経歴値テーブル、係数テーブル、レコード数テーブルの各スロットにあらかじめ格納されているカラム値あるいはカラム値が格納されている記憶領域へのポインタを取得するキー値−カラム値逆変換手段をさらに具備することを特徴とする請求項3に記載のデータベース装置。
- 上記データベース記憶部は、さらに、カラム値の重複が起こり得ないカラムである一意キーと、拡張可能配列の要素の経歴値およびサブ配列内オフセットの2項組表現とを登録した一意キーテーブルを格納しており、かつ、
上記一意キーテーブルに基づいて、一意キーと一意キー以外のカラム値との対応関係を管理する一意キー管理手段を具備することを特徴とする請求項2に記載のデータベース装置。 - 関係テーブルを2つのカラム集合の組に分割し、分割したそれぞれの関係テーブルについて、拡張可能配列を構成し、経歴値とオフセットの組をそれぞれ登録した第2のB+木データを生成するとともに、元の関係テーブルが持つ1個もしくは複数個の一意キーの値と、分割したそれぞれの関係テーブルに対応する上記第2のB+木データに格納されている経歴値とオフセットの組とを登録した一意キーテーブルを生成する垂直分割管理手段をさらに具備することを特徴とする請求項7に記載のデータベース装置。
- 関係テーブルを用いたデータベース装置におけるデータベースの管理方法であって、
上記データベース装置は、
データベース記憶部に、
関係テーブルのカラム値ごとに設けられ、該カラム値から拡張可能配列の添字に変換するための第1のB+木データと、
関係テーブルの各レコードに対応する拡張可能配列の要素の経歴値およびサブ配列内オフセットの2項組表現をキー値として登録した第2のB+木データと、
配列拡張の時間的順序を登録した経歴値テーブルと、
サブ配列内の要素のサブ配列内オフセットを計算する1次関数の係数からなる係数ベクトルをサブ配列ごとに登録した係数テーブルと、
拡張可能配列の添字ごとにその添字に対応するカラム値を持つすべてのレコード数を登録したレコード数テーブルと、を格納しており、
検索要求に対して、上記第2のB+木データより検索要求に対応する経歴値とサブ配列内オフセットの2項組を検索することを特徴とするデータベースの管理方法。 - 関係テーブルを用いたデータベース装置におけるデータベースの管理方法であって、
上記データベース装置は、
データベース記憶部に、
関係テーブルのカラム値ごとに設けられ、該カラム値から拡張可能配列の添字に変換するための第1のB+木データと、
関係テーブルの各レコードに対応する拡張可能配列の要素の経歴値およびサブ配列内オフセットの2項組表現をキー値として登録した第2のB+木データと、
配列拡張の時間的順序を登録した経歴値テーブルと、
サブ配列内の要素のサブ配列内オフセットを計算する1次関数の係数からなる係数ベクトルをサブ配列ごとに登録した係数テーブルと、
拡張可能配列の添字ごとにその添字に対応するカラム値を持つすべてのレコード数を登録したレコード数テーブルと、を格納しており、
新たなカラム値を持つレコードを挿入するとき、上記第1のB+木データにそのカラム値を登録して、拡張可能配列を拡張し、上記経歴値テーブルおよび上記係数テーブルに経歴値および係数をそれぞれ登録し、上記レコード数テーブルに初期値を登録するとともに、当該拡張可能配列の要素の経歴値およびサブ配列内オフセットの2項組表現をキー値として上記第2のB+木データへ挿入することを特徴とするデータベースの管理方法。 - 関係テーブルを用いたデータベース装置におけるデータベースの管理方法であって、
上記データベース装置は、
データベース記憶部に、
関係テーブルのカラム値ごとに設けられ、該カラム値から拡張可能配列の添字に変換するための第1のB+木データと、
関係テーブルの各レコードに対応する拡張可能配列の要素の経歴値およびサブ配列内オフセットの2項組表現をキー値として登録した第2のB+木データと、
配列拡張の時間的順序を登録した経歴値テーブルと、
サブ配列内の要素のサブ配列内オフセットを計算する1次関数の係数からなる係数ベクトルをサブ配列ごとに登録した係数テーブルと、
拡張可能配列の添字ごとにその添字に対応するカラム値を持つすべてのレコード数を登録したレコード数テーブルと、を格納しており、
1つのレコードを削除するとき、経歴値とオフセットの2項組を上記第2のB+木データから削除するとともに、上記レコード数テーブルのレコード数を1だけ減算することを特徴とするデータベースの管理方法。 - 関係テーブルを用いたデータベースのデータ構造であって、
関係テーブルのカラム値ごとに設けられ、該カラム値から拡張可能配列の添字に変換するための第1のB+木データと、
関係テーブルの各レコードに対応する拡張可能配列の要素の経歴値およびサブ配列内オフセットの2項組表現をキー値として登録した第2のB+木データと、
配列拡張の時間的順序を登録した経歴値テーブルと、
サブ配列内の要素のサブ配列内オフセットを計算する1次関数の係数からなる係数ベクトルをサブ配列ごとに登録した係数テーブルと、
拡張可能配列の添字ごとにその添字に対応するカラム値を持つすべてのレコード数を登録したレコード数テーブルと、よりなることを特徴とするデータベースのデータ構造。 - 上記第2のB+木データは、拡張可能配列の次元ごとに設けられ、キー値である経歴値およびサブ配列内オフセットの2項組表現を次元ごとに管理することを特徴とする請求項12に記載のデータベースのデータ構造。
- 複合オブジェクトを用いたオブジェクト指向データベースのデータ構造であって、
上記複合オブジェクトは、その属性として他のインスタンスオブジェクトへの参照をオブジェクトIDとして持つオブジェクトであり、
クラスの各属性が上記関係テーブルの各カラムにそれぞれ割り当てられ、
カラムが他のインスタンスオブジェクトを参照するオブジェクトID型の属性であるとき、カラム値が、参照する関係テーブルのレコードのオブジェクトIDであり、かつ、クラスの集合型属性に対応する集合型カラムを他の単純型カラムとは別に管理できるように付加されることを特徴とする請求項12に記載のデータベースのデータ構造。 - 請求項14に記載のデータベースのデータ構造を利用した文書データのデータ構造であって、
文書データに含まれるタグ要素が上記関係テーブルのカラムに割り当てられ、
タグ要素が複数のタグ要素を含むとき、カラム値が、参照する関係テーブルのレコードのオブジェクトIDであるとともに、
文書の木グラフ表現におけるノードのメタ情報が上記関係テーブルのカラムに割り当てられることを特徴とする文書データのデータ構造。 - 上記拡張可能配列がチャンク化拡張可能配列であり、かつ、上記区画がチャンク化拡張可能配列のチャンクであって、
上記データベース記憶部に、
上記区画位置情報である、関係テーブルの各レコードに対応するチャンク化拡張可能配列の要素が属するチャンクのチャンク番号と、上記区画内オフセットであるチャンク内オフセットとの2項組表現をキー値として登録した、上記要素位置B+木データである第2のB+木データとともに、
関係テーブルのカラム値ごとに設けられ、該カラム値からチャンク化拡張可能配列のチャンクサブ配列情報の位置を表す添字とチャンク内での添字の2項組表現に変換するための第1のB+木データと、
チャンクサブ配列情報としてチャンク配列拡張の時間的順序を登録した経歴値テーブルと、
チャンクサブ配列内のチャンクの番号を計算する1次関数の係数からなる係数ベクトルをチャンクサブ配列ごとに登録した係数テーブルと、
カラム値の情報として、拡張可能配列の添字ごとに対応する該カラム値またはカラム値が格納されている記憶領域へのポインタからなるカラム値テーブルと、
該カラム値を持つすべてのレコード数を登録したレコード数テーブルと、を格納したことを特徴とする請求項1に記載のデータベース装置。 - 検索要求に対して、上記第2のB+木データより検索要求に対応するチャンク番号とチャンク内オフセットとの2項組を検索するレコード検索手段を具備することを特徴とする請求項16に記載のデータベース装置。
- 新たなカラム値を持つレコードを挿入するとき、上記第1のB+木データにそのカラム値を登録して、チャンク化拡張可能配列を拡張し、上記経歴値テーブルおよび上記係数テーブルに経歴値および係数をそれぞれ登録し、上記レコード数テーブルに初期値を登録するとともに、当該拡張可能配列の要素が所属するチャンクのチャンク番号とチャンク内オフセットとの2項組表現をキー値として上記第2のB+木データへ挿入するレコード挿入手段を具備することを特徴とする請求項16に記載のデータベース装置。
- 1つのレコードを削除するとき、チャンク番号とチャンク内オフセットの2項組を上記第2のB+木データから削除するとともに、上記レコード数テーブルのレコード数を1だけ減算するレコード削除手段を具備することを特徴とする請求項16に記載のデータベース装置。
- 上記レコード検索手段が検索したチャンク番号とチャンク内オフセットの2項組をチャンク化拡張可能配列の各次元の添字に変換し、該変換した添字に従ってあらかじめカラム値テーブル格納されているカラム値あるいはカラム値が格納されている記憶領域へのポインタを取得するキー値−カラム値逆変換手段をさらに具備することを特徴とする請求項17に記載のデータベース装置。
- 上記データベース記憶部は、さらに、カラム値の重複が起こり得ないカラムである一意キーと、チャンク化拡張可能配列の要素の属するチャンク番号およびチャンク内オフセットの2項組表現とを登録した一意キーテーブルを格納しており、かつ、
上記一意キーテーブルに基づいて、一意キーと一意キー以外のカラム値との対応関係を管理する一意キー管理手段を具備することを特徴とする請求項16に記載のデータベース装置。 - 関係テーブルを2つのカラム集合の組に分割し、分割したそれぞれの関係テーブルについて、チャンク化拡張可能配列を構成し、チャンク番号およびチャンク内オフセットの2項組表現をそれぞれ登録した第2のB+木データを生成するとともに、元の関係テーブルが持つ1個もしくは複数個の一意キーの値と、分割したそれぞれの関係テーブルに対応する上記第2のB+木データに格納されているチャンク番号およびチャンク内オフセットの2項組表現とを登録した一意キーテーブルを生成する垂直分割管理手段をさらに具備することを特徴とする請求項21に記載のデータベース装置。
- 関係テーブルを用いたデータベース装置におけるデータベースの管理方法であって、
上記データベース装置は、
データベース記憶部に、
関係テーブルのカラム値ごとに設けられ、該カラム値からチャンク化拡張可能配列のチャンクサブ配列情報の位置を表す添字とチャンク内での添字の2項組表現に変換するための第1のB+木データと、
関係テーブルの各レコードに対応するチャンク化拡張可能配列の要素が属するチャンクのチャンク番号とチャンク内オフセットの2項組表現をキー値として登録した第2のB+木データと、
チャンクサブ配列情報としてチャンク配列拡張の時間的順序を登録した経歴値テーブルと、
チャンクサブ配列内のチャンクの番号を計算する1次関数の係数からなる係数ベクトルをチャンクサブ配列ごとに登録した係数テーブルと、
カラム値の情報として、拡張可能配列の添字ごとに対応する該カラム値またはカラム値が格納されている記憶領域へのポインタからなるカラム値テーブルと、
該カラム値を持つすべてのレコード数を登録したレコード数テーブルと、を格納しており、
検索要求に対して、上記第2のB+木データより検索要求に対応するチャンク番号とチャンク内オフセットとの2項組を検索することを特徴とするデータベースの管理方法。 - 関係テーブルを用いたデータベース装置におけるデータベースの管理方法であって、
上記データベース装置は、
データベース記憶部に、
関係テーブルのカラム値ごとに設けられ、該カラム値からチャンク化拡張可能配列のチャンクサブ配列情報の位置を表す添字とチャンク内での添字の2項組表現に変換するための第1のB+木データと、
関係テーブルの各レコードに対応するチャンク化拡張可能配列の要素が属するチャンクのチャンク番号とチャンク内オフセットの2項組表現をキー値として登録した第2のB+木データと、
チャンクサブ配列情報としてチャンク配列拡張の時間的順序を登録した経歴値テーブルと、
チャンクサブ配列内のチャンクの番号を計算する1次関数の係数からなる係数ベクトルをチャンクサブ配列ごとに登録した係数テーブルと、
カラム値の情報として、拡張可能配列の添字ごとに対応する該カラム値またはカラム値が格納されている記憶領域へのポインタからなるカラム値テーブルと、
該カラム値を持つすべてのレコード数を登録したレコード数テーブルと、を格納しており、
新たなカラム値を持つレコードを挿入するとき、上記第1のB+木データにそのカラム値を登録して、チャンク化拡張可能配列を拡張し、上記経歴値テーブルおよび上記係数テーブルに経歴値および係数をそれぞれ登録し、上記レコード数テーブルに初期値を登録するとともに、当該拡張可能配列の要素が所属するチャンクのチャンク番号とチャンク内オフセットとの2項組表現をキー値として上記第2のB+木データへ挿入することを特徴とするデータベースの管理方法。 - 関係テーブルを用いたデータベース装置におけるデータベースの管理方法であって、
上記データベース装置は、
データベース記憶部に、
関係テーブルのカラム値ごとに設けられ、該カラム値からチャンク化拡張可能配列のチャンクサブ配列情報の位置を表す添字とチャンク内での添字の2項組表現に変換するための第1のB+木データと、
関係テーブルの各レコードに対応するチャンク化拡張可能配列の要素が属するチャンクのチャンク番号とチャンク内オフセットの2項組表現をキー値として登録した第2のB+木データと、
チャンクサブ配列情報としてチャンク配列拡張の時間的順序を登録した経歴値テーブルと、
チャンクサブ配列内のチャンクの番号を計算する1次関数の係数からなる係数ベクトルをチャンクサブ配列ごとに登録した係数テーブルと、
カラム値の情報として、拡張可能配列の添字ごとに対応する該カラム値またはカラム値が格納されている記憶領域へのポインタからなるカラム値テーブルと、
該カラム値を持つすべてのレコード数を登録したレコード数テーブルと、を格納しており、
1つのレコードを削除するとき、チャンク番号とチャンク内オフセットの2項組を上記第2のB+木データから削除するとともに、上記レコード数テーブルのレコード数を1だけ減算することを特徴とするデータベースの管理方法。 - 関係テーブルを用いたデータベースのデータ構造であって、
関係テーブルのカラム値ごとに設けられ、該カラム値からチャンク化拡張可能配列のチャンクサブ配列情報の位置を表す添字とチャンク内での添字の2項組表現に変換するための第1のB+木データと、
関係テーブルの各レコードに対応するチャンク化拡張可能配列の要素が属するチャンクのチャンク番号とチャンク内オフセットの2項組表現をキー値として登録した第2のB+木データと、
チャンクサブ配列情報としてチャンク配列拡張の時間的順序を登録した経歴値テーブルと、
チャンクサブ配列内のチャンクの番号を計算する1次関数の係数からなる係数ベクトルをチャンクサブ配列ごとに登録した係数テーブルと、
カラム値の情報として、拡張可能配列の添字ごとに対応するカラム値またはカラム値が格納されている記憶領域へのポインタからなるカラム値テーブルと、
該カラム値を持つすべてのレコード数を登録したレコード数テーブルと、よりなることを特徴とするデータベースのデータ構造。 - 請求項3から8、17から22のいずれか1項に記載のデータベース装置を動作させるデータベース管理プログラムであって、コンピュータを上記の各手段として機能させるためのデータベース管理プログラム。
- 請求項27に記載のデータベース管理プログラムを記録したコンピュータ読み取り可能な記録媒体。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004314683 | 2004-10-28 | ||
JP2004314683 | 2004-10-28 | ||
PCT/JP2005/019828 WO2006046669A1 (ja) | 2004-10-28 | 2005-10-27 | データベース管理装置、方法、プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JPWO2006046669A1 true JPWO2006046669A1 (ja) | 2008-05-22 |
Family
ID=36227911
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006543268A Pending JPWO2006046669A1 (ja) | 2004-10-28 | 2005-10-27 | データベース管理装置、方法、プログラム |
Country Status (4)
Country | Link |
---|---|
US (1) | US20080091691A1 (ja) |
EP (1) | EP1845453A4 (ja) |
JP (1) | JPWO2006046669A1 (ja) |
WO (1) | WO2006046669A1 (ja) |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080071887A1 (en) * | 2006-09-19 | 2008-03-20 | Microsoft Corporation | Intelligent translation of electronic data interchange documents to extensible markup language representations |
US20080071806A1 (en) * | 2006-09-20 | 2008-03-20 | Microsoft Corporation | Difference analysis for electronic data interchange (edi) data dictionary |
US8089635B2 (en) | 2007-01-22 | 2012-01-03 | California Institute Of Technology | Method and system for fast three-dimensional imaging using defocusing and feature recognition |
KR20090104857A (ko) | 2007-01-22 | 2009-10-06 | 캘리포니아 인스티튜트 오브 테크놀로지 | 정량적 3-d 이미징을 위한 방법 및 장치 |
WO2008133957A1 (en) | 2007-04-23 | 2008-11-06 | California Institute Of Technology | Single-lens, single-sensor 3-d imaging device with a central aperture for obtaining camera position |
US8028000B2 (en) * | 2008-02-28 | 2011-09-27 | Microsoft Corporation | Data storage structure |
EP2329454A2 (en) * | 2008-08-27 | 2011-06-08 | California Institute of Technology | Method and device for high-resolution three-dimensional imaging which obtains camera pose using defocusing |
JP4760884B2 (ja) * | 2008-09-26 | 2011-08-31 | セイコーエプソン株式会社 | 水晶振動子パッケージ、電子部品の実装構造体、及び電子部品の製造方法 |
JP5419069B2 (ja) * | 2009-02-24 | 2014-02-19 | 国立大学法人福井大学 | データベース装置、データベースの管理方法、データベースのデータ構造、データベースの管理プログラムおよびそれを記録したコンピュータ読み取り可能な記録媒体 |
US20100292995A1 (en) * | 2009-05-18 | 2010-11-18 | Tian Bu | Method and apparatus for incremental quantile estimation |
US8666946B2 (en) * | 2009-07-10 | 2014-03-04 | Alcatel Lucent | Incremental quantile tracking of multiple record types |
US8773507B2 (en) | 2009-08-11 | 2014-07-08 | California Institute Of Technology | Defocusing feature matching system to measure camera pose with interchangeable lens cameras |
WO2011031538A2 (en) * | 2009-08-27 | 2011-03-17 | California Institute Of Technology | Accurate 3d object reconstruction using a handheld device with a projected light pattern |
WO2012030357A1 (en) | 2010-09-03 | 2012-03-08 | Arges Imaging, Inc. | Three-dimensional imaging system |
US8671111B2 (en) * | 2011-05-31 | 2014-03-11 | International Business Machines Corporation | Determination of rules by providing data records in columnar data structures |
US20130024300A1 (en) * | 2011-07-21 | 2013-01-24 | Bank Of America Corporation | Multi-stage filtering for fraud detection using geo-positioning data |
US9747363B1 (en) | 2012-03-01 | 2017-08-29 | Attivio, Inc. | Efficient storage and retrieval of sparse arrays of identifier-value pairs |
US9495377B2 (en) | 2012-09-12 | 2016-11-15 | International Business Machines Corporation | Secure deletion operations in a wide area network |
US9430523B2 (en) | 2013-09-06 | 2016-08-30 | Sap Se | Entity-relationship model extensions using annotations |
US9354948B2 (en) | 2013-09-06 | 2016-05-31 | Sap Se | Data models containing host language embedded constraints |
US9442977B2 (en) | 2013-09-06 | 2016-09-13 | Sap Se | Database language extended to accommodate entity-relationship models |
US9575819B2 (en) | 2013-09-06 | 2017-02-21 | Sap Se | Local buffers for event handlers |
US9176801B2 (en) | 2013-09-06 | 2015-11-03 | Sap Se | Advanced data models containing declarative and programmatic constraints |
US9639572B2 (en) | 2013-09-06 | 2017-05-02 | Sap Se | SQL enhancements simplifying database querying |
US9619552B2 (en) | 2013-09-06 | 2017-04-11 | Sap Se | Core data services extensibility for entity-relationship models |
US9361407B2 (en) | 2013-09-06 | 2016-06-07 | Sap Se | SQL extended with transient fields for calculation expressions in enhanced data models |
US11406264B2 (en) | 2016-01-25 | 2022-08-09 | California Institute Of Technology | Non-invasive measurement of intraocular pressure |
WO2018022011A1 (en) * | 2016-07-26 | 2018-02-01 | Hewlett-Packard Development Company, L.P. | Indexing voxels for 3d printing |
WO2018066329A1 (ja) * | 2016-10-03 | 2018-04-12 | 日立オートモティブシステムズ株式会社 | 車載電子制御装置 |
CA3128753C (en) | 2017-02-27 | 2023-04-18 | Timescale, Inc. | Scalable database system for querying time-series data |
US10776361B2 (en) * | 2017-04-07 | 2020-09-15 | Salesforce.Com, Inc. | Time series database search system |
US10698865B2 (en) * | 2017-06-26 | 2020-06-30 | Vmware, Inc. | Management of B-tree leaf nodes with variable size values |
US11176105B2 (en) * | 2018-04-27 | 2021-11-16 | Sap Se | System and methods for providing a schema-less columnar data store |
US10977234B2 (en) | 2019-08-02 | 2021-04-13 | Timescale, Inc. | Combining compressed and uncompressed data at query time for efficient database analytics |
US11995084B1 (en) | 2023-10-05 | 2024-05-28 | Timescale, Inc. | Database system for querying time-series data stored in a tiered storage using a cloud platform |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003514281A (ja) * | 1999-10-25 | 2003-04-15 | オラクル コーポレーション | リレーショナルデータベース管理システムに多次元データを記憶する方法 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5359724A (en) * | 1992-03-30 | 1994-10-25 | Arbor Software Corporation | Method and apparatus for storing and retrieving multi-dimensional data in computer memory |
US5611076A (en) * | 1994-09-21 | 1997-03-11 | Micro Data Base Systems, Inc. | Multi-model database management system engine for databases having complex data models |
US5758145A (en) * | 1995-02-24 | 1998-05-26 | International Business Machines Corporation | Method and apparatus for generating dynamic and hybrid sparse indices for workfiles used in SQL queries |
US5857196A (en) * | 1996-07-19 | 1999-01-05 | Bay Networks, Inc. | Method for storing a tree of potential keys in a sparse table |
US5873078A (en) * | 1996-07-19 | 1999-02-16 | Bay Networks, Inc. | Radix tree search logic |
US5968109A (en) * | 1996-10-25 | 1999-10-19 | Navigation Technologies Corporation | System and method for use and storage of geographic data on physical media |
US5963956A (en) * | 1997-02-27 | 1999-10-05 | Telcontar | System and method of optimizing database queries in two or more dimensions |
JP3849279B2 (ja) * | 1998-01-23 | 2006-11-22 | 富士ゼロックス株式会社 | インデクス作成方法および検索方法 |
US6532476B1 (en) * | 1999-11-13 | 2003-03-11 | Precision Solutions, Inc. | Software based methodology for the storage and retrieval of diverse information |
US7269786B1 (en) * | 2000-05-04 | 2007-09-11 | International Business Machines Corporation | Navigating an index to access a subject multi-dimensional database |
US6915289B1 (en) * | 2000-05-04 | 2005-07-05 | International Business Machines Corporation | Using an index to access a subject multi-dimensional database |
US6633880B1 (en) * | 2000-12-22 | 2003-10-14 | Nortel Networks Limited | Method and apparatus for performing distinct types of radix searches |
US7293079B1 (en) * | 2000-12-22 | 2007-11-06 | Nortel Networks Limited | Method and apparatus for monitoring a network using statistical information stored in a memory entry |
US7039627B1 (en) * | 2000-12-22 | 2006-05-02 | Nortel Networks Limited | Method and apparatus for performing a radix search by selecting one of a valid table and a transition table |
WO2003001720A2 (en) * | 2001-06-21 | 2003-01-03 | Isc, Inc. | Database indexing method and apparatus |
US6978260B2 (en) * | 2002-04-23 | 2005-12-20 | Hewlett-Packard Development Company, L.P. | System and method for storing data |
-
2005
- 2005-10-27 WO PCT/JP2005/019828 patent/WO2006046669A1/ja active Application Filing
- 2005-10-27 JP JP2006543268A patent/JPWO2006046669A1/ja active Pending
- 2005-10-27 EP EP05805309A patent/EP1845453A4/en not_active Withdrawn
- 2005-10-27 US US11/666,121 patent/US20080091691A1/en not_active Abandoned
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003514281A (ja) * | 1999-10-25 | 2003-04-15 | オラクル コーポレーション | リレーショナルデータベース管理システムに多次元データを記憶する方法 |
Non-Patent Citations (8)
Title |
---|
CSNG200100351030, 河原 英達 他, "拡張可能配列とその共有システムの設計と実現", 情報処理学会研究報告, 20000728, 第2000巻 第69号, p. 259〜266, JP, 社団法人情報処理学会 * |
CSNG200401765007, 都司 達夫 他, "拡張可能配列の遅延割付け方式", 電子情報通信学会論文誌, 20030501, 第J86−D−I巻 第5号, p. 351〜356, JP, 社団法人電子情報通信学会 * |
CSNG200500337014, 都司 達夫 他, "MOLAPのための多次元配列の実現方式とその性能評価", 電子情報通信学会論文誌, 20040201, 第J87−D−I巻 第2号, p. 244〜255, JP, 社団法人電子情報通信学会 * |
CSNG200900341046, 原 章広 他, "MOLAPのための拡張可能配列", 第15回データ工学ワークショップ(DEWS2004)論文集 [online], 20040618, JP, 電子情報通信学会データ工学研究専門委員会 * |
JPN6010048994, 原 章広 他, "MOLAPのための拡張可能配列", 第15回データ工学ワークショップ(DEWS2004)論文集 [online], 20040618, JP, 電子情報通信学会データ工学研究専門委員会 * |
JPN6010048995, 都司 達夫 他, "MOLAPのための多次元配列の実現方式とその性能評価", 電子情報通信学会論文誌, 20040201, 第J87−D−I巻 第2号, p. 244〜255, JP, 社団法人電子情報通信学会 * |
JPN6010048996, 河原 英達 他, "拡張可能配列とその共有システムの設計と実現", 情報処理学会研究報告, 20000728, 第2000巻 第69号, p. 259〜266, JP, 社団法人情報処理学会 * |
JPN6010048998, 都司 達夫 他, "拡張可能配列の遅延割付け方式", 電子情報通信学会論文誌, 20030501, 第J86−D−I巻 第5号, p. 351〜356, JP, 社団法人電子情報通信学会 * |
Also Published As
Publication number | Publication date |
---|---|
EP1845453A4 (en) | 2010-06-16 |
EP1845453A1 (en) | 2007-10-17 |
US20080091691A1 (en) | 2008-04-17 |
WO2006046669A1 (ja) | 2006-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPWO2006046669A1 (ja) | データベース管理装置、方法、プログラム | |
US11899641B2 (en) | Trie-based indices for databases | |
Kondylakis et al. | Coconut: A scalable bottom-up approach for building data series indexes | |
JP3914662B2 (ja) | データベース処理方法及び実施装置並びにその処理プログラムを記憶した媒体 | |
JP3318834B2 (ja) | データファイルシステム及びデータ検索方法 | |
US20150058352A1 (en) | Thin database indexing | |
CN1152365A (zh) | 一种存储和检索数据的方法和一种存储器配置 | |
US20100223240A1 (en) | System and method for composite record keys ordered in a flat key space for a distributed database | |
CA2485423A1 (en) | Storing and querying relational data in compressed storage format | |
JP2001331509A (ja) | リレーショナルデータベース処理装置、リレーショナルデータベースの処理方法及びリレーショナルデータベースの処理プログラムを記録したコンピュータ読み取り可能な記録媒体 | |
CN101441654B (zh) | 数据库检索方法及系统 | |
Chien et al. | Geometric BWT: compressed text indexing via sparse suffixes and range searching | |
Alam et al. | Performance of point and range queries for in-memory databases using radix trees on GPUs | |
Bahta et al. | Translating JSON data into relational data using schema-oblivious approaches | |
Hon et al. | Compressed index for dictionary matching | |
Karras et al. | Query optimization in NoSQL databases using an enhanced localized R-tree index | |
US9292553B2 (en) | Queries for thin database indexing | |
JP6006740B2 (ja) | インデックス管理装置 | |
JP2007048318A (ja) | リレーショナルデータベースの処理方法およびリレーショナルデータベース処理装置 | |
JPH08235040A (ja) | データファイル管理システム | |
Veretennikov | About a structure of easily updatable full-text indexes | |
CN110825747A (zh) | 一种信息存取方法、装置和介质 | |
Faust et al. | Footprint reduction and uniqueness enforcement with hash indices in SAP HANA | |
Babić et al. | Querying data in NoSQL databases | |
Otoo et al. | Multidimensional Sparse Array Storage for Data Analytics |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100824 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20110201 |