如何在Cosmos db sql api中批量删除(比如说数百万)分布在数百万逻辑分区中的文档



微软Azure文档没有谈论它。正式的批量执行器文档只谈论插入和更新选项,而不是删除。有一个建议的java脚本服务器端程序来创建一个存储过程,听起来很好,但这需要我们输入分区键值。如果我们的文档分布在数百万个逻辑分区中,那就没有意义了。

这是一个非常简单的业务需求。在sql-api cosmos集合中迁移大量数据时,如果我们插入了一些错误的数据,似乎没有删除其他数据然后恢复到以前状态的选项。我已经探索了几个小时,但找不到解决办法。甚至提出了一个支持MS的案例,他们指向了一些我认为需要查看的.net代码,因为这看起来并不简单。如果有人不知道.net。怎么办

在MS Cosmos SQL API中,我们可以轻松地批量删除分布在多个逻辑分区中的文档吗?感觉很恶心。。

我希望你能提供一些准确的细节。如何通过一些简单的直接示例代码和步骤来实现这一点。希望微软和宇宙数据库的专家们也能分享看法。

即使提出了一个支持MS的案例,他们也指向了一些.net代码我认为这是需要看到的,因为这看起来并不简单。

显然,除了以下两种情况外,您已经付出了一些努力来找到任何解决方案:

1.大容量删除存储过程:https://github.com/Azure/azure-cosmosdb-js-server/blob/master/samples/stored-procedures/bulkDelete.js

2.批量删除执行器:

净:https://github.com/Azure/azure-cosmosdb-bulkexecutor-dotnet-getting-started/blob/master/BulkDeleteSample/BulkDeleteSample/Program.cs

Java:https://github.com/Azure/azure-cosmosdb-bulkexecutor-java-getting-started/blob/master/samples/bulkexecutor-sample/src/main/java/com/microsoft/azure/cosmosdb/bulkexecutor/bulkdelete/BulkDeleter.java

到目前为止,只支持上述官方解决方案。另一个解决方法是cosmos数据库的TTL。我相信你有自己的逻辑来判断哪些数据是正确的,哪些数据是错误的,应该删除。你可以对这些数据设置TTL,这样一旦过期的数据到达,它们就会被杀死。

有人试过这个吗。。在java中看起来是一个不错的解决方案https://github.com/Azure/azure-cosmosdb-bulkexecutor-java-getting-started#bulk-删除api

如果你写一个批处理作业,通过使用一些日期配置来在夜间删除文档,我们可以实现它。下面是关于如何做到这一点的文章。

https://medium.com/@vaibhav.medavarapu/bulk-delete-documents-from-azure-cosms-db-using-asp-net-core-8bc95dd20411

最新更新