- Amazon.co.jp ・電子書籍
感想・レビュー・書評
-
RDBの弱み
・大量データ格納
・スキーマ変更
・単純/高速な処理
NoSQLの特徴
・KVS
memcached: 揮発性,典型的KVS
Redis: 揮発性だけど定期的にディスクに書き込み
Tokyo Tyrant: ディスクに書き込み
・ドキュメント指向
MongoDB: スキーマを定義しなくていい,定義するならするでインデクス張ったりできる
・列指向
(この本では具体的解説なし.HBaseとか.)
memcached
特徴
揮発性
めっちゃ速い
ハッシュ.そのものズバリ,ハッシュ.
consistent hashingで簡単にスケールする
弱み
範囲指定して検索したりは無理
プログラムからの使用
ハッシュ.ただハッシュ.
.set()を使うなら,expiresを指定できる.
使用例
RDBのキャッシュ.キャッシュされてたら読み出す,されていなければRDBから読み出してキャッシュする.
キャッシュの粒度は,大きい方がいい.細かく分けすぎると,キャッシュ効率は良くなるけど,捨てるタイミングが難しくなる.
外部APIのキャッシュ.
データ量が小さくて,1日に1回くらいしか更新されず,更新前のデータは捨てても別に良い,デイリーランキングみたいなサイトは,データを全部memcachedに載せとけばいい.
RSSとかAPIとかをプログラムから使う良い例が載ってる.
Redis
特徴
数値,配列に強い
アトミックな処理
スナップショットで永続化
プログラムからの使用
配列に特化したコマンドがいろいろある.
使用例
タイムラインの表示
incrでIDを生成
「時系列に先頭10件」は,配列のlrangeで取り出せる
検索履歴の記録
MongoDB
特徴
スキーマレス
embedで,コレクションを結びつけた問い合わせができる(embedされたコレクションは直接問い合わせられなくなる)
弱み
トランザクションができない
使用例
アンケートの解答データの保存
「アンケート全体」のコレクションに,「質問」のコレクションを埋め込める.
解析データのストレージ
(
Tokyo Tyrant
特徴
4種類のデータ型がある
オンメモリ:オンメモリのKVS
ハッシュ:ディスク上のKVS
B-tree:範囲検索が得意
テーブル:RDBっぽい感じ
プログラムからの使用
ハッシュ.(オンメモリ,ハッシュなら)
RDB風.(テーブルなら)
)
CAS操作(memcached)
アトミックな処理を実現するための仕組み
getsで読み出し,casで保存
cas idでデータの更新を確認する
(Redisはこの辺り簡単にできる,memcachedは失敗時のリトライとか書かないとダメ)
キャッシュは,データの捨て方をキッチリ考えるのが重要.
JSONをシリアライズしてvalueとしたらKVSにも放り込めるけど,JSONのスキーマに基づく問い合わせをできない.
HandlerSocketという,MySQLをNoSQL化するモノがある.詳細をみるコメント0件をすべて表示