【国等の委託研究の成果に係る記載事項】(出願人による申告)国等の委託研究の成果に係る特許出願(独立行政法人新エネルギー・産業技術総合開発機構「グリーンネットワーク・システム技術研究開発プロジェクト(グリーンITプロジェクト)/エネルギー利用最適化データセンタ基盤技術の研究開発/サーバの最適構成とクラウド・コンピューティング環境における進化するアーキテクチャーの開発/クラウド・コンピューティング技術」委託研究、産業技術力強化法第19条の適用を受ける特許出願)
(58)【調査した分野】(Int.Cl.,DB名)
予め定められたテーブル単位でデータ配置先のデータノード、配置先のデータノードにおける目的のデータ構造を制御する手段を備えた請求項1又は2記載の分散ストレージシステム。
前記アクセス履歴記録部に記録されたアクセス情報、又は、前記アクセス情報を加工して得た別のアクセス情報を用いて、前記構造情報保持部の前記データ構造管理情報の更新契機情報を変更するか否か判定し、
前記データ構造管理情報の更新契機情報を変更する場合、前記構造情報管理装置に通知する変更判定部を備え、
前記構造情報管理装置は、前記変更判定部からの前記更新契機情報の変更の通知を受け、前記データ構造管理情報の更新契機情報を変更する構造情報変更部を備えた、請求項4記載の分散ストレージシステム。
前記アクセス履歴記録部に記録されたアクセス情報が、前記データ格納部からの読み出しアクセスと、前記中間構造へのデータの書き込みアクセスの頻度情報を含む、請求項2又は5記載の分散ストレージシステム。
前記アクセスの履歴情報が、前記データ格納部からの読み出しアクセスと、前記中間構造へのデータの書き込みアクセスの頻度情報を含む、請求項9記載のデータ複製方法。
【発明を実施するための形態】
【0022】
発明を実施するための好ましいいくつかの形態について説明する。いくつかの好ましい形態において、それぞれがデータ格納部を備え、ネットワーク結合される複数のデータノードを備え、例えばデータ更新時のデータの複製にあたり、複製先のデータノードでは、更新対象のデータを、一旦、書き込みデータ保持用の中間構造(Queue(待ち行列)、FIFO(First In First Out)、Log(ログ)等)に格納し、更新要求とは非同期で、それぞれ目的のデータ構造に変換して前記データ格納部(12)に格納する。さらに、前記データノードは、前記データノードへのアクセス頻度の履歴を記憶するアクセス履歴記録部(71)を備えている。前記データノードにおいて、前記データノードで非同期に行われる前記目的のデータ構造への変換の実行の契機となる契機情報を、前記アクセス履歴記録部(71)に記憶されたアクセス履歴情報(アクセス頻度)に基づき、可変に設定する。
【0023】
いくつかの好ましい形態において、複製先の前記データノードは、それぞれ、前記中間構造に、前記データを保持して、応答を返し、前記中間構造に保持されるデータ構造を、前記更新対象のデータの受信から前記契機情報で規定される時間経過時に、目的のデータ構造に非同期で変換した上で前記データ格納部に格納する構成としてもよい。
【0024】
いくつかの好ましい形態において、予め定められたテーブル単位で、データ配置先のデータノード、配置先のデータノードにおける目的のデータ構造を制御するようにしてもよい。
【0025】
いくつかの好ましい形態において、格納対象のデータを識別する識別子であるテーブル識別子に対応させて、複製を特定するレプリカ識別子と、前記レプリカ識別子に対応したデータ構造の種類を特定するデータ構造情報と、指定されたデータ構造に変換して格納されるまでのタイマ情報である契機情報と、を、前記データ構造の種類の数に対応させて備えたデータ構造管理情報(
図2の921:
図3)と、
前記テーブル識別子に対応して、前記レプリカ識別子と、前記レプリカ識別子に対応した1つ又は複数のデータ配置先のデータノード情報とを備えたデータ配置特定情報(
図2の922:
図5)と、を記憶管理する構造情報保持部(92)を有する構造情報管理装置(9)と、前記データ構造管理情報と前記データ配置特定情報とを参照して、更新処理及び参照処理のアクセス先を特定するデータアクセス部を備えたクライアント機能実現部(61)と、それぞれが前記データ格納部(12)を備え、前記構造情報管理装置(9)と前記クライアント機能実現部(61)とに接続される複数の前記データノード(1〜4)と、を備えている。前記データノードは、前記クライアント機能実現部(61)からのアクセス要求に基づき、更新処理を行う場合に、一旦中間構造にデータを保持した上で前記クライアント機能実現部(61)に応答を返すアクセス受付・処理部(111、112)と、前記データ構造管理情報を参照し、指定された更新契機に応答して、前記中間構造に保持されるデータを、前記データ構造管理情報で指定されたデータ構造に変換する処理を行うデータ構造変換部(113)とを備えたデータ管理・処理部(11)構成としてもよい。
【0026】
いくつかの好ましい形態において、前記アクセス履歴記録部(71)に記録されたアクセス情報、又は、前記アクセス情報を加工して得た別のアクセス情報を用いて、前記構造情報保持部の前記データ構造管理情報(921)の更新契機情報を変更するか否か判定し、前記データ構造管理情報(921)の更新契機情報を変更する場合、前記構造情報管理装置に通知する変更判定部(72)を備え、前記構造情報管理装置(9)は、変更判定部(72)からの前記更新契機情報の変更の通知を受け、前記データ構造管理情報の更新契機情報を変更する構造情報変更部(91)を備える。好ましい形態において、前記アクセス履歴記録部(71)に、アクセス情報としてアクセス頻度を記録するようにしてもよい。
【0027】
いくつかの好ましい形態において、前記アクセス履歴記録部(71)に記録されたアクセス情報が、前記データ格納部からの読み出しアクセスと、前記中間構造へのデータの書き込みアクセスの頻度情報を含む(あるいは、アクセスの発生パタン、アクセス発生の傾向を示す情報等であってもよい)。
【0028】
いくつかの好ましい形態において、前記データノードは、アクセス受付部(111)、アクセス処理部(112)、及び、データ構造変換部(113)を備えている。前記データノードの前記データ格納部(12)は、構造別データ格納部(121〜123)を備え、前記アクセス受付部(111)は、前記クライアント機能実現部からの更新要求を受け付け、前記データ配置特定情報においてレプリカ識別子に対応して指定されているデータノードに対して更新要求を転送し、さらにアクセス履歴記録部にアクセス要求をログし、前記データノードの前記アクセス処理部(112)は、受け取った更新要求の処理を行い、前記データ構造管理情報の情報を参照して更新処理を実行する。その際、前記データ構造管理情報の情報から、前記データノードに対する前記更新契機情報が零の場合、更新データを、前記データ構造管理情報に指定されるデータ構造に変換して、前記構造別データ格納部に格納し、前記更新契機が零でない場合、前記中間構造に、一旦、更新データを書き込み、処理完了を応答し、
前記アクセス受付部(111)は、
前記アクセス処理部からの完了通知(
図14)、又は、
前記アクセス処理部からの完了通知、及びレプリカ先の各データノードからの完了通知(
図13)、
を受けると、前記クライアント機能実現部(9)に対して応答し、
前記データ構造変換部(113)は、前記中間構造に保持されたデータを、前記データ構造管理情報に指定されているデータ構造に変換し変換先の前記構造別データ格納部(121〜123)に格納するようにしてもよい。
【0029】
以下例示的ないくつかの実施形態について説明する。
【0030】
<システム構成>
図1は、本発明の例示的な一実施形態のシステム構成の一例を示す図である。データノード1〜4、ネットワーク5、クライアントノード6、構造情報管理手段(構造情報管理装置)9を備える。
【0031】
データノード1〜4は、分散ストレージを構成するデータ格納ノードであり、1つ以上の任意の数によって構成される。ネットワーク5は、データノード1〜4を含むネットワークノード間の通信を実現する。クライアントノード6は、分散ストレージにアクセスする計算機ノードである。クライアントノード6は必ずしも独立して存在しなくてもよい。なお、データノード1〜4がクライアント計算機を兼ねる例は、
図2を参照して後述される。データノード1〜4は、それぞれ、データ管理・処理手段(データ管理・処理部)11、21、31、41、データ格納部12、22、32、42、アクセス履歴記録部71−1〜71−4を備える。
【0032】
データ管理・処理手段X1(X=1、2、3、4)は、分散ストレージに対するアクセス要求を受け付け、処理を実行する。データ格納部X2(X=1、2、3、4)はデータノードの担当するデータの保持、記録を行う。
【0033】
クライアントノード6は、クライアント機能実現手段(クライアント機能実現部)61を備える。クライアント機能実現手段61は、データノード1〜4によって構成される分散ストレージにアクセスする。クライアント機能実現手段61は、データアクセス手段(データアクセス部)611を備える。
【0034】
データアクセス手段(データアクセス部)611は、構造情報管理手段9から構造情報(データ構造管理情報とデータ配置特定情報)を取得し、その構造情報を用いて、アクセス先のデータノードを特定する。
【0035】
なお、各データノード1〜4やネットワーク5内の任意の装置(スイッチ、中間ノード)において、構造情報管理手段9の構造情報保持部92に格納される構造情報の一部又は全てを自装置内又は他の装置内のキャッシュ(不図示)に保持するようにしてもよい。
【0036】
構造情報保持部92に格納される構造情報に対するアクセスは、自装置内又は予め定められた所定の場所に配設されたキャッシュ(不図示)に対してアクセスするようにしてもよい。キャッシュ(不図示)に格納された構造情報の同期については、公知の分散システムの技術が適用できるため、ここでは詳細は省略する。よく知られているように、キャッシュを利用することでストレージ性能を高速化することが出来る。
【0037】
構造情報管理手段(構造情報管理装置)9は、構造情報を変更する構造情報変更手段91と、構造情報を保持する構造情報保持部92を備える。構造情報保持部92は、データ構造管理情報921(
図2参照)とデータ配置特定情報922を含む(
図4参照)。データ構造管理情報921は、後に
図3を参照して説明されるが、テーブル識別子に対して、複製を特定するレプリカ識別子と、前記レプリカ識別子に対応したデータ構造の種類を特定するデータ構造情報と、指定されたデータ構造として格納されるまでの時間情報である更新契機からなるエントリをデータの複製数分有する。データ配置特定情報922は、後に
図5を参照して説明されるが、テーブル識別子に対応して、前記レプリカ識別子と、前記レプリカ識別子に対応した1つ又は複数のデータ配置先のデータノード情報を有する。
【0038】
アクセス履歴記録部71−1〜4は、データノード1〜4のReadアクセス、Writeアクセスのログ情報を記録する。アクセスのログ情報として、所定期間内のアクセスの回数に対応する頻度情報を格納するようにしてもよい。
【0039】
なお、
図1では、クライアントノード6がデータノード1〜4とは独立に(別々に)設けられているが、クライアントノード6をデータノード1〜4と独立に(分離させて)設けることは必ずしも必要とされない。つまり、以下、変形例として説明するように、データノード1〜4のうち、任意の1つ以上のノードに、クライアント機能実現手段61を備えた構成としてもよい。
【0040】
<データノードの構成例>
図2は、
図1の構成例詳細に説明する図である。
図2には、
図1のデータノード1〜4を中心に示した構成が示されている。
図1のデータノード1〜4は基本的に同一構成とされるため、
図2では、データノード1のデータ管理・処理手段11、データ格納部12、アクセス履歴記録部71(
図1の71−1に対応)が示されている。なお、
図2等の図面において、簡単化のため、構造情報保持部92に格納される構造情報は参照符号92で参照される場合がある。
【0041】
データノード1のデータ管理・処理手段11は、アクセス受付手段(アクセス受付部)111、アクセス処理手段(アクセス処理部)112、データ構造変換手段(データ構造変換部)113を備えている。他のデータノード2〜4のデータ管理・処理手段21、31、41も同様の構成とされる。
【0042】
アクセス受付手段111は、データアクセス手段611からアクセス要求を受け付け、処理完了後にデータアクセス手段611に応答を返す。
【0043】
アクセス処理手段112は、構造情報保持部92の構造情報(あるいはその任意の場所に保持されるキャッシュ情報)を用い、アクセス処理を、該当するデータ格納部12X(X=1、2、3)に対して行う。
【0044】
アクセス受付手段111は、アクセス要求(アクセスコマンド)の情報を、例えば受付時間情報とともに、アクセス履歴記録部71に記録する。
【0045】
データ構造変換手段113は、一定契機毎に構造別データ格納部121のデータを用いて、構造別データ格納部12X(X=1、2、3)に変換する。
【0046】
データ格納部12は、複数種の構造別データ格納部を備えている。特に制限されないが、
図2では、構造別データ格納部121(データ構造A)、構造別データ格納部122(データ構造B)、構造別データ格納部123(データ構造C)を備える。どのようなデータ構造を選択するかは、構造別データ格納部12X(X=1、2、3)単位で任意である。
【0047】
構造別データ格納部121(例えばデータ構造A)は、データの書き込みを伴う処理(データの追加や更新)に対する応答性能に特化した構造をとる。具体的には、データ変更内容をキュー(例えばFIFO(First In First Out))として高速なメモリ(デュアルポートRAM(Random Access Memory)等)上に保持するソフトウェア、アクセス要求処理内容を任意の記憶媒体にログとして追記するソフトウェア等が実装される。データ構造B、データ構造Cは、データ構造Aとは異なるデータ構造であり、互いに異なるデータアクセス特性を持つ。なお、データ格納部12は、必ずしも単一の記憶媒体でなくてもよい。
図4のデータ格納部12を複数のデータ配置ノードからなる分散ストレージシステムとして実現し、各構造別データ格納部12Xを分散して格納する方式であってもよい。
【0048】
データ配置特定情報922は、分散ストレージに格納するデータ、あるいはデータ断片の格納先を特定するための情報(および情報を格納、取得する手段)である。データの分散配置方式は、前述した通り、例えばメタサーバ方式や分散KVS方式が利用される。
【0049】
メタサーバ方式の場合、データの位置情報を管理する情報(例えばブロックアドレスとその対応するデータノードアドレス)がデータ配置特定情報922である。メタサーバは、この情報(メタデータ)を参照することで、必要なデータの配置先を知ることが出来る。
【0050】
前述した分散KVS方式の場合、システムに参加するノードのリストが、このデータ配置特定情報に該当する。データを格納する識別子と、ノードリスト情報を用いることによって、データ格納先のデータノードを決定することが出来る。
【0051】
データアクセス手段611は、構造情報管理手段9におけるデータ配置特定情報922、あるいは、予め定められた所定の場所に記憶されるデータ配置特定情報922のキャッシュ情報を用いてアクセスすべきデータノード1〜4を特定し、データノードのアクセス受付手段111に対して、アクセス要求を発行する。
【0052】
<データ構造管理情報>
図2のデータ構造管理情報921は、データの集合毎にデータの格納方式を特定するためのパラメータ情報である。
図3は、
図2のデータ構造管理情報921の一例を示す図である。特に制限されるものではないが、
図3に示す例では、データの格納方式を制御する単位を、テーブルとする。そして、テーブル毎(テーブル識別子毎)に、レプリカ識別子、データ構造の種別、更新契機の各情報を、データ複製の複製数分、用意する。
【0053】
図3(A)では、各テーブルは、可用性確保(保持)のために、3つの複製を保持する(ただし、複製数は3に制限されるものでない)。レプリカ識別子は、それぞれの複製を特定する情報であり、
図3(A)では、0、1、2として付与されている。データ構造は、データの格納方式を示す情報である。
図3(A)では、3種類のデータ構造(A、B、C)をレプリカ識別子毎に異なる方式を指定している。
【0054】
図3(B)にデータ構造A、B、Cのデータ格納方式の例を示す(ただし、これらの格納方式に制限されるものでない)。
図3(B)の例では、データの格納方式の種類として、
A:キュー、
B:ロウストア、
C:カラムストア
が指定されている。
図3(B)の例では、テーブル識別子「Stocks」のレプリカ識別子0は、データ構造B(ロウストア)として格納される。
【0055】
データ構造は、それぞれデータを格納するための方式であり、
A:キュー(queue)は、リンクトリスト(Linked List)である。
【0056】
B:ロウストア(ROW STORE)は、テーブルのレコードを行(ROW)順に格納する。
【0057】
C:カラムストア(COLUMN STORE)は、列(COLUMN)順に格納する。
【0058】
<テーブル構成例>
図4は、テーブルのデータ保持構造の一例を模式的に示す図である。
図4の(A)のテーブルは、Keyカラムと、3つのValueカラムを備え、各ローは、Keyと3つのValueのセットからなる。
【0059】
カラムストア、ロウストアは、それぞれ、記憶媒体上の格納順序を行(ロウ)ベース、列(カラム)ベースに格納されている形式である。テーブル(
図4の(A)参照)の格納方式として、
レプリカ識別子0と1のデータとして、データ構造B(ロウストア)で保持し(
図4の(B)、(C)参照)、
レプリカ識別子2のデータとして、データ構造C(カラムストア)として保持する(
図4の(D)参照)。
【0060】
<更新契機情報>
再び
図3(A)を参照すると、データ構造管理情報921(
図2参照)における更新契機は、データを指定されたデータ構造として格納されるまでの時間契機である。Stocksのレプリカ識別子0の例では30secと指定されている。したがって、Stocksのレプリカ識別子0のデータ構造B(ロウストア)を格納するデータノードにおいて、ロウストア方式の構造別データ格納部122に対して、データの更新が反映されるのが30sec契機であることを示す。データ更新が反映されるまでの間は、キュー等の中間構造としてデータが保持される。また、データノードでは、クライアントからの要求に対しても、中間構造に格納して応答が行われる。本実施形態では、指定されたデータ構造への変換は、更新要求に対して、非同期(Asynchronous)で行われる。
【0061】
以下では、データノード間の更新対象データの転送を同期方式で行い、データ構造のターゲット構造への変換は非同期で行う。非同期でデータ構造を変換する更新契機情報としてタイマを用いた例を説明する(ただし、本発明は、以下の実装に制限されるものでない)。
【0062】
<データ配置特定情報>
図5は、
図2のデータ配置特定情報922の一例を示す図である。各テーブル識別子のレプリカ識別子0、1、2(
図3参照)のそれぞれに対して、配置ノード(データ格納先のデータノード)が指定されている。これは、前述したメタサーバ方式に対応している。分散KVS方式の場合、データ配置特定情報922は、分散ストレージに参加しているノードリスト情報(不図示)が該当する。このノードリスト情報をデータノード間で共有することによって、例えば「テーブル識別子」+「レプリカ識別子」をキー情報として、コンシステント・ハッシング方式により、配置ノードを特定することが出来る。また、レプリカの配置先として、コンシステント・ハッシング方式における隣接ノードに格納することができる。
【0063】
<Write中間構造:比較例>
図6は、テーブルのデータ保持、非同期更新の基本形式を模式的に説明する図である。
図6は、本発明で解決されることになる問題点を説明するための図、したがって、本発明の比較例を説明するための図でもある。
【0064】
更新契機情報の値が0よりも大きい場合には、各データノードは、Write(更新要求)の応答速度に優れた構造を中間構造(「Write優先構造」、あるいは「Write中間構造」ともいう)として持ち、更新内容を受け付ける。Write中間構造に書き込みを行った時点で、更新要求元のクライアントに対して処理完了の応答を返す。
【0065】
各データノードのWrite中間構造に書き込まれた更新データは、各データノードにおいて、変換ターゲットデータ構造にそれぞれ非同期(Asynchronous)に更新される。
図6に示す例では、Writeにより、レプリカ識別子が0のデータノードにおいて、Write中間構造には、データ構造Aが格納保持され、レプリカ識別子1、2のデータノードに対して同期方式(Synchronous)で、Write中間構造に保持されたデータ構造Aのデータがレプリケート(複製)される。レプリカ識別子1、2のデータノードの各々において、Write中間構造には、それぞれ、レプリカ識別子0、1のデータノードから転送されたデータ構造Aのデータが一旦格納保持される。レプリカ識別子0、1、2に対応するデータ構造にそれぞれ対応するデータノードにおいて、ターゲットのデータ構造B、Cへの変換は、
図3(A)に示すようなデータ構造管理情報921の更新契機情報により指定される。例えばレプリカ識別子0のデータノードにおいては、データ構造AをWriteからタイマをスタートさせ、30sec(秒)が経過すると(タイムアウト時:更新契機発生)、データ構造B(Row−Store)に変換する。レプリカ識別子1のデータノードにおいては、レプリカ識別子0のデータノードから同期方式(Sync)で転送されたデータ構造Aを受けとると、タイマをスタートさせ、60秒が経過すると(タイムアウト時:更新契機発生)、データ構造B(Row−Store)に変換する。レプリカ識別子2のデータノードにおいては、レプリカ識別子1のデータノードから同期方式(Sync)で転送されたデータ構造Aを受けとると、タイマをスタートさせ、60秒が経過すると(タイムアウト時:更新契機発生)、データ構造C(Column−Store)に変換する。
【0066】
図6に示すように、一つのデータノードのWrite中間構造に書き込まれた更新データ(データ構造A)のデータノード間での複製(Replication)は、書き込み(更新)と同期(Sync)して行われる。このような構成をとることによって、Write(書き込み)データに対して、すぐにREAD(読み出し)系のアクセスがないデータに対してはWriteの応答速度を高めることが出来る。
【0067】
READ系のアクセスが行われる時には、当該READアクセスに必要なデータ構造に既に変換されているため、変換されたデータ構造を用いて、READ系アクセスを処理することで、処理の高速化を実現することができる。さらに、READ系アクセスの種類によって、適切なデータ構造を選んでアクセス先ノードを使い分けることも出来る。
【0068】
なお、
図6等において、単に説明の簡易化のために、データ構造の種類の数をA、B、Cの3つとしたが、データ構造の種類の数は3つに制限されるものでないことは勿論であり、例えば特性の異なる任意の複数種類であってもよい。また、データ構造の例として、キュー、カラムストア、ロウストアの3種を例示したが、かかる例に制限されるものでないことは勿論である。例えば、
・ロウストア構造におけるインデックスの有無、
・インデックスを作成したカラムの種類の違い、
・更新を追記構造で格納するロウストア形式、
等であってもよい。
【0069】
このように、Write優先の中間構造に持ち、非同期に構造を変換することにより、構造変換のボトルネックを回避し、可用性を保持することを可能としている。また、データ配置ノード、データ構造,非同期変換の適用の契機(タイマのタイムアウト時間)を制御可能にすることで、様々なアプリケーションや負荷の変動に対するマージンを拡大している。
【0070】
同期(Sync)方式で異なるデータ構造の複製を採るのはオーバーヘッドが大きいWrite中間構造として先入れ先出し(FIFO)方式のキュー/ログのようなデータ構造を用い、一旦、データを、中間構造に格納しておき、あとで反映する方が、変換処理の効率も良く、システムのアクセス性能に与える影響も少ない。
【0071】
ところで、
図6に示した構成において、データの利用状況に応じて、非同期にデータ変換を行うための契機(
図6の非同期タイマ(Async(タイマ))の設定値)は、常に最適であるとは限らない。
【0072】
図6の非同期タイマの設定値が短く、頻繁にデータ構造の変換を行うことで、システムのWrite性能に悪影響を与えてしまう可能性もある。逆に、
図6の非同期タイマの設定値(タイムアウト時間:更新契機情報)が長く、データ構造の変換の頻度が低い場合、当該変換されたデータ構造を利用するシステム(解析系)では、最新のデータを解析することが保証されず、解析結果の信頼性に問題が生じることも起りえる。
【0073】
すなわち、
図7のデータノードにおいて、データ構造変換の契機を規定するタイマ(Async(タイマ))の設定値(タイムアウト時間)が相対的に大きいと、当該データノードでは、Write中間構造へデータ蓄積後、目的のデータ構造(
図7ではカラムストア形式)への変換が行われるまでの時間が長くなる。すなわち、データノードでは、目的のデータ構造への変換とデータ格納部への格納は殆ど行われず、もっぱら、Write中間構造に専らデータを溜めるだけとなる。この場合、Write系の性能には有利である。また、Write中間構造に蓄積されたデータをまとめてデータ構造(例えばカラムストア形式)を変換すれば良いことから、データ構造変換手段(
図2の113)による変換処理も効率的となる。
【0074】
しかしながら、データノードにおいて、データの受信から当該データを目的のデータ構造に変換するまでの時間が長く、予め定められた時刻あるいは時間帯等にバッチ処理等で動作するバッチ処理クライアント(目的のデータ構造に変換されたデータを解析をバッチ処理で行う)は、データ構造が変換済みの古いデータ(旧データ)を解析することになる。最新あるいは新しいデータが必要な場合には、データノードのWrite中間構造に蓄積されているデータ(データ構造の変換待ち)を読み込み、そのデータ構造を目的のデータ構造であるカラムストア形式に変換し(新データ)、これらカラムストア形式の新旧のデータの差分を反映させた上で、解析を行うことになる。この場合、クライアント側の負荷が増大する。
【0075】
一方、データノードにおいて、データ構造の変換の契機を規定する非同期タイマ(Async(タイマ))の設定値(タイムアウト時間:更新契機情報)が相対的に小さいと、当該データノードでは、受け取ったデータを、短い時間間隔で少しずつ目的のデータ構造に変換しなければならない。このため、非同期タイマ(Async(タイマ))の設定値が小さい場合、当該データノードのWrite性能は、非同期タイマ(Async(タイマ))の設定値が大きい場合と比べて、不利となる。一方、非同期タイマ(Async(タイマ))の設定値が小さい場合、例えばバッチ処理でデータの解析を行うクライアント(バッチ処理クライアント)は、常に新しいデータを参照することができる。また、非同期でデータ構造が変換済みのデータは、比較的最近のデータであることから、クライアントが、より新しいデータを参照する際にも、Write中間構造から読む出すデータ量は少なく、クライアント側の負荷も小さい。
【0076】
図6の構成において、各データノードにおける非同期方式によるデータ構造の変換の契機は、例えばクライアント側からのデータの参照(Readアクセス)の仕方に依存する。
【0077】
<Write中間構造:実施形態>
そこで、本実施形態では、
図8に示すように、例えば、アクセスの頻度に関連付けてデータ構造の変換の契機(
図3(A)の更新契機情報)を調整する。アクセス頻度(Readアクセスの頻度)が予め定めた閾値以下/以上ならば、非同期タイマ(Async(タイマ))の設定値(タイムアウト時間)を大きく/小さくする。すなわち、データ構造管理情報921(
図2)の更新契機情報(非同期タイマ:
図3(A)の更新契機情報)の値を、アクセス頻度に合わせて、調整する。
【0078】
また、Write系の負荷が、Read系(解析系)の負荷に比して大きい/小さい場合には、非同期タイマ(Async(タイマ))の設定値(タイムアウト時間)を大きく/小さくする。すなわち、Writeアクセスの頻度がReadアクセスの頻度と比べて大きい場合、非同期タイマの設定値(タイムアウト時間)を大きくとる。
【0079】
あるいは、アクセス履歴情報に基づき、参照アクセス(Readアクセス)のパタンが定期的であれば(例えばReadアクセスが定期的に行われる場合)、参照タイミング(Readアクセスの日時、時間帯等)に合わせて、Write中間構造に蓄積されたデータを目的のデータ構造へ変換して格納し、当該変換後は、非同期タイマ(Async(タイマ))の設定値(タイムアウト時間)を大きくするようにしてよい。あるいは、定期的に行われる次のReadアクセスに間に合えばよいため、非同期タイマ(Async(タイマ))の設定値(タイムアウト時間)を大とすることで、データ構造の変換回数を減らす。特に制限されるものではないが、当該次のReadアクセスが行われる前(直前)に、なるべく最新のデータのデータ構造が変換されているように設定してもよい。
【0080】
アクセス履歴情報の変更時、例えばこの変更に同期(連動)して、データ構造管理情報921(
図2)の更新契機情報の値(非同期タイマのタイムアウト時間)を調整するようにしてもよい。
【0081】
本実施形態によれば、更新契機情報(非同期タイマ)の値の調整を行うだけで、例えばオンライン処理のWrite系の性能と、バッチ処理の解析系(Read系)の性能バランスの最適化を図ることが出来る。
【0082】
なお、
図8において、アクセス頻度は、非同期(Async)タイマの設定値の変更との関係を明示するために図示されており、アクセス頻度情報がデータノード内に記憶保持されている構成が示されているが、データノードのアクセス頻度情報をデータノード外部に備えた構成としてもよい。あるいは、複数のデータノードに対して、共通のストレージでデータノードのアクセス頻度情報を記憶管理するようにしてもよい。また、データノードでは、アクセスの履歴(ログ)を採り、アクセス履歴情報に基づき、アクセス頻度を計算し、当該アクセス頻度に基づき、非同期(Async)タイマの設定値(更新契機情報)を変更するようにしてもよい。あるいは、アクセス頻度(単位期間のアクセスの出願回数)のかわりに、アクセスの傾向、特性を示すアクセスパターン等を用いて非同期(Async)タイマの設定値(更新契機情報)を変更するようにしてもよい。
【0083】
<変更判定手段>
図9は、データ構造管理情報921の更新契機情報の調整を行うための構成の一例を示す図である。
図9に示すように、アクセス履歴記録部71のアクセス情報に基づき、データ構造管理情報921の更新契機情報の変更を行うか否かを判断する変更判定手段(変更判定部)72を備えている。
【0084】
図2を参照して説明したように、各データノードのアクセス受付手段111は、受け付けたアクセス要求を、アクセス履歴記録部71に記録する。アクセス履歴記録部71は、アクセス要求(
図3(A)のテーブル識別子、当該データノードのレプリカ識別値等を含む)を、当該アクセス要求受付時の時刻情報(日時情報)に関連付けて記録する。
【0085】
なお、アクセス履歴記録部71は、各データノード毎に備えているが、複数のデータノードからなるデータノード群に対して1つ備えた構成、あるいはシステム全体で1つ備えたとしてもよい。あるいは、各データノードにアクセス履歴記録部71を備え、各データノードで個別に集められたアクセス頻度情報を、任意の方法で、集約する仕組みを設けてもよい。
【0086】
変更判定手段(変更判定部)72は、アクセス履歴記録部71に格納されたアクセス履歴情報を用いて、例えば最近(most recent)の過去の所定長さの期間内におけるアクセスの頻度の大小(閾値との比較結果)に応じて、対応するデータノードに関連する更新契機情報を変更するか否かを
決定するようにしてもよい。あるいは、最近(most recent)の過去の所定長さの期間内におけるアクセス頻度を算出し、それよりも1つ前の所定長さの期間でのアクセス頻度情報の値からの変動の大小(閾値との比較結果)に応じて、対応するデータノードに関連する更新契機情報を変更するか否かを
決定するようにしてもよい。
【0087】
変更判定手段72は、関連データノードにおいて非同期で変換するための更新契機情報(非同期タイマのタイムアウト時間の設定値)の変更が必要な場合に、構造情報変更手段91に対して、非同期タイマの設定値の変更要求を発行する。変更判定手段72からの変更要求は、データノードに対応するレプリカ識別子、テーブル識別子情報、データノードのノード情報を含む。さらに、変更判定手段72からの変更要求は、現在の非同期タイマ設定値に対して、変更しない(変更値=0)、所定単位インクリメント/デクリメントする、又は、所定単位の倍数分増加又は減少させる、という指示を含んでもよい。あるいは、変更判定手段72で、非同期タイマの設定値の変更値を導出し、変更要求にこの変更値を設定し、構造情報変更手段91で、現在の非同期タイマの設定値を、変更値で置き換える構成としてもよい。なお、テーブル識別子情報、レプリカ識別子、データノード情報(配置ノードの番号)の関係はデータ配置特定情報922に規定されており、構造情報変更手段91では、変更判定手段72からの変更要求に応答して、データノード情報(ID)、レプリカ識別子、テーブル識別子情報から、データ構造管理情報921において該当するテーブル識別子情報、レプリカ識別子の更新契機情報を変更する。
【0088】
なお、
図9では、変更判定手段72を、データノード1のデータ管理・処理手段11とは別に設ける構成とされているが、変更判定手段72を各データノードのデータ管理・処理手段内に実装し、アクセス履歴記録部71で、変更判定手段72で計算されたアクセス頻度情報を保持するようにしてもよい。
【0089】
なお、アクセス頻度情報としては、必ずしも、単位期間あたりのReadアクセス要求の発生回数/Writeアクセス要求の発生回数等に制限されるものでなく、例えば、Read、Writeアクセス要求の発生パタン(Read、Writeアクセスが固定の時刻等で発生する場合、その時刻表)の情報であってもよい。
【0090】
<クライアントのアクセスフロー>
図10は、
図1のクライアント機能実現手段61が、更新先のデータノードに対して命令を発行し、待ち合わせるというクライアント機能実現手段61の動作を説明するためのフローチャートである。
図10を参照して、クライアントのアクセスフローについて説明する。
【0091】
クライアント機能実現手段61が、構造情報保持部92の情報を、マスタデータ(マスタファイル)、あるいは任意の箇所のキャッシュ(マスタデータの一部の複製を格納したキャッシュメモリ)にアクセスすることで取得する(
図10のステップS101)。
【0092】
次に、クライアント機能実現手段61は、クライアントが発行する命令内容がWRITE処理であるか参照処理(Read)であるかを識別する(ステップS102)。
【0093】
これは、発行命令のコマンドにより指定したり、命令の実行コードを解析したりすることで、特定することが出来る。例えば、SQLを処理するストレージシステムの場合、
・INSERT命令(テーブルへレコードを追加するSQL命令)であれば、WRITE処理、
・SELECT命令(テーブルからレコードを参照、検索するSQL命令)であれば、参照系処理、
である。
【0094】
あるいは、クライアント機能実現手段61を用いて、命令を呼び出す際に、明示的に指定するようにしても良い(そのようなAPI(Application Program Interface)を準備する)。
【0095】
ステップS102の結果、WRITE処理であれば、ステップS103以降に進む。
【0096】
WRITE処理の場合、クライアント機能実現手段61は、更新が必要なノードをデータ配置特定情報922の情報を用いて特定する。
【0097】
クライアント機能実現手段61は、特定したデータノードに対して、命令実行要求(更新要求)を発行する(ステップS103)。
【0098】
クライアント機能実現手段61は、更新要求発行先のデータノードからの応答通知を待ち合わせ、更新要求が、各データノードに保持されたことを確認する(ステップS104)。
【0099】
ステップS102の結果、参照処理である場合には、ステップS105へ進む。
【0100】
ステップS105では、クライアント機能実現手段61は、処理内容の特性を特定(認識)する(ステップS105)。
【0101】
次に、クライアント機能実現手段61は、特定した処理特性と、その他のシステム状況を踏まえて、アクセス対象のデータノードを選択し、命令要求を発行する処理を行う(ステップS106)。
【0102】
クライアント機能実現手段61は、その後、データノードからアクセス処理結果を受け取る(ステップS107)。
【0103】
以下、ステップS105、ステップS106の処理について説明を補充する。クライアント機能実現手段61は、データ構造管理情報921に格納されている情報から、アクセス対象のデータが保持されているデータ構造の種類を知ることが出来る。例えば、
図3(A)の例の場合、WORKERSテーブルにアクセスする場合、レプリカ識別子0、1は、データ構造B、レプリカ識別子2は、データ構造Cである。なお、アクセス頻度情報には、WORKERSテーブルへのアクセスが、当該データノードのレプリカ識別子に関連付けて記録される。
【0104】
そして、クライアント機能実現手段61では、データノードに対して行われるデータアクセスが、どちらのデータ構造に適しているかを判断し、適している方のデータ構造を選択する。より詳しくは、例えば、クライアント機能実現手段61では、アクセス要求であるSQL文を解析し、デーブル識別子が「WORKERS」のテーブル内のあるカラムの総和をとるアクセスである場合には、データ構造C(カラムストア)を選択する。SQL文が、ある特定のレコードを取り出すアクセスである場合には、クライアント機能実現手段61は、データ構造B(ロウストア)が向いていると判断する。
【0105】
ある特定のレコードを取り出す命令であった場合、クライアント機能実現手段61は、レプリカ識別子0、1では、どちらを選択しても良い。なお、必ずしも「最新のデータで処理を行う必要が無い場合」、更新契機情報が大きな値に設定されているレプリカ識別子1を用いることが望ましい。
【0106】
この「最新のデータで処理を行う必要が無い場合」であることの特定は、アプリケーション・コンテキストに依存する。このため、クライアント機能実現手段61に受け渡される命令に、利用するデータ構造や、必要なデータの鮮度(データの新しさ)を特定する情報を、明示的に指定する形式としても良い。
【0107】
クライアント機能実現手段61は、アクセスすべきレプリカ識別子(データ構造)を特定した後、アクセスすべきデータノードを算出する。このとき、分散ストレージシステムの状況に応じて、アクセスノードの選択を変更できるようにしても良い。例えば、あるテーブルが同一のデータ構造Bとして、データノード1、2に格納されている際に、データノード1のアクセス負荷が大きい場合に、クライアント機能実現手段61では、データノード2を選択する、という動作に変更してもよい。
【0108】
また、別のデータ構造Cとして、データノード3に格納されている際に、データノード3のアクセス負荷が、データノード1、2と比較して小さい際に、処理するアクセス内容がデータ構造Bの方が向いていたとしても、クライアント機能実現手段61では、データノード3(データ構造C)に対して、アクセス要求を発行するようにしても良い。
【0109】
クライアント機能実現手段61では、このようにして算出・選択されたデータノードに対して、アクセス要求を発行し(S106)、該データノードから、アクセス処理結果を受け取る(S107)。
【0110】
<データノードの動作>
図11は、
図2のデータノードにおけるアクセス処理を説明するフローチャートである。
図11、
図2を参照して、データノードの動作について詳細に説明する。
【0111】
まず、データノードのデータ管理・処理手段11のアクセス受付手段111がアクセス処理要求を受け付ける(
図11のステップS201)。
【0112】
次に、データノードのデータ管理・処理手段11のアクセス受付手段111は、受け付けた処理要求の内容がWrite処理であるか、Read(参照)処理であるか判定する(ステップS202)。
【0113】
ステップS202の結果、WRITE処理であった場合、データノードのデータ管理・処理手段11のアクセス処理手段112は、構造情報保持部92におけるデータ構造管理情報921の情報を取得する(ステップS203)。データ構造管理情報921の情報取得は、マスタデータにアクセスしてもよいし、任意の箇所にあるキャッシュデータ(マスタデータの一部の複製を格納したキャッシュメモリのデータ)にアクセスするようにしてもよいし、あるいは、
図1のクライアント機能実現手段61が、データノードに対して発行する要求に情報(マスタデータ又はキャッシュデータへのアクセス)を付与し、アクセス処理手段112では、その情報を用いてアクセスするようにしてもよい。
【0114】
次に、アクセス処理手段112は、データ構造管理情報921の情報から、該データノードに対する処理の更新契機が「0」(零)であるかどうかを判定する(ステップS204)。
【0115】
ステップS204の結果、更新契機が「0」の場合、アクセス処理手段112は、構造情報保持部92の構造情報に指定されたデータ構造を、直接、更新する(ステップS205)。すなわち、更新データを指定されたデータ構造に変換し対応する構造別データ格納部12X(X=1、2、3)に格納する。
【0116】
更新契機が「0」でない場合、アクセス処理手段112は、Write中間構造(構造別データ格納部121)に更新データを格納する(ステップS206)。
【0117】
ステップS205、206の場合、いずれも、処理完了後、アクセス受付手段111は、要求元のクライアント機能実現手段61に対して、処理完了通知を応答する(ステップS207)。
【0118】
ステップS202の結果、データの参照処理であった場合、参照処理の実行を行う(ステップS208)。
【0119】
Read(参照)処理の実行方式として、特に制限されるものでないが、代表的には、以下の3種類の方法を挙げることができる。
【0120】
(1)第1の方法は、データ構造管理情報921に指定されているデータ構造のデータ格納部のデータを利用して処理する。これは最も性能が優れるが、更新契機の時間(サイクル)が大きい場合には、Write中間構造のデータが参照処理に反映されていない可能性がある。このため、データの不整合が生じる可能性がある。ただし、アプリケーション開発者が事前に認識していて利用する場合や、Write後に、データの読み出しが更新契機内に起きないことがわかっているか、もし新しいデータアクセスが必要な場合には、更新契機が「0」のレプリカ識別子データにアクセスすると決めている場合には、特に、問題はない。
【0121】
(2)第2の方法は、別途行われる変換処理の適用を待ってから処理する方法である。これは、実装が容易であるが、応答性能が劣化する。応答性能を求めないアプリケーションの場合、問題はない。
【0122】
(3)第3の方法は、データ構造管理情報921に指定されているデータ構造と、Write中間構造に保持されているデータの両方を読んで処理する。この場合、常に、最新のデータを応答できるが、第1の方法より性能が劣化する。
【0123】
上記第1乃至第3のいずれの方法をとってもよい。また、複数の種類を実現し、システムの設定ファイルとして記述する、クライアント機能実現手段61から発行される処理命令の中に、どの方法で実行するかを指定するようにしてもよい。
【0124】
<データ構造変換手段のデータ構造変換動作>
図12は、
図2のデータ構造変換手段113におけるデータ変換処理の動作を示すフローチャートである。
図12、
図2を参照して、データ変換処理を説明する。
【0125】
データ構造変換手段113は、定期的に変換処理の必要の有無を判定するため、データノード内のタイマ(不図示)でのタイムアウト発生による呼び出しを待つ(
図12のステップS301)。なお、このタイマは、専用タイマとしてデータ構造変換手段113内に備えるようにしてもよい。タイマのタイムアウト時間は、
図3(A)の更新契機情報(sec)の設定値(
図6のAync(タイマ)のタイムアウト時間)に対応する。
【0126】
次に、構造情報保持部92の構造情報(データ情報)を取得し(ステップS302)、変換が必要なデータ構造があるか否かを判定する(ステップS303)。例えば、タイマで判定が10秒毎に行われるときに、更新契機が20秒のデータ構造は、20秒毎に変換処理を実行するため、10秒時点では、変換処理を行わなくても良い。変換処理が必要でない場合には、タイマ呼び出し待ち(タイマでのタイムアウト発生により呼び出されるまでウエイト)に戻る(ステップS301)。
【0127】
一方、変換処理が必要な際には、更新向け中間データ構造から、変換対象のデータに対する更新処理内容を読み出し(ステップS304)、変換先の構造別データ格納部12X(X=1〜3)へ更新情報を反映する処理を行う(ステップS305)。
【0128】
<Writeシーケンス1>
図13は、Write処理(データの更新を伴う処理)のシーケンスを示す図である。
【0129】
クライアントノード6のクライアント機能実現手段61(クライアント計算機)は、構造情報管理手段9の構造情報保持部92に保持されているデータ配置特定情報922(
図2)の情報を取得する(あるいは任意場所のキャッシュメモリから情報を取得する)。
【0130】
クライアント計算機は、取得した情報を用いて、Write処理を行うデータの配置先のデータノード(レプリカ識別子0のデータノード1)に対して、Writeアクセス命令を発行する。
【0131】
データノード1のアクセス受付手段111は、Writeアクセス要求を受け付け、レプリカ識別子1、2に指定されているデータノード2、3に対してWriteアクセスを転送する。レプリカ識別子1、2のデータノードを特定する方法としては、データノード1が構造情報保持部92(あるいは適切なキャッシュ)にアクセスしても良いし、クライアント機能実現手段61が発行するWriteアクセス命令にデータ構造管理情報921の全部あるいは一部の情報をともに渡すようにしてもよい。
【0132】
各データノードのアクセス処理手段112は、受け取ったWriteアクセス要求の処理を行う。
【0133】
アクセス処理手段112は、データ構造管理情報921の情報を参照して、Write処理を実行する。
【0134】
更新契機情報の値が「0」より大きい場合には、Write処理内容をデータ構造Aの構造別データ格納部121に格納する。
【0135】
更新契機情報の値が「0」の場合には、データ構造管理情報921に指定されているデータ構造の構造別データ格納部12Xに対して格納する。
【0136】
アクセス処理手段112は、Write処理完了後、アクセス受付手段111に、完了通知を発行し、クライアント計算機に完了応答を返す。
【0137】
レプリカ先のデータノード(2、3)は、レプリカ元のデータノード1のアクセス受付手段111にWrite完了応答を返答する。
【0138】
アクセス受付手段111は、データノード1のアクセス処理手段112からの完了通知と、各レプリカ先のデータノード2、3の完了通知を待ち合わせ、全て受け取った後に、クライアント計算機に対して応答を返す。
【0139】
データノード1のデータ構造変換手段113(
図2参照)は、Write中間構造(構造別データ格納部121(データ構造A))に格納されたデータを、非同期タイマのタイムアウトに応じて、構造別データ格納部12X(データ構造管理情報921に指定されている、最終格納先データ構造)に変換して格納する。同様にデータノード2、3も、非同期タイマのタイムアウトに応じて、目的のデータ構造への変換を行う。
【0140】
<Writeシーケンス2>
なお、
図13の例では、データノード1が、レプリカ先のデータノード2、3に対して、Write要求を転送しているが、
図14に示すように、クライアント計算機が、格納先のデータノードの全てに対して、Write要求を発行するようにしても良い。
【0141】
図14の例では、
図13と比較して、Writeアクセス要求の待ち合わせをクライアント計算機で行うことが異なる。
図14の例では、クライアント計算機が格納先のデータノード0、1、2に対して、それぞれWrite要求を発行し、格納先のデータノード0、1、2からそれぞれ完了応答を受け取っている。
【0142】
<変形例>
図15は、
図8の構成の一変形例を説明する図である。
図15を参照すると、
図8のカラムストア(Column Store)形式のデータノード3を、2つのデータノード3A、3Bで構成し、一方のデータノード3AでWrite中間構造からカラムストア(Column Store)形式のデータ構造への変換を行っている場合、解析系のクライアント(Client)は、他方のデータノード3Bのデータ(Write中間構造に格納された変換前のデータとカラムストア形式に変換済みのデータ)を参照して解析を行う。データノード3A、3Bでの非同期のタイマの設定は20秒(Aync(20秒))であるが、データノード3Bでのデータ構造の変換は、データノード3Aでのデータ構造の変換よりも10秒遅れている。例えばデータノード3Aでは、0秒〜20秒の時間区間でデータ構造の変換が行われ、続く20〜40秒の時間区間でReadアクセスを行うクライアント(Client)によるデータの解析が行われる。データノード3Bでは、10秒〜30秒の時間区間でReadアクセスを行うクライアント(Client)によるデータの解析が行われ、続く30〜50秒の時間区間で、データ構造の変換が行われる。したがって、例えば10秒と20秒の中間の15秒時点では、データノード3Aではデータ構造の変換、データノード3Bではデータの解析が行われる。なお、データノード3A、3Bにおける非同期のタイマの設定は、データノード3A、3Bのアクセス履歴情報(アクセス頻度)に基づいて設定される。
【0143】
<別の変形例>
図16は、オンライン処理(Write処理を行うオンライン処理システム)とバッチ処理等で行われる解析系(データウエアハウス)間にETL(Extract/Transform/Load)を配設した例を示している。
【0144】
データウェアハウス・システムにおいては、基幹系システムからデータ(例えばトランザクション・データ等)を抽出し再構成し情報分析、意思決定のための大規模データベースを含む。基幹系システムのデータベースからデータウェアハウス・データベースへ、データの移行を行う必要があり、この処理は、ETL(Extract/Transform/Load)と呼ばれている。なお、「Extract」は部の情報源からデータを抽出、「Transform」は抽出したデータをビジネスでの必要に応じて変換・加工、「Load」は最終的ターゲット(すなわちデータウェアハウス)に変換・加工済みのデータをロードを表している。
図16では、上記した実施形態を、ETLのデータ変換に適用している。すなわち、
図16のETLによる非同期のデータ変換は、
図1のデータ構造変換手段113によるデータ構造の変換に対応している。
【0145】
図16の例において、ETLは、現用系(オンライン処理)のロウストア(Row Store)形式のデータ(複製データ)を、解析系(データウェアハウス)用のカラムストア(Column−Store)形式に、非同期(Asynch:Asynchronous)で変換している。本実施形態では、アクセス履歴情報(アクセス頻度情報)に基づき、ETLにおける変換を非同期で行うタイマをアクセス頻度に基つき調整することで、データ構造変換のボトルネックを解消し、ストレージの利用効率を高めることができる。
【0146】
なお、上記の特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素(各請求項の各要素、各実施例の各要素、各図面の各要素等を含む)の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。