【问题标题】:Delete items in Cosmos DB with spare RUs使用备用 RU 删除 Cosmos DB 中的项目
【发布时间】:2021-06-07 19:40:32
【问题描述】:

我们使用 Cosmos DB 来跟踪我们所有的设备,并且与设备相关的数据(而不是存储在设备文档本身中)存储在具有相同分区 ID 的同一容器中。

设备文档和相关文档都有/deviceId作为分区键。移除设备后,我会移除设备文档。我实际上想删除整个分区,但这似乎是不可能的。因此,我恢复为使用此分区键查询所有项目并将它们从数据库中删除的查询。

这很好用,但如果有很多相关数据,可能会消耗很多 RU(在某些情况下可能是这样)。我宁愿删除设备并安排所有相关数据稍后删除(将它们放在数据库中一段时间​​并没有什么坏处)。当 RU 利用率低时,我开始删除这些项目。有标准的解决方案吗?

最好的解决方案是安排这个,当 Cosmos DB 有备用 RU 时,它会处理这些命令,就像 TTL 删除一样。这甚至可能吗?

【问题讨论】:

    标签: azure-cosmosdb


    【解决方案1】:

    现在预览中的一项功能是使用有限的可用吞吐量按分区键删除所有项目。 feature request page 中有一个注册链接,可以访问预览。

    目前,API 看起来像是 SDK 中的新 DeleteAllItemsByPartitionKey 方法。

    【讨论】:

    • +1。是的,这就是我在回复中提到的功能。 Ramon,如果您可以使用非常早期的预览版本,这可以是一个选项。
    【解决方案2】:

    绝对可以设置一个 TTL,然后让 Cosmos 在容器空闲时处理过期数据。但是,首先更新文档的成本与删除它的成本有关,因此您不会获得太多收益。

    您建议的一种方法可能是有一个单独的容器(甚至是一个队列),您可以在其中插入一个带有 deviceId 的新项目以退出。然后在晚上或您知道系统空闲的时候。运行一个作业,读取队列中的下一个 deviceId,查询具有该分区键的所有项目,然后删除数据或设置 TTL 以使数据过期。

    有一个功能可以删除工作中的整个分区,非常适合这种情况(事实上,它是为此而设计的),但可用性方面没有 ETA。

    【讨论】:

      猜你喜欢
      • 2020-01-09
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多