「ソーシャルアプリでNoSQL(あるいはKVS) 〜実践NoSQL〜」に行ってきた
ソーシャルアプリでNoSQL(あるいはKVS) 〜実践NoSQL〜
- 2010/07/23(金)
- オプトさんの例のセミナー
- GREEのCTOの人
- ソーシャルアプリでNoSQL(KVS)の話
- KVSの利用者は少ない? 2/3ぐらい
- 副題 : 如何にして5キーに耐えるか
- NoSQL = Not Only SQL
- 世にプロダクトはたくさんある
- それぞれさまざまな特性がある(オンメモリ、分散、性能、実績などなど)
- それ MySQL(Drizzle) でできるよ
- NoSQL と言い出すまでの歴史
- 1998 年ぐらいから言われ始めたらしい
- 第一期 : RDBMS でいいよね期
- 第二期 : memcached も便利だよね期
- 第三期 : やっぱりスケーラビリティだよね期
- mixi などでの分散とか
- sharding
- JOIN できない><
- トランザクションできない><
- 複雑なSQL書いたら怒られた><
- RDBMS の機能を余り使っていない
- 第四期 : 全部 RDBMS じゃなくてもいいよね期
- NoSQLのデータモデル
- 1 : 1
- ハッシュテーブル
- 一番シンプル
- kumofs / Flare / Voldemort とか
- パフォーマンス / 安定性 / sharding / replication / Failover
- サーバを追加すると自動で負荷が分散されたりする
- メソッドとか
- set / get / delete
- add / replace / cas の違いとか
- add -> INSERT
- replace -> UPDATE
- cas -> compare and swap (version 管理して意図しない上書きを抑制できる)
- incr / decr -> increment / decrement
- append /prepend
- vector clock
- consistency を確保するための仕組みらしい
- 何かしらの指標によって、replication の失敗を発見して、回復しようとする仕組み?
- consistency policy
- serialized object
- multi get problem
- disk i/o -> tmpfs
- 実例
- 複数のデータを一気にとるときに大変
- 100パラメータ x 100ユーザ x 100アクセスとか
- serialize する?
- get は1回
- 並列すると conflict -> CAS
- 値でのランキングとか
- 要するに集計したい
- 全データを dump する
- 適当なタイミングで RDBMS に flush
- だいたい in memory での運用
- MMORPG とか
- オンメモリでいろいろやって、レベルアップとかのタイミングでデータベースに flush するそうな
- 1 : n
- Redis
- 1 : 1
- List
- Set (Hash)
- 便利になるが、パフォーマンスリスクが高い
- さらに table っぽく
- Casandra
- Keyspace.ColumnFamiry.Key.Column
- 多重Hashのような
- バイナリログ + メモリテーブルのような感じ
- m : n
- Key の prefix search がしたい!
- 解決法?
- Index Server
- Ring w/ Sorted Key
- Skip Graph ?
- value で検索したい!
- RDBMS との使い分けも考えてみるのがいいと思っているらしい
- Casandra / Redis の好きじゃないところ
- 自動分散ができない?
- master/slaveにはできるがslaveに書き込めたりする
- GREE では?
- serializeに適切なフォーマットは?
- GREEはPHPなので…
- 多言語ならMessagePackとかいいんじゃないでしょうか
Tags:
Casandra,
MongoDB,
MySQL,
NoSQL,
TokyoTyrant
最近のコメント