0

データベースには、ユーザー、フィード、アイテムのテーブルがあり、ユーザーが既に見たアイテムを知る機能があるとします。サーバー上で使用して、ユーザーが購読している各フィードの [フィード ID、未読数] を短時間で計算できる設計パラダイムを探しています。

多くのユーザーがいて、フィードがバックエンドで定期的に更新されていると仮定します。

編集: Nick J が提起した問題を解決したかった (以下を参照)。しかし、cletus によって投稿されたソリューションに感謝します。私はデータベースクエリについてはそれほど心配していませんが、「設計パラダイム」が必要です-未読カウントをメモリに保持するウォッチドッグプロセスを維持して、いつでもサービスを提供できるようにするなどです。

4

1 に答える 1

1

あなたが求めていることはかなり単純なので、何を正確に伝えればよいかわかりません。

まず、オンライン フィード アグリゲーター/リーダーのリファレンスとしてGoogle リーダーを使用します。また、機能を再現しようとしている場合は、Google リーダーがすでにほぼ成功しています (imho)。

Google リーダーは、フィードのリストを保存するだけで機能します。DB 用語では、おそらくこれらのエンティティがあるでしょう。

User: id, name, email, etc...
Feed: id, feed_name, feed_url
Content: id, feed_id, title, content
User Feed: id, user_id, feed_id, user_label, has_read

未読アイテム:

SELECT COUNT(1)
FROM user u
JOIN user_feed uf ON uf.user_id = u.id
JOIN feed f ON f.id = uf.feed_id
WHERE has_read = 0

フィード別の未読アイテム:

SELECT feed_id, feed_name, COUNT(1)
FROM user u
JOIN user_feed uf ON uf.user_id = u.id
JOIN feed f ON f.id = uf.feed_id
WHERE has_read = 0
GROUP BY feed_id, feed_name

そして、アイテムを既読としてマークするためのメカニズムが必要です。Google リーダーの場合、マウスオーバー イベントによってトリガーされる AJAX 呼び出しだけで、すべてを既読としてマークしたり、項目を未読としてマークしたままにするなどのリンクが追加されます。

于 2009-06-12T21:35:47.593 に答える