【问题标题】:Enabling MongoDB transactions without replica sets or with least possible configuration在没有副本集或配置最少的情况下启用 MongoDB 事务
【发布时间】:2020-06-12 11:44:55
【问题描述】:

[一些背景信息 - 可以跳过]

首先,我对数据库管理几乎没有任何了解 并且只是在后端使用猫鼬和节点的浅薄经验 领域(几个udemy课程)。 Udemy 课程让我相信 对于具有关系的数据库,mongodb 仍然是一个可行的选择 属性,然后我开始为类似论坛的后端工作 网站。在了解交易后,我尝试实施 它们在我的后端,因为似乎完全有必要实现一个 执行查询数组时的回滚功能。然而它转 交易只能在副本集上进行 - 这也 似乎至少需要 2 个。启动 MVP 的 3 个数据库是 显然被认为是矫枉过正。

[问题]

  1. 是否可以仅使用 1 个数据库实现事务?如果有怎么办?

  2. 如果上述情况不可行,如何在实现事务时以最低配置启动 mongodb 数据库,同时考虑到该数据库是为启动 MVP 考虑的。

  3. (适用于在类似场景中实现生产级 mongo 数据库经验的任何人)如果考虑不使用事务,如何在没有事务的情况下安全地将编辑/创建多个文档的查询发送到 mongoDB 数据库,而不要使用包含查询的 try-catch 来喷洒每一段代码以回滚每个故障点(我认为这开销太大)

我的截止日期很紧,并且已经使用 mongoose 完成了大量基础工作和几条路线,这意味着目前放弃 mongodb 转而使用关系数据库将是一个困难的选择。

我想我已经用谷歌搜索了与该主题相关的所有内容,甚至在谷歌搜索的第二页尝试了博客/文章(包括我自己在内的许多人都认为这是暗网/s)。 但我确实认为我可能错过了我正在寻找的内容,也欢迎仅包含链接的答案。

感谢您的阅读!

【问题讨论】:

    标签: database mongodb transactions replicaset mongodb-replica-set


    【解决方案1】:

    您需要一个副本集[*] 来使用事务,但您可以创建一个单节点副本集用于测试目的。

    完整的过程在in documentation 中进行了描述,对于单节点 RS,您按照所写的内容进行操作,但只配置一个成员。

    简单来说,您需要将--replSet 参数传递给mongod,然后通过mongo shell 连接到它并运行rs.initiate()

    请注意,交易并不是解决所有问题的灵丹妙药。在某些情况下它们是合适的,而 MongoDB 提供了更适合的其他功能。

    [*] 或使用 MongoDB 4.2+ 的分片集群,但这涉及更多的设置工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      相关资源
      最近更新 更多