【问题标题】:How to determine if a DynamoDB item was indeed deleted?如何确定是否确实删除了 DynamoDB 项目?
【发布时间】:2017-09-28 08:21:47
【问题描述】:

DynamoDB 提供了用于删除项目的 API。在返回的DeleteItemOutcomeDeleteItemResult 中,没有字段或方法来确定是否找到了密钥并且该项目确实被删除了。

确定该项目是否确实存在和删除的唯一方法是请求项目的属性:

new DeleteItemSpec() .withPrimaryKey("key","1") .withReturnValues(ReturnValue.ALL_OLD))

但是,这会消耗额外的读取容量。有没有更有效的方法来检查删除结果 - 找到和删除的键/无效键?

【问题讨论】:

  • 如果您手头有一个密钥,那么它可能来自一个 DynamoDB 项目,所以在某些时候,它是一个有效的密钥。如果你真的需要知道它仍然代表一个有效的项目,那么你可以测试一下。

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


【解决方案1】:

DeleteItemResult#getAttributes() 确定 DeleteItem 操作是否实际删除项目的方法。

如果您指定ReturnValue.ALL_OLD 并且项目被删除,则返回项目属性映射,否则返回空映射。这是确定操作是否成功的唯一方法。 API 不会返回其他确认信息。

请记住,DeleteItem 操作每次至少会消耗 1 个写入容量单位。如果删除的item大于1KB,消耗的容量会大于1。

供参考:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/CapacityUnitCalculations.html#ItemSizeCalculations.Writes

【讨论】:

    【解决方案2】:

    尝试使用条件表达式,例如

    attribute_exists(my_key)
    

    如果元素不存在,将引发条件检查错误

    【讨论】:

    • 这个答案是正确的,但至少在 Node SDK 中,我们使用 ConditionExpression 而不是 Conditional Expression
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2021-02-17
    • 1970-01-01
    相关资源
    最近更新 更多