これはあまり一般的でない、あるいは広範囲にすることなく尋ねるのは難しい質問ですので、あまりに高いレベルのこの質問&回答形式の場合は事前にお詫び申し上げます。ストリームベースのウェブサイト - memcacheによる最適化のオプション(d)
私は頻繁に更新フィード型システムを含むシステム(ア・ラ・「さえずり」スタイル)、およびユーザーの投票に基づいてアイテムをランク付けシステムに取り組んでいます。このシステムは、(ほとんど)innodb mysqlデータベースにアクセスする、PHPで書かれたjson/restful APIに基づいています。データベースそのものは、実際には非常に高度に最適化されており、正常化されています。このシステムはまた、検索のためにスフィンクスを使用し、データ処理のためのいくつかの外部キュー&処理システムを利用する。
私の質問は:誰もがそんなには、データベーステーブルのリレーションに依存しているシステムでmemcacheのを実装する方法のために何か提案がありますか?例えば
:「ホットリストは、」誰かがアイテムに投票するたびに計算されたランクに基づいています。誰かが投票し、アイテムの新しい「ランク」が計算され、mysqlデータベースに整数として格納されます。
数分ごとにこのエントリのリストをキャッシュするためにcronジョブのようなものを書いて、DBをあまり頻繁にヒットしない方が効率的でしょうか、またはDBから 'id'リストをキャッシュするかわりに、アイテムデータをキャッシュし、リスト内の各アイテムのメモリからデータを個別に取得しますか?
カーブボールは、アイテムごとに、ユーザーがアイテムに投票したかどうかを返す必要があります。キャッシュされている可能性もありますが、チェックする必要があるものをキャッシュするのは難しいために。
私は精神的な体操のビットであることが分かりました。それは、それほど多く更新されたデータにあまり依存しているときに、実際にどのデータが理にかなっているか、キャッシュすることができるかを判断しようとしています。
いずれにしても、質問するのが正しい質問であるかどうかはわかりませんが、静的な要素がほとんどないアプリケーションのキャッシュを扱う経験が豊富な人からの洞察が大好きです。
余談としては、私は真剣にランク更新、だけではなく、Redisのリストを更新するデータベースをつまり... '位のアイテムのフィードを管理するためのRedisを使用して、代わりに当たっに探して検討しています。私は赤字で作業するのに少し時間を費やしただけなので、100%ではありません。これは、スケーラビリティに優れたシステムでこれを処理する最善の方法です。パブ/サブ:
うーん...あなたはRedisのに関して、ここでは私の興味を微調整しました。私の場合、「投票」はイベントで、アルゴリズムはハンドラであり、結果は赤で保存されますか?私は高レベルのコンセプトを理解していると思いますが、機能レベルからは、投票が行われるたびにデータベースを釘付けにする代わりに、どのようにして最高のレディスが機能するのでしょうか? –
@Jonathanここでは、さまざまな方法で - 時にはイベントそのものを使用しますが、データのキャッシュ可能なスナップショットを保存するためにredisを使用し、変更/無効化するたびにメッセージを送信することもあります。私は完璧なレディス達人であると主張していませんが(私はそれを最初からクライアントに書いていましたが、BookSleeve)、本当に調査する価値があると思います。 –
ありがとうmarc!あなたは私にredisがいかに働くことができるかについてもっと考えています...本当にあなたのフィードバックに感謝します! –