我需要使用Mongo DB事务,最近我了解到事务不适用于Mongo独立模式,而仅适用于副本集
(Mongo DB with C# - document added regardless of transaction)。
另外,我读到不建议将独立模式用于生产。
因此,我发现只需在mongod.cfg中定义一个副本集名称就足以将Mongo DB作为副本集而不是独立运行。
更改之后,Mongo事务开始起作用。
但是,尽管我并没有真正使用复制功能,但将其用作副本集感到有些奇怪,我想确保使用的是有效配置。
所以我的问题是:
答案 0 :(得分:1)
假设我真的不需要复制,负载平衡或任何其他可伸缩功能,将Mongo作为1节点副本集运行是否有任何问题/缺点?
您没有适当的副本集提供的高可用性。因此,不建议将其用于生产部署。不过,这对开发来说很好。
请注意,副本集的功能主要是关于高可用性,而不是扩展。
独立运行与1节点副本集运行之间在功能和性能上有什么区别?
单节点副本集将具有操作日志。这意味着您将使用更多的磁盘空间来存储操作日志,并且所有插入/更新操作也将被写入操作日志(写放大)。
那么为什么不建议使用独立模式?是不够稳定还是出于其他原因?
生产中的MongoDB在设计时考虑了副本集部署,用于:
答案 1 :(得分:0)
我认为kevinadi回答得很好,但是我仍然想添加它。
独立服务器是mongod的实例,它在单个服务器上运行,但不属于副本集。用于测试和开发的独立实例,但始终建议在生产中使用副本集。
单节点副本集将具有操作日志,该日志记录对其数据集的所有更改。这意味着您将使用更多的磁盘空间来存储操作日志,并且所有插入/更新操作也将被写入操作日志(写入放大)。它还支持时间点恢复。
如果要将独立数据库转换为副本集,请遵循将独立数据库转换为副本集。
事务已在MongoDB 4.0版中引入。从版本4.0开始,对于需要原子性来更新多个文档或读取多个文档之间保持一致性的情况,MongoDB为副本集提供了多文档事务。该事务无法独立运行,因为它需要oplog来保持集群内的强一致性。