我最近开始在DynamoDB工作。
在阅读开发人员指南和有关更新表中项目的各种教程时,我理解的是,每当我们更新项目时,它首先检查该项目是否存在于表格中。如果存在,它将更新该项,否则它将创建一个新项并插入它。
现在,我怀疑它是如何检查表中项目的可用性的。
仅基于主键吗?
好吧,我试着对它进行编码,我发现有趣的是,如果我要更改任何key attibute (GSI,LSI)
。它只是创建一个新项目。
那么我该如何更新任何项目的GSI/LSI
?
让我用一个例子详细说明,比如我有一个名为TEST
的表。表的架构是:
ID(PK/HK) - "101"
Date(RK) -"200415"
Name(GSI) -"foo"
Add(LSI) -"foo1"
orderNo(normal attribute ) -"foo2"
因此,当我尝试将orderNo更新为"foo3"
时,它工作正常。它只是将表更新为:
ID(PK/HK) - "101"
Date(RK) -"200415"
Name(GSI) -"foo"
Add(LSI) -"foo1"
orderNo(normal attribute ) -"foo3"
但如果我尝试更改某些关键属性,请添加为"some add "
。它创建了一个新项目,我的表格现在包含两个项目:
ID(PK/HK) - "101"
Date(RK) -"200415"
Name(GSI) -"foo"
Add(LSI) -"foo1"
orderNo(normal attribute ) -"foo3"
ID(PK/HK) - "101"
Date(RK) -"200415"
Name(GSI) -"foo"
Add(LSI) -"some add"
orderNo(normal attribute ) -"foo3"
解决此问题的解决方案可能是删除该项目,然后插入新项目。
还有其他方法可以解决这个问题吗?
注意: 使用了一些缩写:
PK - 主键
HK - Hash Key
RK - 范围键
GSI - 全球二级密钥
LSI - 本地辅助密钥
我使用java作为编程语言。