ブログ移設しました。

bloggerから記事を移設しました。


HUGOで記事を書いてみると思いのほか書きやすかったので移動。

月曜日, 6月 15, 2009

分散KVSについて

Pacificという名前の分散ストレージをつくり始めた件

こちらを読んでみて分散KVSっていったいなんだろうと思ったので、考えてみました。
分散KVSっていうのはデータベースにRDBMS shardingではないとのこと。

あれ?RDBMS側で分散させなかったら、いったいどこで分散させるんだ?
率直な疑問。
RDBMS上で分散させるのではなくて、他のフレームワークで分散させましょう!っていうことでしょ?

まぁ読んでいても結構分けのわからない単語が出てきているので曖昧な物も列挙 調査してみる。
sharding・・・分散?clusterとは違うの?
RDBMS sharding・・・RDBMS上でshardingするんだよ。
cluster・・・見るのが早い。http://www.slideshare.net/hirohama/mysql-cluster-presentation
分散キーバリューストア(分散KVS)・・・不明 明言できない 頭の中で整理がついたら書くかもしれないし書かないかもしれない。
参考文献:Float on the flow 以下引用 http://d.hatena.ne.jp/shozzy/20090302/1235962175
分散化、クラウド化という文脈では必須になってくることはわかるんだけど。使い勝手というか開発効率的にどうなの?みたいな。

以下、自分の現時点での理解

          o キー・バリュー型データストアとは、Javaで言えばMapのようなもの。
          o MapReduceとかHadoopとかは、計算を分散化させるための仕組み。何らかの計算をさせるための引数をMapに詰めて渡したら、分散処理して返してくれるイメージ。


この理解が正しいとすると、キー・バリュー型データストアはかなりプリミティブなAPIしか提供しないことになる。プログラミング言語が提供するコレクション・インタフェースと同等の。*1

つまり、SQLのような集合指向の便利な*2APIは提供してくれないものと思われる。
上記の参考文献URLに関しては最後の部分の方が気になります。 気になった方は見に行って下さい。
参考文献:ITpro 以下引用 http://itpro.nikkeibp.co.jp/article/OPINION/20090226/325527/
 キー・バリュー型データストア(またはキー・バリュー型データベース)は、大量のユーザーとデータを抱え、データベースのパフォーマンス問題とコスト高に頭を悩ませるWeb企業が注目する技術である。記者は同日に開催された「Key-Value Store 勉強会」に参加させてもらった。午後7時から11時まで、キー・バリュー型データストアを開発・研究する若手技術者が立て続けに登場し、1人15分の持ち時間で成果を発表し、議論を重ねるという集まりだ。
レンジクエリ・・・ある幅を限定したクエリ(文中にも出てきたような最新の日記5件とか)
参考文献:文中より推察
トランザクション・・・一つの処理をまとめたもの
it用語辞典?
レンジ・・・チン!
参考文献:wikipedia

んー、調べてみたけどあまり分かりません。 これは、保留ですね。
また、技術の深い所での研究は若年層でも活発なようです。 わくわくしますね。 こういう話。 俺できないけどさヽ(;´Д`)ノ

2 件のコメント:

  1. なんかおもしろそうだね。
    簡単にだけど調べてまとめてみたよ。
    かなり僕の推測も入ってるから、間違いがあったら教えてほしいな。

    大規模ウェブアプリケーションに置けるデータベースの読み書きは、従来の単一ホストによるRDBMSでは運用が難しくなっている。
    そこで同じ種類のデータを複数のRDBMSに保存するShardingが盛んになっている。
    (同じ種類のデータを複数のRDBMSに保存する方法に関しても、問題を孕んでいるがここでは言及しない)
    もうひとつの解決策として知られているのが分散KVS(Key/Valueストア)がある。
    KVSとはハッシュテーブルの機能を提供するサーバ。

    分散KVSはshardingに対してのメリットは事前の分割設計が不要で、動的な変更が可能であるということだ。
    動的な変更が可能という実装方法だが、kaiという実装ではp2pを用いて行われている。
    p2pはマスターノードを持たず、ノードの連携によってなりたつ。
    ノードが落ちたり、増えたりしても問題にならない。

    しかしKVSはひとつのノードが全てのレコードを保持しないため、レンジクエリやトランザクションができない。
    shardingではレンジクエリやトランザクションは可能。

    KVSのメリット 「動的なノード変更」
    shardeingのメリット 「レンジクエリとトランザクション」
    このふたつをいいとこどりした実装が欲しいというわけで生まれたのがpacific。

    pacificの実装は簡単にいうとWin MXみたいなもん。
    マスターノード(奥 一穂さんはリゾルバって呼んでる)には全てのデータに関連づけられるハッシュのキーを網羅したプライマリテーブルを持っている。
    実際にデータを持つのはp2pネットワークの子ノード。

    トランザクションを行うためには、トランザクションに必要なデータが全てひとつのノードに保持されていなければならないので、子ノードのデータは常に再配置されている。

    返信削除
  2. ごめん。
    kaiって実装はp2p使ってるけど、pacificはわからないっす。
    分散KVSのノードはp2pってのが頭を占めてしまってた。

    返信削除