首页 > 解决方案 > 如何在 CosmosDB 中处理事务 - “全有或全无”概念

问题描述

我试图在一个事务中一次将多个文档保存到“多个集合”。所以如果其中一个保存失败,那么所有保存的文档都应该回滚

我正在使用 SpringBoot 和 SpringData 并使用 MongoAPi 连接到 Azure 中的 CosmosDB。我在他们的门户中读到,这可以通过编写一些存储过程来完成。但是有没有办法我们可以从代码中做到这一点,比如 spring 如何有 @Transaction 注释。?

非常感谢任何帮助。

标签: spring-bootazure-cosmosdb

解决方案


您可以事务性编写的唯一方法是使用存储过程。但这对您的情况无济于事:

  • 存储过程特定于核心 (SQL) API;它们不适用于 MongoDB API。
  • 事务的范围仅限于单个集合中的单个分区。无论您使用 MongoDB API 还是核心 (SQL) API,您都不能跨集合进行事务性写入。

您需要真正询问交易是否绝对必要。也许您可以使用某种类型的持久消息传递方法来管理您的内容更新。但是根本没有任何内置功能可以让您在 Cosmos DB 中本地执行此操作。


推荐阅读