显式连接到Mongo副本集有什么好处?

时间:2012-10-08 20:52:47

标签: mongodb

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

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

我问的原因是,在mongoose中,connectSet()方法似乎记录较少且使用得很好。然而,我无法想象你不想连接到集合的场景,因为建议总是在3x +副本集上运行Mongo ......

1 个答案:

答案 0 :(得分:2)

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

另一方面,允许与从站的连接允许您扩展读取(不是写入 - 那些仍然必须是主要的)。您的吞吐量不再受运行主节点的计算机规范的限制,但可以分布在从站周围。但是,您现在有一个新的陈旧读取问题;也就是说,你有可能从奴隶那里读取陈旧的数据。

现在仔细思考应用程序的行为方式。它阅读重吗?它需要多少才能扩展?它可以在某些情况下处理陈旧数据吗?

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