(57)【特許請求の範囲】
【請求項１】
データを格納するための複数のページから構成されるデータ格納領域を複数含むデータベース格納領域を複数有し、前記データの格納時もしくは検索時に利用するデータベース格納領域と前記データとを割り付けるデータ割り当て手段を有するデータベース管理装置におけるデータベース管理方法であって、
データベースの格納領域として所定数ｍ個のデータベース格納領域が与えられた場合、
前記データベースの一つ又は複数のデータ項目に対して所定のハッシュ関数を適用し、所定数ｎ（ｍ≦ｎ）個の論理的なバケットに分割し、
前記バケットと前記データベース格納領域との対応、および前記バケットと前記データ格納領域との対応を関連付けてバケットマップ表の各エントリに予め記憶し、
前記データを登録する場合に前記登録すべきデータについて前記所定のハッシュ関数によりハッシュコードを得て、前記得たハッシュコードに対応する前記バケットマップ表のエントリを参照して、前記登録すべきデータを格納すべき前記データ格納領域を特定し、当該データ格納領域に当該登録すべきデータを格納することを特徴とするデータベース管理方法。
【請求項２】
データを格納するための複数のページから構成されるデータ格納領域を複数含むデータベース格納領域を複数有し、前記データの格納時もしくは検索時に利用するデータベース格納領域と前記データとを割り付けるデータ割り当て手段を有するデータベース管理装置におけるデータベース管理方法であって、
データベースの格納領域として所定数ｍ個のデータベース格納領域が与えられた場合、
前記データベースの一つ又は複数のデータ項目に対して所定のハッシュ関数を適用し、所定数ｎ（ｍ≦ｎ）個の論理的なバケットに分割し、
前記バケットと前記データベース格納領域との対応、および前記バケットと前記データ格納領域との対応を関連付けてバケットマップ表の各エントリに予め記憶し、
前記データを検索する場合に前記検索すべきデータについて前記所定のハッシュ関数によりハッシュコードを得て、前記得たハッシュコードに対応する前記バケットマップ表のエントリを参照して、前記検索すべきデータが格納されている前記データ格納領域を特定し、当該データ格納領域に当該検索すべきデータを探索することを特徴とするデータベース管理方法。
【請求項３】
前記データベース格納領域を１つ又は複数追加した場合、（所定数ｍ＋追加数）の前記データベース格納領域について、追加以前の前記データベース格納領域に対応付けられている前記バケットマップ表のエントリから前記追加したデータベース格納領域に割り付けるべき前記エントリを特定し、
前記特定されたバケットマップ表のエントリに記憶されたデータ格納領域に相当するデータ格納領域を前記追加されたデータベース格納領域から割り当て、
前記割り当てたデータ格納領域に対して、前記特定されたバケットマップ表のエントリに記憶されたデータ格納領域をデータ格納領域単位に移動し、
前記特定されたバケットマップ表のエントリに記憶されたデータ格納領域との対応を前記割り当てたデータ格納領域との対応に変更することを特徴とする請求項１または請求項２に記載のデータベース管理方法。
【請求項４】
請求項３記載のデータベース管理方法であって、
前記データベース格納領域を１つ又は複数追加した場合、（所定数ｍ＋追加数）の前記データベース格納領域について、追加以前の前記データベース格納領域に対応付けられている前記バケットマップ表のエントリから前記追加したデータベース格納領域に割り付けるべき前記エントリを特定する際に、
前記追加するデータベース管理領域も含め、すべてのデータベース格納領域それぞれに関連付けられているバケット数が均等になるように、
追加以前の各データベース格納領域から前記均等にした場合のバケット数よりも多い数分のバケットを選択することを特徴とするデータベース管理方法。
【請求項５】
データを格納するための複数のページから構成されるデータ格納領域を複数含むデータベース格納領域を複数有し、前記データの格納時もしくは検索時に利用するデータベース格納領域と前記データとを割り付けるデータ割り当て手段を有するデータベース管理装置であって、
データベースの格納領域として所定数ｍ個のデータベース格納領域が与えられた場合、
前記データベースの一つ又は複数のデータ項目に対して所定のハッシュ関数を適用し、所定数ｎ（ｍ≦ｎ）個の論理的なバケットに分割する手段と、
前記バケットと前記データベース格納領域との対応、および前記バケットと前記データ格納領域との対応を関連付けてバケットマップ表の各エントリに予め記憶する手段と、
前記データを登録する場合に前記登録すべきデータについて前記所定のハッシュ関数によりハッシュコードを得て、前記得たハッシュコードに対応する前記バケットマップ表のエントリを参照して、前記登録すべきデータを格納すべき前記データ格納領域を特定し、当該データ格納領域に当該登録すべきデータを格納する手段とを有することを特徴とするデータベース管理装置。
【請求項６】
データを格納するための複数のページから構成されるデータ格納領域を複数含むデータベース格納領域を複数有し、前記データの格納時もしくは検索時に利用するデータベース格納領域と前記データとを割り付けるデータ割り当て手段を有するデータベース管理装置であって、
データベースの格納領域として所定数ｍ個のデータベース格納領域が与えられた場合、
前記データベースの一つ又は複数のデータ項目に対して所定のハッシュ関数を適用し、所定数ｎ（ｍ≦ｎ）個の論理的なバケットに分割する手段と、
前記バケットと前記データベース格納領域との対応、および前記バケットと前記データ格納領域との対応を関連付けてバケットマップ表の各エントリに予め記憶する手段と、
前記データを検索する場合に前記検索すべきデータについて前記所定のハッシュ関数によりハッシュコードを得て、前記得たハッシュコードに対応する前記バケットマップ表のエントリを参照して、前記検索すべきデータが格納されている前記データ格納領域を特定し、当該データ格納領域に当該検索すべきデータを探索する手段とを有することを特徴とするデータベース管理装置。
【請求項７】
前記データベース格納領域を１つ又は複数追加した場合、（所定数ｍ＋追加数）の前記データベース格納領域について、追加以前の前記データベース格納領域に対応付けられている前記バケットマップ表のエントリから前記追加したデータベース格納領域に割り付けるべき前記エントリを特定する手段と、
前記特定されたバケットマップ表のエントリに記憶されたデータ格納領域に相当するデータ格納領域を前記追加されたデータベース格納領域から割り当てる手段と、
前記割り当てたデータ格納領域に対して、前記特定されたバケットマップ表のエントリに記憶されたデータ格納領域をデータ格納領域単位に移動する手段と、
前記特定されたバケットマップ表のエントリに記憶されたデータ格納領域との対応を前記割り当てたデータ格納領域との対応に変更する手段とを有することを特徴とする請求項５または請求項６に記載のデータベース管理装置。
【請求項８】
請求項７記載のデータベース管理装置であって、
前記データベース格納領域を１つ又は複数追加した場合、（所定数ｍ＋追加数）の前記データベース格納領域について、追加以前の前記データベース格納領域に対応付けられている前記バケットマップ表のエントリから前記追加したデータベース格納領域に割り付けるべき前記エントリを特定する際に、
前記追加するデータベース管理領域も含め、すべてのデータベース格納領域それぞれに関連付けられているバケット数が均等になるように、
追加以前の各データベース格納領域から前記均等にした場合のバケット数よりも多い数分のバケットを選択する手段を有することを特徴とするデータベース管理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データを複数の記憶領域に格納するデータベース管理技術に関する。
【０００２】
【従来の技術】
一般的にデータベースを有するデータベースシステムでは、データベースに保有する情報は時々刻々変化している。その情報は時間経過と共に新たな情報が追加され、あらかじめ用意したデータベースを格納するためのデータベース格納領域の容量よりも大きくなる場合がある。
【０００３】
そのため、大規模なデータベースを扱う場合、あらかじめデータベースを複数のデータベース格納領域に分割して格納する方法が採用される。複数のデータベース格納領域に分割格納する分割手段として、キー・レンジ分割、ハッシュ分割、均等分割といった手段が用意される。各々の分割手段によって、分割したパーティションを指定したデータベース領域と１対１に対応させたり、複数のパーティションをあるデータベース領域に対応させたりという手法が採られる。時間経過と共に新たな情報が追加される場合、２つのデータベースの拡張方法が考えられる。一つは、分割手段としてキーレンジ分割が採用されている場合、新たなキーレンジを追加したり、あるキーレンジを分割するといった方法がある。これは、新たにデータベース領域を追加することなく操作することも可能である。もう一つは、分割手段は変更しないで新たにデータベース領域を追加または既存のデータベース領域を拡張する方法がある。これは、容量の増大に伴ってデータベース格納領域を増分させる方法である。これに対して、分割手段としてハッシュ分割を採用すると、分割に対するオーバヘッドが少なく、データの増加に対する柔軟性が高い。
【０００４】
ただし、あらかじめ用意したデータベース格納領域は時間と共に新たな情報が追加されるだけでなく、過去の古いデータを削除する場合もあり、必ずしも常にデータベース格納領域の容量よりも大きくなるわけではない。このような場合は、データベース再編成を行うことによって古いデータを削除することによって空きを作成し、新たに追加される情報を格納するために使用するようにすることで解決される。
【０００５】
しかし、過去のデータを延々と蓄積していくようなデータベースシステムでは、将来予測されるデータ量を想定し、あらかじめデータベース格納領域を用意しておくのは資源管理コストがかかるため、当面、予想されるデータ量まで格納できるデータベース領域を準備しておき、実際にデータ量の増加に伴って新たなデータベース格納領域が必要になった時点でデータベース格納領域を追加する運用を行う。
【０００６】
データベースに対するデータベース格納領域の追加は、データベースの定義変更を伴う。最も単純な方法としては、データベースの内容を一旦バックアップし、データベース格納領域の追加を行う定義変更処理を行った後、バックアップしたデータベースを再ローディングするという方法がある。ただし、この方法では大規模データベースの場合、バックアップを取得する時間及びバックアップ媒体等にかかるコストが非常に高く、再ローディングする処理も膨大な時間を要する。
【０００７】
第１の公知例として、米国特許４，４１２，２８５がある。本公知例では、表をハッシュ分割するが、あらかじめ複数のバケットに分割し、いくつかのバケットを仮想プロセッサに対応させて管理する技術が開示されている。
【０００８】
第２の公知例として、特開平６−１３９１１９号公報には、複数のプロセッサで構成される並列データベースシステム上にキーレンジ分割されたデータベースをアクセス頻度によってデータを再編成する技術が開示されている。
【０００９】
第３の公知例として、特開平６−３１４２９９号公報には、複数のプロセッサで構成される並列データベースシステム上に、階層的にデータベースを分割する技術が開示されている。
【００１０】
第４の公知例として、特開平７−１４１３９４号公報には、複数のプロセッサで構成される並列データベースシステム上に分割されたデータベースに対して、第５の公知例として、特開平９−２９３００６号公報には、ハッシュ関数を使用した分割方法を示し、データベース分割数が変更された場合にデータの再配置を必要とせず、データを新規追加した格納領域に格納しようとする技術が開示されている。ただし、本公知例ではデータの再配置は必要ないが、検索時には分割したすべての記憶装置を検索するようになっている。
【００１１】
【発明が解決しようとする課題】
従来技術における前者の方法の場合、データベースの大規模化についての問題が生じる。データベースの大規模化によって再配置が必要になるのは、データベース領域中の表に対するデータの追加が行われることによって、あらかじめ与えられたデータベース格納領域の空きがなくなる場合である。
【００１２】
上述したハッシュ分割を採用したデータベースの場合、ハッシング結果は分割数すなわち与えられたデータベース格納領域数に依存するため、新たにデータベース格納領域を追加する場合、それまで蓄積したデータをすべて新しい分割数の元でハッシングをやりなおし再格納しなければならない。これは、非常に膨大な時間と資源を浪費することになり、効率良くシステムを運用することができない。
【００１３】
また、再格納しないで既存の各データベース格納領域から、再配置処理として再ハッシュした結果によって他のデータベース格納領域にデータを移動させる場合、結局、各データベース格納領域中のすべてのデータを読み込まなければならず、再ハッシュしても同じデータベース格納領域内に残るデータがある場合でも無駄なデータの読み込みが生じてしまう。
【００１４】
一方、キーレンジ分割を採用したデータベースの場合、最大値または最小値の方へキーレンジを追加したり、既存のキーレンジを分割させたり、マージしたりという手法は採用されているが、新規に追加したデータベース領域に対してデータ量を考慮したデータの再配置は行われていない。
【００１５】
本発明の目的は、データを複数の格納領域へ好適に格納するデータベース管理方法および装置を提供することにある。
【００１６】
【課題を解決するための手段】
前記目的を達成するために、本発明では、複数のキーレンジと記憶装置に設けられた複数のデータ格納領域とを対応付け、データをデータベースに格納するときは、該データを含むキーレンジに対応するデータ格納領域に上記データを格納し、上記データ格納領域の追加が必要な場合、複数の上記データ格納から所定量のデータを上記追加したデータ格納領域へ移動し、上記移動したデータに対応するキーレンジを上記データ格納領域に対応付けるようにした。
【００１７】
【発明の実施の形態】
以下、本発明の一実施例を添付図面を用いて具体的に説明する。
【００１８】
本実施例の目的は、ハッシュ分割したデータベースに対してデータベース格納領域を追加する場合に、既存のデータベース格納領域から新たに追加したデータベース格納領域に対して最も少ないコストでデータを再配置することを可能とするデータベース格納管理方法を提供することにある。
【００１９】
本実施例の他の目的は、キーレンジ分割したデータベースに対してデータベース格納領域を追加する場合に、既存のデータベース格納領域から新たに追加したデータベース格納領域に対して最も少ないコストでデータを再配置し、再配置したデータの範囲で新たなキーレンジの定義を加えることを可能とするデータベース格納管理方法を提供することにある。
【００２０】
図２は本実施形態のコンピュータシステムの構成例を示す図である。コンピュータシステム１０は、ＣＰＵ１２、主記憶装置１４、磁気ディスク装置等の外部記憶装置２０及び多数の端末３０で構成される。主記憶装置１４上には、データベース管理システム４０が置かれ、複数の外部記憶装置２０を使用してデータベース管理システム４０が管理するデータベースを格納するデータベース領域５０ａ，５０ｂ，５０ｃ，５０ｄ、データベースの定義情報を管理するデータベース定義情報格納領域６０およびデータベースに対する更新操作に関する更新履歴情報を管理するデータベースログ格納領域７０が構成される。さらに、データベース管理システム４０を実現するプログラム２１００も外部記憶装置２０上に格納される。また、データベース管理システム４０は、端末３０からのデータベースアクセス要求を制御するデータベースアクセス制御部４００、データ挿入処理部４１０、データ検索処理部４３０、データベースのデータの再配置処理を制御する再配置処理部４５０から構成される。
【００２１】
図１は本発明におけるデータベースの分割管理の原理を示す。
【００２２】
例として当該データベースで「ＺＡＩＫＯ」表が定義された場合についての定義文の一例を示す。
【００２３】
CREATE TABLE ZAIKO (
SCODE    CHAR(10),
SNAME    CHAR(10),
COL      CHAR(4),
TANKA    INTEGER,
ZSURYO   INTEGER)
HASH BY SCODE IN(DBAREA1,DBARE2,DBAREA3,DBAREA4) ;
上記定義によって、「ＺＡＩＫＯ」表は４つの列ＳＣＯＤＥ，ＳＮＡＭＥ，ＣＯＬ，ＴＡＮＫＡ，ＺＳＵＲＹＯで構成され、各列に対してデータ型が与えられる。また、ＳＣＯＤＥ列をパーティショニングキーとしてハッシュ分割し、ハッシュ分割したデータは、４つのデータベース格納領域ＤＢＡＲＥＡ１，ＤＢＡＲＥＡ２，ＤＢＡＲＥＡ３に分割して格納するよう指示されている。「ＺＡＩＫＯ表」を例にとった場合の表の分割方法の原理を図１を用いて説明する。図１ではパーティショニングキーである「ＳＣＯＤＥ」列のデータがハッシュ関数によってあるハッシュ値を求め、求めたハッシュ値をもとにバケットマップ表８０によって、あらかじめ１２個のバケットに分割し、データベース格納領域が３個与えられた場合、各データベース格納領域に均等に４個ずつのバケットを振り分けるよう初期化される。また、バケットマップ表８０内の各エントリからは対応するデータベース格納領域内のセグメントへのポインタが格納される。セグメントは、複数の固定長のページから構成される。バケット・エントリ番号０からは、セグメント５００ａへのポインタが格納され、セグメント５００ａ，５００ｂ，５００ｃ，５００ｄ，５００ｅがチェインされていることを示す。バケット・エントリ番号１からは、セグメント５０１ａへのポインタが格納され、セグメント５０１ａ，５０１ｂ，５０１ｃがチェインされていることを示す。バケット・エントリ番号２からは、セグメント５０２ａへのポインタが格納されている。バケット・エントリ番号３からは、セグメント５０３ａへのポインタが格納され、セグメント５０３ａ，５０３ｂ，５０３ｃ，５０３ｄがチェインされていることを示す。同様に、データベース格納領域ＤＢＡＲＥＡ２には、バケット・エントリ番号の４から７までのバケットを格納し、データベース格納領域ＤＢＡＲＥＡ３には、バケット・エントリ番号の８から１１までのバケットを格納している。
【００２４】
「ＺＡＩＫＯ」表を例にとり、データを挿入する処理の概略処理フローを図３に示す。データベースの表に対してデータの挿入処理要求が行われる場合、「ＺＡＩＫＯ」表を例にとると以下のような要求がデータベース管理システムに対して発行される。
【００２５】
INSERT INTO ZAIKO VALUES('101','ブラウス','red',35000,62)
上記、挿入処理要求が図２における端末３０から入力されると、データベース管理システム４０のデータベースアクセス制御部４００が受け取る。データベースアクセス制御部４００は受け取った処理要求を解析し、データ挿入処理要求であると判断すると、データの挿入処理を行うデータ挿入処理部４１０に制御を渡す。データ挿入処理部４１０では、まず「ＺＡＩＫＯ」表に関する定義情報を図２におけるデータベース定義情報格納領域６０から取得する（ステップ４１１）。「ＺＡＩＫＯ」表に関する定義情報から、「ＺＡＩＫＯ」表は「ＳＣＯＤＥ」列をパーティショニングキーとし４つのデータベース格納領域に分割していることがわかる。そこで、「ＳＣＯＤＥ」列に対応するデータ値’１０１’に対してハッシュ関数を適用する。当該ハッシュ関数はできるだけシノニムを発生しないような工夫がなされ、最終的には本実施例に示した最大バケット数１２で割った余りの値がハッシュ値となる。例えば、本例ではハッシュ値が３となったとする。その場合、当該行を挿入するデータベース格納領域をバケットマップ表から求め、ＤＢＡＲＥＡ１であることが判明する（ステップ４１３）。さらに、ＤＢＡＲＥＡ１に格納する場合、当該バケットエントリ番号３に対してすでにセグメントが確保されているか否かをチェックし（ステップ４１４）、まだセグメントが確保されていなければ新規にセグメントを確保する（ステップ４１５）。新規にセグメントを確保した場合、バケットマップ表の当該バケットエントリに割り当てたセグメントのポインタを格納する。図１で示したようにすでにセグメント５０２ａが割り当てられている場合は、セグメント５０２ａ内に当該行を挿入する空きページが存在するか否かをチェックする。もし、空きページが存在しない場合は、新規にセグメントを確保し、セグメント５０２ａとのチェインを生成する。空きページが存在した場合は、当該空きページを行の挿入ページとして決定する（ステップ４１６）。こうして決定したページに行を挿入する（ステップ４１７）。行挿入時には、当該ページに対する更新ログを図２に示したデータベースログ格納領域に取得する。
【００２６】
次に、「ＺＡＩＫＯ」表を例にとり、データを検索する処理の概略処理フローを図４に示す。データベースの表に対してデータの検索処理要求が行われる場合、「ＺＡＩＫＯ」表を例にとると以下のような要求がデータベース管理システムに対して発行される。
【００２７】
SELECT SCODE,SNAME,COL,TANKA,ZSURYO FROM ZAIKO WHERE SNO='101'
上記、検索処理要求が図２における端末３０から入力されると、データベース管理システム４０のデータベースアクセス制御部４００が受け取る。データベースアクセス制御部４００は受け取った処理要求を解析し、データ検索処理要求であると判断すると、データの検索処理を行うデータ検索処理部４３０に制御を渡す。データ検索処理部４３０では、まず「ＺＡＩＫＯ」表に関する定義情報を図２におけるデータベース定義情報格納領域６０から取得する（ステップ４３１）。取得した情報の中から、「ＺＡＩＫＯ」表はパーティショニングキーＳＣＯＤＥ列でハッシュ分割していることが判明する。次に当該検索要求の探索条件中にパーティショニングキーであるＳＣＯＤＥ列に対する条件指定があるか否かをチェックする（ステップ４３２）。当該問い合わせの場合、ＳＮＯ列に対する条件が指定されているので、ハッシュ関数を適用することによってデータベース格納領域を決定する（ステップ４３３）。ここでは、「ＳＣＯＤＥ」列に対応するデータ値’１０１’に対してハッシュ関数を適用する。当該ハッシュ関数はできるだけシノニムを発生しないような工夫がなされ、最終的には本実施例に示した最大バケット数１２で割った余りの値がハッシュ値となる。例えば、本例ではハッシュ値が３となったとする。その場合、当該行を挿入するデータベース格納領域をバケットマップ表から求め、ＤＢＡＲＥＡ１であることが判明する（ステップ４３４）。データベース格納領域が決定されたので、さらに当該データベース格納領域内の当該バケットにセグメントがチェインされているか否かをバケットマップ表を参照して求める（ステップ４３５）。当該バケットのセグメントがチェインされている場合は、チェインされているすべてのセグメントに格納されているデータに対して探索条件の評価を行う（ステップ４３６）。もし、当該バケットのセグメントがない場合は、検索対象データがないということになり、検索結果は０件となる。また、ステップ４３２によってパーティショニングキーであるＳＮＯ列に対する条件指定がない場合は、すべてのデータベース格納領域が検索対象になる。すべてのデータベース格納領域が検索対象となった場合、各データベース格納領域内のバケットマップ表に設定されたセグメント番号が０でないものを対象に各要素番号のセグメントチェインを辿りながら探索条件評価を行う（ステップ４３７ないし４３８）。
【００２８】
本発明によるデータベース分割格納方法を用い、データの再配置を行う場合の原理を図５及び図６を用いて説明する。図１で示した３つのデータベース格納領域への分割に対して図５のように新規に「データベース格納領域４」５０ｄを追加した場合のデータの流れを示す。データベース格納領域を１つ追加した場合、バケットマップ表８０ではバケット数１２個で分割しているので、バケット数が均等になるよう現在の各データベース格納領域のバケット数から４分の１ずつバケットを選択し、新規の「データベース格納領域４」５０ｄに移動させるようにする。「データベース格納領域１」５０ａからは、バケット０から３までの内、バケット３を対象として選択する。バケットマップ表８０から当該バケット３のセグメントチェインを参照し、セグメント５０３ａ，５０３ｂ，５０３ｃ，５０３ｄを入力し、「データベース格納領域４」５０ｄに移動させる。「データベース格納領域２」５０ｂからは、バケット４から７までの内、バケット７を選択する。バケットマップ表８０から当該バケット７のセグメントチェインを参照し、セグメント５０７ａ，５０７ｂ，５０７ｃを入力し、「データベース格納領域４」５０ｄに移動させる。「データベース格納領域３」５０ｃからは、バケット８から１１までの内、バケット１１を選択する。バケットマップ表８０から当該バケット１１のセグメントチェインを参照し、セグメント５１１ａ，５１１ｂを入力し、「データベース格納領域４」５０ｄに移動させる。以上のようにして再配置処理が完了すると、図６に示すようなデータの分割配置になる。図を見やすくするためにバケットマップ表８０内のバケットエントリ番号の位置を変更しているが、当該バケットエントリ番号の配置は昇順に並んでいるほうがよい。「データベース格納領域４」５０ｄを追加し、データの再配置処理が完了すると、「データベース格納領域１」５０ａでは、バケット０，１，２が割り当てられ、「データベース格納領域２」５０ｂでは、バケット４，５，６が割り当てられ、「データベース格納領域３」５０ｃでは、バケット８，９，１０が割り当てられ、「データベース格納領域４」５０ｄでは、バケット３，７，１１が割り当てられる。
【００２９】
図５、６で示したデータの再配置の原理図に基づいて、データの再配置処理の処理の流れを図７に示す。データ再配置処理要求が図２における端末３０から入力されると、データベース管理システム４０のデータベースアクセス制御部４００が受け取る。データベースアクセス制御部４００は受け取った処理要求を解析し、データ再配置処理要求であると判断すると、データの検索処理を行うデータ再配置処理部４５０に制御を渡す。データ再配置処理部４５０では、まず表に関する定義情報を図２におけるデータベース定義情報格納領域６０から取得する（ステップ４５１）。取得した定義情報からすべての既存のデータベース格納領域の情報を取り出す。取り出した核データベース格納領域毎にバケットマップ表８０を参照し、移動対象となるバケットを選択する処理を行う（ステップ４５２）。図５のような場合、既存のデータベース格納領域数は３であり、バケットマップ表が持つ最大バケット数が１２であるので、新規にデータベース格納領域を１個追加する場合、各データベース格納領域内のバケット数は最大バケット数の４分の１となるようにする。こうして、各データベース格納領域から移動対象となるバケットを求める。そして、バケットマップ表８０を参照し、チェインされているセグメント情報を参照しながら移動対象セグメントの抽出処理を行う（ステップ４５３）。移動対象セグメントの抽出処理では、セグメントを構成するページ単位にデータベース格納領域から入力するか、またはセグメント単位で入力するかは、確保できるメモリサイズで決定すればよい。当該セグメント抽出処理によって抽出したセグメントを追加するデータベース格納領域への反映処理を行う（ステップ４５４）。当該反映処理では、抽出したセグメントを格納するため、追加したデータベース格納領域内で新規にセグメントを確保し、データベース格納領域に書き込む処理を行う。抽出したセグメントの反映処理が完了すると、移動対象となったデータベース格納領域から当該セグメントを削除する（ステップ４５５）。そして、バケットマップ表８０のセグメントチェインの情報を更新し、かつ、割り当てデータベース格納領域の情報も更新する（ステップ４５６）。以上のようにステップ４５２からステップ４５６までを既存の移動対象となるすべてのデータベース格納領域に対して行い、すべてのデータベース格納領域の処理が終了するまで行う（ステップ４５７）。データの抽出・反映処理が完了した時点でデータの再配置を簡潔させることができ、追加したデータベース格納領域に関する情報をデータベース定義情報に反映させることで処理を完了する（ステップ４５８）。
【００３０】
このようにデータベースの再配置処理では、各既存のデータベース格納領域から１レコードずつデータを読み込む必要がなく、セグメント単位で読み込み、追加したデータベース格納領域に書きこみを行えばよい。また、移動対象でないバケットは一切、読み込む必要がない。
【００３１】
図８は本発明におけるデータベースの分割管理の原理をキーレンジ分割されたデータベースの場合の例として示す。
【００３２】
例として当該データベースで「ＺＡＩＫＯ」表が定義された場合についての定義文の一例を示す。
【００３３】
CREATE TABLE ZAIKO (
SCODE    CHAR(10),
SNAME    CHAR(10),
COL      CHAR(4),
TANKA    INTEGER,
ZSURYO   INTEGER)
IN((DBAREA1) SCODE >v0,(DBARE2) SCODE>v4,(DBAREA3) SCODE>v8) ;
上記定義によって、「ＺＡＩＫＯ」表は４つの列ＳＣＯＤＥ，ＳＮＡＭＥ，ＣＯＬ，ＴＡＮＫＡ，ＺＳＵＲＹＯで構成され、各列に対してデータ型が与えられる。また、ＳＣＯＤＥ列をパーティショニングキーとしてキーレンジ分割し、キーレンジ分割したデータは、３つのデータベース格納領域ＤＢＡＲＥＡ１，ＤＢＡＲＥＡ２，ＤＢＡＲＥＡ３に分割して格納するよう指示されている。「ＺＡＩＫＯ表」を例にとった場合の表の分割方法の原理を図８を用いて説明する。図８ではパーティショニングキーである「ＳＣＯＤＥ」列のデータをキーレンジ分割定義によってデータベース格納領域を求め、求めたデータベース格納領域内をさらに４個のバケットに分割する。各バケットは、一つのキーレンジをさらに細かなキーレンジに分割したものである。各バケットへの分割方法は、キーレンジを単純に分割する方法や、実際に含まれるデータの分布を取得してデータ量が均等になるようなデータ区間すなわちキーレンジに分割する方法が挙げられる。
【００３４】
データベース格納領域が３個与えられた場合、各データベース格納領域に均等に４個ずつのバケットを振り分けるよう初期化する。また、バケットマップ表８０内の各エントリからは対応するデータベース格納領域内のセグメントへのポインタが格納される。セグメントは、複数の固定長のページから構成される。まず、データベース格納領域１は、ＳＣＯＤＥ列の値がｖ０より大きくｖ４以下の値を持つレコードが割り当てられ、バケット・エントリ番号０には、さらにＳＣＯＤＥ列の値がｖ０より大きくｖ１以下の値を持つレコードが割り当てられ、セグメント５００ａへのポインタが格納され、セグメント５００ａ，５００ｂ，５００ｃ，５００ｄ，５００ｅがチェインされていることを示す。バケット・エントリ番号１には、ＳＣＯＤＥ列の値がｖ１より大きくｖ２以下の値を持つレコードが割り当てられ、セグメント５０１ａへのポインタが格納され、セグメント５０１ａ，５０１ｂ，５０１ｃがチェインされていることを示す。バケット・エントリ番号２には、ＳＣＯＤＥ列の値がｖ２より大きくｖ３以下の値を持つレコードが割り当てられ、セグメント５０２ａへのポインタが格納されている。バケット・エントリ番号３には、ＳＣＯＤＥ列の値がｖ３より大きくｖ４以下の値を持つレコードが割り当てられ、セグメント５０３ａへのポインタが格納され、セグメント５０３ａ，５０３ｂ，５０３ｃ，５０３ｄがチェインされていることを示す。同様に、データベース格納領域ＤＢＡＲＥＡ２には、バケット・エントリ番号の４から７までのバケットを格納し、データベース格納領域ＤＢＡＲＥＡ３には、バケット・エントリ番号の８から１１までのバケットを格納している。
【００３５】
本発明によるデータベース分割格納方法を用い、キーレンジ分割されたデータベースのデータの再配置を行う場合の原理を図９及び図１０を用いて説明する。図８で示した３つのデータベース格納領域への分割に対して図９のように新規に「データベース格納領域４」５０ｄを追加した場合のデータの流れを示す。データベース格納領域を１つ追加した場合、バケットマップ表８０ではバケット数１２個で分割しているので、バケット数が均等になるよう現在の各データベース格納領域のバケット数から４分の１ずつバケットを選択し、新規の「データベース格納領域４」５０ｄに移動させるようにする。「データベース格納領域１」５０ａからは、バケット０から３までの内、バケット３を対象として選択する。バケットマップ表８０から当該バケット３のセグメントチェインを参照し、セグメント５０３ａ，５０３ｂ，５０３ｃ，５０３ｄを入力し、「データベース格納領域４」５０ｄに移動させる。「データベース格納領域２」５０ｂからは、バケット４から７までの内、バケット７を選択する。バケットマップ表８０から当該バケット７のセグメントチェインを参照し、セグメント５０７ａ，５０７ｂ，５０７ｃを入力し、「データベース格納領域４」５０ｄに移動させる。「データベース格納領域３」５０ｃからは、バケット８から１１までの内、バケット１１を選択する。バケットマップ表８０から当該バケット１１のセグメントチェインを参照し、セグメント５１１ａ，５１１ｂを入力し、「データベース格納領域４」５０ｄに移動させる。以上のようにして再配置処理が完了すると、図１０に示すようなデータの分割配置になる。図を見やすくするためにバケットマップ表８０内のバケットエントリ番号の位置を変更しているが、当該バケットエントリ番号の配置は昇順に並んでいるほうがよい。「データベース格納領域４」５０ｄを追加し、データの再配置処理が完了すると、「データベース格納領域１」５０ａでは、バケット０，１，２が割り当てられ、「データベース格納領域２」５０ｂでは、バケット４，５，６が割り当てられ、「データベース格納領域３」５０ｃでは、バケット８，９，１０が割り当てられ、「データベース格納領域４」５０ｄでは、バケット３，７，１１が割り当てられる。本実施例で示したキーレンジ分割したデータベースの場合、再配置後にデータベースの定義を変更する必要がある。本実施例では再配置前に３つのキーレンジに分割するように定義されていたが、再配置後は各キーレンジからデータを移動したため６つのキーレンジに分割された定義となるよう変更される。
【００３６】
以上、説明したように、データベースのデータをあらかじめ固定された複数のバケットに分割し、かつ、データベース格納領域内で物理的に独立したセグメントにバケットを格納するので、新規に追加したデータベース格納領域に対するデータの再配置処理時に移動対象のバケットのデータのみを再配置対象とすることができる。
【００３７】
また、再配置処理によって移動したセグメントは開放されるので、他のバケットの格納セグメントとして再利用が可能となり、データベース格納領域の空きに無駄がない。
【００３８】
【発明の効果】
本発明によれば、データを複数の格納領域へ、好適に格納することができる。
【図面の簡単な説明】
【図１】本発明の特長となるデータベース分割格納の原理を示す。
【図２】本発明を実施するためのデータベース管理システムの構成図を示す。
【図３】本実施例に係る表へのデータの挿入処理の概略フローを示す。
【図４】本実施例に係る表の検索処理の概略処理フローを示す。
【図５】本発明の特長となるデータ再配置のデータの流れを示す。
【図６】図５によるデータ再配置後のデータベース分割格納状態を示す。
【図７】本発明によるデータベース再配置処理の概略処理フローを示す。
【図８】本発明の特長となるキーレンジ分割したデータベース分割格納の原理を示す。
【図９】本発明の特長となるキーレンジ分割表のデータ再配置のデータの流れを示す。
【図１０】図５によるデータ再配置後のキーレンジ分割したデータベース分割格納状態を示す。
【符号の説明】
１０：コンピュータシステム
１２：ＣＰＵ
１４：主記憶装置
２０：外部記憶装置
３０：端末
４０：データベース管理システム
５０：データベース格納領域
５４：セグメント
６０：データベース定義情報格納領域
７０：データベースログ格納領域
８０：バケットマップ表
４００：データベースアクセス制御部
４１０：データ挿入処理部
４３０：データ検索処理部
４５０：再配置処理部
【図１】
0004206586.tif 000002
【図２】
0004206586.tif 000003
【図３】
0004206586.tif 000004
【図４】
0004206586.tif 000005
【図５】
0004206586.tif 000006
【図６】
0004206586.tif 000007
【図７】
0004206586.tif 000008
【図８】
0004206586.tif 000009
【図９】
0004206586.tif 000010
【図１０】
0004206586.tif 000011