Mar*_*ien 13 connection-string mongodb
我正在查看http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html,当您滚动到"复制密码连接默认情况下没有确认,而readPreference用于辅助"时
它声明了一个连接字符串到副本集,如下所示:
MongoClient.connect("mongodb://localhost:30000,localhost:30001/integration_test_?w=0&readPreference=secondary", function(err, db) {
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么需要指定2台主机.我认为mongodb文档已经声明副本集对客户端是透明的.这意味着客户端只需要连接到主副本集,mongodb就可以完成这项工作.因此,连接应该只包含1个主机.Mongodb doc声明副本集中必须至少有3个主机,并且此连接字符串仅指定了2个主机.
另外,为什么连接字符串没有说明"replicaSet"?
Bri*_*ght 27
连接字符串中的多个服务器充当用于发现连接模式的种子列表.你是正确的,你可以只指定主服务器,事情会完美.也就是说,直到主服务器出现故障或非常繁忙.通过在连接字符串中指定多台计算机,可以为客户端提供多个位置以查询副本集配置.
当连接模式解析为副本集时(请参阅下文),只要种子列表中至少有一个服务器响应,驱动程序就会找到主服务器,即使它不在种子列表中(响应将会响应)包含完整副本集和当前主副本的名称.此外,即使在初始连接之后,也会自动发现并添加(或删除)其他辅助节点.这将使您能够从副本集添加和删除服务器,驱动程序将自动处理更改.
要回答您的最后一个问题,因为指定多个服务器是否是副本集或多个mongos(在分片设置中)是模糊的,驱动程序将经历连接到服务器的发现阶段以确定其类型.这在连接时有一点开销,可以通过在连接字符串中指定连接模式来避免 - 因此replicaSet关键字.因此,虽然没有必要,但它可以加快连接时间,以明确说明服务器位于连接字符串中的副本集中.
| 归档时间: |
|
| 查看次数: |
15709 次 |
| 最近记录: |