首页 > 解决方案 > 在 Cosmos 中批量删除

问题描述

我正在使用新的 SDK 进行“批量”删除。

new CosmosClientOptions() { AllowBulkExecution = true }

我想删除文档中特定日期超过 3 年的任何内容;IE,

Select  c.id,
        c.nameofPartitionKeyField 
from    c 
where   c.InvoiceDate < 3 years ago --???

我不能在这里使用 Time To Live,因为所有文档都是在一年前加载的,过去三年。但是现在,一年后,我们要删除四年前的项目。

我首先查询以获取所需的id和分区键:

tasks.Add(container.DeleteItemStreamAsync(item.id.ToString(), new PartitionKey(item.pk.ToString()))

接着

await Task.WhenAll(tasks);

但无论我做什么,如果我选择超过 20 或 30 条记录,我会收到 429 个太多的请求。如果我一次只能做 20 条记录,这看起来不像是“BulK”。但我一定做错了什么。我正在关注我见过的所有示例,但没有人提供删除示例,只有插入。无论如何,它不应该有太大的不同。

我确实有一个存储过程,可以继续使用,并且会继续删除项目,但它似乎很慢。我需要删除大约 600 万份文档。这似乎没有做到或很快做到。

标签: azure-cosmosdbbulk

解决方案


您可以尝试 Bulk Executor Lib SDK。它具有 BulkDelete 功能。

这是文件

这是来自 GitHub的示例。

希望它可以帮助你。


推荐阅读