説明

分散データベースの制御方法

【課題】データの挿入処理や検索処理のアクセス時に送受されるトラヒック量を抑制し、常に正当が検索結果を得られる分散データベースの制御方法を提供する。
【解決手段】制御ノード1から受信したメッセージを各ストレージノードNへマルチキャストで転送する中継ノード2を備え、各ストレージノードは、自ノードのマルチキャストグループアドレスを中継ノード2へ予め登録し、制御ノード1は、メッセージの宛先となるストレージノードのマルチキャストグループアドレスを識別して、このマルチキャストグループアドレス宛にメッセージを送信し、中継ノード2は、メッセージを受信して前記マルチキャストグループアドレスと対応付けられている複数のストレージノードを識別して前記メッセージを転送する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、分散データベースの制御方法に係り、特に、データ転送にIPマルチキャストを採用する分散データベースの制御方法に関する。
【背景技術】
【0002】
検索対象のデータをテーブル形式で保存する従来のRDB (Relational Data Base) に対して、KVS (Key Value Store) と呼ばれるデータベースが提案されている。KVSは、キー(KEY)と値(VALUE)とのペア形式でデータが各ノードに保持され、多くの場合、データは分散データベースの形式で管理される。このようなKVSは、シンプルなデータ構造であるが故に拡張性/可用性が高く、運用コストが低いという利点がある。KVSの主なものとしては、Amazon社がウェブストレージシステムとして採用するDynamoがある(非特許文献1,2)。
【0003】
図6は、従来のKVSの構成を示したブロック図であり、ここで、KVSは一般的なConsistent Hashing(非特許文献3)を利用しているもとする。KVSは、多数のデータを分散保持する複数のストレージノードNと、各ストレージノードNへのデータの挿入/検索/削除を管理する制御ノードとから構成される。このような制御ノードは複数台存在しても良いし、ストレージノードNと物理的に同一であっても良いが、ここでは、1台の制御ノードがストレージノードとは別に独立して設けられている場合を例にして説明する。
【0004】
各ストレージノードNiには、予め固有のノードIDiが割り当てられており、ノードIDの値域は0≦ID≦ID_MAXであって整数値をとるものとする。各ストレージノードNは、ノードID順かつID=0のストレージノードN0とID=ID_MAXのストレージノードNmaxとが連結される環状に配置されていると考える。ここでは、あるストレージノードNiから見て時計回り方向に隣接するストレージノードNi+1を後ノード、反時計回り方向に隣接するストレージノードNi-1を前ノードと表現する。また、各ストレージノードNならびに制御ノードは、他の全てのストレージノードNのIDと通信に必要な情報(IPアドレス)を知っているものとする。
【0005】
各ストレージノードNに分散配置されるデータは、キー(KEY)と値(VALUE)とのペアで構成され、キーの値をノードIDの値域にマッピングするハッシュ関数HASH(KEY)が定義されている。各データは、KEYの値をHASH関数で変換した値(ハッシュ値)で一意に定義される前記IDの円上の位置に配置されている。
【0006】
各ストレージノードNiは、自ノードよりも1つ前のストレージノードNi-1から自ノードNiまでの間に配置されたデータを保持する。ただし、ストレージノードNiが故障などの理由で動作しなくなった場合にデータが紛失してしまう事を防ぐため、前後の各ストレージノードNi+1,Ni-1にデータのコピーが保持される。すなわち、各ストレージノードNiは、実質的に2つ前のノードのID-2から1つ後ろのノードのIDi+1までのデータを保持することになる。
【0007】
次いで、図6を参照してデータ挿入時の処理手順について説明する。なお、削除処理は空の値を持つデータを挿入する事と等価なので、ここでは説明を省略する。
【0008】
(1)制御ノードは、KEYのハッシュ値HASH(KEY)を算出し、データを保持するべきストレージノードNiにアクセスしてデータの挿入メッセージを送信する。挿入メッセージを受信したストレージノードNiは、当該メッセージに記述されているデータを保持する。
【0009】
(2)ストレージノードNiまたは制御ノードは、ストレージノードNiの前後の各ストレージノードNi-1,Ni+1へデータのコピーメッセージを送信する。コピーメッセージを受信した各ストレージノードNi-1,Ni+1は、当該コピーメッセージに記述されているデータを保持する。
【0010】
次いで、図7を参照してデータ検索時の処理手順について説明する。
【0011】
(1)制御ノードは、検索要求されたKEYのハッシュ値HASH(KEY)を算出することでデータを保持しているストレージノードNiを識別し、当該ストレージノードNiおよびその前後の各ストレージノードNi-1,Ni+1へ検索要求メッセージを送信する。
【0012】
(2)検索要求メッセージを受信した各ストレージノードNi,Ni-1,Ni+1は自ノードのストレージを検索し、前記KEYと対応付けられているVALUEの記述された検索応答メッセージを制御ノードへ返信する。
【0013】
(3)制御ノードは、各ストレージノードNi,Ni-1,Ni+1から検索結果を受信し、同一の検索結果が2つ以上返信されると、それを検索結果として処理する。
【先行技術文献】
【非特許文献】
【0014】
【非特許文献1】http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html
【非特許文献2】"NoSQLの世界",電子情報処理学会会誌, Vol. 51, No. 10, pp.1327-1331.
【非特許文献3】D. Karger他 "Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web" 29th annual ACM Symposium on Theory of Computing.
【発明の概要】
【発明が解決しようとする課題】
【0015】
従来のKVSには、ストレージノードの障害などに対応するため、同一データを複数のノードにコピーして保持する複製処理が実装されているが、この複製処理が全てユニキャストで行われ、制御ノードから各ストレージノードNへメッセージが別々に送信されるので、メッセージ数が増加によりトラヒック量が増えてしまう。
【0016】
また、データの複製処理が挿入処理の後で行われ、各処理に時差が生じるので、図8に一例を示したような不都合が生じ得る。
【0017】
すなわち、時刻t1において制御ノードがストレージノードNiへアクセスして挿入要求メッセージを送信すると、ストレージノードNiは、受信データを自ノードのストレージに保持した後、時刻t2,t3において、コピー用の挿入要求メッセージをストレージノードNi+1,Ni-1へそれぞれ転送する。各ストレージノードNi+1,Ni-1は、ストレージノードNiから転送されたデータを自ノードのストレージにそれぞれ保持する。
【0018】
その後、制御ノードにおいて、「KEY」に対応付ける値を「VALUE1」から「VALUE2」に変更する更新要求が検知されると、時刻t4では、制御ノードからストレージノードNiへ更新用の挿入要求メッセージが送信される。
【0019】
しかしながら、隣接する各ストレージノードNi+1,Ni-1へ前記コピー用の挿入要求メッセージが転送(時刻t11t,12)されるよりも前に、時刻t5,t6,t7において、制御ノードから各ストレージノードNi,Ni+1,Ni-1へ検索要求メッセージが送信されてしまうと、ストレージノードNiは、時刻t8において、更新後の検索結果(KEY,VALUE2)を応答できるものの、ストレージノードNi+1,Ni-1は、時刻t9,t10において、それぞれ更新前の検索結果(KEY,VALUE1)を応答することになる。その結果、制御ノードでは更新前のデータ(KEY,VALUE1)が検索結果として処理されてしまう。
【0020】
本発明の目的は、上記した従来技術の課題を全て解決し、データの挿入処理や検索処理の際に送受されるメッセージのトラヒック量を抑制し、常に正当な検索結果を得られる分散データベースの制御方法を提供することにある。
【課題を解決するための手段】
【0021】
上記の目的を達成するために、本発明は、複数のストレージノードにノードIDと対応付けられたデータが分散保持され、各ストレージノードは、制御ノードから受信したメッセージに応答してデータを処理する分散データベースの制御方法において、制御ノードから受信したメッセージを各ストレージノードへマルチキャストで転送する中継ノードを備え、各ストレージノードが、自ノードおよび他の一部のノードの各マルチキャストグループアドレスを中継ノードへ通知して同一のマルチキャストグループへ参加する手順と、制御ノードが、メッセージの宛先となるストレージノードのマルチキャストグループアドレスを識別する手順と、制御ノードが、前記マルチキャストグループアドレス宛にメッセージを送信する手順と、中継ノードが、前記メッセージを受信して前記マルチキャストグループアドレスに対応するグループに参加しているストレージノードを識別する手順と、中継ノードが、前記識別されたストレージノードへ前記メッセージを転送する手順とを有することを特徴とする。
【発明の効果】
【0022】
本発明によれば、以下のような効果が達成される。
【0023】
(1)中継ノードは、一のストレージノード宛のメッセージを受信すると、当該一のストレージノードアドレスと同一のマルチキャストグループへ参加している他のストレージノードへも当該メッセージをマルチキャストアドレスで同位に送信するので、複数のストレージノードへ同一メッセージを少ないトラヒック量で同時に転送できるようになる。
【0024】
(2)同一のマルチキャストグループへ参加している複数のストレージノードへはメッセージが同時に送信され、各ストレージノードに保持されているデータが同時に更新されるので、挿入処理の直後に検索処理が要求された場合でも、常に正当な検索結果を提供できるようになる。
【図面の簡単な説明】
【0025】
【図1】KVSのネットワークにおける本発明の挿入処理を模式的に表現した図である。
【図2】KVSのネットワークにおける本発明の検索処理を模式的に表現した図である。
【図3】本発明を適用した挿入処理および検索処理のシーケンスフローである。
【図4】マルチキャストグループアドレスの生成方法を示した図である。
【図5】マルチキャストグループアドレスが衝突する例を示した図である。
【図6】従来のKVSのネットワークにおける挿入処理を模式的に表現した図である。
【図7】従来のKVSのネットワークにおける検索処理を模式的に表現した図である。
【図8】従来技術の課題を説明するためのシーケンスフローである。
【発明を実施するための形態】
【0026】
以下、図面を参照して本発明の実施の形態について詳細に説明する。図1,2は、本発明が適用されるKVSのネットワーク構成を模式的に表現した図であり、多数のデータを分散保持する複数のストレージノードNと、各ストレージノードNへのデータの挿入/検索/削除を管理する制御ノード1と、制御ノード1から受信したメッセージをIPマルチキャストで各ストレージノードNへ転送する中継ノード2からと構成され、本実施形態では、前記中継ノード2としてIPマルチキャストルータが用いられている。
【0027】
前記制御ノード1は複数台存在しても良いし、ストレージノードNと物理的に同一であっても良いが、ここでは、1台の制御ノード1がストレージノードNとは別に独立して設けられている場合を例にして説明する。
【0028】
各ストレージノードNには、予め固有のIDが割り当てられており、IDの値域は0≦ID≦ID_MAXであって整数値をとるものとする。各ストレージノードNは、ID順かつID=0のストレージノードN0とID=ID_MAXのストレージノードNmaxとが連結されて環状に配置されていると考える。ここでは、あるストレージノードNiから見て時計回り方向に隣接するストレージノードNi+1を後ノード、反時計回り方向に隣接するストレージノードNi-1を前ノードと表現する。また、各ストレージノードN、制御ノード1および中継ノード2は、他の全てのストレージノードNとの通信に必要な情報(IPアドレス)を知っているものとする
【0029】
[JOIN処理]
図3のタイムチャートを参照し、各ストレージノードNiは、自ノードに割り当てられているノードIDiから生成されるマルチキャストグループアドレスGroup(IDi)、および前後に隣接する2つのストレージノードNi+1,Ni-1に割り当てられるノードIDi+1,IDi-1から生成される2つのマルチキャストグループアドレスGroup(IDi+1),Group(IDi-1)への参加(JOIN)を、時刻t21において中継ノード2へ通知する。
【0030】
同様に、時刻t22ではストレージノードNi+1が、自ノードおよび各隣接ノードの3つのマルチキャストグループアドレスGroup(IDi),Group(IDi+1),Group(IDi+2)へのJOINを中継ノード2へ通知し、時刻t23ではストレージノードNi-1が、自ノードおよび各隣接ノードの3つのマルチキャストグループアドレスGroup(IDi-2),Group(IDi-1),Group(IDi)へのJOINを中継ノード2へ通知する。
【0031】
図4は、本実施形態におけるマルチキャストグループアドレスGroup(ID)の生成方法を示した図であり、32ビットのGroup(ID)の下位24ビットには、ノードIDの上位24ビットが採用され、上位8ビットには、マルチキャストグループアドレスに固有の固定値(ここでは、"239(10進数)")が採用される。
【0032】
[挿入処理]
図1,3を参照し、制御ノード1においてデータの挿入要求が検知されると、そのKEYのハッシュ値に基づいて、当該データが挿入されるストレージノードNiのIDiが一意に特定される。次いで、前記IDiに基づいてマルチキャストグループアドレスGroup(IDi)が上記と同様に生成され、時刻t24において、当該マルチキャストグループアドレスGroup(IDi)に対して、前記挿入メッセージ(KEY,VALUE1)がIPマルチキャストパケットで送信される。
【0033】
前記挿入メッセージを受信した中継ノード2は、そのマルチキャストグループアドレスGroup(IDi)にJOINしているグループのストレージノードN(図3ではNi,Ni+1、Ni-1)を識別し、時刻t25において、各ストレージノードNへ前記挿入メッセージを転送する。
【0034】
各ストレージノードNは、受信メッセージに記述されている挿入データを自ノードが保持すべきか否かを判定し、保持すべきデータと判定されれば自ノードのストレージに保持する。これにより、前記挿入データはストレージノードNiに保持されると同時に、隣接する2つのノードNi-1,Ni+1にもバックアップされることになる。
【0035】
[検索処理]
図2,3を参照し、制御ノード1においてデータの検索要求が検知されると、そのKEYのハッシュ値に基づいて、検索対象のデータを保持するストレージノードNiのIDiが一意に特定される。次いで、前記IDiに基づいてマルチキャストグループアドレスGroup(IDi)が算出され、時刻t26において、当該マルチキャストグループアドレスGroup(IDi)に対して、前記検索メッセージ(KEY)がIPマルチキャストパケットで送信される。
【0036】
前記メッセージを受信した中継ノード2は、そのマルチキャストグループアドレスGroup(IDi)にJOINしているグループのストレージノードN(図3ではNi,Ni+1、Ni-1)を識別し、時刻t27において、各ストレージノードNへ前記検索メッセージを転送する。
【0037】
前記検索メッセージを受信した各ストレージノードNは、自ノードのストレージを前記検索キーで検索し、時刻t28,t29,t30において、検索結果の値をそれぞれ制御ノード1へ応答する。制御ノード1は、検索結果のうち同じ結果が2つ以上あれば、その値を検索結果として処理する。
【0038】
ところで、上記のように各ストレージノードNiが、自ノードに割り当てられているノードIDiから生成されるマルチキャストグループアドレスGroup(IDi)、および前後に隣接する2つのストレージノードNi+1,Ni-1に割り当てられるノードIDi+1,IDi-1から生成される2つのマルチキャストグループアドレスGroup(IDi+1),Group(IDi-1)へJOINすると、複数の異なるストレージノードNに同一のマルチキャストグループアドレスが割り当てられてしまう「衝突」が生じ得る。これは、マルチキャストグループアドレスの値域がノードIDの値域よりも狭いことに起因する。
【0039】
図5は、マルチキャストグループアドレスが衝突する例を示した図であり、ストレージノードNi-1,Ni+2およびNi+3には、それぞれのノードID(IDi-1,IDi+2およびIDi+3)の上位ビットを利用して生成された固有のマルチキャストグループアドレスGroup(IDi-1)=Gj-1、Group(IDi+2)=Gj+1、Group(IDi+3)=Gj+2が割り当てられている。
【0040】
これに対して、ストレージノードNiおよびNi+1は、それぞれのノードID(IDiおよびIDi+1)の上位ビットを利用して生成されたマルチキャストグループアドレスが同値Group(IDi)=Group(IDi+1)となるために共通のグループアドレスGjが割り当てられている。
【0041】
したがって、例えばデータの挿入処理において、そのKEYのハッシュ値に基づいてストレージノードNiのIDiが一意に特定され、当該IDiから生成されたマルチキャストグループアドレスGroup(IDi)=Gjに対して挿入メッセージがIPマルチキャストパケットで送信されると、前記データは4つのストレージノードNi-1,Ni,Ni+1およびNi+2に保持されることになる。
【0042】
このため、マルチキャストグループアドレスの衝突時であっても、本実施形態では、ノードIDの上位ビットがマルチキャストグループアドレスの下位ビットであり、衝突するグループアドレス同士は必ずID空間で隣接することが保障されているので、マルチキャストグループアドレスの衝突処理が不要である。
【符号の説明】
【0043】
1…制御ノード
2…中継ノード

