セットアップ:
ユーザーが投稿を送信すると、それが多数 (数百、数千、またはそれ以上) のユーザーによって読まれる「Twitter のような」サービスを想像してみてください。
私の質問は、キャッシュとデータベースを設計して、迅速なアクセスと多くの読み取りを最適化しながら、ユーザーが(必要に応じて)古い投稿を表示できるように履歴データを保持する最善の方法に関するものです。ここでの仮定は、ユーザーの 90% が新しいものだけに興味を持ち、古いものには時々アクセスするということです。ここでのもう 1 つの仮定は、90% を最適化したいということです。古い 10% の取得に少し時間がかかっても問題ありません。
これを念頭に置いて、私の調査では、キャッシュを 90% に使用し、投稿を別の長期永続システムに保存するという方向性を強く示しているようです。したがって、これまでの私の考えは、Redis をキャッシュに使用することです。利点は、Redis が非常に高速であることと、多くの人に投稿を公開するのに最適な pub/sub が組み込まれていることです。そして、MongoDB をより永続的なデータ ストアとして使用して、Redis から期限切れになったときにアクセスされる同じ投稿を保存することを検討していました。
質問:
1. このアーキテクチャは水を保持しますか? これを行うより良い方法はありますか?
2. Redis と MongoDB の両方に投稿を保存するメカニズムに関して、私はアプリに 2 つの書き込みを行わせることを考えていました。2 つ目 - Redis への保存に成功したら、すぐに MongoDB に書き込みます。これが最善の方法ですか?代わりに、Redis に期限切れの投稿を MongoDB 自体にプッシュさせる必要がありますか? と思ったのですが、Redisから直接MongoDBにpushするという情報はあまり見つけられませんでした。