Facebook のような通知追跡のためのデータベース設計
この記事では、Facebook の効率的な通知追跡システムの背後にあるデータベース構造を詳しく掘り下げます。ここでは複雑さには焦点を当てませんが、通知とその既読ステータスを効果的に追跡するための単純化されたテーブル構造を検討します。
Facebook の通知データベースには、通常、ID、ユーザー ID、更新などのフィールドを持つ通知と呼ばれるテーブルが含まれています。 、そして時間。このテーブルは、ユーザー通知を保存および管理するための集中リポジトリを提供します。
ただし、既読通知と未読通知を追跡するために、notificationsRead という別のテーブルが導入されることがよくあります。このテーブルには、id、lasttime_read、userid などのフィールドが含まれており、その他の属性も含まれる可能性があります。
notificationsRead テーブルの最終読み取り時刻フィールドは、ユーザーがどの通知を表示したかを判断するための参照ポイントとして機能します。未読通知を取得するために、クエリは通常、通知テーブルの time フィールドと、特定のユーザーの notificationRead テーブルの lasttime_read フィールドを比較します。 lasttime_read 値よりも時間が長い通知のみが未読とみなされます。
未読通知を取得するためのクエリの例を次に示します。
<code class="sql">SELECT `userid`, `update`, `time` FROM `notifications` WHERE `userid` IN (... query to get a list of friends ...) AND (`notifications`.`time` > ( SELECT `notificationsRead`.`lasttime_read` FROM `notificationsRead` WHERE `notificationsRead`.`userid` = ...$userid...))</code>
このアプローチは、効率的でスケーラブルな追跡方法を提供します。 Facebook のような通知 (既読ステータスと未読ステータスの両方) が別のテーブル内に表示されます。この分離により、特定の種類の通知の効率的なフィルタリングと取得が可能になります。
以上がFacebook はデータベース内の通知の読み取りステータスをどのように追跡していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。