我们可以同时查询和删除 Amazon DynamoDB 中的项目吗?

Posted

技术标签:

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

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

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


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


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

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


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

感谢任何帮助!谢谢!

【问题讨论】:

【参考方案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 运算符并获取所有记录。

【讨论】:

以上是关于我们可以同时查询和删除 Amazon DynamoDB 中的项目吗?的主要内容,如果未能解决你的问题,请参考以下文章

同时对 Amazon Redshift 和本地源运行查询

Dynamo(Amazon分布式存储引擎)

Amazon's Dynamo 论文中文版

如何将现有的关系数据库模型转换为适合无 sql 数据库的模型(如 Mongo DB 或 Amazon Dynamo DB)

Dynamo涉及的算法和协议——p2p架构,一致性hash容错+gossip协议获取集群状态+向量时钟同步数据

Dynamo可视化程序结构剖析BIM