Cosmos DB支持跨分区事务吗?

4

我希望通过更改分区键将文档移动到另一个分区。我在某个地方读到过,必须先删除文档,然后创建一个新的具有新分区键的文档。如果是这样的话,这个事务能够保证原子性吗?换句话说,是否可能在两个分区之间执行一个事务,并且如果一个更新/写操作失败,则回滚?


在Azure Cosmos DB中,我们是否可以在决定分区键后稍后更改它? - 4c74356b41
这证实了我的信念,即必须删除该文档,但是关于跨分区事务没有任何信息。 - user246392
1个回答

6

不,此操作不是事务性的。

正如您可能已经知道的那样,分区键是不可变的,不能更改,这就是为什么您需要先删除它,然后使用不同的值重新创建它。

使用支持事务的存储过程不可行,因为它们只能针对单个分区进行操作。这意味着您需要两个存储过程来执行删除/创建操作,这也意味着它不再是事务性的。

您可以采取“欺骗”的方式,将要删除的文档保存在内存中,然后执行删除操作并检查响应以查看文档是否成功删除。如果删除成功,则继续创建新文档并检查创建响应。如果创建成功,则一切顺利。如果删除或创建失败,则重新创建内存中的文档。但是,这也存在创建文档无法重新创建的风险,但这是您模拟此行为的最接近方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接