3

显然,我知道为什么要使用副本集。

但是,我对直接连接到 PRIMARY mongo 实例和连接到副本集之间的区别感到困惑。具体来说,如果我使用 Mongoose 从我的 node.js 应用程序连接到 Mongo,是否有令人信服的理由使用 connectSet() 而不是 connect()?我会假设连接()仍然存在故障转移的好处,但也许这就是我错的地方......

我问的原因是,在猫鼬中,connectSet() 方法似乎记录较少且使用良好。但是,我无法想象您不想连接到集合的场景,因为建议始终在 3x+ 副本集上运行 Mongo...

4

1 回答 1

2

如果您只连接到主服务器,那么您将获得故障转移(也就是说,如果主服务器发生故障,将会有一个短暂的暂停,直到选出新的主服务器)。副本集中的复制也使备份更容易。缺点是所有写入和读取都转到单个主节点(MongoDB 副本集一次只有一个主节点),因此它可能成为瓶颈。

另一方面,允许与从属设备的连接允许您扩展读取(而不是写入 - 那些仍然必须转到主服务器)。您的吞吐量不再受运行主节点的机器规格的限制,而是可以分布在从属节点周围。但是,您现在遇到了一个新的陈旧读取问题;也就是说,您有可能从从站读取过时的数据。

现在认真考虑一下您的应用程序的行为方式。阅读量大吗?它需要扩展多少?它可以在某些情况下处理陈旧的数据吗?

顺便说一句,副本集中至少 3 个成员的目的是提供弹性和安全复制,而不是提供多个节点来连接。如果您有 3 个节点并且丢失了一个,您仍然有足够的节点来选择新的主节点复制到备份节点。

于 2012-10-08T22:18:21.433 回答