首页 > 解决方案 > 有什么方法可以在不使用副本集的情况下在 Mongodb4.0 中执行 ACID 事务

问题描述

我们正在尝试在 MongoDB 4.0 中实现 ACID 事务功能,以满足我们对独立 MongoDB 服务器的应用程序需求,但我们在 Mongo Shell 中面临以下代码片段的问题。

var session1 = db.getMongo().startSession();
var session1PersonColl = session1.getDatabase('test').getCollection('person');
session1.startTransaction({readConcern: {level: 'snapshot'}, writeConcern: {w: 'majority'}});
session1PersonColl.insert({"_id": 3, "fname": "fname-3", "lname": "lname-3"});

错误:

WriteCommandError({ "ok" : 0, "errmsg" : "事务号只允许在副本集成员或 mong os 上使用", "code" : 20, "codeName" : "IllegalOperation"

注意:当 mongod 实例使用 Replica Set 启动时,相同的代码片段可以正常工作

请让我们知道是否有任何方法可以在没有副本集的情况下执行此操作

标签: mongodb

解决方案


文档指出:

从版本 4.0 开始,MongoDB 提供了针对副本集执行多文档事务的能力。

所以我想你确实需要一个副本集来支持事务。

这是另一条信息

多文档事务仅可用于副本集部署。您甚至可以在独立服务器上使用事务,但您需要将其配置为副本集(只有一个节点)


推荐阅读