sql-server - 是否可以使用非 ACID 数据库模拟分布式事务?

标签 sql-server sql-server-2008 transactions mongodb

我们有一个将 SQL Server 2008 与 MongoDB 结合使用的系统,使用后者提供大量临时报告功能。它们的交集不多,但在一两个地方它们确实需要一起工作。

我总是有点担心交易的影响,但我认为如果应用程序首先执行 Mongo 工作,这并不是什么大问题,而且从技术上讲,不是那么大的问题交易偶尔会在中间失败。但是最近出现了一个错误,导致他们一直失败,虽然我已经修复了导致它的错误,但它让我意识到我无法修复它是多么令人讨厌只需在整个工作单元上抛出一个分布式事务。

给定一个支持分布式事务的数据库 (SQL Server 2008) 和另一个不真正支持任何 ACID 语义的数据库 (MongoDB),有什么方法可以构建应用程序代码,以便工作单元(“事务”)在两个数据库中要么成功要么被回滚?

显然,我必须使用一些额外的列/键来跟踪交易的状态——但是什么,在什么情况下?

最佳答案

您的一致性要求是什么?如果 Mongo 上的临时报告并不总是完全最新的,这可以吗?

如果不是,那么我认为您的处境很艰难。

如果是,那么我想我会选择一些事务性 MSMQ 和 SQL Server,然后设置一个(或多个)服务来通过处理来自队列的消息来更新 Mongo。

关于sql-server - 是否可以使用非 ACID 数据库模拟分布式事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4359997/

相关文章:

sql-server - Linq 查询可以从 Sql 数据库检索 BLOB 吗?

sql-server-2008 - T-SQL 递归选择循环依赖

sql-server-2008 - MS SQL 2008 和 Subsonic 3 中的空间数据类型 - 有解决方法吗?

mysql - 两个复制主 mysql 服务器之间的事务

transactions - Quarkus @Transactional 是否需要像 spring AOP 这样的公共(public)方法

sql-server - 我可以将 SQL Server 与 SQL Server Express 一起安装吗?

sql-server - 使用 pyspark 对 SQL Server JDBC 使用 Windows 身份验证

sql-server - 如何插入关系表

sql - 如何跨中间表连接的三个表进行查询?

postgresql - PostgreSQL从声明的表中插入(存储过程或函数)