pcsmartphone【サイト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()で圧縮して保存するようにしています。

あまり詳しい解説になってないですが、今日はここまで。
次回はランキングの方法について書いていきたいと思います。