更新Dynamo数据库表中的项目

时间:2015-05-16 08:37:33

标签: java amazon-dynamodb

我最近开始在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作为编程语言。

0 个答案:

没有答案