【问题标题】:How to bulk delete (say millions) of documents spread across millions of logical partitions in Cosmos db sql api?如何批量删除(比如数百万)分布在 Cosmos db sql api 中数百万个逻辑分区的文档?
【发布时间】:2020-06-15 10:46:38
【问题描述】:

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

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

我们不能轻松地批量删除分布在 MS Cosmos SQL API 中多个逻辑分区的文档吗?感觉恶心..

希望您能提供一些准确的细节。如何通过一些简单直接的示例代码和步骤来实现这一点。希望 MS 和 Cosmos db 专家也能分享意见。

【问题讨论】:

    标签: azure azure-cosmosdb azure-cosmosdb-sqlapi document-database bulk-delete


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      有没有人尝试过这个.. 看起来在 java 中是一个很好的解决方案 https://github.com/Azure/azure-cosmosdb-bulkexecutor-java-getting-started#bulk-delete-api

      【讨论】:

        【解决方案3】:

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

        显然,除了以下 2 种情况,您已经努力寻找任何解决方案:

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

        2.批量删除执行器:

        .NET: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

        目前只支持以上官方解决方案。另一个解决方法是TTL for cosmos db。相信你有自己的逻辑来判断哪些部分数据是正确的,哪些部分数据是错误的,应该删除。您可以对这些数据设置 TTL,以便在过期数据到达时立即将其杀死。

        【讨论】:

        • 感谢您的回答 Jay,但正如您所提到的,我要求澄清 - 选项 1 - 不支持跨分区执行查询,如果是,请告诉如何。 TTL 选项 - 我们如何在数百万个项目上启用 ttl.. 有没有一种简单的方法可以通过门户或直接查询或存储过程来做到这一点......或者我们需要编写一些类似于你建议的选项 2 的复杂代码。选项 2 - 我会调查细节
        • @HarshKishore 如果您的数据已经存在,也许 TTL 不是合适的解决方案,但您可以将其应用于以后的数据。到目前为止,您可以尝试使用您擅长的语言的批量执行器。
        • @HarshKishore 例如,java ..如你所说。你遇到过什么问题吗?
        猜你喜欢
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        • 2021-08-03
        • 1970-01-01
        • 2010-11-22
        • 1970-01-01
        • 2012-05-30
        • 2020-04-11
        相关资源
        最近更新 更多