ソーシャルアプリでNoSQL(あるいはKVS) 〜実践NoSQL〜 みてきた。感想とか、思うところとか。
2010/07/23に株式会社オプト1F大会議室で行われた
「ソーシャルアプリでNoSQL(あるいはKVS) 〜実践NoSQL〜
オプト主催ソーシャルアプリコンテストタイアップセミナー #sac2010」いってきました。
http://www.contents-one.co.jp/social/2010/05/post-4.php
地図上では一見、駅から2分くらいの距離に見えたのですけど、
実際には、神保町の9A出口から出て、だいたい25分くらいかかりました。駅から結構遠かったなー。
というわけで、30分くらい遅れて途中からです。わざわざ行かなくても、UStreamで流していたらしいですけどね。
RDBMS面倒くさい
RDBMS以外の選択肢はどのようなものがあるか
- キーバリューストアとか
あとは何があるか。
- ファイルに記録とか。
- データの座標と、データの実体を別に持つとか。しかし、この方法は、よほどの状況でない限り、キーバリューストアや、DBで代用できるか。
キーバリューストアで用意されている機能
- set / get /delete
- add /replace / cas
- incr / decr
- append / prepend
キーバリューストアで困ること
データのロックはどうする
- バージョニングカラムによる、オプティミスティックロックとか。
キーバリューストアでソーシャルアプリを組む場合の例。仮に「英雄になりたい」を作るとしたら
GREEアプリの一つです。 http://mpf.gree.jp/11 (携帯のみ対応)
キーバリューストアの不満
- キーに複数の値を入れた時に、その一部だけを取りたい。
- データに階層を持たせたい。
- Cassandra というのがあります。http://cassandra.apache.org/
- Prefixサーチだけで良いからキーで検索したい
- しかし、キーが変わると、データの物理的な保存箇所が変わったりするので難しい。
- 対応方法としては、一部のサーバーに検索対象のキーが集まるように工夫するとか、インデックスサーバーを用意するとか。
- Valueで検索したい
- Google App Engineのデータストアでは、制限がいくらかあるが、そういうことができている。
- MongoDB http://www.mongodb.org/
- マルチキーなキーバリューストアが欲しい
- Redis http://code.google.com/p/redis/
面白いと思うデーターベース
- MongoDB http://www.mongodb.org/
- HBase http://hbase.apache.org/
質疑応答
まとめ
30分くらいしか聞けなかったので、あっという間に終わってしまいました。
Webサービス系のシステムではユーザ数、データ量は大きいかもしれないけれど、
一般的な業務システムと比べるとデータ間の関連を利用しなければいけないような処理はそれほど多くありません。
サービスの負荷が急に上がる事もあるので、負荷対策の手間まで考えると、キーバリューストア中心のシステムも悪くない選択肢です。
もちろん、キーバリューストアが向いてないシステムではやってはいけません。
あと、デベロッパーがキーバリューストアを使い慣れていない上に、学習意欲が低かったり、
これまでの手法にこだわるメンバーばかり抱えているなら、キーバリューストアが有効なシステムであっても自分なら利用を避けるでしょう。
キーバリューストアを使って複雑なデータを取得したい時は、何カ所からかデータを引っ張ってから、集めたデータを加工して作ることになります。
そうなると、SQLで構造作って、一発で引いて、そのまま表示すれば良いだけ、ってことにはならないので、ビュー側の開発者に手間がかかります。
手間がかかれば、工数も上がるし、トラブルも起きやすくなるので、システム設計者としては悩む所でしょう。
腕の立つ開発者ばかり揃えられたら苦労しないのですがなー。