【问题标题】:Can we query and delete item in Amazon DynamoDB at the same time?我们可以同时查询和删除 Amazon DynamoDB 中的项目吗?
【发布时间】:2020-05-26 12:52:57
【问题描述】:

我们想要运行一个查询,其中所有返回的项目都被删除。更清楚地说,我们想要做的是运行一个查询,如果一个项目匹配条件,它应该包含在响应中,并从 Amazon DynamoDB 中删除。然后查询应该使用第二个选项。

因此,在查询响应后,数据库中将不存在此类订单,因为它们在旅途中被删除。


一个包含 5 个项目的示例工作流程(项目示例图片如下)如下所示 -


  • 一个查询运行检查From = Kartik
  • 查询出现在第 1 项 (1000) 上并发现它与条件匹配。
  • 它捕获该项目,并将其从表中删除。现在,只有响应包含此项,而不是表格。
  • 查询移动到更多项目 (1001 & 1002) 并发现它们不符合条件,因此它甚至不捕获它们,也不会删除。
  • 查询找到与条件匹配的第 4 项 (1003)。因此,它会在响应中捕获它,并将其从表中删除。
  • 第 5 项同上 (1004)。

现在,查询完成,并返回仅包含第 1、4 和 5 项的响应。现在,如果我在 DynamoDB 中查找它们,它会返回错误,因为它们已从那里删除。


所以,这就是我想要的流程。这有可能做到吗?

感谢任何帮助!谢谢!

【问题讨论】:

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


    【解决方案1】:

    您可以对项目执行 deleteItem 操作,并通过在请求参数中设置:"ReturnValues": "ALL_OLD" 来获取其旧值(删除前)。

    要删除项目,您必须指定其主键。所以你只能删除一项。 (在您的情况下,From 似乎不是主键)

    DeleteItem doc

    您可以在 batchWriteItem 操作中执行删除以一次处理多个项目。但请注意,batchWriteItem 不是原子的,即某些删除操作可能会失败,您可以在 batchWriteItem 的响应中找到它们。

    BatchItem doc

    【讨论】:

      【解决方案2】:

      正如doc 提到的那样,作为 reda la 答案的附加细节:

      中指定的各个 PutItem 和 DeleteItem 操作 BatchWriteItem 是原子的;但是 BatchWriteItem 整体上不是。

      因此,如果您只想删除 dynamodb 中的多个项目,您可以使用 BatchWriteItem 原子地执行此操作。

      【讨论】:

        【解决方案3】:

        两天后删除项目

        1) 启用 DynamoDB 流并使用 lambda 执行其他活动 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html

        2) 使用 DeleteItem 或 BatchWriteItem api 方法进行搜索和删除。 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SQLtoNoSQL.DeleteData.html#SQLtoNoSQL.DeleteData.DynamoDB

        这两种情况都需要通过 PartitionKey , PartitionKey+Range 排序键来查找item。

        OrderID 不是合适的主键,因为您想通过 From Column 查找项目。此外,此处不提供“扫描”选项。

        所以要对这些项目进行查询, 有一些方法可以提高效率:

        1) 建议将 FROM 作为分区键,将 OrderID 作为排序/范围键(复合键)

        来自 |订单详情

        卡提克 | kartik#1000

        卡提克 | kartik#1003

        https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html

        How can I Use begins_with method on primary key in DynamoDB?

        https://aws.amazon.com/blogs/database/using-sort-keys-to-organize-data-in-amazon-dynamodb/

        然后您可以使用 KeyConditionExpression 运算符,例如 Sort 键上的 begin_with 和分区键上的 EQ 运算符并获取所有记录。

        【讨论】:

          猜你喜欢
          • 2022-01-20
          • 1970-01-01
          • 1970-01-01
          • 2011-03-08
          • 2013-07-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-14
          相关资源
          最近更新 更多