【发布时间】:2013-08-29 02:07:02
【问题描述】:
我正在构建一个包含通知消息的 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-080026 ", "message": "Bob 推荐了一本好书。", "type": "recommended", "isbn": "1844134016" }
这些是表上定义的 Hash/Range 键:
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 提取通知。
我知道这不能用我选择的哈希/范围键来完成。本地二级索引在这里似乎也没有帮助,因为我不想在表选择的 HashKey 中工作。
那么我是否被困在进行全面扫描?我可以想象创建第二个表以将 from_user+action+isbn 映射回原始表中的项目,但这意味着我必须管理额外的复杂性......而且这个手动索引似乎很容易不同步。
任何见解将不胜感激。我是 DynamoDB 的新手,并试图了解典型数据模型如何映射到它。谢谢。
【问题讨论】:
标签: nosql amazon-dynamodb