3

「ストア」のグループがあり、それぞれに「製品」がリストされています。

更新/通知システムの一部として、ユーザーはストアを「フォロー」し、ストア内の製品を「見る」ことができます。ストアが更新を投稿した場合、または変更された場合。または、製品の価格が変更された場合、または変更された場合など - フォロワー/ウォッチャーのフィードに通知が表示されるようにします。

これらのストア/製品の一部には多数のフォロワー/ウォッチャーがいる可能性があるため、通知テーブルに一意のレコードを挿入する必要はありません。これが適切にスケーリングされることを確認しようとしています。

同様に、ユーザーが製品またはストアをそれぞれ「ウォッチ解除」または「フォロー解除」した場合、それらの通知がそのユーザーのフィードから消えるようにします。

最後の望ましい側面は、ユーザーが通知を見たときに通知を「閲覧済み」または「既読」としてマークできるようにすることです。これにより、通知バブルをナビゲーション バーに配置できます。

新しいイベントがフィードに投稿されたときに、データベース テーブルに過剰に挿入する必要なく、これをサポートするスキーマを考え出すのが本当に難しいです。

このアーキテクチャをサポートするために使用できる単純なデータベース スキーマを提案できる人はいますか?

4

1 に答える 1

1

データベース設計をプレーン テキストでモックアップする適切な方法はわかりませんが、私の例が理解できることを願っています。以下は機能しますか?

スキーム#1

テーブル:users フィールド:user_id

テーブル:stores フィールド: store_id,last_update

テーブル:products フィールド: product_id,last_update

テーブル:subscriptions フィールド: user_id, id[store_id|product_id],active

テーブル:feed フィールド: row_id, user_id, id, notified_date, viewed_date,active

いくつかの例をモックアップする

サブスクリプション:

doej, store1, true
doej, product1, true
doej, product2, true
...

ユーザーが登録を解除したとき

doej, store1, false

餌:

ストアの更新時にフィード行を作成し、通知を送信する

1, doej, store1, 2015-01-01, null

ユーザー ビューが行を更新するとき

1, doej, store1, 2015-01-01, 2015-01-03

もちろん、「フィード」のユーザーのビューには、おそらくサブスクリプションとフィード テーブルの結合と、アクティブなサブスクリプションが true であることの確認が含まれます。

スキーム#2

スキーム 1 の問題点は、フィード テーブルが必要以上に大きくなることです。可能性のあるすべての更新のフィードの代わりに、日付のしきい値と表示された更新のログを組み合わせて使用​​することもできます。

テーブル:users フィールド:user_id

テーブル:stores フィールド: store_id,last_update

テーブル:products フィールド: product_id,last_update

テーブル:subscriptions フィールド: user_ididactive

テーブル:updates フィールド: post_id, id[store_id|product_id], date,description

テーブル:viewed フィールド: post_iduser_iddate

製品の更新投稿

post1, product1, 2015-12-03, 'new and improved'

ユーザーが購読しています

doej, product1, true

更新投稿が日付のしきい値内であり、ユーザーが製品を購読しており、表示されたテーブルにレコードがない場合、ユーザーの投稿を表示します

ユーザーが日付のしきい値内 (たとえば 3 か月以内) に投稿を表示するため、viewedテーブルを更新します。

post1, doej, 2015-12-07

その後のサイト訪問では、ユーザーへの投稿が表示されません。既に閲覧されています

このスキームでは、ストア/製品の更新に関するレコードは 1 つだけであり、ユーザーの「フィード」アクティビティに関する唯一のレコードは実際のビューです。アイテムが日付のしきい値よりも古い場合、他のすべては「フィード」ビューからロールオフされます。

したがって、私が目指しているのは、アクティブなイベント (製品の更新とユーザー ビュー) のみを記録することだと思います。ユーザーへの更新の通知は、ユーザーが表示しない可能性があるという意味で受動的であるため、フィードに記録しないでください。日付のしきい値でパッシブ イベントを処理します。

于 2015-12-16T17:18:21.600 に答える