dynamodb 表之间的关系

Posted

技术标签:

【中文标题】dynamodb 表之间的关系【英文标题】:Relations between dynamo db tables 【发布时间】:2015-05-15 18:46:02 【问题描述】:

我有两个名为 Country 和 State 的表。 如何通过映射关系获取国家信息。 这是我的代码:

表格:

@DynamoDBTable(tableName = "cd_country2")
public class Country implements Serializable 
    private static final long serialVersionUID = 5698425418072128936L;

    @DynamoDBAutoGeneratedKey
    @DynamoDBHashKey
    private String countryId;

    private String countryCode;
    private String countryName;
    private Long isActive;


@DynamoDBTable(tableName = "cd_state2")
public class State implements Serializable 

    private static final long serialVersionUID = -7289597915417184960L;

    @DynamoDBAutoGeneratedKey
    @DynamoDBHashKey
    private String stateId;

    @DynamoDBRangeKey
    private String countryId;

    private String stateCode;

    private String stateName;

    private Long isActive;

【问题讨论】:

【参考方案1】:

在您的申请中,一个州可以位于多个国家/地区吗?如果不是,则无需将 countryId 设为 rangeKey。像这样的东西应该可以工作:

@DynamoDBHashKey
private String stateId;

// attributes    
private String countryId;

private String stateCode;

private String stateName;

private Long isActive;

给定一个 stateId,您可以从“cd_state2”表中找到它所属的 countryId。

另一方面,我建议使用这样的架构:

HashKey: countryId
RangeKey: stateId
Attributes: stateCode, stateName, isActive

然后在此表之上构建一个 GSI:

HashKey: stateId

因此假设 stateId 在国家/地区是唯一的,给定一个州,您可以通过在 GSI 表上执行 GET 来找到它的国家/地区。此外,给定一个 countryId,您可以通过查询基表找到其中的所有州。

【讨论】:

以上是关于dynamodb 表之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

DynamoDB入门知识和一些注意事项

如何在DynamoDB中访问关系数据(键与查询)

按日期查询DynamoDB

如何使不同 DynamoDB 表中的数据相互关联?

用于过滤用例的AppSync DynamoDB解析器

使用全局二级索引的 DynamoDB 表查询项