2016-04-22 10 views
0

私はソーシャルメディアアプリを開発しています。私は、Facebookが新しい投稿を作成するとき(Facebookのように)ユーザーに通知するオプションを提供したいと思います。まず、私は含まれていNotificationテーブル作成:facebookはファンに壁の更新を通知する方法を教えてください。

Id(PK) 
UserId 
PageId 
PostId 
ReadBit 
Date 

をしかし、これは意味がありません。ページに興味のあるファンが1000人または500人いる場合は、関心のあるファンごとに論理的に1000レコードまたは500レコードを作成するわけではありません。それを行う別の方法がありますか?

+0

なぜ論理的に意味がないのですか。 –

+0

要点は、ファンの数が抱き合うかもしれないということです。これは5000または10000でもかまいません。つまり、1つの投稿が作成されるたびに10000レコードが作成されます。ファンが100000人に増えたら?これは分かりやすいですか? –

+0

Facebookはそれを2011年に戻しました。それ以来、どれくらい変化しているのかよく分かりませんが、その時点でアプリはおそらくもっと大きくなっていました。https://www.facebook.com/notes/facebook-エンジニアリング/ライブコメント - 背後にある/ 496077348919 –

答えて

0

あなたが話している情報には、ページと投稿の2種類があります。

ユーザーがページにオプトインする場合、これは永続的である必要があるため、これを表すデータベースエントリが必要です。標準的な方法は、購読しているユーザーとページごとに1レコードを取得することです。

Subscription(id, user_id, page_id) 

正確な要件によっては、より簡単な解決策が存在する可能性があります。たとえば、ページがトピックに関するもので、ユーザーがトピックではなくページを購読していない場合は、ユーザーとトピックごとにサブスクリプションを格納すれば十分です(車に関する50ページ、コンピュータに関する70ページなど)。しかし、あなたの文章はこれを示していません。

2番目の質問は、投稿がページに作成されたときの通知プロセスを追跡する方法です。厳密に言えば、そのような通知ごとにデータベースレコードは必要ありません。ページが変更されたら、サブスクリプションテーブルを使用しているすべてのサブスクライバをルックアップし、ループ内で通知を生成します。あなたは、あなたが通知だったときにタイムスタンプを格納する必要がある場合、すなわち

Notification(id, subscription_id, ...) 

これがケースかもしれないが、通知あたりの記録が必要になり、そのような各通知についてのいくつかの追加の永続的な情報を必要とする場合にのみ

通知プロセスのステータス情報がある場合は、ユーザーが通知に反応したかどうか。

関連する問題