0

新しいチャット メッセージのメール通知を実装するためのガイダンスが必要です。メール通知は、過去 1 時間に新しいメッセージがあったすべてのチャットをユーザーに通知します。

これを行うには、時間間隔内にテーブル内のすべてのチャットをクエリする必要があります。最初に頭に浮かんだのは、ハッシュがチャットに未読メッセージがあるかどうかのブール値であり、範囲がそのチャット内の最新メッセージのタイムスタンプである新しいグローバル インデックスを追加することでした。

しかし、ブーリアン ハッシュ キーは非常にアンチ パターンであることがわかりました。ドキュメントを 1 つのパーティションに圧縮するからです。

数値範囲内のテーブル内のすべてのアイテムをクエリできる別のモデルはありますか?

4

1 に答える 1

1

別のユーザーが同じことの通知を読んだ場合、あるユーザーの特定の通知の既読/未読ステータスが変更されるべきではないと想定しているため、特定のユーザーの未読メッセージを照会したいと想定しています。 .

その仮定に基づいて、ハッシュキーおよびソートキーとして(または同等の)スパースインデックスを使用する必要があります。テーブルに新しい通知を挿入するときは、値を通知のタイム スタンプに設定します。ユーザーが通知を読んだら、アイテムから属性を削除します。userIdunreadNotificationTimeunreadNotificationTimeunreadNotificationTime

なぜこれが機能するのですか?

DynamoDB では、項目にベース テーブルのキー属性のみが必要であり、その他の属性はオプションです。DynamoDB でインデックスが機能する方法は、ベース テーブルのアイテムがアイテムのインデックスにのみ表示され、その特定のインデックスのキー属性がすべて含まれていることです。

通知を保存するときの値を設定するとunreadNotificationTime、新しく作成されたすべての通知が未読メッセージのインデックスに自動的に入力されます。unreadNotificationTimeメッセージが読まれたときを削除することで、そのインデックスから通知されます。このスキーマでは、フィルタリングやスキャン操作は必要ありません。インデックスには、未読で、userId でグループ化され、日付でソートされた通知のみが含まれます。

于 2019-01-21T04:47:37.150 に答える