(57)【要約】      （修正有）【課題】より頑強なパーティション配置を計算できる計算装置、データベースシステム、計算システム、計算方法、プログラム及び記憶媒体を提供する。【解決手段】計算装置は、データベースが複数のパーティションに分割されて複数のノードに配置されるデータベースシステム１０についての計算を実行する。計算装置は、複数のノードにより収集された、複数のパーティション及び複数のノードに関する統計情報を受け付け、統計情報と、統計情報の統計的ばらつきに対応する摂動情報と、を用いて変動情報を生成し、統計情報及び変動情報を用いて、データベースシステムの性能を向上可能な複数のノードにおける複数のパーティションの配置を計算する。【選択図】図１
2020113254.tif 000002
【特許請求の範囲】
【請求項１】
データベースが複数のパーティションに分割されて複数のノードに配置されるデータベースシステムについての計算を実行する計算装置であって、
前記複数のノードにより収集された、前記複数のパーティション及び前記複数のノードに関する統計情報を受け付け、
前記統計情報と、前記統計情報の統計的ばらつきに対応する摂動情報と、を用いて変動情報を生成し、
前記統計情報及び前記変動情報を用いて、前記データベースシステムの性能を向上可能な前記複数のノードにおける前記複数のパーティションの配置を計算する、
計算装置。
【請求項２】
前記配置を実行するための許容時間を受け付け、前記許容時間内に実行可能な前記配置を計算する請求項１記載の計算装置。
【請求項３】
前記統計情報は、前記複数のノードのそれぞれにおける前記複数のパーティションのそれぞれへのアクセス頻度と、前記複数のノードのそれぞれにおける前記複数のパーティションのそれぞれのデータサイズと、前記複数のパーティション同士の間の単位データサイズあたりの移動時間と、前記複数のノードのそれぞれにおけるキャパシティと、の少なくともいずれかを含む請求項１又は２に記載の計算装置。
【請求項４】
前記変動情報は、前記変動情報に基づく前記複数のパーティションの前記配置の評価値が、前記統計情報に基づく前記複数のパーティションの前記配置の評価値よりも悪くなるように、生成される請求項１〜３のいずれか１つに記載の計算装置。
【請求項５】
前記配置の計算において、
前記統計情報に基づく前記複数のノードにおける前記複数のパーティションの初期配置と、前記変動情報の一部に基づく前記複数のノードにおける前記複数のパーティションの配置候補と、を算出し、
前記初期配置の評価値が前記配置候補の評価値よりも良いときには、前記初期配置を採用配置とし、前記配置候補の評価値が前記初期配置の評価値よりも良いときには、前記配置候補を前記採用配置とする、
第１処理と、
前記変動情報の別の一部に基づく前記複数のノードにおける前記複数のパーティションの別の配置候補を算出し、
前記採用配置の評価値が前記別の配置候補の評価値よりも高いときには、前記採用配置を変更せず、前記別の配置候補の評価値が前記採用配置の評価値よりも高いときには、前記別の配置候補を前記採用配置とする、
第２処理と、
を実行する請求項１〜４のいずれか１つに記載の計算装置。
【請求項６】
前記配置の計算において、前記第２処理を繰り返し、
前記第２処理の繰り返しにより得られた前記採用配置を、前記データベースシステムの性能を向上可能な前記複数のノードにおける前記複数のパーティションの前記配置として出力する請求項５記載の計算装置。
【請求項７】
請求項１〜４のいずれか１つに記載の計算装置と、
前記複数のノードと、
を備え、
前記複数のノードは、前記計算装置による計算から前記配置が得られたときには、前記複数のパーティションを前記複数のノード同士の間で移動させて前記配置を実行し、前記計算装置による計算から前記配置が得られないときには、前記複数のパーティションを移動させないデータベースシステム。
【請求項８】
複数のパーティションに分散されたデータベースを記憶する複数のノードを備えたデータベースシステムであって、
前記複数のノードは、互いに通信をして何れか１つのノードを管理装置として選任し、
前記管理装置は、
前記複数のノードにより収集された、前記複数のパーティション及び前記複数のノードに関する統計情報を受け付け、
前記統計情報と、前記統計情報の統計的ばらつきに対応する摂動情報と、を用いて変動情報を生成し、
前記統計情報及び前記変動情報を用いて、前記データベースシステムの性能を向上可能な前記複数のノードにおける前記複数のパーティションの配置を計算する、
データベースシステム。
【請求項９】
データベースが複数のパーティションに分割されて複数のノードに配置されるデータベースシステムについての計算を実行する計算装置であって、
前記複数のノードにおける前記複数のパーティションを、別の配置へ移動させる際の移動順序を、予め定式化された整数線形計画問題を解くことで計算する計算装置。
【請求項１０】
前記移動順序は、移動の対象である前記パーティション、移動元の前記ノード、移動先の前記ノード、及び移動の時刻を含む請求項９記載の計算装置。
【請求項１１】
複数のパーティションに分散されたデータベースを記憶する前記複数のノードを備えたデータベースシステムであって、
前記複数のノードは、互いに通信をして何れか１つのノードを管理装置として選任し、
前記管理装置は、
前記複数のノードにより収集された、前記複数のパーティション及び前記複数のノードに関する統計情報を受け付け、
前記統計情報と、前記統計情報の統計的ばらつきに対応する摂動情報と、を用いて変動情報を生成し、
前記統計情報及び前記変動情報を用いて、前記データベースシステムの性能を向上可能な前記複数のノードにおける前記複数のパーティションの配置を計算し、
前記複数のパーティションを、前記配置へ移動させる際の移動順序を、予め定式化された整数線形計画問題を解くことで計算する、
データベースシステム。
【請求項１２】
前記複数のノードは、計算により得られた前記移動順序に従って、前記複数のパーティションの少なくとも一部を移動させる請求項１１記載のデータベースシステム。
【請求項１３】
データベースが複数のパーティションに分割されて複数のノードに配置されるデータベースシステムについての計算を実行する第１計算装置であって、
前記複数のノードにより収集された、前記複数のパーティション及び前記複数のノードに関する統計情報を受け付け、
前記統計情報と、前記統計情報の統計的ばらつきに対応する摂動情報と、を用いて変動情報を生成し、
前記統計情報及び前記変動情報を用いて、前記データベースシステムの性能を向上可能な前記複数のノードにおける前記複数のパーティションの配置を計算する、
第１計算装置と、
前記複数のパーティションを、前記配置へ移動させる際の移動順序を、予め定式化された整数線形計画問題を解くことで計算する第２計算装置と、
を備えた計算システム。
【請求項１４】
データベースが複数のパーティションに分割されて複数のノードに配置されるデータベースシステムについての計算方法であって、
前記複数のノードにより収集された、前記複数のパーティション及び前記複数のノードに関する統計情報を参照し、
前記統計情報と、前記統計情報の統計的ばらつきに対応する摂動情報と、を用いて変動情報を生成し、
前記統計情報及び前記変動情報を用いて、前記データベースシステムの性能を向上可能な前記複数のノードにおける前記複数のパーティションの配置を計算する、
計算方法。
【請求項１５】
さらに、前記複数のパーティションを、前記配置へ移動させる際の移動順序を、予め定式化された整数線形計画問題を解くことで計算する請求項１４記載の計算方法。
【請求項１６】
データベースが複数のパーティションに分割されて複数のノードに配置されるデータベースシステムについての計算方法であって、
前記複数のノードにおける前記複数のパーティションを、別の配置へ移動させる際の移動順序を、予め定式化された整数線形計画問題を解くことで計算する計算方法。
【請求項１７】
データベースが複数のパーティションに分割されて複数のノードに配置されるデータベースシステムについての計算を、コンピュータに実行させるプログラムであって、
前記複数のノードにより収集された、前記複数のパーティション及び前記複数のノードに関する統計情報を受け付けさせ、
前記統計情報と、前記統計情報の統計的ばらつきに対応する摂動情報と、を用いて変動情報を生成させ、
前記統計情報及び前記変動情報を用いて、前記データベースシステムの性能を向上可能な前記複数のノードにおける前記複数のパーティションの配置を計算させる、
プログラム。
【請求項１８】
前記コンピュータに、前記複数のパーティションを、前記配置へ移動させる際の移動順序を、予め定式化された整数線形計画問題を解くことで計算させる、請求項１７記載のプログラム。
【請求項１９】
データベースが複数のパーティションに分割されて複数のノードに配置されるデータベースシステムについての計算を、コンピュータに実行させるプログラムであって、
前記複数のノードにおける前記複数のパーティションを、別の配置へ移動させる際の移動順序を、予め定式化された整数線形計画問題を解くことで計算させるプログラム。
【請求項２０】
請求項１７〜１９のいずれか１つに記載のプログラムを記憶した記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、計算装置、データベースシステム、計算システム、計算方法、プログラム、及び記憶媒体に関する。
【背景技術】
【０００２】
データベースを複数のパーティションに分割し、複数のノードで記憶するデータベースシステムがある。このデータベースシステムにおける複数のパーティションの配置については、処理負荷等のばらつきに対して、頑強であることが望まれる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開ＷＯ２０１５／０２９１３９
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明が解決しようとする課題は、より頑強なパーティション配置を計算できる、計算装置、データベースシステム、計算システム、計算方法、プログラム、及び記憶媒体を提供することである。
【課題を解決するための手段】
【０００５】
実施形態に係る計算装置は、データベースが複数のパーティションに分割されて複数のノードに配置されるデータベースシステムについての計算を実行する。前記計算装置は、前記複数のノードにより収集された、前記複数のパーティション及び前記複数のノードに関する統計情報を受け付け、前記統計情報と、前記統計情報の統計的ばらつきに対応する摂動情報と、を用いて変動情報を生成し、前記統計情報及び前記変動情報を用いて、前記データベースシステムの性能を向上可能な前記複数のノードにおける前記複数のパーティションの配置を計算する。
【図面の簡単な説明】
【０００６】
【図１】実施形態に係る計算装置が適用されるデータベースシステムのハードウェア構成を表す図である。
【図２】実施形態に係る計算装置が適用されるデータベースシステム１０の機能構成を表す図である。
【図３】データ保持表の一例を表す図である。
【図４】現役割表の一例を表す図である。
【図５】次役割表の一例を表す図である。
【図６】目標役割表の一例を表す図である。
【図７】データストア部に記憶されているデータ集合の一例を表す図である。
【図８】レプリケーション処理を説明するための図である。
【図９】短期同期処理を説明するための図である。
【図１０】長期同期処理を説明するための図である。
【図１１】ノードに割り当てられる役割の遷移を表す図である。
【図１２】実施形態に係るデータベースシステムの機能構成を表す図である。
【図１３】キャパシティの観測結果の一例を表す図である。
【図１４】定式化された混合整数線形計画問題の一例を表す図である。
【図１５】実施形態に係るデータベースシステムにおける処理の一部を表すフローチャートである。
【図１６】実施形態に係る計算装置における処理の一部を表すフローチャートである。
【図１７】定式化された整数線形計画問題の一例を表す図である。
【図１８】実施形態に係る計算装置による出力例である。
【図１９】実施形態に係る計算装置における処理の一部を表すフローチャートである。
【発明を実施するための形態】
【０００７】
以下に、本発明の各実施形態について図面を参照しつつ説明する。
また、本願明細書と各図において、既に説明したものと同様の要素には同一の符号を付して詳細な説明は適宜省略する。
【０００８】
図１は、実施形態に係る計算装置が適用されるデータベースシステムのハードウェア構成を表す図である。
データベースシステム１０は、外部のコンピュータであるクライアントから、データベースに対するアクセス要求（例えば、参照、更新、又は登録）をネットワークを介して受信する。データベースシステム１０は、受信したアクセス要求に応じた処理を実行する。
【０００９】
データベースシステム１０は、複数のノード３０（データベースノード）を備える。複数のノード３０は、ネットワークを介して互いに接続される。換言すると、データベースシステム１０は、シェアードナッシング型の構成を有する。
【００１０】
データベースシステム１０では、複数のノード３０にデータ集合が分散されている。データベースシステム１０は、外部のコンピュータであるクライアントからは、一つのデータベースとしてアクセスされる。
【００１１】
データベースシステム１０は、例えば、キーとバリューとのペアからなる単純なデータモデルを有する。データベースシステム１０では、キーバリュー型データベースがキーによりシャーディングされ、分散化されていても良い。シャーディングは、データをより小さなデータに分割し、複数のノードに自動的に分散して保存する技術である。すなわち、データベースシステム１０は、分散キーバリュー型データベースであっても良い。
【００１２】
分散キーバリュー型データベースをシェアードナッシング型のデータベースシステムに適用し、データベースシステム１０を構築することで、データベースシステム１０のスケールアウト及び大規模化が容易となる。
【００１３】
各ノード３０は、互いにハードウェア的に独立したコンピュータである。各ノード３０は、クライアントからのアクセス要求を独立に受け付け、アクセス要求に応じた処理を独立して実行できる。
【００１４】
各ノード３０は、一例として、ＣＰＵ（Central Processing Unit）１２、メモリ１３、通信Ｉ／Ｆ１４、及びストレージＩ／Ｆ１５を含む。各ノード３０は、ストレージＩ／Ｆ１５を介して外部記憶装置１６に接続される。外部記憶装置１６は、ノード３０の内部に設けられていてもよい。
【００１５】
データベースシステム１０は、データベースをパーティショニングにより複数に分割して記憶する。パーティショニングは、データベースを複数に分割し、分割したそれぞれのデータ集合（パーティションと呼ばれる。）を複数のノードに分散して記憶させる技術である。パーティショニングを適用することで、各ノードに記憶させるデータ集合を小さくできる。これにより、クライアントからのアクセスを複数のノードに分散させることができる。パーティションの数は、予め定められている。データベースの分割方法は、任意である。
【００１６】
各ノード３０には、各パーティションに対する役割が割り当てられる。役割は、オーナー、バックアップ、又は“無し”の何れかである。“無し”は、オーナーとバックアップのいずれの役割も担わないことを意味する。
【００１７】
例えば、複数のパーティションの１つに対して、複数のノード３０の１つには、オーナーとしての役割が割り当てられる。複数のパーティションの別の１つに対して、複数のノード３０の１つには、オーナーとしての役割が割り当てられる。複数のパーティションの前記１つに対して、オーナーとしての役割が割り当てられた複数のノード３０の前記１つは、複数のパーティションの前記別の１つに対して、オーナーとしての役割が割り当てられた複数のノード３０の前記別の１つと、異なっていても良い。
【００１８】
同様に、複数のパーティションの１つに対して、複数のノード３０の１つ以上には、バックアップとしての役割が割り当てられる。複数のパーティションの別の１つに対して、複数のノード３０の１つ以上には、バックアップとしての役割が割り当てられる。複数のパーティションの前記１つに対して、バックアップとしての役割が割り当てられた複数のノード３０の前記１つ以上は、複数のパーティションの前記別の１つに対して、バックアップとしての役割が割り当てられた複数のノード３０の前記別の１つ以上と、異なっていても良い。
【００１９】
オーナーは、対応するパーティションのデータ集合を記憶する。オーナーは、対応するパーティションのデータ集合へのクライアントからのアクセス要求を受け付け、処理する。バックアップは、対応するパーティションのデータ集合を記憶する。バックアップは、例えばオーナーに障害が発生したときに、オーナーに代わって役割を担えるように、オーナーをバックアップする。バックアップが割り当てられることで、オーナーのノードに障害が生じたとしても、バックアップのノードを用いてサービスを継続できる。オーナー及びバックアップは、それぞれマスター及びスレーブと呼ばれることもある。
【００２０】
複数のノード３０は、互いに通信をして何れか１つのノード３０を管理装置２０として選任する。選任された１つのノード３０は、管理装置２０として機能する。
【００２１】
複数のノード３０は、例えば、データベースの起動時に所定のアルゴリズムで１つの管理装置２０を選任する。既に選任されていたノード３０が障害により管理装置２０として機能できなくなったときには、複数のノード３０は、所定のアルゴリズムで新たなノード３０を管理装置２０として選任する。
【００２２】
図面及び説明において、管理装置２０を、便宜的にノード３０とは分離して図示又は説明することがある。しかし、管理装置２０は、通常のノード３０としての動作も同時に実行する。すなわち、選任されたノード３０は、クライアントからのアクセス要求を受け付けてアクセス要求に応じた処理も、同時に実行する。
【００２３】
管理装置２０は、複数のノード３０を管理する。管理装置２０は、例えば、各パーティションついて、オーナーとするノード３０及びバックアップとするノード３０を割り当てる。
【００２４】
管理装置２０は、予め定められた冗長度に基づき、バックアップとするノード３０を割り当てる。冗長度は、バックアップとして機能するノードの数を表す。冗長度は、一例として、２又は３に設定される。
【００２５】
データベースシステム１０では、何れかのノード３０に障害が発生したときには、障害が発生したノード３０を切り離すことができる。また、データベースシステム１０に新たにノード３０を追加し、データベースの性能を向上させることができる。
【００２６】
図２は、実施形態に係る計算装置が適用されるデータベースシステム１０の機能構成を表す図である。
管理装置２０は、表記憶部２１と、割当部２２と、計算部２３と、クラスタ管理部２４とを有する。割当部２２、計算部２３、及びクラスタ管理部２４は、管理装置２０のＣＰＵ１２がプログラムを実行することにより実現される。割当部２２、計算部２３、及びクラスタ管理部２４の少なくとも何れかは、ハードウェア回路で実現されてもよい。表記憶部２１は、管理装置２０のメモリ１３又は外部記憶装置１６により実現される。
【００２７】
図３は、データ保持表の一例を表す図である。
図４は、現役割表の一例を表す図である。
図５は、次役割表の一例を表す図である。
図６は、目標役割表の一例を表す図である。
表記憶部２１は、データ保持表、現役割表、次役割表、及び目標役割表を記憶する。
【００２８】
データ保持表は、各パーティションに対する、各ノード３０のタイムスタンプを格納する。タイムスタンプは、対応するノード３０が記憶している対応するパーティションのデータ集合の更新履歴を表す。タイムスタンプは、一例として、データ集合が更新される毎にインクリメントされる値である。従って、あるパーティションにおけるタイムスタンプの最も大きいノード３０は、そのパーティションの最新のデータ集合を記憶しているノード３０であることを意味する。
【００２９】
データ保持表は、例えば図３に表すように、ノード３０を特定する行と、パーティションを特定する列と、を含む。データ保持表の各セルは、行により特定されるノード３０が記憶している、列により特定されるパーティションのデータ集合のタイムスタンプを格納する。
【００３０】
現役割表は、各パーティションに対する、各ノード３０に割り当てられたデータベースでの役割を格納する。具体的には、現役割表は、各パーティションに対する各ノード３０の役割を格納する。
【００３１】
現役割表は、例えば図４に表したように、ノード３０を特定する行と、パーティションを特定する列と、を含む。現役割表の各セルは、その列により特定されるパーティションに対する、その行により特定されるノード３０に割り当てられた役割を格納する。図面には、オーナーとしての役割が割り当てられていることを“ＯＷＮＥＲ”又は“Ｏ”と記載している。バックアップとしての役割が割り当てられていることを“ＢＡＣＫＵＰ”又は“Ｂ”と記載している。オーナーにもバックアップにも割り当てられていないことを、“ＮＯＮＥ”もしくは“Ｎ”と記載し、又は空白としている。
【００３２】
次役割表は、各パーティションに対する、各ノード３０に次に割り当てられる役割を格納する。次に割り当てられる役割は、オーナー、バックアップ、又は“無し”の何れかである。次役割表は、例えばノード３０に障害が発生したとき、又は新たなノード３０が追加されたときに、現役割表と置き換えられる。
【００３３】
次役割表は、例えば図５に表したように、ノード３０を特定する行と、パーティションを特定する列と、を含む。次役割表の各セルは、その列により特定されるパーティションに対する、その行により特定されるノード３０に割り当てられた次の役割を格納する。
【００３４】
目標役割表は、各パーティションに対する、各ノード３０に割り当てられたバックアップの候補としての役割を格納する。バックアップの候補は、将来、そのパーティションに対して、そのノード３０がオーナー又はバックアップとしての役割を担うための準備をする役割である。バックアップの候補に割り当てられたノード３０は、将来、オーナーとなってもよい。
【００３５】
目標役割表は、例えば図６に表したように、ノード３０を特定する行と、パーティションを特定する列と、を含む。目標役割表の各セルは、その列により特定されるパーティションに対する、その行により特定されるノード３０に割り当てられたバックアップの候補としての役割を格納する。図面において、“ＭＩＤ−ＢＡＣＫＵＰ”又は“Ｍ”の記載は、バックアップの候補としての役割が割り当てられていることを示す。空白のセルは、バックアップの候補として割り当てられていないことを示す。
【００３６】
割当部２２は、各パーティションに対して、オーナーとなるノード３０、及びバックアップとなるノード３０を割り当てる。割り当ては、各ノード３０の状況の変更に応じて実行される。例えば、何れかのノード３０で障害が発生すると、割当部２２は、障害が発生したノード３０を除いて、オーナーとなるノード３０、及びバックアップとなるノード３０を再度割り当てる。
【００３７】
新たなノード３０が追加されると、割当部２２は、各パーティションに対して、新たなノード３０を含めて、オーナーとなるノード３０、及びバックアップとなるノード３０を再度割り当てる。
【００３８】
バックアップの候補として割り当てられたノード３０へのデータ集合の送信が完了すると、オーナー又はバックアップとなることができるノード３０が新たに発生する。このとき、割当部２２は、各パーティションに対して、オーナーとなるノード３０及びバックアップとなるノード３０を再度割り当てる。
【００３９】
割当部２２は、各パーティションに対して、少なくともオーナーが存在するように、各ノード３０に役割を割り当てる。また、割当部２２は、予め定められた範囲内の冗長度を有するように、各パーティションに対してオーナーとなるノード３０及びバックアップとなるノード３０を割り当てる。この割り当ては、少なくともデータベースを機能させることを条件として、実行される。これにより、何れかのノード３０に障害が発生しても、少なくともデータベースを機能させることができる可能性を高めることができる。
【００４０】
割当部２２は、オーナー及びバックアップが各ノード３０に分散するように、各パーティションに対して、オーナーとなるノード３０及びバックアップとなるノード３０を割り当てる。この割り当ては、少なくともデータベースが機能し、且つ予め定められた範囲内の冗長度を有することを条件として、実行される。これにより、割当部２２は、各ノード３０の処理の負荷を均等とすることができる。
【００４１】
計算部２３は、データ配置を計算する。データ配置は、クライアントからの要求を複数のノード３０でより効率的に処理でき、且つ何れのノード３０でも障害が発生しないように、計算される。計算部２３による処理については、後述する。
【００４２】
図２の例では、実施形態に係る計算装置の機能は、計算部２３として管理装置２０が備える。換言すると、管理装置２０が、計算装置（第１計算装置）としても機能する。図２の例の他に、実施形態に係る計算装置は、管理装置２０及び複数のノード３０とネットワークを介して接続されるコンピュータであっても良い。ここでは、管理装置２０が計算装置としての機能を備える場合について説明する。
【００４３】
クラスタ管理部２４は、各ノード３０とネットワークを介してメッセージをやり取りする。クラスタ管理部２４は、メッセージに基づき、各ノード３０を管理する。例えば、クラスタ管理部２４は、一定時間毎に、ハートビートと呼ばれるメッセージを各ノード３０とやり取りする。クラスタ管理部２４は、何れかのノード３０からハートビートの返信が無いとき、そのノード３０で障害が発生したと判断する。
【００４４】
クラスタ管理部２４は、定期的に、各ノード３０からデータ保持表を受信する。クラスタ管理部２４は、全てのノード３０から受信したデータ保持表をまとめて表記憶部２１に記憶させる。クラスタ管理部２４は、何れかのノード３０からデータ保持表が受信できないとき、そのノード３０で障害が発生したと判断する。
【００４５】
クラスタ管理部２４は、起動時に、割当部２２に次役割表を算出させる。クラスタ管理部２４は、算出させた次役割表を各ノード３０に配布する。この配布により、割り当てられた役割に応じた動作が各ノード３０に指示される。
【００４６】
クラスタ管理部２４は、定期的に、割当部２２に次役割表を算出させる。クラスタ管理部２４は、算出させた次役割表が現役割表から変化したとき、算出させた次役割表を各ノード３０に配布する。この配布により、新たに割り当てられた役割に応じた動作が各ノード３０に指示される。クラスタ管理部２４は、次役割表を配布後、表記憶部２１に記憶されている現役割表を、次役割表の内容に更新する。
【００４７】
例えば、何れかのノード３０に障害が発生したとき、新たなノード３０の追加があったとき、又は、バックアップとして割り当て可能なノード３０が発生したとき、割当部２２により算出された次役割表は、現役割表から変化する。バックアップとして割り当て可能なノード３０は、上述した通り、候補として割り当てられたノード３０へのデータ集合の送信が完了したときに、発生する。クラスタ管理部２４は、変化した次役割表を、各ノード３０に配布する。
【００４８】
各ノード３０は、データストア部３１と、表記憶部３２と、アクセス処理部３３と、ノード管理部３４と、転送部３５と、収集部３６と、を含む。アクセス処理部３３、ノード管理部３４、及び転送部３５は、ノード３０のＣＰＵ１２がプログラムを実行することにより実現される。アクセス処理部３３、ノード管理部３４、及び転送部３５の少なくとも一部は、ハードウェア回路で実現されてもよい。データストア部３１及び表記憶部３２は、ノード３０のメモリ１３又は外部記憶装置１６により実現される。
【００４９】
図７は、データストア部に記憶されているデータ集合の一例を表す図である。
データストア部３１は、自ノードが現役割表によりオーナー又はバックアップに割り当てられたパーティションのデータ集合を記憶する。例えば、図７に表したように、３つに分割されたパーティション＃１〜＃３のうち、自ノードが、パーティション＃１に対してオーナーに割り当てられ、パーティション＃３に対してバックアップに割り当てられている。データストア部３１は、パーティション＃１及びパーティション＃３のデータ集合を記憶する。
【００５０】
ノード３０は、目標役割表によりバックアップの候補に割り当てられたパーティションについては、そのパーティションのオーナーに割り当てられたノード３０からデータ集合を受信する。データストア部３１は、オーナーのノード３０から受信済みのデータ集合の少なくとも一部を記憶する。
【００５１】
表記憶部３２は、データ保持表の自ノードに対応する部分を記憶する。表記憶部３２は、現役割表、次役割表及び目標役割表を記憶する。現役割表は、次役割表を受信すると、次役割表の内容に書き換えられる。目標役割表は、定期的に受信する目標役割表が変化すると、変化後の内容に書き換えられる。
【００５２】
アクセス処理部３３は、クライアントからのアクセス要求をネットワークを介して受信する。アクセス処理部３３は、各パーティションに対して、現役割表により自ノードに対して割り当てられた役割に応じた処理を実行する。
【００５３】
具体的には、アクセス処理部３３は、現役割表によりオーナーとして割り当てられたパーティションに対する、クライアントからのアクセス要求を受け付ける。アクセス処理部３３は、そのアクセス要求に応じた処理を実行する。例えば、アクセス処理部３３は、参照要求を受け付けると、そのパーティションのデータ集合の中の対応するデータを読み出してクライアントに送信する。アクセス処理部３３は、更新要求を受け付けると、そのパーティションのデータ集合の対応するデータを更新する。アクセス処理部３３は、登録要求を受け付けると、そのパーティションのデータ集合に新たなデータを登録する。
【００５４】
アクセス処理部３３は、一連のアクセス要求を含むトランザクションを受け付けてもよい。アクセス処理部３３は、クライアントからの一連のアクセス要求をトランザクション処理により実行する。
【００５５】
図８は、レプリケーション処理を説明するための図である。
アクセス処理部３３は、更新要求及び登録要求を処理すると、現役割表によりそのパーティションについてバックアップに割り当てられたノード３０との間でレプリケーション処理を実行する。レプリケーション処理とは、バックアップに割り当てられたノード３０に、オーナーに割り当てられたノード３０に記憶されているデータ集合のレプリカ（複製）を生成するための処理である。
【００５６】
具体的には、図８に示されるように、アクセス処理部３３は、自ノードがオーナーに割り当てられたパーティションに対する更新又は登録の要求を受け付けると、同一のアクセス要求をバックアップとして割り当てられた他のノード３０へと送信する。他のノード３０のアクセス処理部３３は、バックアップとして割り当てられたパーティションに対する、オーナーとして割り当てられたノード３０から更新又は登録の要求を受け付ける。他のノード３０のアクセス処理部３３は、その要求に応じた更新又は登録の処理を実行する。
【００５７】
アクセス処理部３３は、レプリケーション処理により、オーナーとして割り当てられたノード３０と、バックアップとして割り当てられたノード３０と、の間でデータ集合の同期を取ることができる。
【００５８】
オーナーとして割り当てられたノード３０のアクセス処理部３３は、レプリケーション処理を実行するときに、一連のアクセス要求を含むトランザクションを送信してもよい。バックアップとして割り当てられたノード３０のアクセス処理部３３は、レプリケーション処理をトランザクション処理により実行する。
【００５９】
アクセス処理部３３は、更新要求及び登録要求を処理したときに、表記憶部３２に記憶されたデータ保持表の対応するパーティションのタイムスタンプを更新する。
【００６０】
図９は、短期同期処理を説明するための図である。
ノード管理部３４は、管理装置２０のクラスタ管理部２４とネットワークを介してメッセージをやり取りする。ノード管理部３４は、クラスタ管理部２４からハートビートと呼ばれるメッセージを受信したことに応じて、自ノードに障害が発生していければ応答メッセージを送信する。ノード管理部３４は、定期的に、表記憶部３２に記憶されているデータ保持表をクラスタ管理部２４へと送信する。
【００６１】
ノード管理部３４は、クラスタ管理部２４から次役割表を受信し、受信した次役割表を表記憶部３２に記憶させる。ノード管理部３４は、次役割表を受信すると、短期同期処理を実行する。短期同期処理は、図９に表したように、次役割表により割り当てられた役割で各ノード３０を動作させるために実行される。短期同期処理は、クライアントからのアクセス要求に応じた処理を一時的に中断して実行される。
【００６２】
具体的には、ノード管理部３４は、各パーティションに対して、次役割表により示された役割で各ノード３０を動作させるために、アクセス処理部３３にレプリケーション処理と同様の処理を実行させる。これにより、各パーティションに対して、オーナーとして割り当てられたノード３０と、バックアップとして割り当てられたノード３０と、の間のデータ集合が、同期される。データ集合の同期後、ノード管理部３４は、アクセス処理部３３に、各パーティションに対する次役割表により割り当てられた新たな役割に応じた処理を実行させる。
【００６３】
ノード管理部３４は、短期同期処理が完了すると、現役割表の内容を次役割表の内容に更新する。以後、アクセス処理部３３は、クライアントからのアクセス要求を受け付けることができる。
【００６４】
ノード管理部３４は、クラスタ管理部２４から目標役割表を定期的に受信し、受信した目標役割表を表記憶部３２に記憶させる。
【００６５】
図１０は、長期同期処理を説明するための図である。
転送部３５は、長期同期処理を実行する。長期同期処理は、図１０に表したように、目標役割表により割り当てられた役割で各ノード３０を動作させるために実行される。長期同期処理は、クライアントからのアクセス要求に対する処理を中断させずに実行される。具体的には、転送部３５は、パーティションのデータ集合を、他のノード３０に送信する。送信されるデータ集合は、自ノードが現役割表によりオーナーとして割り当てられたパーティションのデータ集合である。他のノード３０は、目標役割表によりバックアップの候補として割り当てられており且つ現役割表によりオーナーにもバックアップにも割り当てられていないノード３０である。この処理は、アクセス要求に対する処理を中断させずに実行される。
【００６６】
転送部３５は、パーティションのデータ集合を、他のノード３０から受信する。受信するデータ集合は、自ノードが目標役割表によりバックアップの候補として割り当てられており且つ現役割表によりオーナーにもバックアップにも割り当てられていないパーティションのデータ集合である。他のノード３０は、現役割表によりオーナーとして割り当てられたノード３０である。この処理は、アクセス要求に対する処理を中断させずに実行される。
【００６７】
転送部３５は、長期同期処理の実行により、オーナーに割り当てられたノード３０に記憶されたデータ集合のレプリカを、オーナー又はバックアップに割り当てられていないノード３０に記憶させることができる。これにより、転送部３５は、長期同期処理の後に、オーナー又はバックアップとなることができるノード３０を新たに生成することができる。
【００６８】
長期同期処理の実行時に、転送部３５は、オーナーに割り当てられたパーティションのデータ集合を、バックアップの候補として割り当てられたノード３０に送信する。この処理は、アクセス処理部３３によるトランザクションの実行を妨害しないように、バックグラウンドで実行される。転送部３５は、バックアップの候補として割り当てられたパーティションのデータ集合を、バックグラウンドで、オーナーに割り当てられたノード３０から受信する。
【００６９】
バックグラウンドでの処理とは、一例として、ノード３０が複数のＣＰＵ１２を備えるときには、トランザクション処理を実行していない一部のＣＰＵ１２を用いて実行する処理である。また、バックグラウンドでの処理とは、別の一例として、ＣＰＵ１２が時分割処理をしているときには、ＣＰＵ１２がトランザクション処理を実行していない一部の時間帯で実行する処理である。これにより、転送部３５は、クライアントからのアクセス要求に対する応答速度等の低下を抑制しつつ、長期同期処理を実行できる。
【００７０】
転送部３５は、パーティションのデータ集合を、他のノード３０に送信してもよい。送信されるデータ集合は、現役割表で自ノードがバックアップに割り当てられたパーティションのデータ集合である。他のノード３０は、目標役割表によりバックアップの候補に割り当てられており且つオーナーにもバックアップにも割り当てられていないノード３０である。この処理は、他のノード３０から同一のデータ集合が送信されていないことを条件として実行される。
【００７１】
図１１は、ノード３０に割り当てられる役割の遷移を表す図である。
ノード３０は、各パーティションに対して、“オーナー”、“バックアップ”もしくは“バックアップの候補”が割り当てられた状態、又は、何れの役割も割り当てられていない“無し”状態のいずれかに遷移する。
【００７２】
ノード３０は、“無し”状態と“オーナー”状態との間を、短期同期処理により相互に遷移する。ノード３０は、“オーナー”状態と“バックアップ”状態との間を、短期同期処理により相互に遷移する。ノード３０は、“バックアップ”状態から“無し”状態へと、短期同期処理により遷移する。
【００７３】
ノード３０は、“無し”状態と“バックアップの候補”状態との間を、長期同期処理により相互に遷移する。そして、ノード３０は、“バックアップの候補”状態から“バックアップ”状態へと、短期同期処理により遷移する。
【００７４】
上述した各要素のより具体的な動作としては、例えば、国際公開ＷＯ２０１５／０２９１３９に記載された動作を適用できる。
【００７５】
図１２は、実施形態に係るデータベースシステムの機能構成を表す図である。
図１２に表したように、計算部２３は、主に、データ配置の探索と、探索の開始決定と、を実行する。収集部３６は、情報の収集と、摂動情報の選定と、を実行する。
【００７６】
収集部３６が情報の収集及び摂動情報の選定を実行すると、ノード管理部３４からクラスタ管理部２４へ、情報が送信される。計算部２３は、探索の開始を決定すると、送信された情報を用いて、データ配置を探索する。データ配置の探索では、よりデータベースシステム１０の性能を向上でき、且つデータベースシステム１０をより頑強にできるよう、複数のパーティションの配置が計算される。
【００７７】
情報の収集について説明する。
収集部３６は、自ノード３０と、自ノード３０が記憶する複数のパーティションと、に関する統計情報を収集する。統計情報は、計算部２３による計算に用いられる。統計情報は、例えば、自ノード３０の各パーティションへのアクセス頻度、自ノード３０の各パーティションのサイズ、自ノード３０と他ノード３０との間の単位データサイズあたりの移動時間、及び自ノード３０のキャパシティ（処理能力）を含む。収集部３６は、統計情報を、一定時間毎に収集する。
【００７８】
例えば、時刻ｔにおける自ノード３０のパーティションｐへのアクセス頻度を、ｒｔｐとする。時刻ｔにおける自ノード３０のパーティションｐのデータサイズを、ｍｔｐとする。時刻ｔにおいてパーティションの単位データサイズをノード３０同士の間で移動するのに必要な時間を、ｃｔとする。収集部３６は、例えば、時刻ｔにおける統計情報を、ベクトルｖｔ＝（ｒｔ１,ｒｔ２,...,ｒｔｐ,ｍｔ１,ｍｔ２,...,ｍｔｐ,ｃｔ）として収集する。
【００７９】
収集部３６は、自ノード３０において、単位時間あたりに、遅延せずに処理できたクライアントからの要求の数を、キャパシティとする。収集部３６は、クライアントからの要求を、予め設定された時間内に処理できたとき、遅延せずに処理できたと判断する。収集部３６は、キャパシティの統計情報から、自ノード３０におけるパーティションの数とキャパシティとの関係を表すキャパシティ関数を推定する。
【００８０】
図１３は、キャパシティの観測結果の一例を表す図である。
図１３において、横軸は、１つのノード３０に記憶されたパーティションの数を表す。縦軸は、１つのノード３０のキャパシティである。収集部３６は、図１２に表したように、一定時間毎に、自ノード３０におけるパーティションの数とキャパシティの観測値を収集する。典型的には、１つのノード３０に記憶されたパーティションの数が増えるほど、そのノード３０のキャパシティも向上する。これは、１つのノード３０のパーティションの数が増えるほど、複数のパーティションのデータを結合させる際、複数のノード３０同士の間のデータの移動量を減らせるためである。
【００８１】
収集部３６は、観測値に基づき、自ノード３０におけるパーティションの数とキャパシティとの関係を表すキャパシティ関数ｆ（Ｐ）を推定する。収集部３６は、例えば、パーティションの数とキャパシティの観測値をカーネル法を用いて回帰分析し、キャパシティ関数ｆ（Ｐ）を推定する。
【００８２】
複数のノード３０の少なくとも１つは、ユーザ要求を受け付ける機能を備える。この機能を備えたノード３０は、外部のクライアントから送信されたユーザ要求を受け付けると、そのノード３０の収集部３６が統計情報に加えてユーザ要求も収集する。
【００８３】
ユーザ要求は、複数のパーティションの配置を実行するための許容時間を含む。許容時間は、例えば、ユーザにより予め指定された終了時刻を含む。例えば、計算部２３は、指定された終了時刻までに実行可能な配置を計算する。許容時間は、開始時刻及び終了時刻を含んでいても良い。計算部２３は、開始時刻から終了時刻までに実行可能な配置を計算する。
【００８４】
ユーザ要求は、実行タイミング及びレプリカ数（冗長度）をさらに含む。実行タイミングは、複数のパーティションの配置の計算を開始する条件を含む。実行タイミングとして、例えば、ノードが追加もしくは削除されたとき、又は処理負荷が低いときが設定される。実行タイミングとして、許容時間に含まれる開始時刻が用いられても良い。
【００８５】
例えば、収集部３６は、データベースシステム１０の起動時や所定のタイミングで、ユーザ要求に含まれる実行タイミングのみを計算部２３へ送信する。計算部２３は、実行タイミングの条件が満たされると、データ配置の探索の開始を決定する。
【００８６】
摂動情報の選定について説明する。
収集部３６は、統計情報から摂動情報を生成する。摂動情報は、統計情報に含まれる統計的ばらつきに対応する。例えば、収集部３６は、図１３に表したように、キャパシティ関数ｆ（Ｐ）を推定する際、分散σを算出する。この分散σの整数倍（例えば３倍）を摂動情報とする。同様に、収集部３６は、各パーティションへのアクセス頻度のばらつき、各パーティションのデータサイズのばらつき、単位データサイズあたりの移動時間のばらつきに対応する摂動情報をそれぞれ生成する。
【００８７】
収集部３６は、統計情報を収集する度に、その統計情報を用いて摂動情報を生成する。例えば、収集部３６は、予め設定された数（閾値）の複数の摂動情報を保持する。生成された複数の摂動情報の数が閾値よりも多いとき、収集部３６は、複数の摂動情報の一部を間引く（消去する）。
【００８８】
間引きの条件としては、時刻、ばらつきの大きさなどが用いられる。例えば、収集部３６は、時刻が古い摂動情報から順に間引く。収集部３６は、各摂動情報の大きさを計算し、相対的に小さい摂動情報を間引いても良い。この結果、より新しく且つより条件が悪い摂動情報が選定され、保持される。
【００８９】
ノード管理部３４は、統計情報、摂動情報、及びユーザ要求を、クラスタ管理部２４へ送信する。クラスタ管理部２４は、複数のノード３０から送信された、統計情報、摂動情報、及びユーザ要求を受信する。計算部２３は、探索の開始が決定されると、統計情報、摂動情報、及びユーザ要求に基づき、複数のノード３０における複数のパーティションの配置を計算する。
【００９０】
計算部２３は、統計情報と摂動情報を用いて、変動情報を生成する。例えば、収集部３６は、ある種類の統計情報に、その種類の摂動情報を加算又は減算して、変動情報を生成する。変動情報は、実際に観測された統計情報よりも条件が悪くなるように、生成される。
【００９１】
計算部２３は、統計情報及び変動情報のそれぞれに基づいて、複数のパーティションの配置を計算する。変動情報は、変動情報に基づく複数のパーティションの配置の評価値が統計情報に基づく複数のパーティションの配置の評価値よりも悪くなるように、生成される。
【００９２】
例えば、計算部２３は、図１３に表したように、統計情報としてのキャパシティ関数ｆ（Ｐ）から、摂動情報としての３σを減じた値を、変動情報とする。すなわち、変動情報では、統計情報に比べて、各パーティション数におけるキャパシティがより低くなる。
【００９３】
同様に、計算部２３は、各パーティションへのアクセス頻度に関する統計情報に、アクセス頻度のばらつきに対応する摂動情報を加えることで、アクセス頻度に関する変動情報を生成する。計算部２３は、各パーティションのサイズに関する統計情報に、サイズのばらつきに対応する摂動情報を加えることで、サイズに関する変動情報を生成する。計算部２３は、単位データサイズあたりの移動時間の統計情報に、移動時間のばらつきに対応する摂動情報を加えることで、移動時間に関する変動情報を生成する。
【００９４】
計算部２３は、統計情報及び変動情報に基づいて、データベースシステム１０をより頑強にできる配置を計算する。具体的には、計算部２３は、複数のパーティションの配置を、混合整数線形計画問題（ＭＩＬＰ）として定式化する。計算部２３は、統計情報及び変動情報をそれぞれ用いて、ＭＩＬＰを複数回解き、より頑強な複数のパーティションの配置を探索する。
【００９５】
計算部２３は、ソルバを用いて定式化したＭＩＬＰを解く。ソルバとしては、例えば、ＣＰＬＥＸ（登録商標）、Ｇｕｒｏｂｉ（登録商標）などを用いることができる。
【００９６】
図１４は、定式化された混合整数線形計画問題の一例を表す図である。
ＭＩＬＰは、例えば図１４で表すように定式化される。この式を解くことにより、より頑強な複数のパーティションの配置を探索する。図１４において、ｆは、各ノードのキャパシティを表す。Ｐは、複数のパーティションの集合を表す。ｐは、複数のパーティションの１つを表す。Ｓは、複数のノードの集合を表す。ｓは、複数のノードの１つを表す。ｔは、タイムステップを表す。Ｔは、パーティションの移動のために許容された時間を表す。Ｍｓは、各ノードで使用可能な最大のメモリサイズを表す。ｍｔｐは、パーティションｐのメモリサイズを表す。ｃｔは、各パーティションの単位サイズあたりの移動時間を表す。ｋは、レプリカ数を表す。ｏｍｃｏｓｔは、複数のノード同士の間の最大移動コストを表す。ｏｍａｒｇｉｎは、複数のノードにおけるキャパシティの最小マージンを表す。Ａｔｐ,ｓは、ノードｓにおけるパーティションｐの移動を表す変数である。複数のパーティションの配置変更の前後において、パーティションｐを記憶するノードｓが変化するとき、Ａｔｐ,ｓは、「１」となる。パーティションｐを記憶するノードｓが変化しないとき、Ａｔｐ,ｓは、「０」となる。αは、ユーザにより予め設定される値である。
【００９７】
ここでは、分散トランザクションは、各パーティションで均等に生じるとする。各ノード３０において、結合されるデータ量の割合は、等しいとする。各ノード３０の性能は、等しいとする。また、各パーティションのサイズは、等しいとする。
【００９８】
図１４に表した式では、最大移動コスト及び最小マージンを用いて表される目的関数の値（評価値）が最小となるような、複数のパーティションの配置が探索される。また、以下の制約が、制約式として設定される。複数のパーティションの配置変更中に、何れのノード３０においても障害が発生しない。すなわち、最小マージンが０を下回らない。最大移動コストが、許容時間を超えない。複数のパーティションの配置変更中でも、ユーザ要求のレプリカ数が作成される。
【００９９】
例えば、計算部２３は、以下の第１処理及び第２処理を実行し、複数のパーティションの配置を複数回計算する。
第１処理において、計算部２３は、統計情報を基に、定式化したＭＩＬＰにパラメータを当てはめる。計算部２３は、パラメータを当てはめた式を、ソルバを用いて解く。これにより、統計情報に基づく複数のパーティションの配置（初期配置）が算出される。計算部２３は、初期配置を、暫定的に、採用された配置（採用配置）とする。
【０１００】
計算部２３は、統計情報と摂動情報を用いて、複数の変動情報を生成する。変動情報の生成後、計算部２３は、複数の変動情報をそれぞれ定式化したＭＩＬＰに当てはめ、目的関数の評価値が低い変動情報を抽出する。すなわち、ノード３０のキャパシティが平均値よりも大きく劣っている、各パーティションへのアクセス頻度が平均値よりも大きく増加している、などの、より条件が悪い変動情報を抽出し、変動情報の候補群Ｐを生成する。
【０１０１】
計算部２３は、候補群Ｐから、一部の変動情報を無作為に抽出する。計算部２３は、抽出された変動情報に含まれるデータにそれぞれ重み付けする。計算部２３は、重み付けした変動情報を基に、定式化したＭＩＬＰにパラメータを当てはめ、ソルバを用いて解く。これにより、複数の変動情報の一部に基づく複数のパーティションの配置候補が算出される。
【０１０２】
計算部２３は、複数のパーティションを初期配置としたときの目的関数の評価値と、複数のパーティションを前記配置候補としたときの目的関数の評価値と、を比較する。計算部２３は、初期配置の評価値が前記配置候補の評価値よりも良いときには、前記配置候補を破棄し、採用配置を変更しない。計算部２３は、前記配置候補の評価値が初期配置の評価値よりも良いときには、初期配置に代えて、前記配置候補を採用配置とする。
【０１０３】
以上の第１処理の後、計算部２３は、以下の第２処理を実行する。一部の変動情報を無作為に抽出する。第１処理と同様に、計算部２３は、抽出された変動情報に含まれるデータにそれぞれ重み付けし、定式化したＭＩＬＰにパラメータを当てはめる。計算部２３は、ソルバを用いて式を解き、複数の変動情報の別の一部に基づく複数のパーティションの別の配置候補を算出する。
【０１０４】
計算部２３は、複数のパーティションを前記配置候補としたときの目的関数の評価値と、複数のパーティションを別の配置候補としたときの目的関数の評価値と、を比較する。計算部２３は、前記配置候補の評価値が前記別の配置候補の評価値よりも良いときには、前記別の配置候補を破棄し、採用配置を変更しない。計算部２３は、前記別の配置候補の評価値が前記配置候補の評価値よりも良いときには、前記配置候補に代えて、前記別の配置候補を採用配置とする。
【０１０５】
計算部２３は、この第２処理を繰り替えす。繰り返しの回数は、例えば、予めユーザにより設定される。計算部２３は、第２処理を繰り返した後に、採用配置として保持されている配置候補を、計算結果として出力する。
【０１０６】
クラスタ管理部２４は、計算結果を各ノード３０のノード管理部３４へ送信する。各ノード３０の転送部３５は、計算結果に応じて複数のパーティションを、複数のノード３０同士の間で移動させる。これにより、計算部２３により算出された複数のパーティションの配置が実現される。
【０１０７】
計算部２３による計算において、制約が厳しいときには、複数のパーティションの配置が算出できないことがある。例えば、許容時間が短すぎるとき、統計的ばらつきに対してマージンが小さすぎるとき、などは、複数のパーティションの配置が算出できない。例えば、第２処理の繰り返しにおいて一度でも複数のパーティションの配置が算出できないと、計算部２３は、“解無し”を、計算の結果として出力する。計算部２３により“解無し”と出力されると、例えば、“解無し”であることを示す情報とともに、新たなノード３０の追加要求を示す情報が、何れかのノード３０からクライアントへ送信される。計算の結果として“解無し”が出力されると、複数のパーティションの配置は変更されない。
【０１０８】
例えば、追加要求に応じてユーザが新たなノード３０をデータベースシステム１０に追加すると、計算部２３は、複数のパーティションの配置を再度計算する。計算から複数のパーティションの配置が得られると、その配置に応じて複数のパーティションが移動される。計算の結果として“解無し”が出力されると、新たなノード３０の追加要求を示す情報がクライアントへ送信される。
【０１０９】
図１５は、実施形態に係るデータベースシステムにおける処理の一部を表すフローチャートである。
図１５は、収集部３６における処理を表すフローチャートである。収集部３６は、クライアントから送信されたユーザ要求を収集する（ステップＳ１）。収集部３６は、自ノード３０と、自ノード３０における複数のパーティションと、に関する統計情報を収集する（ステップＳ２）。収集部３６は、キャパシティに関する統計情報を基に、キャパシティ関数を推定する（ステップＳ３）。収集部３６は、推定したキャパシティ関数を統計情報に加える。収集部３６は、統計情報から摂動情報を生成する。収集部３６は、複数の摂動情報の一部を選定する（ステップＳ４）。
【０１１０】
なお、ステップＳ１は、複数のノード３０の少なくとも１つの収集部３６により実行されれば良い。ステップＳ２〜Ｓ４は、各ノード３０の収集部３６により実行される。収集されたユーザ要求、統計情報、及び摂動情報は、管理装置２０へ送信される。
【０１１１】
図１６は、実施形態に係る計算装置における処理の一部を表すフローチャートである。
計算部２３は、収集部３６から送信されたユーザ要求、統計情報、及び摂動情報を受け付ける（ステップＳ１１）。複数のパーティション配置の探索の開始が決定されると、計算部２３は、探索を実行する（ステップＳ１２）。計算部２３は、解が見つかったか判断する（ステップＳ１３）。解は、データベースシステム１０の性能を向上できる、複数のパーティションの配置である。解が見つからなかったとき、計算部２３は、ユーザにノード３０の追加を要求する（ステップＳ１４）。解が見つかったとき、計算部２３は、解を出力する（ステップＳ１５）。各ノード３０は、解を受信すると、この解に応じて複数のパーティションを移動させる。
【０１１２】
実施形態の効果を説明する。
例えば、データベースシステムの性能を向上させるために、複数のパーティションの配置を、過去に観測されたデータを含む統計情報のみを用いて計算する方法も考えられる。この方法では、過去に観測された平均的なデータに基づいて配置が計算される。このため、例えば、その配置を実行した後に、アクセス要求やデータ移動時間などの処理負荷が統計情報に比べて大きく増加すると、データベースシステムの性能が大きく低下、又は何れかのノード３０で障害が発生する可能性がある。処理負荷等のばらつきが大きいデータベースシステムでは、配置の実行後に大きな処理負荷のばらつきが発生しても、データベースシステムの性能の低下やノード３０の障害の発生を抑制できるように、配置を計算することが望ましい。
【０１１３】
実施形態に係る計算装置は、統計情報を受け付けると、変動情報を生成する。変動情報は、統計情報と、統計情報に含まれる統計的ばらつきに対応する摂動情報と、を用いて生成される。配置の計算に変動情報を用いることで、処理負荷等のばらつきを考慮することができる。例えば、統計情報に比べて、変動情報では、各ノード３０のキャパシティが低く、各パーティションへのアクセス頻度が多く、各パーティションのデータサイズが大きく、又はノード３０間のデータ移動時間が長い。
【０１１４】
変動情報を用いた複数のパーティションの配置は、統計情報のみを用いた複数のパーティションの配置に比べて、データベースシステム１０の性能は低い可能性がある。しかし、変動情報を用いて計算することで、処理負荷等のばらつきが大きく生じたときでも、データベースシステムの性能の低下、ノード３０の障害の発生などを抑制できる配置を得ることができる。すなわち、処理負荷等のばらつきに対して、より頑強（ロバスト）な、複数のパーティションの配置を得ることができる。
【０１１５】
特に、工業的な分野では、ＩｏＴの普及により、センサデータやログなどを記録したデータベースが構築されている。また、工業的な分野では、センサデータやログなどが時間の経過とともに蓄積され、データサイズが増大していくため、スケールアウトが容易であり、且つデータの一貫性を保持できるシェアードナッシング型のデータベースが好適に用いられる。
このような工業的な分野におけるデータベースでは、タイムスタンプの近い時系列データを結合することが頻繁にあり、なるべく同一のノード３０上に複数のパーティションをまとめて配置することが有効である。一方で、新しいタイムスタンプのデータを含むパーティションへは、古いタイムスタンプのデータを含むパーティションに比べて、アクセス頻度が高い。このため、タイムスタンプの時刻が近いデータは、複数のノード３０に分散させることが有効である。１つのノード３０へのアクセスが集中すると、データベースシステム１０の性能が低下するためである。
また、工業的なデータベースでは、生産設備の稼働時には、処理負荷が大きくなるが、生産設備の非稼働時には、処理負荷が小さくなる。すなわち、処理負荷のばらつきが大きい。
これらの事情に鑑み、工業的な分野におけるデータベースでは、処理負荷等が大きなばらつきに対しても、データベースシステム１０の性能の低下を抑制できるよう、複数のパーティションが配置されることが望ましい。
【０１１６】
実施形態に係る計算装置によれば、変動情報を用いて複数のパーティションの配置を計算できる。このため、処理負荷等のばらつきが大きいデータベースシステムに対しても、処理負荷等のばらつきによるデータベースシステム１０の性能の低下を抑制しつつ、データベースシステム１０の性能を向上できる複数のパーティションの配置を得ることができる。
【０１１７】
また、上述したように、工業的なデータベースでは、生産設備の非稼働時には、処理負荷が小さくなる。複数のパーティションの配置は、処理負荷が小さい時間帯に実行されることが望ましい。そこで、実施形態に係る計算装置は、複数のパーティションの配置を実行するための許容時間を受け付ける。計算装置は、許容時間を受け付けると、その許容時間内に実行可能な配置を計算する。これにより、処理負荷が小さい時間帯に確実に複数のパーティションの配置を実行することが可能となる。例えば、複数のパーティションの配置の実行中に大きな処理負荷が発生し、何れかのノード３０で障害が発生する可能性を低減できる。
【０１１８】
以上で説明した実施形態に係る計算装置、この計算装置を備えたデータベースシステム１０、及び計算方法によれば、データベースシステム１０の性能を向上でき、且つより頑強な複数のパーティションの配置を計算できる。コンピュータを実施形態に係る計算装置として動作させるためのプログラムを用いることで、データベースシステム１０の性能を向上でき、且つより頑強な複数のパーティションの配置をコンピュータに計算させることができる。
【０１１９】
実施形態に係る計算装置は、上述した計算に加えて、以下の計算を実行しても良い。ここでは、上述した例と同様に、管理装置２０が計算装置（第２計算装置）としての機能を備える場合について説明する。
【０１２０】
上述した計算によって複数のパーティションの配置が得られると、計算部２３は、ある時刻（例えば現在）の配置から計算された配置への複数のパーティションの移動順序を計算する。具体的には、計算部２３は、複数のパーティションの移動順序を解くための問題を、整数線形計画問題（ＩＬＰ）として定式化する。計算部２３は、ソルバを用いて定式化したＩＬＰを解く。ソルバとしては、例えば、ＣＰＬＥＸ（登録商標）、Ｇｕｒｏｂｉ（登録商標）などを用いることができる。
【０１２１】
図１７は、定式化された整数線形計画問題の一例を表す図である。
ここで、Ｚ＋を、負ではない整数（０を含む）の集合とする。Ｂ＝｛０，１｝とする。Ｔ＝｛１，２．．．．｜Ｔ｜｝をスケジューリング期間とする。スケジューリング期間は、複数のパーティションの移動を実行可能な期間である。例えば、スケジューリング期間の開始時刻と終了時刻がクライアントから指定される。Ｔ２＝｛０，１，２．．．．｜Ｔ｜｝とする。Ｔ３＝｛１，２．．．．｜Ｔ｜−ｔｒｍａｘ｝とする。Ｎ＝｛１，２．．．．｜Ｎ｜｝をノードの集合とする。Ｃｎ∈Ｚ＋を、ノードｎ∈Ｎのストレージ容量とする。ｕｎ０∈Ｚ＋をノードｎの使用量の初期値とする。すなわち、Ｕｎ０は、元の配置におけるノードｎの使用量を示す。Ｒ＝｛１，２．．．．，Ｒ｝を移動要求の集合とする。移動要求は、４つの項の組ｒ＝（ｓｒ，ｄｒ，ｔｒ，ｍｒ）で表される。ｓｒ∈Ｎは、移動元のノードを表す。ｄｒ∈Ｎは、移動先のノードを表す。ｔｒ∈Ｚ＋は、移動時間を表す。ｍｒ∈Ｚ＋は、データのサイズを表す。ここでは、ｍｒ／ｔｒは、整数となると仮定する。ｔｒｍａｘ＝ｍａｘｒ∈Ｒｔｒである。ネットワークの帯域をＷ０∈Ｚ＋とする。ノードｎのＩＯ帯域をＷｎ∈Ｚ＋とする。例えば、ＩＬＰの変数は、クライアントから予め指定された情報、データストア部３１に記憶された情報、収集部３６によって収集された情報などに基づいて決定される。
【０１２２】
ｘｒｔ∈Ｂは、時刻ｔ∈Ｔ２に移動要求ｒ∈Ｒの移動を開始するときに１であり、それ以外では、０である。ｔ＝０において、ｘｒｔ＝０である。ここでは、ノード使用量の計算に必要なため、ｔの範囲をＴからＴ２に拡張している。時刻ｔ∈Ｔにおけるノードｎ∈Ｎの使用量を、ｕｎｔ∈Ｚ＋とする。時刻ｔにノードｎにおいて移動処理が完了している場合は、ｕｎｔは、その処理後の使用量を表す。全ての移動要求処理後に実行されるダミー要求を用意し、ダミー要求の開始時刻をｔδ∈Ｔとする。ダミー要求は、全ての移動要求が処理されたことを表すために用意される。ｙｒｔ∈Ｂは、時刻ｔ∈Ｔに移動要求ｒ∈Ｒの移動を実行中ならば１であり、それ以外では０である。
【０１２３】
図１７において、式（１）は、目的関数である。式（１）は、ダミー要求の開始時刻ｔδを最も小さく（最も早く）することを表す。ダミー要求の開始時刻ｔδは、換言すると、全ての移動要求の処理が完了する時刻である。式（２）により、ｙｒｔに値が設定される。式（３）及び式（４）によって、ｘｒｔへの制約が与えられる。式（３）は、移動要求ｒの開始時刻を一意に決定するための制約である。式（４）は、時刻０では移動要求ｒを開始させないための制約である。式（５）及び式（６）により、ｕｎｔへの制約が与えられる。式（５）は、ｕｎｔを初期化している。式（６）は、ｕｎｔを、ｕｎｔ−１と時刻ｔにおける処理量（データの移動量）から算出している。ここでは、足されるデータについては、毎時ｍｒ／ｔｒ増加し、取り出されるデータについては、移動終了後にｍｒ全てが消されるとしている。式（７）は、ストレージの使用率の制約である。式（８）は、全ノードの書き込み量の和がネットワークの帯域を超えないことを表す。式（９）は、１つのノードにおける書き込み量の和がＩＯの帯域を超えないことを表す。式（１０）により、時刻ｔδを計算している。
【０１２４】
定式化されたＩＬＰを解くことにより、どのパーティションを、どのノードへ、いつ移動させるかが導出される。計算部２３は、ＩＬＰが解けなかった場合は、“解無し”を、計算の結果として出力する。例えば、“解無し”が出力される場合、計算部２３は、ノードの追加、スケジューリング期間の延長などをクライアントに要求しても良い。ただし、複数のパーティションの移動後の配置は、上述した通り、予め設定された許容時間内に完了できるように計算される。従って、複数のパーティションの配置の探索時に設定したパーティションの移動時間が、移動順序の探索時の移動時間と大きく乖離していない限り、ＩＬＰを解くことができる。
【０１２５】
図１８は、実施形態に係る計算装置による出力例である。
計算部２３は、例えば図１８に表したように、移動順序として、パーティションを特定する情報（番号）と、移動元のノードを特定する情報、移動先のノードを特定する情報、移動の開始時刻、及び移動の終了時刻を出力する。図１８の例では、計算部２３は、パーティションの役割及びシステムポートを特定する情報をさらに出力している。これらの移動順序を示す情報は、ユーザが確認できるようにクライアントへ送信されても良い。
【０１２６】
計算部２３は、計算結果を各ノード３０のノード管理部３４に送信する。各ノード管理部３４が計算結果を受信すると、各転送部３５は、計算された移動順序に従ってパーティションのデータ集合を、他のノード３０に送信する。例えば、計算部２３により計算された移動順序に従って、上述した長期同期処理が実行される。
【０１２７】
図１９は、実施形態に係る計算装置における処理の一部を表すフローチャートである。
図１９に表した例では、計算部２３は、図１６に表したフローチャートと同様に、ステップＳ１１〜Ｓ１４を実行する。ステップＳ１３で解が見つかると、見つかった解へ複数のパーティションを移動させる手順を計算する（ステップＳ１６）。計算部２３は、計算によって得られた移動手順を出力する（ステップＳ１７）。
【０１２８】
実施形態に係る計算装置によれば、複数のパーティションを移動させるときに、より適切な移動順序を計算できる。例えば、実施形態に係る計算装置を用いることで、複数のパーティションの移動をより早く完了させることができる。また、上述した複数のパーティションの配置の探索と組み合わせることで、複数のパーティションを、発見されたより頑強な配置へ、より短時間で移動させることができる。
【０１２９】
ここでは、１つの計算部２３が、複数のパーティションの配置の探索と移動順序を計算する例について説明した。複数のパーティションの配置の探索と、複数のパーティションの移動順序と、は異なる計算装置によってそれぞれ計算されても良い。例えば、複数の計算装置を含む計算システムにおいて、１つの計算装置が、複数のパーティションの配置の探索を計算する。１つの計算装置は、発見した配置を、別の計算装置へ送信する。別の計算装置は、複数のパーティションを、発見された配置へ移動させるための順序を計算する。これらの計算装置は、例えばネットワークを介して互いに接続される。
【０１３０】
また、ここでは、探索によって発見された配置へ複数のパーティションを移動させる例について説明した。実施形態に係る計算装置は、異なる方法によって決定された配置へ複数のパーティションを移動させる際にも用いることができる。例えば、別の計算装置が別の方法で複数のパーティションの配置を決定したときに、実施形態に係る計算装置は、その配置へ複数のパーティションを移動させるための順序を計算できる。この場合も、実施形態に係る計算装置は、定式化されたＩＬＰを解くことで、複数のパーティションの移動順序を得ることができる。
【０１３１】
上記の種々のデータの処理は、例えば、プログラム（ソフトウェア）に基づいて実行される。例えば、コンピュータが、このプログラムを記憶し、このプログラムを読み出すことにより、上記の種々の情報の処理が行われる。
【０１３２】
上記の種々の情報の処理は、コンピュータに実行させることのできるプログラムとして、磁気ディスク（フレキシブルディスク及びハードディスクなど）、光ディスク（ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ±Ｒ、ＤＶＤ±ＲＷなど）、半導体メモリ、又は、他の記録媒体に記録されても良い。
【０１３３】
例えば、記録媒体に記録された情報は、コンピュータ（又は組み込みシステム）により読み出されることが可能である。記録媒体において、記録形式（記憶形式）は任意である。例えば、コンピュータは、記録媒体からプログラムを読み出し、このプログラムに基づいてプログラムに記述されている指示をＣＰＵで実行させる。コンピュータにおいて、プログラムの取得（又は読み出し）は、ネットワークを通じて行われても良い。
【０１３４】
以上、本発明のいくつかの実施形態を例示したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更などを行うことができる。これら実施形態やその変形例は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。また、前述の各実施形態は、相互に組み合わせて実施することができる。
【符号の説明】
【０１３５】
１０ データベースシステム、  ２０ 管理装置、  ２１ 表記憶部、  ２２ 割当部、  ２３ 計算部、  ２４ クラスタ管理部、  ３０ ノード、  ３１ データストア部、  ３２ 表記憶部、  ３３ アクセス処理部、  ３４ ノード管理部、  ３５ 転送部、  ３６ 収集部
【図１】
2020113254.tif 000003
【図２】
2020113254.tif 000004
【図３】
2020113254.tif 000005
【図４】
2020113254.tif 000006
【図５】
2020113254.tif 000007
【図６】
2020113254.tif 000008
【図７】
2020113254.tif 000009
【図８】
2020113254.tif 000010
【図９】
2020113254.tif 000011
【図１０】
2020113254.tif 000012
【図１１】
2020113254.tif 000013
【図１２】
2020113254.tif 000014
【図１３】
2020113254.tif 000015
【図１４】
2020113254.tif 000016
【図１５】
2020113254.tif 000017
【図１６】
2020113254.tif 000018
【図１７】
2020113254.tif 000019
【図１８】
2020113254.tif 000020
【図１９】
2020113254.tif 000021