在从DynamoDB保存和删除项目时使用DynamoDBMapperConfig Clobber或Update

时间:2017-07-01 11:14:20

标签: java spring amazon-web-services amazon-dynamodb

我有一个包含3个GSI的DynamoDB表。我需要在表上只执行3次操作 - 保存,删除和获取。所有物品都是独一无二的。 我很困惑哪一个会更好 -

我有以下变量 -

ddbMapperConfigClobber = new DynamoDBMapperConfig.Builder().withConsistentReads(
            DynamoDBMapperConfig.ConsistentReads.CONSISTENT)
            .withSaveBehavior(DynamoDBMapperConfig.SaveBehavior.CLOBBER).build();


ddbMapperConfigUpdate = new DynamoDBMapperConfig.Builder().withConsistentReads(
            DynamoDBMapperConfig.ConsistentReads.CONSISTENT)
            .withSaveBehavior(DynamoDBMapperConfig.SaveBehavior.UPDATE).build();

我应该使用哪一个来保存

ddbMapper.save(item, ddbMapperConfigUpdate); or  ddbMapper.save(item, ddbMapperConfigClobber);

我应该使用哪一个删除 -

ddbMapper.delete(item,ddbMapperConfigClobber); or ddbMapper.delete(item,ddbMapperConfigUpdate);

1 个答案:

答案 0 :(得分:0)

以下是描述不同保存行为的AWS文档:

https://aws.amazon.com/blogs/developer/using-the-savebehavior-configuration-for-the-dynamodbmapper/

当项目存在时,每个都有不同的行为。

我知道你说你只关心保存/读取/删除而不是更新,但你必须记住DynamoDB不是一个事务数据库。所以你必须考虑重试和幂等性。 DynamoDB的执行本身就是交付机制。并且有来电者的保证级别(即至少一次,最多一次等)。

因此,无论您喜欢与否,您都必须关心更新。 现在它在某种意义上可能并不“重要”(因为你以某种方式保证相同的信息总是传播),但是DynamoDB不知道那么你必须回答这个问题(或者把它留空以使用默认行为)