(57)【要約】  分散データベースに対するデータ操作を効率的に実行し得る非共有型のデータベースシステムを提供する。  分散データベース管理システムは、クエリを受信するクエリ受付部（ロードバランサ）と、当該受信されたクエリに基づいて分散データベースに対するデータ操作を協働して実行する複数のストレージ処理部と、を備える。複数のストレージ処理部の各々は、分散データベースを構成する複数の部分データベースのうちの１つを格納しているストレージ装置と、このストレージ装置に格納されている当該部分データベースに対してクエリに基づいたデータ操作を実行するデータ操作部と、を含む。
2010098034.tif 000002
【特許請求の範囲】
【請求項１】
分散データベースに対するデータ操作を行う分散データベース管理システムであって、
クエリを受信するクエリ受付部と、
当該受信されたクエリに基づいて前記分散データベースに対するデータ操作を協働して実行する複数のストレージ処理部と、
を備え、
前記複数のストレージ処理部の各々は、
前記分散データベースを構成する複数の部分データベースのうちの１つを格納しているストレージ装置と、
前記ストレージ装置に格納されている当該部分データベースに対して前記クエリに基づいたデータ操作を実行するデータ操作部と、
を含む、分散データベース管理システム。
【請求項２】
請求項１に記載の分散データベース管理システムであって、
前記複数のストレージ処理部のうちの第１ストレージ処理部の当該データ操作部は、前記クエリに基づいたデータ操作の実行のために必要なデータセットが自己の当該部分データベースに格納されていないとき、前記複数のストレージ処理部のうち前記第１ストレージ処理部とは異なる単数または複数の第２ストレージ処理部に対して当該データセットのデータ転送要求を発行し、
前記第２ストレージ処理部の当該データ操作部は、前記データ転送要求に応じて、自己の当該部分データベースから当該データセットを取得し、前記第１ストレージ処理部に転送する、分散データベース管理システム。
【請求項３】
請求項２に記載の分散データベース管理システムであって、
前記複数のストレージ処理部と前記クエリ受付部との間のルーティングを行うとともに、前記複数のストレージ処理部のうちの任意のストレージ処理部間のデータ転送を制御するルータを更に備え、
前記ルータは、前記複数の第２ストレージ処理部から転送された当該データセットを集約して新たなテーブルを構成し、当該新たなテーブルのデータセットを前記第１ストレージ処理部に転送する、分散データベース管理システム。
【請求項４】
請求項２または３に記載の分散データベース管理システムであって、
前記第１ストレージ処理部の当該データ操作部は、前記データ転送要求として内部クエリを生成し、
前記第２ストレージ処理部の当該データ操作部は、前記内部クエリに基づいたデータ操作を自己の当該部分データベースに対して実行することにより当該データセットを取得する、分散データベース管理システム。
【請求項５】
請求項１から４のうちのいずれか１項に記載の分散データベース管理システムであって、前記クエリは、データベースに対してデータの検索、挿入、更新および削除の中から選択された１以上のデータ操作を規定するデータベース言語で記述されている、分散データベース管理システム。
【請求項６】
請求項５に記載の分散データベース管理システムであって、前記データ操作部は、
内部クエリを解析するクエリ解析部と、
前記クエリ解析部による解析結果に基づいたトランザクションを実行して前記データ操作を行うトランザクション実行部と、
を含む、分散データベース管理システム。
【請求項７】
請求項６に記載の分散データベース管理システムであって、前記クエリ解析部は、前記ストレージ装置に格納されている当該部分データベースのデータ構造に応じた最適化を前記内部クエリに対して実行する、分散データベース管理システム。
【請求項８】
請求項１から７のうちのいずれか１項に記載の分散データベース管理システムであって、前記クエリ受付部は、当該受信されたクエリを解析して最適化するクエリ解析部を含む、分散データベース管理システム。
【請求項９】
請求項１から８のうちのいずれか１項に記載の分散データベース管理システムであって、
前記部分データベースは、
複数の実体データと、
行方向に定義された少なくとも１つのタプルと列方向に定義された少なくとも１つの属性フィールドとで定まる領域に前記実体データそのものを一意に表す固定長のデータ識別子が格納されている識別子テーブルと、
前記複数の実体データそれぞれの記憶領域を示す位置データと前記複数のデータ識別子との間の対応関係を表す変換テーブルと、
を含む、分散データベース管理システム。
【請求項１０】
請求項９に記載の分散データベース管理システムであって、前記識別子テーブルに割り当てられた記憶領域と前記実体データに割り当てられた記憶領域とが互いに異なる、分散データベース管理システム。
【請求項１１】
請求項９または１０に記載の分散データベース管理システムであって、前記データ識別子の値は、前記実体データの入力に対して固定長のビット列を出力するハッシュ関数の出力値である、分散データベース管理システム。
【請求項１２】
請求項９から１１のうちのいずれか１項に記載の分散データベース管理システムであって、
前記識別子テーブルは複数存在し、
前記部分データベースは、前記複数の識別子テーブル内のデータ識別子をそれぞれ一意に表す参照識別子の集合を有する参照テーブルを更に含み、
前記データ操作部は、前記参照テーブルおよび前記識別子テーブルを用いて前記データ操作を実行する、分散データベース管理システム。
【請求項１３】
請求項１２に記載の分散データベース管理システムであって、前記各識別子テーブルは、前記参照識別子と前記データ識別子との一対一の対応関係を当該対応関係の重複を排除するように規定している、分散データベース管理システム。
【請求項１４】
クエリに基づいて分散データベースに対するデータ操作を協働して実行する複数のストレージ処理部を有し、前記ストレージ処理部の各々が、前記分散データベースを構成する複数の部分データベースのうちの１つを格納しているストレージ装置を含んで構成される分散データベース管理システムにおける分散データベース管理方法であって、
（ａ）前記複数のストレージ処理部のうちの第１ストレージ処理部において、前記クエリに基づいたデータ操作の実行のために必要なデータセットが当該部分データベースに格納されていないとき、前記複数のストレージ処理部のうち前記第１ストレージ処理部とは異なる単数または複数の第２ストレージ処理部に対して当該データセットのデータ転送要求を発行するステップと、
（ｂ）前記第２ストレージ処理部において、前記データ転送要求に応じて当該部分データベースから当該データセットを取得し、当該データセットを前記第１ストレージ処理部に転送するステップと、
（ｃ）前記第１ストレージ処理部において、前記第２ストレージ処理部から転送された当該データセットを用いて前記データ操作を実行するステップと、
を備える、分散データベース管理方法。
【請求項１５】
請求項１４に記載の分散データベース管理方法であって、
前記ステップ（ａ）では、前記データ転送要求として内部クエリが生成され、
前記ステップ（ｂ）では、前記内部クエリに基づいたデータ操作を当該部分データベースに対して実行することにより当該データセットが取得される、分散データベース管理方法。
【請求項１６】
請求項１５に記載の分散データベース管理方法であって、前記ストレージ装置に格納されている当該部分データベースのデータ構造に応じた最適化を前記内部クエリに対して実行するステップを更に含む分散データベース管理方法。
【請求項１７】
請求項１４から１６のうちのいずれか１項に記載の分散データベース管理方法であって、前記クエリを受信し、当該受信されたクエリを解析して最適化するステップを更に含む、分散データベース管理方法。
【請求項１８】
請求項１４から１７のうちのいずれか１項に記載の分散データベース管理方法であって、
前記部分データベースは、
複数の実体データと、
行方向に定義された少なくとも１つのタプルと列方向に定義された少なくとも１つの属性フィールドとで定まる領域に前記実体データそのものを一意に表す固定長のデータ識別子が格納されている識別子テーブルと、
前記複数の実体データそれぞれの記憶領域を示す位置データと前記複数のデータ識別子との間の対応関係を表す変換テーブルと、
を含む、分散データベース管理方法。
【請求項１９】
請求項１８に記載の分散データベース管理方法であって、
前記識別子テーブルは複数存在し、
前記部分データベースは、前記複数の識別子テーブル内のデータ識別子をそれぞれ一意に表す参照識別子の集合を有する参照テーブルを更に含み、
前記データ操作は、前記参照テーブルおよび前記識別子テーブルを用いて実行される、分散データベース管理方法。
【請求項２０】
請求項１９に記載の分散データベース管理方法であって、前記各識別子テーブルは、前記参照識別子と前記データ識別子との一対一の対応関係を当該対応関係の重複を排除するように規定している、分散データベース管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散データベースに対するデータ操作を実行する技術に関する。
【背景技術】
【０００２】
データベース処理において、大量のトランザクション処理の負荷を分散させるために、複数台のサーバなどの複数のプロセッサを用いるクラスタ構成が広く採用されている。クラスタ構成のデータベースシステムとしては、シェアド・ディスク（shared disk）型システムとシェアド・ナッシング型（shared nothing）システムとが知られている。シェアド・ディスク型は、ＣＰＵやストレージなどの計算機リソースを共有する共用型システムであり、シェアド・ナッシング型は、計算機リソースを共有しない非共用型システムである。ここで、計算機リソースには、実計算機のリソースだけではなく、仮想計算機のリソースも含まれる。シェアド・ナッシング型の利点は、プロセッサ間（サーバ間）で計算機リソースが競合しないので、プロセッサの数に応じた処理効率を実現することができ、シェアド・ディスク型と比べてスケーラビリティ（システムの拡張性）の点で優れている点にある。【０００３】
シェアド・ナッシング型のデータベースシステムは、たとえば、特許文献１（特開２００７−０２５７８５号公報）や特許文献２（特開２００５−０７８３９４号公報）に開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−０２５７８５号公報
【特許文献２】特開２００５−０７８３９４号公報
【発明の概要】
【０００５】
しかしながら、シェアド・ナッシング型（非共有型）データベースシステムでは、複数のプロセッサがそれぞれ非共有の計算機リソース群を制御し、これら非共有の計算機リソース群にデータベースが分散して記憶される。それ故、非共有の計算機リソース群に分散格納されているデータ群全体を用いたクエリ処理を実行する場合は、処理速度の低下を招くという問題がある。
【０００６】
たとえば、特許文献２の非共有型データベースシステムは、複数のデータベースノードと、これらデータベースノードを管理する負荷分散装置とで構成されている。クライアント端末からの処理要求に応じて、負荷分散装置が複数のデータベースノードに分散格納されている複数のデータ群を用いたトランザクションを実行する場合には、この負荷分散装置は、当該各データベースノードにデータ転送を要求する。その後、これらデータベースノードから転送されたデータ群を用いて負荷分散装置はトランザクションを実行する。しかしながら、データベースノードから必要なデータ群の全てが転送されない限り、負荷分散装置はトランザクションを完了できないので、これが処理速度の低下を招いてしまう。
【０００７】
上記に鑑みて本発明の目的は、分散データベースに対するデータ操作を効率的に実行し得る非共有型のデータベースシステムおよびデータベース管理方法を提供することである。
【０００８】
本発明によれば、分散データベースに対するデータ操作を行う分散データベース管理システムが提供される。この分散データベース管理システムは、クエリを受信するクエリ受付部と、当該受信されたクエリに基づいて前記分散データベースに対するデータ操作を協働して実行する複数のストレージ処理部と、を備え、前記複数のストレージ処理部の各々は、前記分散データベースを構成する複数の部分データベースのうちの１つを格納しているストレージ装置と、前記ストレージ装置に格納されている当該部分データベースに対して前記クエリに基づいたデータ操作を実行するデータ操作部と、を含む。
【０００９】
本発明によれば、クエリに基づいて分散データベースに対するデータ操作を協働して実行する複数のストレージ処理部を有し、前記ストレージ処理部の各々が、前記分散データベースを構成する複数の部分データベースのうちの１つを格納しているストレージ装置を含んで構成される分散データベース管理システムにおける分散データベース管理方法が提供される。この分散データベース管理方法は、（ａ）前記複数のストレージ処理部のうちの第１ストレージ処理部において、前記クエリに基づいたデータ操作の実行のために必要なデータセットが当該部分データベースに格納されていないとき、前記複数のストレージ処理部のうち前記第１ストレージ処理部とは異なる単数または複数の第２ストレージ処理部に対して当該データセットのデータ転送要求を発行するステップと、（ｂ）前記第２ストレージ処理部において、前記データ転送要求に応じて当該部分データベースから当該データセットを取得し、当該データセットを前記第１ストレージ処理部に転送するステップと、（ｃ）前記第１ストレージ処理部において、前記第２ストレージ処理部から転送された当該データセットを用いて前記データ操作を実行するステップと、を備える。
【００１０】
本発明によれば、複数のストレージ処理部は、それぞれ自己が管理する部分データベースに対してデータ操作を並列にかつ協働して実行するので、分散データベースに対するデータ操作を効率良く実行する分散データベース管理システムが提供される。
【図面の簡単な説明】
【００１１】
上述した目的、およびその他の目的、特徴および利点は、以下に述べる好適な実施の形態、およびそれに付随する以下の図面によってさらに明らかになる。【００１２】
【図１】本発明に係る一実施形態の分散データベース管理システムの構成を概略的に示す機能ブロック図である。
【図２】分散データベースを構成するデータベース・テーブルの一例を概略的に示す図である。
【図３】ストレージ処理部の構成を概略的に示す機能ブロック図である。
【図４】ストレージ処理部のデータ操作部によるトランザクション処理の手順を概略的に示すフローチャートである。
【図５】データ転送要求を受信したデータ操作部による処理手順を概略的に示すフローチャートである。
【図６】通信シーケンスの一例を概略的に示す図である。
【図７】通信シーケンスの他の例を概略的に示す図である。
【図８】通信シーケンスの更に他の例を概略的に示す図である。
【図９】通信シーケンスの更に他の例を概略的に示す図である。
【図１０】通信シーケンスの更に他の例を概略的に示す図である。
【図１１】部分データベースの構造の一例を概略的に示す図である。
【図１２】実テーブルの一例を模式的に示す図である。
【図１３】（Ａ）および（Ｂ）は、部分データベースを構成する論理データ構造を示す図である。
【図１４】部分データベースの構造を概略的に示す図である。
【図１５】部分データベースの構造を概略的に示す図である。
【図１６】ルータの集約・調整機能を説明するための図である。
【発明を実施するための形態】
【００１３】
以下、本発明に係る実施の形態について図面を参照しつつ説明する。なお、すべての図面において、同様な構成要素には同一符号を付し、その詳細な説明は重複しないように適宜省略される。
【００１４】
図１は、本発明に係る一実施形態の分散データベース管理システム１０の構成を概略的に示す機能ブロック図である。図１に示されるように、この分散データベース管理システム１０は、ロードバランサ１１、クエリサーバ２０Ａ，２０Ｂ，２０Ｃ、データサーバ２２１〜２２Ｎおよび管理サーバ３０を備える。データサーバ２２１〜２２Ｎには、それぞれ、分散データベースを構成する部分データベースが格納されており、分散データベース管理システム１０はこの分散データベースに対するデータ操作を行う。
【００１５】
後述するように、分散データベースは少なくとも１つのテーブル構造を有し、部分データベースは、このテーブル構造のサブセット（部分集合）を構成する。図２は、分散データベースを構成するデータベース・テーブルＴＢＬの一例を概略的に示す図である。図２に示されるように、このデータベース・テーブルＴＢＬは、複数のタプル（行）と、列方向に定義されたカラム（属性フィールド）Ａ１，Ａ２，...，ＡＰとを有する。タプルとカラムＡ１，Ａ２，...，ＡＰとの交差領域で定まる領域にはデータが格納される。図２に示すように、このデータベース・テーブルＴＢＬを行方向に分割（水平分割）することで複数の部分集合ＴＧ１，ＴＧ２，...，ＴＧＮを構成することができる。このような部分集合ＴＧ１，ＴＧ２，...，ＴＧＮを、部分データベースのテーブルとして、それぞれデータサーバ２２１〜２２Ｎに格納することができる。
【００１６】
なお、データベース・テーブルＴＢＬをカラム方向に分割（垂直分割）することで複数の部分データベース・テーブルを構成してもよいし、あるいは、水平分割と垂直分割との組み合わせにより複数の部分データベース・テーブルを構成してもよい。
【００１７】
図１に示されるように、通信網ＮＷには、分散データベース管理システム１０とクライアント端末Ｔ１とが接続されている。これら分散データベース管理システム１０とクライアント端末Ｔ１だけでなく、多数のクライアント端末（図示せず）が通信網ＮＷに接続されている。ネットワークＮＷとしては、たとえば、インターネットなどの広域ネットワークが挙げられるが、これに限定されるものではない。
【００１８】
クライアント端末Ｔ１は、分散データベース管理システム１０が有するデータベースについてＳＱＬ（Structured Query Language）やＸＱｕｅｒｙ（XML Query Language：ＸＭＬ問い合わせ言語）などのデータベース言語（データ操作言語）で記述されたクエリを生成し、このクエリを分散データベース管理システム１０に宛てて送信する機能を有する。クエリには、分散データベースに対してデータの検索、挿入、更新あるいは削除などのデータ操作を規定するデータベース言語が記述されている。
【００１９】
ロードバランサ１１は、通信網ＮＷを介してクライアント端末Ｔ１から送信されたクエリをデータ処理要求として受信し、このクエリ（以下、受信クエリと呼ぶ。）を、クエリサーバ（クエリ受付部）２０Ａ〜２０Ｃに均等に振り分けて処理負荷を分散する機能を有する。ロードバランサ１１は、たとえばラウンドロビン方式に従ってクエリサーバ２０Ａ〜２０Ｃのいずれかを選択すればよい。
【００２０】
クエリサーバ２０Ａ，２０Ｂ，２０Ｃは、それぞれ、クエリ解析部２１Ａ，２１Ｂ，２１Ｃを備えている。クエリ解析部２１Ａ〜２１Ｃは、ロードバランサ１１により振り分けられた受信クエリを解析し最適化する機能を有している。クエリ解析部２１Ａ〜２１Ｃは、受信クエリを解析し、この解析結果に基づいて、受信クエリを、特定のデータベース構造に最適化された解析ツリー形式のクエリに変換する。このとき、受信クエリを、たとえば、抽象構文木（ＡＳＴ：Abstract Syntax Tree）形式のクエリに変換することが可能である。
【００２１】
データサーバ２２１〜２２Ｎの各々は、ルータ２４と複数のストレージ処理部２５１〜２５Ｍとを有する。ルータ２４は、ストレージ処理部２５１〜２５Ｍのうちの任意のストレージ処理部間のデータ転送を制御する機能を有している。また、データサーバ２２１〜２２Ｎは、ＬＡＮ（Local Area Network）などの有線伝送路または無線伝送路を介して相互に接続されている。任意のデータサーバ２２ｉ内のルータ２４は、別のデータサーバ２２ｊ（ｉ≠ｊ）内の他のルータ２４との間でデータ通信を行う機能を有する。
【００２２】
管理サーバ３０は、分散データベースを構成する複数の部分データベースと、データサーバ２２１〜２２Ｎとの対応関係を規定する管理テーブル３０Ｔを有している。クエリサーバ２０Ａ，２０Ｂ，２０Ｃのうちのいずれれかが、受信クエリの解析結果を管理サーバ３０に転送するので、管理サーバ３０は、その解析結果に基づいて管理テーブル３０Ｔを参照してデータサーバ２２１〜２２Ｎの中からクエリの供給先を決定し、この結果を当該クエリサーバに通知する。当該クエリサーバは、管理サーバ３０からの通知に従い、データサーバ２２１〜２２Ｎの中から単数または複数のデータサーバに変換後のクエリを送信する。
【００２３】
各ルータ２４は、ストレージ処理部２５１〜２５Ｍと、これらストレージ処理部２５１〜２５Ｍにそれぞれ格納されるデータベース・テーブルとの対応関係を規定するルーティングテーブルＲＴＬを有している。ルータ２４は、このルーティングテーブルＲＴＬを参照して、クエリサーバ２０Ａ〜２０Ｃから受信したクエリの供給先としてストレージ処理部２５１〜２５Ｍのいずれかを決定する。
【００２４】
図３は、ストレージ処理部２５ｋの構成を概略的に示す機能ブロック図である。図３に示されるように、ストレージ処理部２５ｋは、キュー部２５０、データ操作部２５１およびストレージ装置２５５を備えている。データ操作部２５１は、クエリ解析部２５２、トランザクション実行部２５３および内部クエリ発行部２５４を含む。ストレージ装置２５５は、複数のストレージを搭載しており、これらストレージを制御するコントローラや入出力ポート（図示せず）を有している。
【００２５】
キュー部２５０は、ルータ２４から順次入力された複数のクエリを一時的に保持する機能を有し、先に入力され保持されたクエリを優先的にデータ操作部２５１に供給する。データ操作部２５１では、クエリ解析部２５２は、キュー部２５０から供給されたクエリを解析し、実行プランを生成する。トランザクション実行部２５３は、この実行プランに従ったトランザクションを実行する。
【００２６】
トランザクション実行部２５３は、トランザクション実行のために必要なデータセットがストレージ装置２５５内の部分データベースに格納されていないとき、内部クエリ発行部２５４に対して当該データセットのデータ取得要求を発する。このデータ取得要求に応じて、内部クエリ発行部２５４は、内部クエリを生成し、ルータ２４に対して、当該内部クエリを含むデータ転送要求を発して当該データセットを取得し得る機能を有する。内部クエリ発行部２５４の機能については後述する。トランザクション実行部２５３は、内部クエリ発行部２５４で取得された当該データセットを用いてトランザクションを実行する。
【００２７】
上記ストレージ処理部２５ｋのデータ操作部２５１は、半導体集積回路などのハードウェアで実現されてもよいし、あるいは、不揮発性メモリや光ディスクなどの記録媒体に記録されたアプリケーション・プログラムまたはプログラムコードで実現されてもよい。このようなプログラムまたはプログラムコードは、データ操作部２５１の処理を、ＣＰＵなどのプロセッサを有するコンピュータに実行させるものである。このようなプログラムまたはプログラムコードは、データ操作部２５１の機能ブロック２５２〜２５４の全部または一部の処理を、ＣＰＵなどのプロセッサを有する実計算機または仮想計算機に実行させるものである。
【００２８】
また、ストレージ装置２５５は、揮発性メモリまたは不揮発性メモリなどの記録媒体（たとえば、半導体メモリや磁気記録媒体）と、この記録媒体に対してデータの書き込みと読み出しを行うための回路や制御プログラムとで構成することができる。ストレージ装置２５５を構成するストレージの記憶領域は、予め記録媒体の所定の記憶領域上に構成されていてもよいし、あるいは、システムの動作時に割り当てられる適当な記憶領域上に構成されてもよい。
【００２９】
上記構成を有する分散データベース管理システム１０の動作を以下に説明する。
【００３０】
図４は、ストレージ処理部２５ｋのデータ操作部２５１によるトランザクション処理の手順を概略的に示すフローチャートである。図４を参照すると、データ操作部２５１では、クエリ解析部２５２が、キュー部２５０から与えられたクエリを解析する（ステップＳ１０）。このとき、クエリ解析部２５２は、この解析結果に基づいて、当該クエリを、ストレージ装置２５５に格納されている部分データベースの構造に合わせて最適化し、実行プランを生成する。
【００３１】
その後、トランザクション実行部２５３は、トランザクション実行のために必要なデータセットがストレージ装置２５５内の部分データベースに格納されているか否かを判定する（ステップＳ１１）。
【００３２】
トランザクション実行のために必要なデータセットがストレージ装置２５５内の部分データベースに格納されていると判定された場合（ステップＳ１１のＮＯ）、トランザクション実行部２５３は、クエリ解析部２５２で生成された実行プランに従ったトランザクションを実行することにより、部分データベースに対するデータの検索、挿入、更新あるいは削除などのデータ操作を行う（ステップＳ１２）。ここで、トランザクションとは、データベース４１の検索や更新などの処理を含む１つの作業単位を意味し、原子性（ATOMICITY）、一貫性（CONSISTENCY）、隔離性（ISOLATION）および持続性（DURABILITY）というＡＣＩＤ特性を満たす処理である。トランザクション処理が正常に終了したとき（ステップＳ１３のＹＥＳ）、トランザクションはコミットされる（ステップＳ１４）。そして、トランザクション実行部２５３は、トランザクションの実行結果（クエリ結果）をルータ２４に送信する（ステップＳ１７）。
【００３３】
一方、トランザクションやシステムに関する障害が発生してトランザクションが正常に終了しなかったとき（ステップＳ１３のＮＯ）、トランザクション実行部２５３は、ロールフォワードを実行する（ステップＳ１５）。すなわち、トランザクション実行部２５３は、定期的に設定されたチェックポイントの或る時点から障害発生時点までの期間におけるログ情報を確認する。この期間中にコミットされていないトランザクションが存在する場合、トランザクション実行部２５３は、ログ情報に基づいて当該トランザクションの実行結果を部分データベースに反映させる。また、トランザクション実行部２５３は、部分データベースの状態を、コミットされていないトランザクションの処理開始前の状態に戻す、すなわち、ロールバックする（ステップＳ１６）。その後、トランザクション実行部２５３は、トランザクションの実行結果（クエリ結果）をルータ２４を介してクエリサーバ２０Ａに送信する（ステップＳ１７）。クエリサーバ２０Ａは、このクエリ結果をロードバランサ１１を介してクライアント端末Ｔ１に送信する。
【００３４】
一方、ステップＳ１１において、トランザクション実行部２５３は、トランザクション実行のために必要なデータセットがストレージ装置２５５内の部分データベースに格納されていないと判定した場合には（ステップＳ１１のＹＥＳ）、内部クエリ発行部２５４に対して当該データセットのデータ取得要求を発する。このデータ取得要求に応じて、内部クエリ発行部２５４は、内部クエリを生成し（ステップＳ２０）、ルータ２４に対して当該データセットのデータ転送要求を発する（ステップＳ２１）。ここで、データ転送要求には内部クエリが含まれている。内部クエリは、データベースに対するデータの検索、挿入、更新あるいは削除などのデータ操作を規定するデータベース言語で記述されてもよいし、あるいは、システム内で実行可能な形式（たとえば、ＡＳＴ形式などの解析ツリー形式や、マイクロ命令からなる一連の処理手順）で記述されてもよい。
【００３５】
たとえば、ストレージ処理部２５１において、内部クエリ発行部２５４からデータ転送要求が発行されたとき（ステップＳ２１）、ルータ２４は、このデータ転送要求をデータサーバ２２１内の他のストレージ処理部２５２〜２５Ｍ、あるいは、他のデータサーバ２２２〜２２Ｎのルータ２４に転送する。ルータ２４がこのデータ転送要求をデータサーバ２２１内の他のストレージ処理部２５２〜２５Ｍに転送した場合、ストレージ処理部２５２〜２５Ｍでは、それぞれ、当該データ転送要求に応じて、データ操作部２５１が自己が管理する部分データベースに対して当該内部クエリに基づいたトランザクション処理を実行してデータ操作（主に、検索操作）を行う。
【００３６】
図５は、ストレージ処理部２５１からデータ転送要求を受信したデータ操作部２５１による処理手順を概略的に示すフローチャートである。図５を参照すると、先ず、クエリ解析部２５２が、キュー部２５０から与えられた内部クエリを解析する（ステップＳ３０）。このとき、クエリ解析部２５２は、この解析結果に基づいて、当該内部クエリを、ストレージ装置２５５に格納されている部分データベースの構造に合わせて最適化し、実行プランを生成する。
【００３７】
その後、トランザクション実行部２５３は、クエリ解析部２５２で生成された実行プランに従ったトランザクションを実行することにより、部分データベースに対するデータ操作を行う（ステップＳ３１）。トランザクション処理が正常に終了したとき（ステップＳ３２のＹＥＳ）、トランザクションはコミットされる（ステップＳ３３）。
【００３８】
そして、トランザクション実行部２５３は、トランザクションの実行結果（クエリ結果）をルータ２４を介してストレージ処理部２５１に送信する（ステップＳ３６）。すなわち、トランザクション実行部２５３は、ストレージ装置２５５から当該データセットの取得に成功した場合には、当該データセットをルータ２４を介してストレージ処理部２５１に転送する。一方、データ操作部２５１は、ストレージ装置２５５から当該データセットの取得に失敗した場合には、当該データセットの取得に失敗した旨をルータ２４を介してストレージ処理部２５１に通知する。
【００３９】
一方、トランザクションやシステムに障害が発生してトランザクションが正常に終了しなかったとき（ステップＳ３２のＮＯ）、トランザクション実行部２５３は、ロールフォワードを実行し（ステップＳ３４）、更に、ロールバックを実行する（ステップＳ３５）。その後、トランザクション実行部２５３は、トランザクションの実行結果（クエリ結果）をルータ２４を介してストレージ処理部２５１に送信する（ステップＳ３６）。
【００４０】
図４のフローチャートに戻ると、ストレージ処理部２５１において、内部クエリ発行部２５４が、ストレージ処理部２５２〜２５Ｍのいずれかから当該データセットの取得に成功した場合（ステップＳ２２のＹＥＳ）は、トランザクション実行部２５３は、当該データセットを使用したトランザクションを実行する（ステップＳ１２）。その後、上記ステップＳ１３〜Ｓ１７が実行される。
【００４１】
一方、ストレージ処理部２５１において、内部クエリ発行部２５４が当該データセットの取得に失敗した場合（ステップＳ２２のＮＯ）は、トランザクション実行部２５３は、データ操作の実行に失敗した旨を含むクエリ結果をルータ２４を介してクエリサーバ２０Ａに通知する。クエリサーバ２０Ａは、このクエリ結果をロードバランサ１１を介してクライアント端末Ｔ１に送信する。
【００４２】
なお、クエリ結果は、クエリサーバ２０Ａ，２０Ｂ，２０Ｃのうちのいずれかのクエリサーバを経由してクライアント端末Ｔ１に送信される。このとき、当該クエリサーバは、クエリ結果を管理サーバ３０にも送信するので、管理サーバ３０は、当該クエリ結果に基づいて管理テーブル３０Ｔを更新することができる。
【００４３】
次に、分散データベース管理システム１０の動作を示す各種通信シーケンスについて説明する。
【００４４】
図６は、通信シーケンスの一例を概略的に示す図である。図６を参照すると、先ず、クエリサーバ２０Ａがロードバランサ１１を介してクライアント端末Ｔ１からクエリを受信すると、クエリサーバ２０Ａのクエリ解析部２１Ａは、当該受信クエリを解析し、この解析結果に基づいて、受信クエリを、特定のデータベース構造に最適化された解析ツリー形式のクエリに変換する。次いで、クエリ解析部２１Ａは、当該クエリの解析結果に基づいて、当該クエリを送信すべきデータサーバ２２ｉ，２２ｊを決定する。そして、クエリサーバ２０Ａは、これらデータサーバ２２ｉ，２２ｊに当該クエリを送信する。
【００４５】
データサーバ２２ｉでは、ＳＰ（ストレージ処理部）２５ｍ，...，２５ｎのデータ操作部２５１が、それぞれ、クエリを解析し最適化して実行プランを生成する。一方、データサーバ２２ｊでも、同様に、ＳＰ（ストレージ処理部）２５ｑ，...，２５ｒのデータ操作部２５１が、それぞれ、クエリを解析し最適化して実行プランを生成する。ここで、クエリサーバ２０Ａのクエリ解析部２１Ａが、既に、各データ操作部２５１が管理する部分データベースの構造に合わせてクエリの最適化を実行している場合には、データ操作部２５１は、クエリの最適化を行う必要はない。
【００４６】
その後、ＳＰ２５ｍ，...，２５ｎ，２５ｑ，...，２５ｒにおいて、それぞれ、トランザクション実行部２５３が実行プランに従ったトランザクションを実行してデータ操作を行い、その実行結果（クエリ結果）をルータ２４に送信する。データサーバ２２ｉのルータ２４は、ＳＰ２５ｍ，...，２５ｎから受信したクエリ結果を集約し、クエリサーバ２０Ａに送信する。一方、データサーバ２２ｊのルータ２４も、ＳＰ２５ｑ，...，２５ｒから受信したクエリ結果を集約し、クエリサーバ２０Ａに送信する。クエリサーバ２０Ａは、データサーバ２２ｉ，２２ｊから送信されたクエリ結果を集約し、その結果をクライアント端末Ｔ１に送信する。
【００４７】
図６に示されるように、本実施形態の分散データベース管理システム１０では、複数のストレージ処理部２５ｍ，...，２５ｎ，２５ｑ，...，２５ｒが、それぞれ自己が管理する部分データベースに対するデータ操作を並列に実行できる。
【００４８】
たとえば、クライアント端末Ｔ１から、分散データベースのテーブルにタプル（レコード）の挿入、削除または更新のデータ操作に関するクエリが届いた場合、ストレージ処理部２５ｍ，...，２５ｎ，２５ｑ，...，２５ｒは、それぞれ、自己が管理する部分データベースのテーブルに対して当該データ操作を並列に協働して実行することができる。
【００４９】
クライアント端末Ｔ１から、分散データベースのテーブルに対する選択（当該テーブルを構成するタプルのうちから、特定条件に合致したタプルを抽出し、当該抽出されたタプルから新たなテーブルを生成する演算）のデータ操作に関するクエリが届いた場合、ストレージ処理部２５ｍ，...，２５ｎ，２５ｑ，...，２５ｒは、それぞれ自己が管理する部分データベースのテーブルに対して当該データ操作を並列に協働して実行することができる。クエリサーバ２０Ａは、これら実行結果（クエリ結果）を集約した新たなテーブルを構成し、この新たなテーブルの情報をクライアント端末Ｔ１に送信することができる。また、データサーバ２２ｉ，２２ｊのルータ２４，２４は、それぞれ、複数の実行結果（クエリ結果）を集約し、当該集約結果をクエリサーバ２０Ａに送信する機能を有する。データサーバ２２ｉ，２２ｊのルータ２４が当該実行結果を集約し、その集約結果をクエリサーバ２０Ａに送信すれば、クエリサーバ２０Ａは、これらルータ２４，２４から受信した集約結果を用いて効率良くクエリ結果を集約することが可能である。
【００５０】
また、図３に示されるように、各ストレージ処理部２５ｋに対して、ストレージ装置２５５に格納されている１つの部分データベースが割り当てられているので、部分データベースに対するロック（排他制御）を極力排除することができる。
【００５１】
したがって、分散データベース管理システム１０は、高いスループットを実現することが可能である。
【００５２】
更に、分散データベース管理システム１０の前段のクエリサーバ２０Ａ，２０Ｂ，２０Ｃでクエリの最適化が実行されるので、後段のストレージ処理部２５１〜２５Ｍは、必ずしもクエリの最適化を実行する必要がないという利点がある。ストレージ処理部２５１〜２５Ｍは、それぞれ、自己が管理する部分データベースの構造に合わせてクエリを最適化する機能を有する。ストレージ処理部２５１〜２５Ｍの大部分が同一構造の部分データベース構造を格納していれば、前段のクエリサーバ２０Ａ，２０Ｂ，２０Ｃは、その同一構造の部分データベース構造に合わせた最適化を一括して実行することができる。
【００５３】
次に、図７は、通信シーケンスの他の例を概略的に示す図である。先ず、クエリサーバ２０Ａがロードバランサ１１を介してクライアント端末Ｔ１からクエリを受信すると、クエリサーバ２０Ａのクエリ解析部２１Ａは、当該受信クエリを解析し、この解析結果に基づいて、受信クエリを、特定のデータベース構造に最適化された解析ツリー形式のクエリに変換する。次いで、クエリ解析部２１Ａは、当該クエリの解析結果に基づいて、当該クエリを送信すべきデータサーバ２２ｉ，２２ｊを決定する。そして、クエリサーバ２０Ａは、これらデータサーバ２２ｉ，２２ｊのルータ２４，２４に当該クエリを送信する。
【００５４】
データサーバ２２ｉでは、ＳＰ（ストレージ処理部）２５ｍ，...，２５ｎのデータ操作部２５１が、それぞれ、クエリを解析し最適化して実行プランを生成する。一方、データサーバ２２ｉでも、同様に、ＳＰ（ストレージ処理部）２５ｑ，...，２５ｒのデータ操作部２５１が、それぞれ、クエリを解析し最適化して実行プランを生成する。ここで、クエリサーバ２０Ａのクエリ解析部２１Ａが、既に、各データ操作部２５１が管理する部分データベースの構造に合わせてクエリの最適化を実行している場合には、データ操作部２５１は、クエリの最適化を行う必要はない。
【００５５】
その後、ＳＰ２５ｍ，...，２５ｑ，...，２５ｒにおいて、それぞれ、トランザクション実行部２５３が実行プランに従ったトランザクションを実行してデータ操作を行い、その実行結果（クエリ結果）をルータ２４に送信する。
【００５６】
一方、ＳＰ２５ｎでは、トランザクション実行部２５３が、トランザクション実行のために必要なデータセットがストレージ装置２５５内の部分データベースに格納されていないと判定する（図４のステップＳ１１のＹＥＳ）。そして、トランザクション実行部２５３は、内部クエリ発行部２５４に対して当該データセットのデータ取得要求を発する。
【００５７】
たとえば、トランザクション実行部２５３が、選択操作（特定の条件に合致するタプルを抽出し、これら抽出されたタプルから新たなテーブルを生成するためのデータ操作）や結合操作（ジョイン操作：複数のカラムを結合して新たなテーブルを生成するためのデータ操作）を実行しようとしたが、自己が管理する部分テーブルに選択操作や結合操作に必要なタプルやカラムが存在しない場合、これらタプルやカラムのデータセットのデータ取得要求を内部クエリ発行部２５４に発する。
【００５８】
図７に示されるように、ＳＰ２５ｎの内部クエリ発行部２５４は、当該データ取得要求に応じて内部クエリを発行し、当該内部クエリを含むデータ転送要求をルータ２４を介してＳＰ２５ｍに送信する。この場合、ＳＰ２５ｍは、転送された内部クエリを解析し最適化してデータ操作を実行する。そして、ＳＰ２５ｍは、そのデータ操作により得られたデータセットをクエリ結果としてルータ２４を介してＳＰ２５ｎに供給することができる。
【００５９】
その後、ＳＰ２５ｎのトランザクション実行部２５３は、内部クエリ発行部２５４により取得されたデータセットを用いてデータ操作を実行してその実行結果（クエリ結果）をルータ２４に送信する。
【００６０】
なお、ＳＰ２５ｎの内部クエリ発行部２５４は、図８に示すように、上記データ取得要求に応じて、内部クエリを含むデータ転送要求をルータ２４を介してデータサーバ２２ｊのＳＰ２５ｑに送信してもよい。この場合、ＳＰ２５ｑは、転送された内部クエリを解析し最適化してデータ操作を実行する。そして、ＳＰ２５ｑは、クエリ結果をルータ２４を介してＳＰ２５ｎに供給することができる。
【００６１】
そして、図７に示されるように、データサーバ２２ｉのルータ２４は、ＳＰ２５ｍ，...，２５ｎから受信したクエリ結果を集約し、クエリサーバ２０Ａに送信する。一方、データサーバ２２ｊのルータ２４も、ＳＰ２５ｑ，...，２５ｒから受信したクエリ結果を集約し、クエリサーバ２０Ａに送信する。クエリサーバ２０Ａは、データサーバ２２ｉ，２２ｊから送信されたクエリ結果を集約し、その結果をクライアント端末Ｔ１に送信する。
【００６２】
図７や図８に示されるように、本実施形態の分散データベース管理システム１０においては、データサーバ２２ｉのストレージ処理部２５ｎは、データ操作を実行するために不足のデータセットを他のストレージ処理部２５ｍ（図７）やストレージ処理部２５ｑ（図８）から取得することができる。ストレージ処理部２５ｎは、取得したデータセットを用いてデータ操作を実行するので、ストレージ処理部２５１〜２５Ｍ全体で分散処理を効率良く実行できる。よって、不足のデータセットが存在する場合でも、分散データベース管理システム１０は、高いスループットを実現することが可能である。
【００６３】
図９は、通信シーケンスの更に他の例を概略的に示す図である。図９の通信シーケンスでは、ストレージ処理部２５ｎがデータ操作を実行する際に不足のデータセットが存在する場合、データサーバ２２ｉのルータ２４は、データ転送要求（内部クエリ）を、当該データサーバ２２ｉ内のストレージ処理部２５ｍに転送すると同時に、他のデータサーバ２２ｊ内のルータ２４にも転送する。データサーバ２２ｊ内のルータ２４は、ルーティングテーブルＲＴＬに従って、当該データ転送要求（内部クエリ）をストレージ処理部２５ｑに転送する。このとき、当該データ転送要求が複数のストレージ処理部２５ｑ，...，２５ｒに転送されることもあり得る。図９に示されるように、ストレージ処理部２５ｎは、ストレージ処理部２５ｍ，２５ｑからそれぞれクエリ結果であるデータセットを取得し、これらデータセットを用いたデータ操作を実行する。
【００６４】
図１０は、通信シーケンスの更に他の例を概略的に示す図である。図１０の通信シーケンスでは、ストレージ処理部２５ｎがデータ操作を実行する際に不足のデータセットが存在する場合、データサーバ２２ｉのルータ２４は、データ転送要求（内部クエリ）を、外部のデータサーバ２２ｊ内のルータ２４に転送すると同時に、外部のデータサーバ２２ｋ内のルータ２４にも転送する。データサーバ２２ｊ内のルータ２４は、ルーティングテーブルＲＴＬに従って、当該データ転送要求（内部クエリ）をストレージ処理部２５ｑに転送する。並行して、データサーバ２２ｋ内のルータ２４は、ルーティングテーブルＲＴＬに従って、当該データ転送要求（内部クエリ）をストレージ処理部２５ｔに転送する。
【００６５】
その後、図１０に示されるように、ストレージ処理部２５ｑ，２５ｔは、それぞれクエリ結果であるデータセットを、ルータ２４，２４を介してデータサーバ２２ｉ内のストレージ処理部２５ｎに送信する。ストレージ処理部２５ｎは、ストレージ処理部２５ｑ，２５ｔとからそれぞれクエリ結果であるデータセットを取得し、これらデータセットを用いたデータ操作を実行する。
【００６６】
ところで、図７では、データサーバ２２ｉにおいて、１台のストレージ処理部２５ｍのみが不足のデータセットをストレージ処理部２５ｎに送信する形態が示されているが、この形態に限定されるものではない。データサーバ２２ｉにおいて、複数台のストレージ処理部２５ｍ，...，２５ｕが不足のデータセットをストレージ処理部２５ｎに送信する形態もあり得る。この場合、データサーバ２２ｉのルータ２４は、これら複数台のストレージ処理部２５ｍ，...，２５ｕから送信された不足のデータセットを集約して新たなテーブルを構成し、この新たなテーブルのデータセットをルータ２４経由でストレージ処理部２５ｎに送信する機能を有する。後述するように、部分データベースは、ストレージ装置２５５の記憶領域に格納された実体データ群と、参照テーブルと、複数の中間識別子テーブルとで構成できる（図１４〜図１５参照）。この種の部分データベースのデータセットを集約して新たなテーブルを構成するとき、同一値を持つ実体データは重複して転送されないので、同じデータサーバ２２ｉ内でのデータ転送量の削減が可能となる。
【００６７】
図８の場合、データサーバ２２ｊにおいて、１台のストレージ処理部２５ｑのみが不足のデータセットをデータサーバ２２ｉのルータ２４経由でストレージ処理部２５ｎに送信する形態が示されているが、この形態に限定されるものではない。データサーバ２２ｊにおいて、複数台のストレージ処理部２５ｑ，...，２５ｒが不足のデータセットをデータサーバ２２ｊ，２２ｉのルータ２４，２４経由でストレージ処理部２５ｎに送信する形態もあり得る。この場合、データサーバ２２ｊのルータ２４は、これら複数台のストレージ処理部２５ｑ，...，２５ｒから送信された不足のデータセットを集約して新たなテーブルを構成し、この新たなテーブルのデータセットをルータ２４経由でストレージ処理部２５ｎに送信する機能を有する。図１４に示す部分データベースが使用されるとき、データサーバ２２ｊのルータ２４が部分データベースのデータセットを集約することによりデータサーバ２２ｊ，２２ｉ間でのデータ転送量の削減が可能となる。
【００６８】
図９の場合、データサーバ２２ｉのストレージ処理部２５ｎには、データサーバ２２ｉ内のストレージ処理部２５ｍから不足のデータセットがルータ２４経由で送信され、データサーバ２２ｊ内のストレージ処理部２５ｑからも不足のデータセットがルータ２４経由で送信される。データサーバ２２ｉのルータ２４は、これらデータセットを集約して新たなテーブルを構成し、この新たなテーブルのデータセットをストレージ処理部２５ｎに送信する機能を有する。図１４に示す部分データベースが使用されるとき、データサーバ２２ｉのルータ２４が部分データベースのデータセットを集約することにより、データサーバ２２ｉ内のルータ２４からストレージ処理部２５ｎへのデータ転送量の削減が可能となる。図１０の場合には、データサーバ２２ｉのストレージ処理部２５ｎは、２台のデータサーバ２２ｊ，２２ｋ内のストレージ処理部２５ｑ，２５ｔからそれぞれ不足データセットをルータ２４経由で受信する。この場合も、図１４に示す部分データベースが使用されるとき、データサーバ２２ｉのルータ２４が部分データベースのデータセットを集約することにより、データサーバ２２ｉ内のルータ２４からストレージ処理部２５ｎへのデータ転送量の削減が可能となる。
【００６９】
また、ストレージ処理部２５ｎは、不足のデータセットが複数ある場合に、当該データセットの全てを取得した後でデータ操作を実行してもよいし、あるいは、当該データセットの一部のみを取得した段階で、当該一部を用いたデータ操作を実行してもよい。図９の通信シーケンスでは、ストレージ処理部２５ｎは、ストレージ処理部２５ｍとストレージ処理部２５ｑとからそれぞれクエリ結果であるデータセットの全部を取得した後にデータ操作を実行している。この代わりに、ストレージ処理部２５ｎは、ストレージ処理部２５ｍから第１のデータセットを取得した直後に当該第１のデータセットのみを用いたデータ操作を実行してもよく、その後、ストレージ処理部２５ｑから第２のデータセットを取得した後に当該第２のデータセットを用いたデータ操作を実行してもよい。
【００７０】
次に、分散データベースを構成する部分データベースの構造の好適な例を以下に説明する。
【００７１】
図１１は、部分データベースの構造の一例を概略的に示す図である。図１１に示されるように、この部分データベース構造は、ストレージ装置２５５内の記憶領域ＤＡ０に格納されている実体データ群と、ストレージ装置２５５において記憶領域ＤＡ０とは異なる記憶領域に格納されている参照テーブル（識別子テーブル）ＲＴ０とを有する。
【００７２】
参照テーブルＲＴ０は、行方向に定義された５つのタプルと、列方向に定義された５つの属性フィールドＴＩＤ，Ｖａｌ１，Ｖａｌ２，Ｖａｌ３，Ｖａｌ４とを有している。第１の実施形態では、説明の便宜上、参照テーブルＲＴ０のタプルの数は５つであるが、これに限定されず、タプルの数を、たとえば、数十〜数百万に設定することができる。属性フィールドＴＩＤ，Ｖａｌ１，Ｖａｌ２，Ｖａｌ３，Ｖａｌ４の数も５つに限定されるものではない。
【００７３】
参照テーブルＲＴ０の５つのタプルには、それぞれ、一意のタプル識別子（ＴＩＤ）Ｒ１，Ｒ２，Ｒ３，Ｒ４，Ｒ５が割り当てられている。これらタプルと属性フィールドＶａｌ１，Ｖａｌ２，Ｖａｌ３，Ｖａｌ４とで定まる領域（タプルと属性フィールドＶａｌ１，Ｖａｌ２，Ｖａｌ３，Ｖａｌ４とが交差する領域）にそれぞれ固定長のデータ識別子ＶＲ１１，ＶＲ１２，...，ＶＲ４３が格納されている。すなわち、属性フィールドＶａｌ１は、タプル識別子Ｒ１，Ｒ２，Ｒ３，Ｒ４，Ｒ５に対応する領域にそれぞれデータ識別子ＶＲ１１，ＶＲ１２，ＶＲ１３，ＶＲ１４，ＶＲ１５を含み、属性フィールドＶａｌ２は、タプル識別子Ｒ１，Ｒ２，Ｒ３，Ｒ４，Ｒ５に対応する領域にそれぞれデータ識別子ＶＲ２１，ＶＲ２２，ＶＲ２３，ＶＲ２３，ＶＲ２４を含み、属性フィールドＶａｌ３は、タプル識別子Ｒ１，Ｒ２，Ｒ３，Ｒ４，Ｒ５に対応する領域にそれぞれデータ識別子ＶＲ３１，ＶＲ３２，ＶＲ３３，ＶＲ３４，ＶＲ３５を含み、属性フィールドＶａｌ４は、タプル識別子Ｒ１，Ｒ２，Ｒ３，Ｒ４，Ｒ５に対応する領域にそれぞれデータ識別子ＶＲ４１，ＶＲ４１，ＶＲ４１，ＶＲ４２，ＶＲ４３を含む。
【００７４】
データ識別子ＶＲ１１〜ＶＲ４３の値は、ハッシュ関数を用いて算出することができる。ハッシュ関数は、実体データのビット列の入力に対して固定長のビット列を出力する演算子である。このハッシュ関数の出力値（ハッシュ値）をデータ識別子ＶＲ１１〜ＶＲ３４の値として利用すればよい。トランザクション実行部２５３は、検索文字列をハッシュ値に変換し、このハッシュ値と一致する値を持つデータ識別子を参照テーブルＲＴ０から探し出し、探し出されたデータ識別子に対応する実体データを記憶領域ＤＡ０から探し出すことができる。このとき、トランザクション実行部２５３は、可変長データを含まない固定長データ群のみからなる参照テーブルＲＴ０を検索するので、文字列を高速に探し出すことができる。
【００７５】
属性フィールドＶａｌ１、Ｖａｌ２、Ｖａｌ３の名称（属性名）としては、たとえば、「店名」、「地域」、「売上」、「年月」を設定できる。図１１に示すデータベース構造は、実体データの集合である実テーブルから生成することができる。図１２は、実テーブルＳＴの一例を模式的に示す図である。５行４列の実テーブルＳＴの「Ａ店」、「Ｂ店」、「九州」などの実体データをハッシュ化（実体データの値をハッシュ値に変換）することで、図１１に示した固定長のデータ識別子ＶＲ１１，ＶＲ１２，...，ＶＲ３４を生成できる。
【００７６】
上記データ識別子ＶＲ１１〜ＶＲ４３は、記憶領域ＤＡ０内の実体データをそれぞれ実質的に一意に表す値を有する。このため、トランザクション実行部２５３は、データ識別子ＶＲ１１〜ＶＲ４３を検索し、その検索結果に基づいてこれらデータ識別子ＶＲ１１〜ＶＲ４３に対応する可変長の実体データにアクセスすることが可能である。なお、本明細書において「実質的に一意」とは、部分データベースに対するデータ操作上の一意性を満たしていることを意味する。
【００７７】
図１３（Ａ）および図１３（Ｂ）は、部分データベースを構成する論理データ構造を示す図である。図１３（Ａ）に示されるデータ構造は、先頭部分にヘッダ領域を有し、末尾部分にアロケーション管理テーブルを有している。また、ヘッダ領域とアロケーション管理テーブルとの間に実体データ群が格納される領域が設けられている。
【００７８】
図１３（Ｂ）は、ヘッダ領域に含まれる変換テーブルの一例を示す概略図である。この変換テーブルは、データ識別子ＶＲ１１〜ＶＲ４３と、これらデータ識別子ＶＲ１１〜ＶＲ４３それぞれの記憶領域との間の対応関係を規定するテーブルである。この変換テーブルにおいては、図１３（Ｂ）に示されるように、データ識別子ＶＲ１１〜ＶＲ３４が格納される領域Ｆｉｄと、これらデータ識別子ＶＲ１１〜ＶＲ３４それぞれの記憶領域を示す位置データＡ１１〜Ａ４３が格納される領域Ｆａとが設けられている。
【００７９】
図１１に示されるように、実体データＤ１１〜Ｄ４３の記憶領域ＤＡ０と、これら実体データＤ１１〜Ｄ４３をそれぞれ一意に表すデータ識別子ＶＲ１１〜ＶＲ４３の記憶領域とは互いに完全に分離されているので、部分データベースの更新処理の高効率化、検索速度の向上、並びに移植性の向上を実現することができる。
【００８０】
たとえば、記憶領域ＤＡ０内の実体データ群の一部を更新、追加または削除したとき、参照テーブルＲＴ０と図１３（Ｂ）の変換テーブルとを更新すれば済むので、更新処理を短時間で行うことができる。実体データの更新、追加または削除に伴い、部分データベースは必要最小限に更新されるので、部分データベースに対する更新が頻繁に行われる場合でも、かかる更新を効率的かつ高速に実行することが可能である。
【００８１】
また、図１３（Ｂ）の変換テーブルでは、同一値を有するデータ識別子の重複が排除されている（すなわち、変換テーブル内にある任意の２つのデータ識別子の値は必ず異なる）ので、この変換テーブルを使用することにより、同一値を有する実体データを重複させずに記憶領域ＤＡ０に記憶させることができる。言い換えれば、部分データベースを構成する実体データ群を圧縮して記憶領域ＤＡ０に記憶させることができるので、記憶領域ＤＡ０の効率的な利用が可能となる。
【００８２】
次に、部分データベースの構造の他の好適な例を以下に説明する。
【００８３】
図１４は、部分データベースの構造を概略的に示す図である。図１４に示されるように、このデータベース構造は、ストレージ装置２５５の記憶領域ＤＡ３に格納された実体データ群と、記憶領域ＤＡ３とは別の記憶領域に格納された参照テーブルＲＴ１および第１〜第３の中間識別子テーブルＩＴ４１，ＩＴ４２，ＩＴ４３とを有する。
【００８４】
図１５（Ａ）は、参照テーブルＲＴ１の概略構成を示す図である。参照テーブルＲＴ１は、行方向に定義された複数のタプルと、列方向に定義された４つの属性フィールドＴＩＤ，Ｃｏｌ１Ｒｅｆ，Ｃｏｌ２Ｒｅｆ，Ｃｏｌ３Ｒｅｆとを有している。参照テーブルＲＴ１のタプルの数については、たとえば、これを数十〜数百万に設定することができる。属性フィールドＴＩＤ，Ｃｏｌ１Ｒｅｆ，Ｃｏｌ２Ｒｅｆ，Ｃｏｌ３Ｒｅｆの数も４つに限定されるものではない。
【００８５】
参照テーブルＲＴ１のタプルには、それぞれ、一意のタプル識別子（ＴＩＤ）Ｒ１，Ｒ２，Ｒ３，Ｒ４，...が割り当てられている。これらタプルと属性フィールドＣｏｌ１Ｒｅｆ，Ｃｏｌ２Ｒｅｆ，Ｃｏｌ３Ｒｅｆとで定まる領域（タプルと属性フィールドＣｏｌ１Ｒｅｆ，Ｃｏｌ２Ｒｅｆ，Ｃｏｌ３Ｒｅｆとが交差する領域）にそれぞれ固定長の参照識別子ＣＲＶ１１，ＣＲＶ１２，...，ＣＲＶ３１，...が格納されている。参照識別子ＣＲＶ１１〜ＣＲＶ３１の値は、上記第１の実施形態のデータ識別子の場合と同様のハッシュ関数を用いて算出することができる。すなわち、データ識別子ＶＲ１１〜ＶＲ３１の入力に対するハッシュ関数の出力値をそれぞれ参照識別子ＣＲＶ１１〜ＣＲＶ３１の値とすればよい。
【００８６】
図１５（Ｂ）〜図１５（Ｄ）は、第１〜第３の中間識別子テーブルＩＴ４１，ＩＴ４２，ＩＴ４３の構造を概略的に示す図である。第１の中間識別子テーブルＩＴ４１は、行方向に定義された複数のタプルと、列方向に定義された２つの属性フィールドＣｏｌ１，Ｖａｌとを有する。属性フィールドＣｏｌ１は、固定長の参照識別子ＣＲＶ１１，ＣＲＶ１２，...を含み、属性フィールドＶａｌは、タプルにそれぞれ対応する領域にそれぞれ固定長のデータ識別子ＶＲ１１，ＶＲ１２，...を含む。
【００８７】
第２の中間識別子テーブルＩＴ４２は、行方向に定義された複数のタプルと、列方向に定義された２つの属性フィールドＣｏｌ２，Ｖａｌとを有する。属性フィールドＣｏｌ２は、固定長の参照識別子ＣＲＶ２１，ＣＲＶ２２，...を含み、属性フィールドＶａｌは、タプルにそれぞれ対応する領域にそれぞれ固定長のデータ識別子ＶＲ２１，ＶＲ２２，...を含む。
【００８８】
そして、第３の中間識別子テーブルＩＴ４３は、行方向に定義された複数のタプルと、列方向に定義された２つの属性フィールドＣｏｌ３，Ｖａｌとを有する。属性フィールドＣｏｌ３は、固定長の参照識別子ＣＲＶ３１，ＣＲＶ３２，...を含み、属性フィールドＶａｌは、タプルにそれぞれ対応する領域にそれぞれ固定長のデータ識別子ＶＲ３１，ＶＲ３２，...を含む。
【００８９】
第１〜第３の中間識別子テーブルＩＴ４１，ＩＴ４２，ＩＴ４３の各々は、互いに重複した値を持つ複数の参照識別子を持たない（すなわち、各中間識別子テーブル内にある任意の２つの参照識別子の値は必ず異なる）ので、冗長性を排除したデータ構造を有する。言い換えれば、中間識別子テーブルＩＴ４１，ＩＴ４２，ＩＴ４３の各々は、参照識別子とデータ識別子との一対一の対応関係を当該対応関係の重複を排除するように規定するテーブルである。図１５（Ａ）に示されるように、参照テーブルＲＴ１の属性フィールドＣｏｌ１Ｒｅｆのカラムには、参照識別子ＣＲＶ１２，ＣＲＶ１２，ＣＲＶ１１，ＣＲＶ１１，...が格納されている。属性フィールドＣｏｌ１Ｒｅｆに対応する中間識別子テーブルＩＴ４１は、図１５（Ｂ）に示されるように、これら参照識別子ＣＲＶ１２，ＣＲＶ１２，ＣＲＶ１１，ＣＲＶ１１，...と、データ識別子ＶＲ１２，ＶＲ１２，ＶＲ１１，ＶＲ１１，...との対応関係を規定するテーブルである。中間識別子テーブルＩＴ４１では、互いに重複する対応関係は排除されている（たとえば、参照識別子ＣＲＶ１２とデータ識別子ＶＲ１２との対応関係は重複して規定されていない）。同様に、図１５（Ｃ）と図１５（Ｄ）に示されるように、属性フィールドＣｏｌ２Ｒｅｆに対応する中間識別子テーブルＩＴ４２と、属性フィールドＣｏｌ３Ｒｅｆに対応する中間識別子テーブルＩＴ４３においても、それぞれ、重複する対応関係が排除されている。
【００９０】
トランザクション実行部２５３は、参照識別子ＣＲＶ１１〜ＣＲＶ３３およびデータ識別子ＶＲ１１〜ＶＲ３３を検索し、この検索結果を用いて可変長の実体データにアクセスすることができる。記憶領域ＤＡ３は、図１３（Ａ）に示した変換テーブルと同様の変換テーブルを有しているので、トランザクション実行部２５３は、当該検索結果に基づいて実体データにアクセスすることができる。
【００９１】
上述した通り、第１〜第３の中間識別子テーブルＩＴ４１，ＩＴ４２，ＩＴ４３の各々は、冗長性を排除したデータ構造を有する。よって、データサーバ２２ｉのストレージ処理部２５ｎにおいてデータ操作を実行するためのデータセットが不足し、ストレージ処理部２５ｎが、図１４の構造の部分データベースを有するストレージ処理部２５ｍ（図７）やストレージ処理部２５ｑ（図８）から不足のデータセットを取得する場合、中間識別子テーブルＩＴ４１，ＩＴ４２，ＩＴ４３を利用すれば、同じ値を持つデータセットを繰り返し転送せずに済むので、データセットの転送量を小さくすることができるという利点がある。
【００９２】
たとえば、ストレージ処理部２５ｍに対して、図１５（Ａ）の参照テーブルＲＴ１の属性フィールドＣｏｌ１Ｒｅｆにおける１カラム分のデータセットのデータ転送要求があった場合、ストレージ処理部２５ｍは、固定長の参照識別子ＣＲＶ１２，ＣＲＶ１２，ＣＲＶ１１，ＣＲＶ１１，...を送信するとともに、中間識別子テーブルＩＴ４１の対応関係を用いて参照識別子ＣＲＶ１１，ＣＲＶ１２，...とこれらに対応する実体データＤ１１，Ｄ１２，...とを送信すればよい。この場合、参照識別子ＣＲＶ１２，ＣＲＶ１２，ＣＲＶ１１，ＣＲＶ１１，...の値は、ハッシュ関数という圧縮関数の出力値（ハッシュ値）であり、同一値を持つ実体データは重複して送信されないので、データ転送量は少なくて済む。
【００９３】
また、中間識別子テーブルＩＴ４１，ＩＴ４２，ＩＴ４３は、それぞれ、カラム単位で構成されている。よって、ストレージ処理部２５ｉが結合操作（ジョイン操作：複数のカラムを結合して新たなテーブルを生成するためのデータ操作）を実行する際に、その結合操作に必要な不足のデータセットが他のストレージ処理部２５ｊからストレージ処理部２５ｉへ転送される場合にも、データ転送量を小さくすることができるという利点がある。
【００９４】
ストレージ処理部２５１〜２５Ｍの全てが、参照識別子やデータ識別子の算出のために同一のハッシュ関数を使用してもよいし、あるいは、異なるハッシュ関数を使用してもよい。しかしながら、ストレージ処理部毎に異なるハッシュ関数が使用された場合、たとえばストレージ処理部２５ｑ，２５ｒ間で、同一値を持つ実体データに対してデータ識別子や参照識別子のハッシュ値が異なる可能性がある。上述の通り、ルータ２４は、複数のストレージ処理部２５ｑ，２５ｒから転送されたデータセットを集約して新たなテーブルを構成する機能を有する。この集約を行う際に、ルータ２４は、データ識別子や参照識別子の不整合を調整する機能を有している。図１６は、ルータ２４の集約・調整機能を説明するための図である。
【００９５】
図１６に示されるように、データサーバ２２ｊのストレージ処理部２５ｑ，２５ｒは、データサーバ２２ｉのストレージ処理部２５ｎからのデータ転送要求に応じてそれぞれデータセットＤＳａ，ＤＳｂをルータ２４に送信する。一方のデータセットＤＳａは、図１６に示されるようにテーブルＲＴａ，Ｃａ１，Ｃａ２のデータであり、他方のデーセットＤＳｂは、図１６に示されるようにテーブルＲＴｂ，Ｃｂ１，Ｃｂ２のデータである。データサーバ２２ｊのルータ２４は、これらのデータセットＤＳａ，ＤＳｂを集約して新たなテーブルＲＴｄ，Ｃｄ１，Ｃｄ２を構成し、当該新たなテーブルＲＴｄ，Ｃｄ１，Ｃｄ２のデータセットＤＳｄをデーサーバ２２ｉに転送する。
【００９６】
参照テーブルＲＴａは、図１５（Ａ）に示した参照テーブルＲＴ１と同じ構造を有する。また、テーブルＣａ１，Ｃａ２は、ストレージ処理部２５ｑ内の中間識別子テーブルを用いて構成される。テーブルＣａ１は、参照識別子ＣＲＶ１１，ＣＲＶ１２，ＣＲＶ１３と実体データ値"ＡＡ"、"ＡＢ"、"ＡＣ"との間の一対一の対応関係を規定するテーブルであり、テーブルＣａ２は、参照識別子ＣＲＶ２１と実体データの値"ＡＤ"との間の一対一の対応関係を規定するテーブルである。同様に、参照テーブルＲＴｂは、図１５（Ａ）に示した参照テーブルＲＴ１と同じ構造を有する。テーブルＣｂ１，Ｃｂ２は、ストレージ処理部２５ｒ内の中間識別子テーブルを用いて構成される。テーブルＣｂ１は、参照識別子ＣＲＶ１１，ＣＲＶ１２と実体データ値"ＢＡ"、"ＡＡ"との間の一対一の対応関係を規定するテーブルであり、テーブルＣｂ２は、参照識別子ＣＲＶ２２と実体データの値"ＡＤ"との間の一対一の対応関係を規定するテーブルである。
【００９７】
図１６に示されるように、テーブルＣａ１とテーブルＣｂ１とで、同一の実体データ値"ＡＡ"に対して異なる参照識別子ＣＲＶ１１，ＣＲＶ１２が使用されている。また、テーブルＣａ２とテーブルＣｂ２とで、同一の実体データ値"ＡＤ"に対して異なる参照識別子ＣＲＶ２１，ＣＲＶ２２が使用されている。このような場合、ルータ２４は、データセットＤＳａ，ＤＳｂを集約して参照テーブルＲＴｄとテーブルＣｄ１，Ｃｄ２とを構成する際に、ルータ２４は、同一の実体データ値"ＡＡ"に対して一意の参照識別子ＣＲＶ１１を割り当て、同一の実体データ値"ＡＤ"に対して一意の参照識別子ＣＲＶ２１を割り当てる。これにより、参照識別子の不整合を解消することができる。
【００９８】
より具体的には、たとえば、以下の手順を採用することができる。先ず、ルータ２４は、データセットＤＳａ，ＤＳｂ間で同一の実体データ値に対する参照識別子の不整合を検査する。この検査の結果、参照識別子の不整合があった場合には、ルータ２４は、ストレージ処理部２５ｑ，２５ｒのうちの一方のストレージ処理部２５ｑで使用されているハッシュ関数を使用して、テーブルＲＴｂ，Ｃｂ１，Ｃｂ２の参照識別子を更新する。このとき、ルータ２４は、ハッシュ値の変換テーブルを作成し、この変換テーブルに従ってテーブルＲＴｂ，Ｃｂ１，Ｃｂ２の参照識別子を更新してもよい。そして、ルータ２４は、更新されたテーブルＲＴｂ，Ｃｂ１，Ｃｂ２と、テーブルＲＴａ，Ｃａ１，Ｃａ２とを集約して新たなテーブルＲＴｄ，Ｃｄ１，Ｃｄ２を構成する。その後、テーブルＲＴｂ，Ｃｂ１，Ｃｂ２と、テーブルＲＴａ，Ｃａ１，Ｃａ２とは破棄される。
【００９９】
以上、図面を参照して本発明の実施形態について述べたが、これらは本発明の例示であり、上記以外の様々な構成を採用することもできる。たとえば、上記実施形態は、分散データベースに対してトランザクションを実行するために好適な構成を有するが、これに限定されるものではない。上述の通り、トランザクションは、ＡＣＩＤ特性を満たす処理であるが、これらＡＣＩＤ特性のうちのいずれかの特性を満たさない場合のデータ操作にも本発明を適用することが可能である。
【０１００】
上記実施形態では、分散データベース管理システム１０は、図１に示されるように、３つのクエリサーバ２０Ａ，２０Ｂ，２０Ｃを有するが、これに限定されるものではない。また、データサーバ２２１〜２２Ｎの各々は、複数のストレージ処理部２５１〜２５Ｍを有しているが、これに限定されることなく、いずれかのデータサーバ２２ｉが単数のストレージ処理部を有してもよい。データサーバ２２１〜２２Ｎの基本機能は同一であるが、データサーバ２２１〜２２Ｎに組み込まれるハードウェア構成は、必ずしも同一である必要はない。
【０１０１】
また、上記の通り、ルータ２４は、複数のクエリ結果（データセット）を集約する機能を有しているが、ルータ２４は、処理時間を削減するために、この集約を実行しない場合もあり得る。
【０１０２】
この出願は、日本国特許庁に出願された特願２００９−０４０７７７号（出願日：２００９年２月２４日）を基礎とする優先権を主張するものであり、その開示の全ては、本明細書の一部として援用（incorporation herein by reference）される。
【図１】
2010098034.tif 000003
【図２】
2010098034.tif 000004
【図３】
2010098034.tif 000005
【図４】
2010098034.tif 000006
【図５】
2010098034.tif 000007
【図６】
2010098034.tif 000008
【図７】
2010098034.tif 000009
【図８】
2010098034.tif 000010
【図９】
2010098034.tif 000011
【図１０】
2010098034.tif 000012
【図１１】
2010098034.tif 000013
【図１２】
2010098034.tif 000014
【図１３】
2010098034.tif 000015
【図１４】
2010098034.tif 000016
【図１５】
2010098034.tif 000017
【図１６】
2010098034.tif 000018
【国際調査報告】
2010098034.tif 000019
2010098034.tif 000020
2010098034.tif 000021
2010098034.tif 000022