【特許請求の範囲】
【請求項1】
複数のストレージノードにノードIDと対応付けられたデータが分散保持され、各ストレージノードは、制御ノードから受信したメッセージに応答してデータを処理する分散データベースの制御方法において、
制御ノードから受信したメッセージを各ストレージノードへマルチキャストで転送する中継ノードを備え、
各ストレージノードが、自ノードおよび他の一部のノードの各マルチキャストグループアドレスを中継ノードへ通知して同一のマルチキャストグループへ参加する手順と、
制御ノードが、メッセージの宛先となるストレージノードのマルチキャストグループアドレスを識別する手順と、
制御ノードが、前記マルチキャストグループアドレス宛にメッセージを送信する手順と、
中継ノードが、前記メッセージを受信して前記マルチキャストグループアドレスに対応するグループに参加しているストレージノードを識別する手順と、
中継ノードが、前記識別されたストレージノードへ前記メッセージを転送する手順とを有することを特徴とする分散データベースの制御方法。
【請求項2】
前記各ストレージノードは、自ノードのノードIDの上位のビット列に基づいて自ノードのマルチキャストグループアドレスを生成することを特徴とする請求項1に記載の分散データベースの制御方法。
【請求項3】
前記各ストレージノードに保持されるデータが、KEYとVARUEとのペアであることを特徴とする請求項1または2に記載の分散データベースの制御方法。
【請求項4】
前記中継ノードが、IPマルチキャストルータであることを特徴とする請求項1ないし3のいずれかに記載の分散データベースの制御方法。
【請求項5】
前記制御ノードから中継ノードへ送信されるメッセージが、各ストレージにデータを保持させる挿入メッセージであることを特徴とする請求項1ないし4のいずれかに記載の分散データベースの制御方法。
【請求項6】
前記制御ノードから中継ノードへ送信されるメッセージが、各ストレージに保持されているデータから検索キーに対応したデータを検索させる検索要求メッセージであることを特徴とする請求項1ないし4のいずれかに記載の分散データベースの制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate