ソーシャルアプリで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使って一度複雑なクエリを組んでしまうと、レプリケーションとか、shardingとか、パフォーマンスとか考えると面倒くさい。
  • いろいろ考えると、もうRDBMSでなくても良いのではないか。

RDBMS以外の選択肢はどのようなものがあるか

  • キーバリューストアとか

あとは何があるか。

  • ファイルに記録とか。
  • データの座標と、データの実体を別に持つとか。しかし、この方法は、よほどの状況でない限り、キーバリューストアや、DBで代用できるか。

キーバリューストアで用意されている機能

  • set / get /delete
  • add /replace / cas
  • incr / decr
  • append / prepend

キーバリューストアで困ること

データのロックはどうする
  • バージョニングカラムによる、オプティミスティックロックとか。
分散処理での問題。トランザクション中にネットワークが切れたらどうする。

キーバリューストアでソーシャルアプリを組む場合の例。仮に「英雄になりたい」を作るとしたら

GREEアプリの一つです。 http://mpf.gree.jp/11 (携帯のみ対応)

データの持ち方
ランキングの表示はどうする
  • 全データdumpして集計するのはちょっと。
  • 適当なタイミングでRDBMSに入れたり。
  • インメモリで持ってしまったり。MMO RPGのようにデータがどんどん変わるようシステムだと、データの管理は基本インメモリで行われています。

あとは非同期でログっぽくデータ入れていったりかなー

キーバリューストアの不満

  • キーに複数の値を入れた時に、その一部だけを取りたい。
  • Prefixサーチだけで良いからキーで検索したい
  • しかし、キーが変わると、データの物理的な保存箇所が変わったりするので難しい。
  • 対応方法としては、一部のサーバーに検索対象のキーが集まるように工夫するとか、インデックスサーバーを用意するとか。

面白いと思うデーターベース

質疑応答

  • memcachedの不満な点はどこ
  • いろいろ
  • GREEでは単純な1:1のキーバリューストアしか使っていない
  • キーバリューストアにシリアライズして入れる場合のいけてるフォーマットは何か
  • GREEPHPなので、PHPで適当に入れてる。

まとめ

30分くらいしか聞けなかったので、あっという間に終わってしまいました。


Webサービス系のシステムではユーザ数、データ量は大きいかもしれないけれど、
一般的な業務システムと比べるとデータ間の関連を利用しなければいけないような処理はそれほど多くありません。
サービスの負荷が急に上がる事もあるので、負荷対策の手間まで考えると、キーバリューストア中心のシステムも悪くない選択肢です。


もちろん、キーバリューストアが向いてないシステムではやってはいけません。
あと、デベロッパーがキーバリューストアを使い慣れていない上に、学習意欲が低かったり、
これまでの手法にこだわるメンバーばかり抱えているなら、キーバリューストアが有効なシステムであっても自分なら利用を避けるでしょう。


キーバリューストアを使って複雑なデータを取得したい時は、何カ所からかデータを引っ張ってから、集めたデータを加工して作ることになります。
そうなると、SQLで構造作って、一発で引いて、そのまま表示すれば良いだけ、ってことにはならないので、ビュー側の開発者に手間がかかります。
手間がかかれば、工数も上がるし、トラブルも起きやすくなるので、システム設計者としては悩む所でしょう。
腕の立つ開発者ばかり揃えられたら苦労しないのですがなー。

アンケートの「GREE社への転職を希望する」の項目について

GREEでは、ただいま、GREEのエンジニアになりたい方を大募集中です。
GREEのエンジニアだと、インフラエンジニアとか、ゲームのエンジニアがすごく目立つと思うのですけど、
ちゃんと、それ以外の普通のWebシステムなエンジニアもいるので、
GREE Platformとか、コミュニティとか、スマートフォンとか、やりたい人は応募してくれると嬉しいです。
自分もちゃんと「GREE社への転職を希望する」にチェックを入れておいたよ!!