【サイトURL】
Which is Hot?
http://WhichisHot.in/
【ブログ記事】
このカテゴリ記事一覧
前回に続きまして、今回はKey-Value型データストアであるMemcachedとTokyo Cabinetの使い分けについて書きたいと思います。
Which is Hot?ではメモリ上にデータを保存するMemcachedと、ディスク上にデータを保存するTokyo Cabinetを使用しています。使い分け方としては、消えても回復できるデータはMemcachedに、消えたら困るデータはTokyo Cabinetに保存しています。
Memcachedに保存するデータ
- セッションデータ
- Public Timelineの情報
- ユーザー情報
- 全体の投票回数(表示用)
- ランキングの集計結果
- 重複投票のチェック用データ
Memcachedに保存するデータ
- 全体の投票回数(復元用)
- ユーザー毎の総投票回数
- ログインしたユーザーのユーザー情報
- ユーザーのFriendsのIDリスト
- ユーザーのFollowersのIDリスト
- ランキング用:ユーザー毎の投票回数(週替わり)
- ランキング用:順位データ(週替わり)
表示用のアイコンURLやスクリーンネームなどのデータはTwitter APIを通して取得できるのと、頻繁に大量のデータの読み書きを行うため、Memcachedで保存しています。一方、誰が何回投票されたかという情報は消えては困るため、Tokyo Cabinetに保存しています。ベンチマークの結果を見ればTokyo CabinetもMemcachedに匹敵するくらい早いですから、全部Tokyo Cabinetにしちゃってもいいかもしれません。ただし書き込みが多いとかなりディスクに負荷がかかるので、書き込みが多い場合はやはりMemcachedと使い分けた方がよいでしょう。
参考:MemcachedとTokyo Cabinetの比較・ベンチマーク結果
さて、この中で1つ例外的なものがあります。それはユーザーのFriends/FollowersのIDリストをTokyo Cabinetのほうに保存している点です。これは再取得できるデータですからMemcachedでいいのですが、Memcachedは保存できるデータ量に上限があるため(たしか2KB)、10000件のID情報を保存することができません。そこで大量のデータ(2MBまでは確認)を保存できるTokyo Cabinetに保存することにしました。そのまま保存すると大きなディスク容量を消費してしまうので、gzdeflate()で圧縮して保存するようにしています。
あまり詳しい解説になってないですが、今日はここまで。
次回はランキングの方法について書いていきたいと思います。