Python Hackathon #3で、今手元で作っているモノのバックエンドに使えないかなぁと思ってRiakを調べてみたのでメモ。Riakは、bashoが作っているDynamoクローンにHTTP/JSONなインターフェースを出して、MapReduceもできるようにしたというキワモノ。でもConsistent HashingとMapReduceって激しく相性悪いと思うんだけどどうなっているんだろうという辺りが疑問点。
とりあえずインターフェースはJSON/HTTPだけど、Erlang APIもある。
Riak's primary programming interface is JSON over (RESTful) HTTP, which is as close as you can come these days to a universal language and protocol for data exchange. If you can process JSON and issue an HTTP request, you can easily use Riak.
スケールダウンも簡単と書いてあった。バケツ再配置とかかなぁ。ゆっくりノードを落としていかないとchurnしてしまうけど。
あーきてくちゃ
- 160-bit integer hashing space
- consistent hashing
- gossip protocol for node table design
- simple quorum-based replication in put operation
- N-1 sequencing node for replication
- at least W (=
- at least DW (=
- causality
- vector clock でできる範囲で更新矛盾は解決するけど、concurrentなやつはアプリでお願いね!
- merkle treeで同期してるよ!→merkle treeの詳細忘れた…
- Event driven operations
- イベントハンドラをどこかに登録できる
- ログ吐いたりアラート出したりできるとか
- これは便利そうだけど、運用機能もソフトウェアに入れていいのかなぁ
結局ドキュメントだけだとよく分からなかったのだけど、サンプルコードを見るとbucketをriak_client:mapred/2の引数に渡しているので、このbucketのセットでMapReduceを実行してしまうことになるらしい。となると、bucketの位置づけがもうちょっとちゃんと分からないといけない。
所感
実際にできることはCouchDB+Loungeとそんなに変わらない。Webmachineとかと組み合わせるとかなり強力になるんだろうと思う。ちなみに比較としては、モノリシックにConsistent Hashingを組み込んでいるRiakの方が好印象(数十台を越えた辺りで、運用のコストに差が出てくると思う)。僕のに採用できるかどうかはもうちょっと考えないと分からない。
まとめると多分こんな感じ。裏側はほとんどKaiと同じで、bucketをインターフェースで見せてるかどうかくらいが大きく違うポイント。
Riak - map/reduce - JSON/HTTP = Kai − memcached interface
どうでもいいけど、ドキュメントがreST形式になってるっぽい。それともedocなのかな。