我有一个具有以下结构的DynamoDB表:
以下是一些示例数据:
SN Label Product Tags
XXXX-123 Acme Cheese System One Z100 {"Acme Cheese", "Z100"}
XXXX-456 Acme Cheese System Two X22 {"Acme Cheese", "X22"}
XXXX-789 Bob's Burritios System One Z100 {"Bob's Burritios", "Z100"}
我需要能够查询特定标记并返回包含指定标记的所有项目。例如,我可能会编写一个查询来查找标记为“Acme Cheese”或“Z100”的所有项目。我想要检索包含此标记的所有项目。
我无法使用全局二级索引,因为DynamoDB不支持索引StringSet字段。根据这个问题:DynamoDB - Global Secondary Index on set items,建议使用一对多表来构建我的数据。我在这里阅读了文档DynamoDB Docs: OneToMany,但我仍然不清楚如何创建这样的结构。
我的问题是:我如何创建这样的表格?我的表架构和键会是什么样的?
答案 0 :(得分:1)
我有类似的问题,我通过将主表分成多个表来解决这个问题。
以下是架构
SN_Master:
SN - Hash
Label
Product
SN_Details:
TagName - Hash
SN - Range
所以,现在每当你插入任何行时,你必须在sn_master中插入主要信息并在sn_details中标记相关信息
所以现在基本上你的数据看起来像是:
SN Label Product
XXXX-123 Acme Cheese System One Z100
XXXX-456 Acme Cheese System Two X22
XXXX-789 Bob's Burritios System One Z100
TagName SN
Acme Cheese xxxx-123
Z100 xxxx-123
Acme Cheese xxxx-456
现在,您可以查询sn_details表以检索特定标记的所有产品
缺点:如果你有数十亿条记录特定标记,那么你的表现会受到影响,因为哈希没有正确分发。