首页 文章

DynamoDB将StringSet重构为一对多表

提问于
浏览
0

我有DynamoDB表,具有以下结构:

  • SN(字符串 - 主分区键)

  • 标签(String)

  • 产品(String)

  • 标签(StringSet)

以下是一些示例数据:

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,但我仍然不清楚如何创建这样的结构 .

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

1 回答

  • 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表以检索特定标记的所有产品

    CONS: 如果您有数十亿条记录特定标记,那么您的表现将受到影响,因为哈希未正确分发 .

相关问题