Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新Dynamo DB表中的项目_Java_Amazon Dynamodb - Fatal编程技术网

Java 更新Dynamo DB表中的项目

Java 更新Dynamo DB表中的项目,java,amazon-dynamodb,Java,Amazon Dynamodb,我最近开始在DynamoDB工作 在阅读《开发人员指南》和各种关于更新表中项目的教程时,我的理解是,每当我们更新项目时,它都会首先检查该项目是否存在于表中。如果存在,它将更新该项,否则它将创建一个新项并将其插入 现在,我的疑问是它如何检查表中项目的可用性 是否仅基于主键 嗯,我试着对它进行编码,我发现有趣的是,如果我将更改任何键attibute(GSI,LSI)。它只是创建了一个新项目 那么,我应该如何更新任何项目的GSI/LSI 让我用一个例子来详细说明一下,比如我有一个名为TEST的表。表的

我最近开始在DynamoDB工作

在阅读《开发人员指南》和各种关于更新表中项目的教程时,我的理解是,每当我们更新项目时,它都会首先检查该项目是否存在于表中。如果存在,它将更新该项,否则它将创建一个新项并将其插入

现在,我的疑问是它如何检查表中项目的可用性

是否仅基于主键

嗯,我试着对它进行编码,我发现有趣的是,如果我将更改任何
键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,必须更新表中的项,然后将这些更新传播到索引。