2

Facebookのような通知システムを作りたかったのですが、どうやってそれを実現するか、方法が思い浮かびません。

私はここで、テーブルを 1 つ持つなどのさまざまな意見について読みましたが、他の人は 2 つあると言っています。

ただし、必要なデータエントリのみを使用して最も効率的な方法を試しています。これはnotficationこれまでの私のテーブルです: id、uid、type、read (boolean)、date。

だから私は一つの例を考えました:

コメントを挿入し、uid (user_id)、タイプ (コメント、いいねなど)、read='1'、NOW() を挿入する通知関数を呼び出します。

何かを投稿しているときに通知を受け取りたくないので、 read を 1 に設定します。notification次に、他のすべてのユーザーがこの新しい投稿をまだ読んでいないため、read を 0 に設定して更新しようと考えました。

でも今は5秒後くらいに別の投稿とか考えてます。次に、他のすべてのreadエントリが再び 0 に設定されますが、これは正しいことですが、このシナリオでは、個々のユーザーごとに正しい結果を表示 (SELECT) することは考えられません。どのユーザーがどの新しい通知を見逃したかが特定されていないためです。

あなたが私をフォローして、何か提案をしてくれることを願っています。一般的に間違った方法で行っている場合は、アドバイスもいただければ幸いです。

4

2 に答える 2

5

まず、通知がすべての用途にブロードキャストされているか、ユーザー固有のものであるかを知る必要があります。Facebook の場合は、2 番目のオプションだと思います。

私の最初の推奨事項は、この機能を実装しているオープンソース プロジェクト (または 2 つかもしれません) を見つけて、そのコードを調べることです。

私の 2 番目の推奨事項は、この機能のすべての要件を書き留めることです。多くの場合、小さな制限がテーブル構造の変更や新しいテーブルの追加を引き起こす可能性があります (たとえば、通知を複数のユーザーに送信できます)ユーザーは別のユーザーに通知を送信できますか?...)。

メッセージ用に 1 つ、ユーザーとの NtoN 関係用に 1 つの 2 つのテーブルを使用して、私が行く方法は次のとおりです

ID // auto increment ID
sender_id // Can be a subsystem or another user. To be defined / optional. Does not have to be a foreign key.
title // Title of the notification
body // The text message
type // warning, message, error or any notification class you can think of
... // you can add other options, like priority, attachment...

テーブル Notification_User

notification_id // Foreign Key for the notification
receiver_id // Foreign Key for the user
is_read // is the notification read
is_deleted // is the notification deleted, this implements a Trash bin like feature
created_at // time at which the notification was sent
read_at // time at which the notification was read
deleted_at // Time at which the notification was deleted
于 2012-09-21T08:02:57.740 に答える
3

すべての通知を保存する列 (notification_id、notification_msg、create_date) を持つ通知テーブルを用意することをお勧めします。次に、列 (userid、notificationid、read) を持つ別のテーブル notification_user を用意します。ここには、すべてのユーザー ID と通知 ID を格納します。したがって、1000 人のユーザーに 1 つの通知があるとします。メッセージを最初のテーブルに保存し、1000 人のユーザーの ID と通知 ID を 2 番目のテーブルに保存します。そうすれば、ユーザーが特定の通知を読み、read を 1 に設定したときを簡単に追跡できます。

于 2013-08-07T15:10:28.873 に答える