我正在构建一个包含通知消息的 DynamoDB 表。消息从给定用户 (from_user) 定向到另一个用户 (to_user)。它们很简单:
{“to_user”:“e17818ae-104e-11e3-a1d7-080027880ca6”,“from_user”:“e204ea36-104e-11e3-9b0b-080027880ca6”,“notification_id”:“e232f73c-104e-11e3-9b30-0800278”, message": "Bob 推荐了一本好书。", "type": "recommended", "isbn": "1844134016" }
这些是表上定义的哈希/范围键:
HashKey:to_user,RangeKey:notification_id
案例 1:用户定期打电话回家询问任何可用的通知。
使用这些键,很容易获取等待给定用户的通知:
Notifications.query(to_user="e17818ae-104e-11e3-a1d7-080027880ca6")
情况 2:一旦用户看到一条消息,他们会明确地确认并删除它。使用给定的 Hash/Range 键同样可以简单地完成:
Notifications.delete(to_user="e17818ae-104e-11e3-a1d7-080027880ca6", notification_id="e232f73c-104e-11e3-9b30-080027880ca6")
情况 3:有时可能需要删除此表中由 to_user 和 notification_id 以外的键标识的项目。例如,用户 Bob 决定取消推荐一本书,我们希望使用 from_user=Bob、action=recommended 和 isbn=isbnval 提取通知。
我知道这不能用我选择的 Hash/Range 键来完成。本地二级索引在这里似乎也无济于事,因为我不想在表选择的 HashKey 中工作。
那么我是否坚持进行全面扫描?我可以想象创建第二个表以将 from_user+action+isbn 映射回原始表中的项目,但这意味着我必须管理额外的复杂性......而且这个手动索引似乎很容易不同步。
任何见解将不胜感激。我是 DynamoDB 的新手,并试图了解典型数据模型如何映射到它。谢谢。