Mongo DB-独立副本集和1节点副本集之间的区别

时间:2019-05-28 06:21:47

标签: mongodb replicaset mongodb-replica-set

我需要使用Mongo DB事务,最近我了解到事务不适用于Mongo独立模式,而仅适用于副本集 (Mongo DB with C# - document added regardless of transaction)。
另外,我读到不建议将独立模式用于生产。

因此,我发现只需在mongod.cfg中定义一个副本集名称就足以将Mongo DB作为副本集而不是独立运行。
更改之后,Mongo事务开始起作用。
但是,尽管我并没有真正使用复制功能,但将其用作副本集感到有些奇怪,我想确保使用的是有效配置。

所以我的问题是:

  1. 假设我真的不需要复制,负载平衡或任何其他可扩展功能,将Mongo作为1节点副本集运行是否有任何问题/缺点? (如前所述,我需要它才能允许交易)
  2. 独立运行与1节点副本集运行之间在功能和性能上有什么区别?
  3. 我读到不建议将独立模式用于生产,尽管听起来它是最基本的配置。我知道大多数情况下都不会使用此配置,但是有时您可能希望将其用作本地计算机上的标准数据库。那么为什么不建议使用独立模式?是不够稳定还是出于其他原因?

2 个答案:

答案 0 :(得分:1)

  

假设我真的不需要复制,负载平衡或任何其他可伸缩功能,将Mongo作为1节点副本集运行是否有任何问题/缺点?

您没有适当的副本集提供的高可用性。因此,不建议将其用于生产部署。不过,这对开发来说很好。

请注意,副本集的功能主要是关于高可用性,而不是扩展。

  

独立运行与1节点副本集运行之间在功能和性能上有什么区别?

单节点副本集将具有操作日志。这意味着您将使用更多的磁盘空间来存储操作日志,并且所有插入/更新操作也将被写入操作日志(写放大)。

  

那么为什么不建议使用独立模式?是不够稳定还是出于其他原因?

生产中的MongoDB在设计时考虑了副本集部署,用于:

  • 面对节点故障的高可用性
  • 无需停机即可滚动维护/升级
  • 扩展阅读的可能性
  • 可以在不属于高可用性节点的特殊用途节点中复制数据
简而言之,MongoDB被设计为容错的分布式数据库(水平扩展),而不是典型的SQL整体数据库(垂直扩展)。这个想法是,如果丢失副本集的一个节点,其他节点将立即接管。大多数情况下,您的应用程序甚至都不知道数据库方面存在故障。相反,单片数据库服务器出现故障会立即中断您的应用程序。

答案 1 :(得分:0)

我认为kevinadi回答得很好,但是我仍然想添加它。

独立服务器是mongod的实例,它在单个服务器上运行,但不属于副本集。用于测试和开发的独立实例,但始终建议在生产中使用副本集。

单节点副本集将具有操作日志,该日志记录对其数据集的所有更改。这意味着您将使用更多的磁盘空间来存储操作日志,并且所有插入/更新操作也将被写入操作日志(写入放大)。它还支持时间点恢复。

如果要将独立数据库转换为副本集,请遵循将独立数据库转换为副本集。

事务已在MongoDB 4.0版中引入。从版本4.0开始,对于需要原子性来更新多个文档或读取多个文档之间保持一致性的情况,MongoDB为副本集提供了多文档事务。该事务无法独立运行,因为它需要oplog来保持集群内的强一致性。