Java 更新Dynamo DB表中的项目
我最近开始在DynamoDB工作 在阅读《开发人员指南》和各种关于更新表中项目的教程时,我的理解是,每当我们更新项目时,它都会首先检查该项目是否存在于表中。如果存在,它将更新该项,否则它将创建一个新项并将其插入 现在,我的疑问是它如何检查表中项目的可用性 是否仅基于主键 嗯,我试着对它进行编码,我发现有趣的是,如果我将更改任何Java 更新Dynamo DB表中的项目,java,amazon-dynamodb,Java,Amazon Dynamodb,我最近开始在DynamoDB工作 在阅读《开发人员指南》和各种关于更新表中项目的教程时,我的理解是,每当我们更新项目时,它都会首先检查该项目是否存在于表中。如果存在,它将更新该项,否则它将创建一个新项并将其插入 现在,我的疑问是它如何检查表中项目的可用性 是否仅基于主键 嗯,我试着对它进行编码,我发现有趣的是,如果我将更改任何键attibute(GSI,LSI)。它只是创建了一个新项目 那么,我应该如何更新任何项目的GSI/LSI 让我用一个例子来详细说明一下,比如我有一个名为TEST的表。表的
键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"
但是,如果我试图更改一些关键属性,请说addas“someadd”
。它将创建一个新项,“我的表”现在由两个项组成:
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"
解决此问题的解决方案可能是删除该项,然后插入新项
没有别的办法解决这个问题吗
注意:
使用的一些缩写:
主键
HK-散列密钥
RK-范围键
GSI-全局辅助密钥
LSI-本地辅助密钥
我使用java作为编程语言。您能提供实际的表定义和运行以获得此结果的实际代码吗?嘿,我没有任何方法来更新项。在我的例子中,我使用的是PUTITEM。DynamoDB中不能有多个具有相同主键的项,因此您对所看到内容的描述对我来说没有意义。LSI和GSI具有投射到其上的项目属性。请提供一个你的问题,因为它的立场,它没有意义,我。您甚至可以从控制台截取表的屏幕截图,查看索引和表结构。好的。。我会更新我的问题。我想知道的是,是否可以更新GSI或LSI?不,您只能从GSI或LSI读取。为了更新GSI或LSI,必须更新表中的项,然后将这些更新传播到索引。