如何在 dynamoDB 中拥有复合键?
How to have a composite key in dynamoDB?
我在 dynamo 中有以下 JSON:
{
cdItem: "123456",
dtItem: "2021-03-01"
}
我的 hashkey
是 cdItem
。
我需要我的 dtItem
也是一把钥匙。因此,如果我发送具有相同 cdItem
但不同 dtItem
的项目,它会创建一个新记录并且不会更新现有记录。
我该怎么做?或者,是否可以这样做?
您可以通过多种方式实现这一点,它们取决于您的访问模式。
如果您只想要请求一个您知道cdItem
和dtItem
值的项目,您可以让分区过载通过连接它们来生成密钥,例如123456#2021-03-01
这样您就可以保留现有的 table.
更灵活的解决方案是使用 composite primary key,它是分区和排序键的组合。这需要您创建一个新的 table.
我会这样设置:
cdItem (Partition Key)
dtItem (Sort Key
123456
2021-02-27
123456
2021-02-28
123456
2021-03-01
654321
2021-03-01
您必须在每个 PutItem
请求中提供这两个属性。
您还可以使用两个值调用 GetItem
来检索单个项目,您可以使用 Query
[=] select 给定 cdItem
值的所有 dtItem
值35=] 以及对 dtItem
.
的值进行一些过滤
我在 dynamo 中有以下 JSON:
{
cdItem: "123456",
dtItem: "2021-03-01"
}
我的 hashkey
是 cdItem
。
我需要我的 dtItem
也是一把钥匙。因此,如果我发送具有相同 cdItem
但不同 dtItem
的项目,它会创建一个新记录并且不会更新现有记录。
我该怎么做?或者,是否可以这样做?
您可以通过多种方式实现这一点,它们取决于您的访问模式。
如果您只想要请求一个您知道cdItem
和dtItem
值的项目,您可以让分区过载通过连接它们来生成密钥,例如123456#2021-03-01
这样您就可以保留现有的 table.
更灵活的解决方案是使用 composite primary key,它是分区和排序键的组合。这需要您创建一个新的 table.
我会这样设置:
cdItem (Partition Key) | dtItem (Sort Key |
---|---|
123456 | 2021-02-27 |
123456 | 2021-02-28 |
123456 | 2021-03-01 |
654321 | 2021-03-01 |
您必须在每个 PutItem
请求中提供这两个属性。
您还可以使用两个值调用 GetItem
来检索单个项目,您可以使用 Query
[=] select 给定 cdItem
值的所有 dtItem
值35=] 以及对 dtItem
.