启用MongoDB事务,不需要复制集或尽可能减少配置。

问题描述 投票:0回答:1

[一些背景资料--可能可以跳过]

首先,我对数据库管理几乎没有任何了解,只是在后台领域对mongoose和node有浅尝辄止的经验(几门udemy课程)。Udemy的课程让我相信mongodb对于一个具有关系型属性的数据库来说还是一个可行的选择,于是我就开始为一个类似论坛的网站做后台。在学习了事务之后,我试图在我的后端实现它们,因为在执行一个数组查询时,似乎完全有必要实现回滚功能。然而事实证明,事务只能在副本集上实现--这似乎也需要至少2个,对于一个初创公司的MVP来说,3个数据库显然被认为是矫枉过正。

问题]。

  1. 是否可以只用1个数据库实现事务?如果可以,如何实现?

  2. 如果以上都不可能,那么如何在实现事务的同时,以最低的配置启动mongodb数据库,同时考虑到数据库是为一个初创的MVP准备的。

  3. 如果不考虑使用事务,那么如何在不使用事务的情况下,安全地将编辑创建多个文档的查询发送到mongoDB数据库中,同时又不在每一个代码中喷洒由查询组成的try-catches,以回滚每一个失败点(我认为这开销太大)。

我的期限很紧,而且已经做了大量的基础工作和使用mongoose的几条路线,这意味着抛弃mongodb而使用关系型数据库将是目前一个困难的选择。

我想我已经在google上搜索了所有与这个主题相关的内容,甚至还尝试了google搜索第二页的博客文章(包括我自己在内的很多人都认为是暗网).然而,我确实认为我可能错过了我要找的东西,也欢迎提供一个仅仅由链接组成的答案。

谢谢你的阅读!

database mongodb transactions replicaset mongodb-replica-set
1个回答
0
投票

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

完整的过程描述如下 在文件中对于单节点的RS,你可以按照写的那样,但只配置一个成员。

简单来说,你需要通过 --replSet 争论 mongod 然后通过 mongo shell运行 rs.initiate().

请注意,事务并不是解决所有问题的法宝。有些场景适合使用事务,有些场景MongoDB提供的其他功能更适合。

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

© www.soinside.com 2019 - 2024. All rights reserved.