Database design DynamoDB设置为一对多表

Database design DynamoDB设置为一对多表,database-design,nosql,amazon-dynamodb,Database Design,Nosql,Amazon Dynamodb,我有DynamoDB表,其结构如下: SN(字符串-主分区键) 标签(字符串) 产品(串) 标记(字符串集) 以下是一些示例数据: SN Label Product Tags XXXX-123 Acme Cheese System One Z100 {"Acme Cheese", "Z100"} XXXX-456 Acme Cheese System Two X22

我有DynamoDB表,其结构如下:

  • SN(字符串-主分区键)
  • 标签(字符串)
  • 产品(串)
  • 标记(字符串集)
以下是一些示例数据:

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字段编制索引。根据这个问题:,建议使用一对多表来构造数据。我已经阅读了这里的文档,但是我仍然不清楚如何创建这样的结构


我的问题是:如何创建这样一个表?我的表架构和键是什么样子的

我遇到了一个类似的问题,我通过将主表拆分为多个表来解决这个问题

下面是模式

SN_Master:

SN - Hash
Label
Product

SN_Details:

TagName - Hash 
SN - Range
因此,无论何时插入任何行,都必须在序列号主控中插入主信息和序列号详细信息中的标记相关信息

因此,现在您的数据基本上如下所示:

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
现在您可以查询SNU details表来检索特定标签的所有产品

缺点:如果一个特定标记上有数十亿条记录,那么由于散列分布不正确,您的性能将受到影响