transactions - Cosmos DB 是否支持跨分区事务?

标签 transactions azure-cosmosdb acid document-database

我想通过更改分区键将文档移动到另一个分区。我在某处读到必须先删除该文档,然后必须创建一个具有新分区键的新文档。如果是这样的话,这个交易可以是原子的吗?换句话说,是否可以跨两个分区执行事务并在一个更新/写入操作失败时回滚?

最佳答案

不,这个操作不是跨国的。

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

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

你可以做的“作弊”是将要删除的文档保存在内存中,然后执行删除操作并检查响应以查看文档是否已成功删除。如果是,则继续创建新的并检查创建响应。如果它创建成功,那么你很高兴。如果删除或创建失败,则重新创建内存中的文档。然而,这也有创建的文档无法重新创建的风险,但这是模仿这种行为的最接近的方法。

关于transactions - Cosmos DB 是否支持跨分区事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53184214/

相关文章:

java - HBase:原子 'check row does not exist and create' 操作

php - MySQL 事务与锁

entity-framework - 如何在两个 dbContext 中与 EF6 共享事务?

c# - 带有 .NET SDK 3.6 的 Azure Cosmos 抛出 LINQ 查询不支持 Group By

asp.net - 领域驱动设计——数据库事务管理

c# - Microsoft.Azure.Cosmos.Table LocationMode.SecondaryOnly RA-GRS 异常 此操作只能针对主存储位置执行

Azure 流分析作业截断数据

java - JTA 事务管理器如何在运行时部署?

ruby-on-rails - 在 Rails 的一个 ActiveRecord 事务中更新多条记录

php - PDO/PHP/MySQL 中的性能 : transaction versus direct execution