启用MongoDB事务,无需副本集或使用最少的配置

bvjxkvbb  于 2023-11-17  发布在  Go
关注(0)|答案(2)|浏览(204)

[Some背景资料-可能跳过]
开始,我对数据库管理几乎没有任何了解,对后端领域的mongoose和node也只有粗浅的经验(一些udemy课程)。Udemy课程让我相信mongodb仍然是具有关系属性的数据库的可行选择,于是我开始为一个类似论坛的网站做后端工作。在学习了transactions之后,我试图在我的后端实现它们,因为在执行一系列查询时,似乎完全有必要实现回滚特性。然而,事实证明,事务只能在副本集上进行-这似乎也需要至少2.3个数据库才能启动MVP,这显然被认为是矫枉过正。
[The问题]
1.是否可以只使用一个数据库来实现事务?如果可以,如何实现?
1.如果以上都不可能,那么如何在实现事务的同时以最低配置启动mongodb数据库,并考虑到该数据库是用于启动MVP的事实。
1.(对于任何有在类似场景中实现生产级mongo数据库经验的人来说)如果不考虑使用事务,如何在没有事务的情况下安全地将编辑/创建多个文档的查询发送到mongoDB数据库,同时不使用由查询组成的try-catch来回滚每个故障点(我认为这太多了)
我有一个紧迫的截止日期,并且已经做了大量的基础工作和一些使用mongoose的路线,这意味着放弃mongodb而使用关系数据库将是一个困难的选择。
我想我已经在谷歌上搜索了所有与这个主题相关的东西,甚至在谷歌搜索的第二页上尝试了博客/文章(包括我自己在内的许多人都认为这是黑暗的网络)。然而,我确实认为我可能错过了我想要的东西,一个由链接组成的答案也是受欢迎的。
感谢您的阅读!

oyt4ldly

oyt4ldly1#

您需要一个副本集[*]来使用事务,但您可以创建一个单节点副本集用于测试目的。
完整的过程在in documentation中描述,对于单节点RS,您可以按照所写的那样操作,但只配置单个成员。
简单地说,您需要将--replSet参数传递给mongod,然后通过mongo shell连接到它并运行rs.initiate()
请注意,transactions并不是所有问题的神奇解决方案。有一些情况下,它们是合适的,而MongoDB提供了其他功能,这将是一个更好的选择。
[*]或使用MongoDB 4.2+的分片集群,但这涉及更多的设置工作。

ncecgwcz

ncecgwcz2#

如果你按照官方文档在this article中提供的说明,特别是通过CLI/终端,你最终什么都没有;这是我在几个小时的徒劳之后找到的解决方案:

首先,我支持本地安装的MongoDB,而不是Docker或其他版本

1.关闭你机器上的Mongo服务。
1.找到mondog.conf文件。你可以在这里找到它在你的操作系统上的位置:
1.使用任何文本编辑器打开文件,并将“replication”部分替换为以下行:

replication:
  oplogSizeMB: 50
  replSetName: my-rs
  enableMajorityReadConcern: true

字符串
1.再次打开Mongo服务。
1.使用mongosh命令定位Mongo shell。
1.型号rs.initiate()
您现在可以在本地处理事务。

  • 信用点归this article!您可以在那里找到更多详细信息。*

相关问题