0

皆さんはどこかの Web サイトで何らかのメッセージを見たことがあると思います。つまり、ログインすると、「火曜日の午後 5 時 (PST) に計画的なメンテナンスのダウンタイムが発生します」などのメッセージが表示されます。そして、メッセージの目盛りがあります。それをクリックすると、メッセージが表示されなくなります。

さて、私の質問は、データベースでこれを処理する方法です。つまり、100 万人の登録ユーザーがいて、この「見た」レコードをユーザーごとに保存することにした場合、誰かがログインするたびに読み取る必要がある 100 万のテーブルができあがります。そのようなメッセージ - もちろん、テーブルははるかに速く成長します。最後に、「ジョニー、ハリー、ダイアン、およびあなたの他の 5 人の友達がプロフィールを更新しました」などのメッセージが表示される場合があります。

そのようなメッセージを毎日 10 ~ 50 通受け取ることができます。私が考えようとしているのは、これに対する最善のアプローチです。私は過去に多くの解決策を実装してきましたが、再考していて、コミュニティの他の人がそのような問題をどのように処理しているか疑問に思っています!

編集:@hakre コメントありがとうございます。実際、私は質問自体でそれを処理した1つの方法を説明しました. 誤解しないでいただきたいのですが、私が解決策を提案した場合、回答は私が望んでいない提案された解決策について議論する傾向があります。

4

1 に答える 1

1

手元に NoSQL はありますか?

私はredisを使用し、すべてのユーザーIDをセットのメンバーとしてセットを作成します(ユーザーを表示済みとしてマークする必要がある場合はIDを追加します)...ユーザーがメッセージを見たかどうかを確認するには、単純なものSISMEMBERで十分ですそれはO(1)です...

seenさらに、フィールドのデータベースクエリやテーブルの変更は必要ありません。

http://redis.io/commands/sismember

于 2013-11-03T10:23:55.180 に答える