我有一个mongodb副本集,我想从中读取主数据库和辅助数据库中的数据.
我用这个命令连接到db:
mongoose.connect('mongodb://user:password@54.230.1.1,user:password@54.230.1.2,user:password@54.230.1.3/PanPanDB?replicaSet=rs0&readPreference=nearest');
它不起作用..我的申请继续从初级读取..有任何建议吗?
如果要从辅助节点中读取,则应将读取首选项设置为以下任一项:
secondaryPreferred
- 在大多数情况下,操作从辅助成员读取,但如果没有辅助成员可用,则从主要成员读取操作.
secondary
- 从副本集的辅助成员读取所有操作.
nearest
根据您的示例读取将按ping时间选择最近的成员(可以是主要成员或次要成员).
使用除了以外的任何读取首选项时primary
,您需要了解可能影响应用程序逻辑的最终一致性的潜在问题.例如,如果您正在从辅助节点中读取,则主节点上可能还有尚未复制到该辅助节点的更改.
如果您在阅读辅助文件时担心更强的一致性,则应查看" 写入关注副本集"文档.
由于辅助数据库必须写入与主数据库相同的数据,因此从辅助数据库读取数据可能无法提高性能,除非您的应用程序非常重读或最终具有一致性.
按照MongoDB网站和Mongoose 网站上的文档,您可以添加此指令以配置Mongoose上的ReadPreference:
var opts = { replSet: {readPreference: 'ReadPreference.NEAREST'} };
mongoose.connect('mongodb://###:###@###:###/###', opts);
这已经使用Mongoose版本3.8.9进行了测试