【问题标题】:Is there any ways to Perform ACID Transactions in Mongodb4.0 without using Replica Set有什么方法可以在不使用副本集的情况下在 Mongodb 4.0 中执行 ACID 事务
【发布时间】:2019-06-21 11:55:20
【问题描述】:

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

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({ “好”:0, "errmsg" : "事务号只允许在副本集成员或 mong os 上", “代码”:20, “代号”:“非法操作”

注意:当 mongod 实例使用 Replica Set 启动时,sn-p 的相同代码工作正常

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

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    Documentation 状态:

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

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

    这是另一个piece of information

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

    【讨论】:

    • 这个人帮了我很多。如果您有带有 MongOS 路由器/复制 Mongod 配置节点的 MongoDB 集群,并且没有复制 SHARD 节点 ->>> 只需为没有第二个副本节点的 SHARDED 节点启用虚拟复制。然后 rs.initiate() 为每个分片节点。它们只是单独的 PRIMARY 节点。
    猜你喜欢
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多