(57)【特許請求の範囲】
【請求項１】
分散型データベースシステムを構成するデータベースノードを、
検索に用いられるキーとデータとをペアで記憶し、当該キーはバイナリ文字列であって、当該バイナリ文字列に定義された文字列の順序で一の範囲に含まれる連続するキーのデータを記憶するものであって、当該一の範囲に含まれる連続するキーのデータは他のデータベースノードに冗長化されて記憶されるとともに、データ構造を平衡二分木とする記憶手段と、
前記データベースノード及び前記他のデータベースノードの状態に応じて、前記一の範囲を変更するとともに、前記記憶手段が記憶するデータを冗長化して記憶させるデータベースノードを他のデータベースノードから選択する制御手段として機能させるためのものであって、
前記記憶手段は、揮発性メモリ上に情報を記憶する分散型データ処理プログラム。
【請求項２】
前記記憶手段は、他の範囲との間で、記憶するデータ量の偏りが抑制されるように前記一の範囲を決定する請求項１に記載の分散型データ処理プログラム。
【請求項３】
分散型データベースシステムを構成するデータベースノードとして機能するものであって、
検索に用いられるキーとデータとをペアで記憶し、当該キーはバイナリ文字列であって、当該バイナリ文字列に定義された文字列の順序で一の範囲に含まれる連続するキーのデータを記憶するものであって、当該一の範囲に含まれる連続するキーのデータは他のデータベースノードに冗長化されて記憶されるとともに、データ構造を平衡二分木とする記憶手段と、
前記データベースノード及び前記他のデータベースノードの状態に応じて、前記一の範囲を変更するとともに、前記記憶手段が記憶するデータを冗長化して記憶させるデータベースノードを他のデータベースノードから選択する制御手段とを有し、
前記記憶手段は、揮発性メモリ上に情報を記憶する情報処理装置。
【請求項４】
複数のデータベースノードを有するものであって、
前記データベースノードは、検索に用いられるキーとデータとをペアで揮発性メモリ上に記憶し、当該キーはバイナリ文字列であって、当該バイナリ文字列に定義された文字列の順序で一の範囲に含まれる連続するキーのデータを記憶するものであって、当該一の範囲に含まれる連続するキーのデータは他のデータベースノードに冗長化されて記憶されるとともに、データ構造を平衡二分木とし、前記データベースノード及び前記他のデータベースノードの状態に応じて、前記一の範囲を変更するとともに、記憶する前記データを冗長化して記憶させるデータベースノードを他のデータベースノードから選択する分散型データベースシステム。
【請求項５】
複数のノードを有するものであって、
前記ノードは、検索に用いられるキーとデータとをペアで揮発性の記憶装置に記憶させ、当該キーはバイナリ文字列であって、当該バイナリ文字列に定義された文字列の順序で一の範囲に含まれる連続するキーのデータを記憶させるものであって、当該一の範囲に含まれる連続するキーのデータは他のノードが管理する記憶装置に冗長化されて記憶されるとともに、データ構造を平衡二分木とし、前記複数のノードの状態に応じて、前記一の範囲を変更するとともに、前記ノードが管理する記憶装置の前記データを冗長化して記憶させる記憶装置を他のノードが管理する記憶装置から選択する分散システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散型データ処理プログラム、情報処理装置、分散型データベースシステム及び分散システムに関する。
【背景技術】
【０００２】
従来の技術として、キーとデータのペア及びキーとプログラムのペアをデータベースノードに格納する分散型データ処理プログラムが提案されている（例えば、特許文献１参照）。
【０００３】
特許文献１に開示された分散型データ処理プログラムは、複数のノードをメッシュ状に配置した分散型データベースシステム上において動作し、クライアントノードから、キーとデータのペアが、キーに基づいて特定されるデータベースノードへ送信されて格納される。また、キーとプログラムのペアも、キーに基づいて特定されるデータベースノードへ送信される。データベースノードでは、キーとペアで格納されているデータに対して、プログラムに従ってプログラムが実行されて、データベースノード内でデータに対する処理を行った結果の情報がクライアントノードへ送信される。
【０００４】
上記した分散型データ処理プログラムは、キーにハッシュ値を用い、ハッシュ値の最初の２文字がある範囲に属するデータを１つのノードにストアするとともに、当該ノードのデータを他のノードに複製することで、１つのノードに大容量のデータをストアできるようにして、１つの処理に必要なデータの全部が１つのノードにストアされる可能性を高くし、通信回数の低減、データの秘匿性を向上している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−１０８８８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１に開示された分散型データ処理プログラムは、ハッシュ値の最初の２文字がある範囲に属するデータを１つのノードにストアすることで１つのノードに大容量のデータをストアできるようにするものの、キーにハッシュ値を用いているためにキーの並びには規則性がなく、意味を持ったあるキーの範囲のデータがいずれのノードに存在するかは不明であり、例えば、データの範囲検索等に時間を要する、という問題がある。
【０００７】
従って、本発明の目的は、本構成を有しない場合に比べて、データの検索効率を向上する分散型データ処理プログラム、情報処理装置、分散型データベースシステム及び分散システムを提供することにある。
【課題を解決するための手段】
【０００８】
本発明の一態様は、上記目的を達成するため、以下の分散型データ処理プログラム、情報処理装置、分散型データベースシステム及び分散システムを提供する。
【０００９】
［１］分散型データベースシステムを構成するデータベースノードを、
検索に用いられるキーとデータとをペアで記憶し、当該キーはバイナリ文字列であって、当該バイナリ文字列に定義された文字列の順序で一の範囲に含まれる連続するキーのデータを記憶するものであって、当該一の範囲に含まれる連続するキーのデータは他のデータベースノードに冗長化されて記憶されるとともに、データ構造を平衡二分木とする記憶手段と、
前記データベースノード及び前記他のデータベースノードの状態に応じて、前記一の範囲を変更するとともに、前記記憶手段が記憶するデータを冗長化して記憶させるデータベースノードを他のデータベースノードから選択する制御手段として機能させるためのものであって、
前記記憶手段は、揮発性メモリ上に情報を記憶する分散型データ処理プログラム。
［２］前記記憶手段は、他の範囲との間で、記憶するデータ量の偏りが抑制されるように前記一の範囲を決定する前記［１］に記載の分散型データ処理プログラム。
［３］分散型データベースシステムを構成するデータベースノードとして機能するものであって、
検索に用いられるキーとデータとをペアで記憶し、当該キーはバイナリ文字列であって、当該バイナリ文字列に定義された文字列の順序で一の範囲に含まれる連続するキーのデータを記憶するものであって、当該一の範囲に含まれる連続するキーのデータは他のデータベースノードに冗長化されて記憶されるとともに、データ構造を平衡二分木とする記憶手段と、
前記データベースノード及び前記他のデータベースノードの状態に応じて、前記一の範囲を変更するとともに、前記記憶手段が記憶するデータを冗長化して記憶させるデータベースノードを他のデータベースノードから選択する制御手段とを有し、
前記記憶手段は、揮発性メモリ上に情報を記憶する情報処理装置。
［４］複数のデータベースノードを有するものであって、
前記データベースノードは、検索に用いられるキーとデータとをペアで揮発性メモリ上に記憶し、当該キーはバイナリ文字列であって、当該バイナリ文字列に定義された文字列の順序で一の範囲に含まれる連続するキーのデータを記憶するものであって、当該一の範囲に含まれる連続するキーのデータは他のデータベースノードに冗長化されて記憶されるとともに、データ構造を平衡二分木とし、前記データベースノード及び前記他のデータベースノードの状態に応じて、前記一の範囲を変更するとともに、記憶する前記データを冗長化して記憶させるデータベースノードを他のデータベースノードから選択する分散型データベースシステム。
［５］複数のノードを有するものであって、
前記ノードは、検索に用いられるキーとデータとをペアで揮発性の記憶装置に記憶させ、当該キーはバイナリ文字列であって、当該バイナリ文字列に定義された文字列の順序で一の範囲に含まれる連続するキーのデータを記憶させるものであって、当該一の範囲に含まれる連続するキーのデータは他のノードが管理する記憶装置に冗長化されて記憶されるとともに、データ構造を平衡二分木とし、前記複数のノードの状態に応じて、前記一の範囲を変更するとともに、前記ノードが管理する記憶装置の前記データを冗長化して記憶させる記憶装置を他のノードが管理する記憶装置から選択する分散システム。
【発明の効果】
【００１０】
請求項１、３、４及び５に係る発明によれば、本発明を適用しない場合に比べて、インメモリ型の分散型データベースシステムにおいて、データの検索効率を向上することができる。
請求項２に係る発明によれば、データベースノードの処理負担を略平等にして、データの検索効率を向上することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施の形態に係る分散型データベースシステムの構成の一例を示す概略図である。
【図２】図２は、実施の形態に係るデータベースノードの構成例を示すブロック図である。
【図３】図３は、ノードリスト情報の構成を示す概略図である。
【図４】図４は、パーティションリスト情報の構成を示す概略図である。
【図５】図５は、実データ情報の構成を示す概略図である。
【図６】図６は、ノードコスト情報の構成を示す概略図である。
【図７】図７は、分散型データベースシステムのノード参加動作を説明するための概略図である。
【図８】図８は、分散型データベースシステムのパーティション割当動作を説明するための概略図である。
【図９】図９は、分散型データベースシステムのパーティション分割動作を説明するための概略図である。
【図１０】図１０は、分散型データベースシステムの再接続時復旧処理動作を説明するための概略図である。
【図１１】図１１は、分散型データベースシステムの切断時処理動作を説明するための概略図である。
【図１２】図１２は、分散型データベースシステムのデータ設定動作を説明するための概略図である。
【図１３】図１３は、分散型データベースシステムのデータ取得動作を説明するための概略図である。
【図１４】図１４は、分散型データベースシステムのデータ削除動作を説明するための概略図である。
【図１５】図１５は、分散型データベースシステムのデータ範囲取得動作を説明するための概略図である。
【発明を実施するための形態】
【００１２】
［実施の形態］
（分散型データベースシステムの構成）
図１は、実施の形態に係る分散型データベースシステムの構成の一例を示す概略図である。
【００１３】
この分散型データベースシステム１は、データベースノード２Ａ、２Ｂ、２Ｃ…と、クライアントノード３とをネットワーク４によって互いに通信可能に接続することで構成される。データベースノード２Ａ、２Ｂ、２Ｃ…は、互いに通信し合い、メッシュ状のクラスターを構成することでクライアントノード３から見かけ上、一つのデータベースとして動作する。なお、以降においてデータベースノード２Ａ、２Ｂ、２Ｃ…に共通する機能の説明をする場合にデータベースノード２Ａ、２Ｂ、２Ｃ…を単に「データベースノード２」と表記する場合がある。
【００１４】
データベースノード２は、一例として、サーバ型の情報処理装置であり、クライアントノード３の要求に応じて動作するものであって、本体内に情報を処理するための機能を有するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）や揮発性のメモリ等の電子部品を備える。なお、データベースノード２は、それぞれを異なる情報処理装置として図示しているが１台の情報処理装置上に複数存在するものであってもよいし、複数台の情報処理装置が協働して１つのノードとして動作するものであってもよい。つまり、情報処理装置上で分散型データ処理プログラム（２１０、図２）を動作させることでノードとして機能する。なお、情報処理装置として、例えば、一般的なＬｉｎｕｘ（登録商標）マシンやＷｉｎｄｏｗｓ（登録商標）マシンを用いることができる。
【００１５】
データベースノード２は、キーとデータをペアにして管理するキーバリューストア方式を採用し、動作の高速化のために揮発性のメモリ上にキー及びデータ並びにこれらを管理するためのプログラムやライブラリ等を記憶する。キーは、データを検索する際のインデックスとして用いられる情報であり、バイナリ文字列によって表現される。
【００１６】
また、これら複数のデータベースノード２Ａ、２Ｂ、２Ｃ…によってデータが管理され（以下、「クラスタリング」という。）、データはバイナリ文字列に定義された文字列の順序で一定のキー範囲に分けられ（以下、「パーティショニング」という。）、かつ一定のキー範囲のデータは複数のノードに冗長化されて管理される（以下、「レプリケーション」という。）。例えば、図１に示すように、データがキー範囲「ａ〜ｅ」、「ｆ〜ｈ」、「ｉ〜ｎ」…といったようにパーティショニングされ、キー範囲「ａ〜ｅ」のデータについてはデータベースノード２Ａ、２Ｂ…に冗長化される、といったように管理される。
【００１７】
クライアントノード３は、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）等の情報処理装置であって、本体内に情報を処理するための機能を有するＣＰＵや不揮発性メモリ、揮発性メモリ等の電子部品を備える。
【００１８】
データベースノード２は、主にクライアントノード３からデータを受信して格納し、要求に応じてデータを検索して読み出してクライアントノード３に送信する等の動作によりデータを管理する装置であり、クライアントノード３は、主にデータベースノード２にデータを送信して格納させ、データの読み出しを要求して結果を受信するための装置であるが、両装置において互いの機能を同様に実行できる構成としてもよい。なお、実行できる機能を制限した装置を用意してもよい。
【００１９】
また、データベースノード２に格納されるデータは、一般的にデータベースに格納される情報であって、一例として、ショッピングサイト等の会員情報、商品在庫、売上伝票、購入履歴、お気に入り、ログインセッション、ショッピングカート、ランキング及びレコメンデーションや、ブログの記事、ＳＮＳにおける友達リスト、スケジュール等の情報であり、その他、コンピュータを用いて作成可能な情報であればその種類は問わない。
【００２０】
ネットワーク４は、通信ネットワークであり、例えば、インターネットやＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等の有線又は無線の通信網である。
【００２１】
なお、クライアントノード３は、図１中では１台を示しているが、複数台が接続される構成であってもよい。
【００２２】
（情報処理装置の構成）
図２は、実施の形態に係るデータベースノード２の構成例を示すブロック図である。なお、クライアントノード３は、データベースノード２と同様の構成を有するため説明を省略する。なお、クライアントノード３は、実データ情報（２１３）及びその他の情報を構成上省略することができる。また、データベースノード２及びクライアントノード３は、さらに不揮発性の記憶部を有しても良い。
【００２３】
また、図３は、ノードリスト情報の構成を示す概略図である。図４は、パーティションリスト情報の構成を示す概略図である。図５は、実データ情報の構成を示す概略図である。図６は、ノードコスト情報の構成を示す概略図である。
【００２４】
データベースノード２は、ＣＰＵ等から構成され、各部を制御するとともに、各種のプログラムを実行する制御部２０と、揮発性の記憶媒体から構成され情報を記憶する記憶手段としてのメモリ２１と、ネットワークを介して外部と通信する通信部２２とを備える。
【００２５】
制御部２０は、メモリ２１上の分散型データ処理プログラム２１０を実行することで、通信手段２００及びデータ処理手段２０１等として機能する。
【００２６】
通信手段２００は、他のデータベースノード２及びクライアントノード３と通信する。なお、他のデータベースノード２及びクライアントノード３との間の通信に、一例として、ＴＣＰプロトコルを使用する。ＴＣＰを使用することでノード間の双方向通信が可能となり、再送制御があるためパケットロスが起こった場合にも確実にデータを送信することができる。
【００２７】
データ処理手段２０１は、メモリ２１上に実データ情報２１３を書き込んだり、実データ情報２１３を読み出したりする。また、データ処理手段２０１は、一例として、各パーティションの中でのデータを一般的なマップ型のデータ構造である赤黒木（Ｒｅｄ−Ｂｌａｃｋ  Ｔｒｅｅ）を使用して管理する。一般的なデータベースではＢ−ｔｒｅｅが使用されることが多いが、メモリ２１中にデータを保存するインメモリデータベースの場合は木のノードへのアクセス速度が速いため、平衡二分木である赤黒木の方が速い場合が多い。そのため、データ処理手段２０１は、データ構造に赤黒木を採用する。
【００２８】
メモリ２１は、制御部２０を上述した各手段２００、２０１として動作させる分散型データ処理プログラム２１０、ノードリスト情報２１１、パーティションリスト情報２１２、実データ情報２１３及びノードコスト情報２１４等を記憶する。メモリ２１は、さらに他のデータベースノードに接続するためのＡＰＩや、データベースノードの機能を持つサーバを構築するためのＡＰＩを含んだライブラリ（図示せず）を記憶する。
【００２９】
ノードリスト情報２１１は、図３に示すように、クラスターに参加するすべてのデータベースノード２及びクライアントノード３のノードＩＤをリストとして有する。通信手段２００は、ノードリスト情報２１１を参照して他のデータベースノード２及びクライアントノード３と通信する。
【００３０】
パーティションリスト情報２１２は、図４に示すように、キーの範囲と、当該キーの範囲のデータを格納するデータベースノード２のノードＩＤとを有する。通信手段２００及びデータ処理手段２０１は、あるキーのデータが要求された場合に、パーティションリスト情報２１２を参照して該当するキーのデータベースノード２にデータを要求する。なお、キーに用いられるバイナリ文字列としてアルファベットを例として挙げているがこれに限られるものではなく任意のバイナリ文字列を用いることができ、用いたバイナリ文字列に定義された文字列の順序でキーの範囲が定義される。
【００３１】
実データ情報２１３は、図５に示すように、キーと、データの値とをペアにして管理する。また、実データ情報２１３は、キーとデータの値に加えてバージョン情報を有する。データベースノード２は、同一のキーのデータが同時に設定された場合に、バージョン情報の新しい方のデータを有効とすることで整合性を保つ。バージョン情報は、図５では単純なバージョン番号のみ記載しているが、例えば、ベクタークロックというアルゴリズムを用いることができる。ベクタークロックは、分散データ処理システムでバージョン管理に使われるアルゴリズムであり、どのノードで何番目に更新されたのかを記録した配列を有する。これにより、別々のデータベースノード２にあるデータのうちいずれが最新のバージョンかを比較することができる。
【００３２】
ノードコスト情報２１４は、図６に示すように、データベースノード２のＩＤと、当該データベースノード２の制御部２０にかかっている負荷を示すコストとを有する。ノードコスト情報２１４は、一定時間毎に更新され、データベースノード２の全体で共有される。なお、コストは、一例として、各データベースノード２の実データ情報２１３の容量の割合を示しているがデータ量で示してもよいし、処理負荷によって示されるものであってもよい。
【００３３】
（分散型データベースシステムの動作）
次に、本実施の形態の作用を、（１）初期化動作、（２）ノード参加動作、（３）パーティション割当動作、（４）パーティション分割動作、（５）再接続時復旧処理動作、（６）切断時処理動作、（７）定期処理動作、（８）データ処理動作、（９）データ設定動作、（１０）データ取得動作、（１１）データ削除動作、（１２）データ範囲取得動作、（１３）その他の動作に分けて説明する。
【００３４】
（１）初期化動作
なお、動作の前提としてデータベースノード２及びクラインとノード３の起動モードについて説明する。データベースノード２及びクライアントノード３には起動モードが３種類あり、行う処理に違いがある。
【００３５】
１つ目のブートストラップモードはデータベースノード２がクラスターへの参加処理を行わずに起動を行うモードで、新しいクラスターの最初のノードを起ち上げるために用いられる。２つ目のデータノードモードはデータベースノード２が既存のクラスターにノードが参加するモードである。３つ目のクライアントモードは、自らのノードはデータを持たずデータベースノード２へデータアクセスを要求するモードであり、クライアントノード３として動作するためのモードである。
【００３６】
最初のデータベースノード２を起動する場合、ブートストラップモードで起動する。起動されたデータベースノード２は、待ち受けアドレスとポートにバインドし、他のデータベースノード２の接続待ち状態になりアクティブ状態に移行する。
【００３７】
既に起動しているデータベースノード２がある場合には、起動中のデータベースノード２のどれかを初期ノードに指定した上でデータノードモードとして起動する。これにより、起動されたデータベースノード２は、待ち受けアドレスとポートにバインドして他のデータベースノード２の接続待ち状態になった後、指定した初期ノードに接続しノード参加処理を行う。参加処理が完了するまでは起動されたデータベースノード２の状態は初期化中の状態にセットされ、この間はデータアクセス要求を受け付けない。
【００３８】
（２）ノード参加動作
図７は、分散型データベースシステム１のノード参加動作を説明するための概略図である。
【００３９】
新規ノード２Ｎは初期ノード、例えばノードＡであるデータベースノード２Ａに対してノード参加要求を送信する（Ｓ２‐１）。
【００４０】
次に、要求を受け取った初期ノードであるデータベースノード２Ａは、新規ノードであるデータベースノード２Ｎを自分のノードリスト情報２１１に追加する（Ｓ２‐２）。データベースノード２Ａは、ノード参加結果としてクラスターの設定や他のノードのリストであるノードリスト情報２１１、パーティションのリストであるパーティションリスト情報２１２を新規ノード２Ｎに返答する（Ｓ２‐３）。
【００４１】
次に、新規ノード２Ｎは、データベースノード２Ａからの返答を受け取ると、自分のノードリスト情報２１１とパーティションリスト情報２１２をデータベースノード２Ａから受け取ったリストを用いて更新する（Ｓ２‐４）。更新が完了すると新規ノード２Ｎはアクティブ状態に移行し、データ処理を受け付ける状態になる（Ｓ２‐５）。
【００４２】
次に、初期ノードであるデータベースノード２Ａは、新規ノード２Ｎに応答を返した後、クラスターに属している他のデータベースノード２Ｂ、２Ｃに対して新しいノードが追加された通知を送信する（Ｓ２‐６、Ｓ２‐７）。
【００４３】
通知を受け取った他ノードであるデータベースノード２Ｂ、２Ｃは新規ノード２Ｎをノードリスト情報２１１に追加し、新規ノード２Ｎへの接続を行う（Ｓ２‐８、２‐９）。上記動作によって、クラスター内のすべてのノードは互いに接続された状態となる。
【００４４】
（３）パーティション割当動作
図８は、分散型データベースシステム１のパーティション割当動作を説明するための概略図である。
【００４５】
以下に説明するパーティション割当動作は、新規ノードが参加した場合や参加していたデータベースノード２の切断を検知した場合に、冗長化が規定数に満たないパーティションに属するデータを負荷の低いデータベースノード２に割り当てる処理である。
【００４６】
まず、データベースノード２のいずれか、例えばデータベースノード２Ａは、パーティションリスト情報２１２を参照し、冗長化が規定数に満たないパーティションを探す（Ｓ３‐１）。次に、冗長化が規定数に満たないパーティションが割り当てられているデータベースノード２すべてに対しパーティション割当準備メッセージを送信する（Ｓ３‐２、Ｓ３‐３）。
【００４７】
パーティション割当準備メッセージを受け取ったデータベースノード２Ｂ、２Ｃはそのパーティションが自ノードに存在するか確認する。パーティションが存在した場合はパーティションをロックし、パーティションの割当の処理中に別のパーティション割当を同時に行わないように排他制御する（Ｓ３‐４、Ｓ３‐５）。処理が完了するとデータベースノード２Ａにパーティション割当結果メッセージを返す（Ｓ３‐６、Ｓ３‐７）。
【００４８】
データベースノード２Ａは、対象のパーティションが割り当てられているノード全てからパーティション割当結果メッセージを受け取ると、パーティション割当結果メッセージを判定する（Ｓ３‐８）。結果がすべて成功だった場合にはそのパーティションを持つノードのいずれかに対し、例えばデータベースノード２Ｂに対し、新規割当の対象ノード２Ｉへのパーティションのデータ複製と（Ｓ３‐１１）、パーティションのロック解除を行わせる（Ｓ３‐１２）ことで、パーティション割当を行なわせる（Ｓ３‐９）。それ以外のノードであるデータベースノード２Ｃにはパーティションのロック解除のみを行わせる（Ｓ３‐１０、Ｓ３‐１３）。もし結果に失敗を返したノードがあった場合は処理を取りやめる要求を送信し、ロック解除を行わせる。
【００４９】
新規割当の対象ノード２Ｉは、パーティション複製が完了すると、パーティションの追加をすべてのデータベースノード２Ａ、２Ｂ、２Ｃに対して通知する（Ｓ３‐１４、Ｓ３‐１５、Ｓ３‐１６）。
【００５０】
（４）パーティション分割動作
図９は、分散型データベースシステム１のパーティション分割動作を説明するための概略図である。
【００５１】
データベースノード２は、データ設定の際にパーティションに含まれるデータのサイズが一定のサイズを超えた場合、当該パーティションを例えば２つのパーティションに分割する。一方のパーティションを他のデータベースノード２に割り当てることで各データベースノード２の負荷を均等にするための処理である。
【００５２】
データベースノード２のいずれか、例えば、データベースノード２Ｇは、データ設定の際にパーティションのサイズが一定のサイズを超えた場合、パーティション分割処理を開始する。まず、データベースノード２Ｇのデータ処理手段２０１は、パーティションリスト情報２１２及びノードコスト情報２１４を参照し、一定のサイズを超えたパーティションが割り当てられていないデータベースノード２の中から自己のノードよりもコストが小さいノードが存在するか確認する（Ｓ４‐１）。コストの小さいノード、例えば、データベースノード２Ｄ〜２Ｆが存在する場合、パーティションが割り当てられているノード、例えば、データベースノード２Ａ〜２Ｃすべてに対しパーティション分割準備要求を送信する（Ｓ４‐２、Ｓ４‐３、Ｓ４‐４）。
【００５３】
パーティション分割準備要求を受け取ったデータベースノード２Ａ〜２Ｃは、そのパーティションが自ノードに存在するか確認する。パーティションが存在した場合はパーティションをロックした後、パーティションの分割位置の候補を返す（Ｓ４‐８、Ｓ４‐９、Ｓ４‐１０）。分割位置には、対象のパーティションに格納されているデータのキーの中央値を選択する（Ｓ４‐５、Ｓ４‐６、Ｓ４‐７）。中央値にすることで、分割された２つのパーティションにほぼ同数のデータが格納されることになり、キーの分布に偏りがあった場合に一方のパーティションにデータが偏ってしまうのを防ぐことができる。
【００５４】
データベースノード２Ｇは、対象のパーティションが割り当てられているノード全てからパーティション分割準備結果を受け取ると、結果がすべて成功だった場合には分割位置の候補の中から分割位置を決定してパーティション分割を行う。もし結果に失敗を返したノードがあった場合は処理を取りやめる要求を送信し、ロック解除を行わせる。
【００５５】
次に、データベースノード２Ｇは、分割したパーティションの割当先のノードを探すため、パーティションリスト情報２１２及びノードコスト情報２１４を参照し、対象のパーティションが割り当てられていないノードの中からノードコストの小さいノードを探す。ノードコストの小さい順にパーティションの冗長数と同じ数のノードを探し、パーティションが割り当てられているノード、データベースノード２Ａ〜２Ｃのそれぞれに、分割したパーティションをどのノードに割り当てるかを決定する（Ｓ４‐１１）。ここでは、データベースノード２Ａ〜２Ｃのそれぞれにデータベースノード２Ｄ〜２Ｆを割り当てる。次に、データベースノード２Ｇは、パーティションが割り当てられている各ノードにパーティション分割要求を送信する（Ｓ４‐１２、Ｓ４‐１３、Ｓ４‐１４）。
【００５６】
パーティション分割要求を受け取ったデータベースノード２Ａ〜２Ｃは、まずそのノード上でパーティションを分割する。分割されたパーティションの一方を、割当先のノードへ複製する（Ｓ４‐１５、Ｓ４‐１６、Ｓ４‐１７）。データの複製には一定の時間がかかるため、データの複製処理中にも処理が行えるように、複製が完了するまでは複製元のノード、データベースノード２Ａ〜２Ｃが処理を担当する。このときデータの更新があった場合には、複製先のノード、データベースノード２Ｄ〜２Ｆにもデータ更新要求を送信することでデータを同期する。
【００５７】
分割先ノードへのパーティション複製が完了すると、データベースノード２Ｄ〜２Ｆは、パーティションの追加をすべてのノードに対して通知する（Ｓ４‐１８、Ｓ４‐１９、Ｓ４‐２０）。複製元のノード、データベースノード２Ａ〜２Ｃは、パーティション追加を受け取ると、そのノード上の複製したパーティションのデータを削除し、パーティションリスト情報２１２の当該パーティションの格納先を複製先のノードに更新する。
【００５８】
（５）再接続時復旧処理動作
図１０は、分散型データベースシステム１の再接続時復旧処理動作を説明するための概略図である。
【００５９】
クラスターのデータベースノード２、例えば、データベースノード２Ａは、ノードの切断を検知すると（Ｓ５‐１）、対象ノード２Ｉに対して再接続を試みる（Ｓ５‐２）。再接続が成功した場合（Ｓ５‐３）、パーティションリスト情報２１２を参照し、対象ノード２Ｉが担当していたパーティションと同じ範囲のパーティションを持っている別のノードを探し、当該ノード、例えば、データベースノード２Ｂに対してパーティション複製要求を送る（Ｓ５‐４）。
【００６０】
要求を受け取ったノードであるデータベースノード２Ｂは、再接続ノードである対象ノード２Ｉに対しパーティションを複製する（Ｓ５‐５）。
【００６１】
複製が完了すると、再接続ノードである対象ノード２Ｉはパーティション追加を全ノードに送信し（Ｓ５‐６、Ｓ５‐７、Ｓ５‐８）、受け取ったノードはパーティションリスト情報２１２を更新する。
【００６２】
（６）切断時処理動作
図１１は、分散型データベースシステム１の切断時処理動作を説明するための概略図である。
【００６３】
ノードが切断され、再接続されなかった場合にデータの冗長化が保たれるようにするための処理である。
【００６４】
データベースノード２Ａは、切断された対象ノード２Ｉに対して再接続が規定回数以上失敗した場合（Ｓ６‐１、Ｓ６‐２、Ｓ６‐３）、対象ノード２Ｉをノードリスト情報２１１から削除する（Ｓ６‐４）。また、対象ノード２Ｉに割り当てられていたパーティションの冗長数が減るため、当該パーティションのデータを格納するデータベースノード２を探し（Ｓ６‐５）、当該パーティションを他のデータベースノード２Ｂに割り当てる（Ｓ６‐６）。データベースノード２Ａは、ノードコスト情報２１４を参照して割当先のノードを決定する。
【００６５】
（７）定期処理動作
定期処理動作は、ノードコストを定期的に送る処理である。各データベースノード２は、一定時間ごとに自ノードのコストの再計算を行う。一例として、ノードコストは自ノードが格納している全てのデータの件数をパーティションの分割サイズで割って算出される。データベースノード２は、再計算後のコストが以前のコストと異なる値であれば自ノードのノードコスト情報２１４を更新するとともに他ノードに通知する。通知を受けた他ノードは、ノードコスト情報２１４を更新する。
【００６６】
（８）データ処理動作
データベースノード２は、例えば、クライアントノード３からデータアクセス要求された対象となるデータのパーティションが自ノードにあるときはデータ処理手段２０１によって処理を行い、他ノードにあるときには通信手段２００により要求を送信する。
【００６７】
要求を受け取ったデータベースノード２は、対象となるパーティションが自ノード上にあった場合はデータ処理手段２０１により処理を行う。自ノードとは別のノードにパーティションがあると判断されたときは、当該ノードに再度要求を送る。このように動作させることにより、データアクセス要求と同時にパーティション分割の要求が受信された場合などでも、正しいノードへと処理を送信することができる。
【００６８】
（９）データ設定動作
図１２は、分散型データベースシステム１のデータ設定動作を説明するための概略図である。
【００６９】
データ設定動作は、キーと値を指定して実データ情報を設定更新する処理である。
【００７０】
まず、クライアントノード３は、設定しようとするデータのキーを含むパーティションを探すため（Ｓ９‐１）、パーティションリスト情報２１２を参照して、キーを含むパーティションのデータを格納しているデータベースノード２Ａ、２Ｂ、２Ｃ全てに対しデータ設定要求を送る（Ｓ９‐２、Ｓ９‐３、Ｓ９‐４）。データ設定要求は、設定するデータのキーと値が含まれる。
【００７１】
要求を受け取ったデータベースノード２Ａ、２Ｂ、２Ｃは、データのキーを含むパーティションが存在するか確認し（Ｓ９‐５、Ｓ９‐８、Ｓ９‐１１）、データを実データ情報２１３に保存して設定する（Ｓ９‐６、Ｓ９‐９、Ｓ９‐１２）。すでに同一のキーのデータが存在した場合は実データ情報２１３を上書きする。データを保存する際にはバージョン情報を付随して保存する。バージョン情報にはベクタークロックが使用される。ベクタークロックの配列の中の自ノードの担当部分をカウントアップすることでバージョンを更新する。
【００７２】
データベースノード２Ａ、２Ｂ、２Ｃは、データ設定が終了すると結果をクライアントノード３に返す（Ｓ９‐７、Ｓ９‐１０、Ｓ９‐１３）。クライアントノード３は、規定数以上のデータベースノード２からデータ設定が成功した旨の結果を受け取った場合にデータ設定に成功したと判断する（Ｓ９‐１４）。クライアントノード３は、成功した場合にはバージョン情報をマージし、パーティションを持つデータベースノード２Ａ、２Ｂ、２Ｃに対し、マージされたバージョン情報の内容に各実データ情報２１３を更新するよう要求する（Ｓ９‐１５、Ｓ９‐１６、Ｓ９‐１７）。
【００７３】
（１０）データ取得動作
図１３は、分散型データベースシステム１のデータ取得動作を説明するための概略図である。
【００７４】
データ取得動作は、キーを指定してデータを取得する処理である。
【００７５】
クライアントノード３は、取得しようとするデータのキーを含むパーティションを探すため（Ｓ１０‐１）、パーティションリスト情報２１２を参照し、キーを含むパーティションのデータを格納しているデータベースノード２Ａ、２Ｂ、２Ｃ全てに対しデータ取得要求を送る（Ｓ１０‐２、Ｓ１０‐３、Ｓ１０‐４）。
【００７６】
要求を受け取ったデータベースノード２Ａ、２Ｂ、２Ｃは、データのキーを含むパーティションが存在するか確認し、キーを元にデータを実データ情報２１３から取り出し（Ｓ１０‐５、Ｓ１０‐７、Ｓ１０‐９）、結果をクライアントノード３に返す（Ｓ１０‐６、Ｓ１０‐８、Ｓ１０‐１０）。
【００７７】
クライアントノード３は、規定数以上のデータベースノード２から成功した旨の結果を受け取った場合成功と判断し、データのバージョン情報が最新のものを有効なデータとする（Ｓ１０‐１１）。また、クライアントノード３は、バージョン情報が最新でないデータを送信したデータベースノード２に対して、バージョン情報が最新であるデータで実データ情報２１３を更新するよう誤データ修正要求する（Ｓ１０‐１２）。
【００７８】
（１１）データ削除動作
図１４は、分散型データベースシステム１のデータ削除動作を説明するための概略図である。
【００７９】
データ削除動作は、キーを指定してデータを削除する処理である。
【００８０】
クライアントノード３は、削除するデータのキーを含むパーティションを探すため（Ｓ１１‐１）、パーティションリスト情報２１２を参照し、キーを含むパーティションのデータを格納しているデータベースノード２Ａ、２Ｂ、２Ｃ全てに対しデータ削除要求を送る（Ｓ１１‐２、Ｓ１１‐３、Ｓ１１‐４）。
【００８１】
要求を受け取ったデータベースノード２Ａ、２Ｂ、２Ｃは、データのキーを含むパーティションが存在するか確認し（Ｓ１１‐５、Ｓ１１‐８、Ｓ１１‐１１）、キーを元にデータを実データ情報２１３から削除する（Ｓ１１‐６、Ｓ１１‐９、Ｓ１１‐１２）。データベースノード２Ａ、２Ｂ、２Ｃは、データ削除が終了すると結果をクライアントノード３に返す（Ｓ１１‐７、Ｓ１１‐１０、Ｓ１１‐１３）。
【００８２】
クライアントノード３は、規定数以上のデータベースノード２から成功した旨の結果を受け取った場合にデータ削除に成功したと判断する（Ｓ１１‐１４）。
【００８３】
（１２）データ範囲取得動作
図１５は、分散型データベースシステム１のデータ範囲取得動作を説明するための概略図である。
【００８４】
データ範囲取得動作は、指定したキー範囲に含まれる全てのパーティションを検索する処理である。
【００８５】
クライアントノード３は、キー範囲に含まれる全てのパーティションを探すため（Ｓ１２‐１）、パーティションリスト情報２１２を参照し、該当する全てのパーティションにおいて、パーティションを管理しているデータベースノード２Ａ、２Ｂ、２Ｃへデータ範囲検索要求を送信する（Ｓ１２‐２、Ｓ１２‐３、Ｓ１２‐４）。
【００８６】
要求を受け取ったデータベースノード２Ａ、２Ｂ、２Ｃは、キー範囲を含むパーティションが存在するか確認し、その範囲に含まれるデータを検索して全て取り出す（Ｓ１２‐５、Ｓ１２‐７、Ｓ１２‐９）。データ範囲取得が終了すると結果をクライアントノード３に返す（Ｓ１２‐６、Ｓ１２‐８、Ｓ１２‐１０）。
【００８７】
クライアントノード３は、パーティションごとに規定数以上のデータベースノード２から成功した旨の結果を受け取った場合に成功と判断し、各データのバージョン情報が最新のものを有効なデータとする（Ｓ１２‐１１）。また、クライアントノード３は、バージョン情報が最新でないデータを送信したデータベースノード２に対して、バージョン情報が最新であるデータで実データ情報２１３を更新するよう誤データ修正要求する（Ｓ１２‐１２）。その後、クライアントノード３は、パーティションごとのデータを１つのリストにマージしたものを範囲取得の結果データとする（Ｓ１２‐１３）。
【００８８】
（１３）その他の動作
（１３‐１）データ不整合修正
クライアントノード３は、データ取得の際にバージョン情報が古いデータを送ったデータベースノード２があった場合には、有効なデータを設定するよう要求を送信する（Ｓ１０‐１２、Ｓ１２‐１２）。このとき有効なデータのバージョン情報も合わせて送信する。要求を受け取ったデータベースノード２Ｃは、受け取ったデータのバージョン情報の方が格納されているデータよりも新しい場合にのみデータ設定を行う。このようにバージョン情報を比較することで、データ取得とデータ不整合の修正処理の間に別のデータ設定が行われていた場合のデータ巻き戻りを防ぐことができる。
（１３‐２）要求タイムアウト
データベースノード２は、別のノードに要求を送って返答を待つとき、一定時間応答がなかった場合にはタイムアウトとして処理が失敗したと判断する。これにより、要求の送信先のノードの処理がフリーズしたり強制終了したりした場合に、その処理を待つ他のノードまで処理が停止することを防ぐことができる。
（１３‐３）接続タイムアウト
ＴＣＰ通信では強制切断された場合に長い時間切断されたことを検知できないことがある。そのため、データベースノード２は、一定時間ごとにハートビートを送信し一定時間内に応答がなかった場合に切断されたと判断する。これにより他のノードとの通信が切断されていないかを素早く確実に確認することができ、ノード切断検知時のデータ冗長化処理にスムーズに移行することができる。
（１３‐４）ロックタイムアウト
データベースノード２は、パーティションの複製や分割の際にはパーティションをロックして同時に別のパーティション複製・分割などが起こらないように排他制御するが、このロックにもタイムアウト時間を設定する。これによりタイムアウトによってパーティション処理中に相手のノードが強制終了した場合などに永遠にロック状態になりパーティション処理が行えなくなるのを防ぐことができる。
（１３‐５）Ｑｕｏｒｕｍ
データベースノード２は、同一のデータを複数のノードに冗長化して保存する。そのため、同じキーで別の値のデータが同時にセットされた場合、ノード間でデータに食い違いが起こる可能性がある。これに対し、データベースノード２は、どの結果が正しいかを判断するため、各ノードからの返答結果のステータスやデータのバージョン情報を比較し、一致する結果が規定数以上見つかった場合にその結果を正しいものと判断する。
【００８９】
この規定数はＱｕｏｒｕｍと呼ばれ、分散コンピューティングにおける一貫性の保証によく用いられる。Ｑｕｏｒｕｍにはデータ取得時に使われるＲｅａｄ−Ｑｕｏｒｕｍとデータ設定時に使われるＷｒｉｔｅ−Ｑｕｏｒｕｍがある。データベースノード２は、Ｒｅａｄ−ＱｕｏｒｕｍとＷｒｉｔｅ−Ｑｕｏｒｕｍを足した数がパーティションの冗長数より大きく、Ｗｒｉｔｅ−Ｑｕｏｒｕｍがパーティションの冗長数の半分よりも大きいように設定し、このように設定されている場合は一般的に一貫性が保証される。
【００９０】
（実施の形態の効果）
上記した実施の形態によれば、以下の効果を奏する。
【００９１】
（１）パフォーマンス
データベースノード２は、メモリ２１に適したデータ構造を使用してデータを管理しているため、不揮発性メモリ等のデータ構造を使用してデータ管理をした場合に比べて、データへのアクセス速度を向上させることができる。また、データを一定の量でパーティションに分割して各データベースノード２で分散管理するため、データアクセスの負荷を分散することができる。また、ノードの数を増やすことで、クラスター全体のパフォーマンスが向上するスケールアウト性能が期待できる。
【００９２】
また、データベースノード２は、パーティションの分割においてキーに定義された順序の連続性を維持しつつ、キーの分布を考慮しているため、範囲検索のように連続したキー範囲でのデータ検索でも予め検索するノードが特定でき、効率的な検索ができるために、分散型データベースシステム１全体の負荷を抑制することができる。
【００９３】
（２）可用性
データベースノード２は、新規ノード参加時や参加していたデータベースノード２の切断検知時に、負荷の低いデータベースノード２にデータを冗長化して割り当てるため、あるデータベースノード２に異常が起こった場合にも他のデータベースノード２がデータにアクセスすることができる。パーティションが割り当てられているデータベースノード全てが停止しない限りはデータを損失することがなく、可用性が高くなる。
【００９４】
また、データベースノード２は、ノードリスト情報２１１やパーティションリスト情報２１２を互いに同期しており、データの整合性もＱｕｏｒｕｍによって各データベースノード２で判断されるため、管理ノードのような集中管理を行う専用のノードを必要としない。いわゆるマルチマスター型のクラスター構造になるため、高い可用性が期待できる。
【００９５】
（３）一貫性
データベースノード２は、データの整合性をＱｕｏｒｕｍによって各ノードで判断する。Ｑｕｏｒｕｍでは同時に全てのノードのデータが一致していることを保証することはできないものの、一定時間内にデータが一致する結果整合性（ｅｖｅｎｔｕａｌ  ｃｏｎｓｉｓｔｅｎｃｙ）を保証することができる。完全な一貫性は保証されない代わりに、処理のオーバーヘッドが小さく済む。パフォーマンスや可用性の低下を抑えつつ、実用に充分な整合性を保証することができる。
【００９６】
（４）総括
従来のインメモリ型データベースでは、データ処理は１つのノードで行われるため、高速であるものの負荷分散が難しいといった問題があった。また、従来の分散型データベースシステムはデータを不揮発性メモリ上で管理するため、各ノードの処理が高速でなかった。また、データのパーティションの分割位置の決定方法が、予め設定した値に基づいて行われるものであり、キーの分布が考慮されていなかった。
【００９７】
一方、上記した実施の形態に係る分散型データベースシステム１は、分散型のインメモリデータベースとして動作するため、高いパフォーマンスとスケールアウト性能、高可用性が期待できる。また、キーの分布状況に基づいてパーティションを分割するため、キーに偏りがあっても負荷を分散できる。キーの連続性が保たれることにより効率的な範囲検索が可能といった利点や、設定値を変更せずともノードの追加を行うことで自動的にパーティションが割り振られるという利点がある。
【００９８】
［他の実施の形態］
なお、本発明は、上記実施の形態に限定されず、本発明の趣旨を逸脱しない範囲で種々な変形が可能である。例えば、分散型データベースシステムだけでなく、分散ファイルシステム、分散リソース管理システム、ファイル共有システムとして用いてもよいし、記憶装置を省略してパーティショニング及びクラスタリングを行う分散タスクスケジューリングのシステムとして用いてもよい。
【００９９】
上記実施の形態で用いたプログラムをＣＤ−ＲＯＭ等の記録媒体に記憶して提供することもできる。また、上記実施の形態で説明した上記ステップの入れ替え、削除、追加等は本発明の要旨を変更しない範囲内で可能である。
【符号の説明】
【０１００】
１      分散型データベースシステム
２      データベースノード
３      クライアントノード
４      ネットワーク
２０    制御部
２１    メモリ
２２    通信部
２００  通信手段
２０１  データ処理手段
２１０  分散型データ処理プログラム
２１１  ノードリスト情報
２１２  パーティションリスト情報
２１３  実データ情報
２１４  ノードコスト情報
【要約】
【課題】本構成を有しない場合に比べて、データの検索効率を向上する分散型データ処理プログラム、情報処理装置、分散型データベースシステム及び分散システムを提供する。
【解決手段】データベースノード２は、複数台が互いに接続されることで分散型データベースシステム１を構成するものであって、検索に用いられるキーとデータとをペアで記憶し、当該キーはバイナリ文字列であって、当該バイナリ文字列に定義された文字列の順序で一の範囲（パーティション）に含まれるキーのデータを記憶するものであって、当該パーティションに含まれるキーのデータは他のデータベースノード２に冗長化されて記憶されるメモリ２１を有する。
【選択図】図１【図１】
0006030713.tif 000002
【図２】
0006030713.tif 000003
【図３】
0006030713.tif 000004
【図４】
0006030713.tif 000005
【図５】
0006030713.tif 000006
【図６】
0006030713.tif 000007
【図７】
0006030713.tif 000008
【図８】
0006030713.tif 000009
【図９】
0006030713.tif 000010
【図１０】
0006030713.tif 000011
【図１１】
0006030713.tif 000012
【図１２】
0006030713.tif 000013
【図１３】
0006030713.tif 000014
【図１４】
0006030713.tif 000015
【図１５】
0006030713.tif 000016