我正在使用新的SDK进行“批量”删除。
new CosmosClientOptions() { AllowBulkExecution = true }
我想删除文档中特定日期超过3年的所有内容;即
Select c.id,
c.nameofPartitionKeyField
from c
where c.InvoiceDate < 3 years ago --???
我不能在这里使用“生存时间”,因为所有文档都是在一年前加载的,这是最近三年的信息。但是现在,一年后,我们要删除已有四年的物品。
我首先要查询以获取所需的id
和分区密钥:
tasks.Add(container.DeleteItemStreamAsync(item.id.ToString(), new PartitionKey(item.pk.ToString()))
然后
await Task.WhenAll(tasks);
但是无论我做什么,如果我选择20条或30条以上的记录,则会收到429个过多的请求。如果我一次只能做20条记录,这看起来就不像“批量”。但是我一定做错了。我将按照我看到的所有示例进行操作,但是没有人提供删除示例,只能插入。无论如何,它应该没有太大的不同。
我确实有一个存储过程,该存储过程可以继续执行,并且会不断删除项目,但是看起来很慢。我需要删除大约600万个文档。这似乎没有做到或很快完成。
答案 0 :(得分:0)
如果根据数据量配置的请求单位比预期的要低得多,则可能需要考虑将其设置为较高的值。批量操作将花费更长的时间,但是由于重试次数增加,完全成功的可能性更高。
因此,听起来像是一个完整的解决方案:
MaxRetryAttemptsOnRateLimitedRequests
设置为较高的值。SemaphoreSlim
或类似方法在客户端限制批量大小。或者,您可以在每个TTL上设置一个短的TTL,然后让CosmosDb使用“剩余” RU自动删除它们。
答案 1 :(得分:0)