代码之家  ›  专栏  ›  技术社区  ›  0x90

DynamoDB-如何检索和删除(弹出)项目?

  •  1
  • 0x90  · 技术社区  · 12 年前

    我正在开发一个用Flask编写的应用程序,该应用程序由亚马逊通过boto访问的DynamoDB支持。

    对于特定的用例,我们需要从表中检索一个值,然后使其不可用于其他用户。

    然而,通过检索并删除该值,在检索和删除之间可能会出现竞争条件。

    是否有任何方法可以从表中检索项并立即以原子方式删除或更新它?

    1 回复  |  直到 12 年前
        1
  •  2
  •   Iłya Bursov    12 年前

    如果您的逻辑:

    1. 获取项目
    2. 删去

    如果没有任何额外的逻辑来确定是否应该进行删除,那么您实际上可以立即发送删除请求,这是一个示例(我没有检查过,主要来自: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LowLevelJavaItemCRUD.html )

    HashMap<String, AttributeValue> key = new HashMap<String, AttributeValue>();
    key.put("Id", new AttributeValue().withN("101"));
    
    DeleteItemRequest deleteItemRequest = new DeleteItemRequest()
        .withTableName(tableName)
        .withKey(key)
        .withReturnValues(ReturnValue.ALL_OLD);
    
    DeleteItemResult deleteItemResult = client.deleteItem(deleteItemRequest);
    Map<String,AttributeValue> deletedItem = deleteItemResult.getAttributes();
    

    文档:

    withReturnValues

    getAttributes