【问题标题】:How to update a Cosmos DB document partition key element?如何更新 Cosmos DB 文档分区键元素?
【发布时间】:2019-01-27 05:48:56
【问题描述】:

我需要更新一个文档以更改用作分区键的元素的值。该文档说,文档由其 id 和分区键唯一标识。

那么,如果我更改分区键,这总是会创建新文档吗? 或者,如果将它放在另一个分区上,它是否只会创建一个新文档?

如果总是创建新文档,那么我认为最安全的更新方式是

  1. 创建新文档。
  2. 如果成功,删除旧文档。
  3. 删除失败会导致重复数据,但至少数据不会丢失。

如果不总是创建新文档,如何识别创建新文档的情况以便删除旧文档?我不想在没有先创建新内容的情况下删除任何内容,因为没有事务性方法可以做到这一点。

大家好。

【问题讨论】:

    标签: azure azure-cosmosdb


    【解决方案1】:

    尝试更新分区键值只会失败。 尝试 upsert 分区键值将在不同的逻辑分区中创建一个具有相同 id 的新文档。

    流程应该是:

    • 将旧文档保存在内存中
    • 删除旧文档
    • 创建新文档
    • 如果后者失败,则重新创建旧文档

    Cosmos DB 不支持事务,因此无法以其他方式执行此操作,并且您不能使用存储过程,因为它们仅针对单个逻辑分区运行。

    【讨论】:

    • 如果每个分区键值都有一个唯一的逻辑分区,那么似乎我应该能够先创建新文档,然后删除旧文档。我想避免任何时候数据只存在于内存中,因为崩溃会导致数据丢失。
    • 是的,您可以先创建具有相同 is 和不同分区键的新文档,然后删除旧文档
    猜你喜欢
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多