MerDy
-
Upload
kumazaki-hiroki -
Category
Technology
-
view
1.374 -
download
5
Transcript of MerDy
Dyanmo と Mercury を組み合わせた高機能 KVS
MerDy
発表者チーム パインテール 熊崎宏樹
これから話す事
MerDy の生まれた背景MerDy の仕組みMerDy に得意なこと・苦手なことデモ
MerDy の生まれた背景様々な業務の基盤にデータベースが活用
しかし高い性能を得るためのコストは大きい性能要求に堪えて低コストなデータストアが欲しい
キーバリューストアの台頭
キーバリューストアとは入力されたキーとバリューをペアで保持するデータストア複数の計算機に負荷分散をさせる事で合計スループットを高めることができる分散環境を前提とした様々なコンセプトのキーバリューストアが出現
しかし!
キーバリューストアには弱点がキーと計算機との紐づけにハッシュ関数を用いる物は範囲検索の効率がとても悪い
A B C
キーバリューストアには弱点がキーと計算機との紐づけにハッシュ関数を用いる物は範囲検索の効率がとても悪い
A~F はどこに保存したかな・・・?•A ~ F を全部ハッシュ関数にかける?•全部のキーを取ってきて A ~ F だけふるい分ける?
そこで MerDy !キーは Dynamo に保存
3 重に複製して保存するため紛失の危険が少ない
範囲検索のための情報を Mercury に保存範囲検索ができる!
Dynamo, Mercury 共に手作りして来ました
何が嬉しいの?Mercury は複数属性に対応しているものの、タプル情報の保持に無駄が多いDynamo はキーとバリューのペアを 1 次元の名前空間で保持するばかり
•Mercury は一貫したタプル保持を Dynamoに任せる事で高効率化•Dynamo は Mercury の複数属性対応によって高次元化
その仕組み
Dynamo は行方向のデータを保存Key: Hash 値 Value: タプル 1 列丸ごと
名前 ID 住所 年齢 性別 得点Tanaka 10 Tokyo.. 27 M 87
Suzuki 15 Tokyo.. 31 F 76
Yoshida 16 Tokyo.. 24 M 71
Yoshida 16 Kyoto.. 26 F 71
Hash
$#u3”;a
r#st6a
1)@jqc
3iux(3s
その仕組み
Mercury は列方向のデータを保存Key: 属性値 Value: ハッシュ値
名前 ID 住所 年齢 性別 得点Tanaka 10 Tokyo.. 27 M 87
Suzuki 15 Tokyo.. 31 F 76
Yoshida 16 Tokyo.. 24 M 71
Yoshida 16 Kyoto.. 26 F 71
Hash
$#u3”;a
r#st6a
1)@jqc
3iux(3s
ProxyProxy
その仕組み
Proxy
Client
Mercury Hubs
Dynamo
Select name Where Score > 10
Score
Name
Age
Score > 10
$#u3”;a
r#st6a
1)@jqc
Suzuki
Yoshida
Yoshida
Master
つまり
簡単な SQL が実行可能
従来のキーバリューストアに無かった柔軟性
Dynamo 由来の耐故障性
しかし弱点もあるトランザクションのような排他制御は不可能登録完了したデータが Mercury に反映されるまでに間がある
Eventual Consistency使いどころが難しい?
Future Work
SQL のさらなるサポート現在は INSERT, SELECT, COUNT のみ
対故障の実装Master ノードが落ちても Proxy の一つを選出して代替させて復旧Mercury ノードが落ちても Dynamo のタプル情報から復旧
パフォーマンスの測定Mercury の動的負荷分散を改良したい
まとめ2 つのキーバリューストアを複合して汎用データベースっぽく動くデータストアを作りました
Eventual Consistency な列指向データベースです
用途募集中です
Demo