我有一个mongodb副本集,我想从主数据库和辅助数据库中读取数据。
我使用以下命令连接到数据库:
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');
它不工作..。我的应用程序继续从主数据库读取。有什么建议吗?
发布于 2013-12-31 10:25:47
如果要从辅助数据库中读取数据,则应将read preference设置为以下任一项:
secondaryPreferred -在大多数情况下,操作从辅助成员读取,但如果没有辅助成员可用,则操作从primary.secondary读取-所有操作从副本集的辅助成员读取。根据您的示例,从nearest读取数据将根据ping时间(可以是主要的或次要的)选择最近的成员。
注意事项
在使用primary以外的任何读首选项时,您需要注意可能影响应用程序逻辑的最终一致性的潜在问题。例如,如果您从辅助服务器读取数据,则主服务器上可能存在尚未复制到该辅助服务器的更改。
如果您担心从次要文件读取时一致性更强,则应该查看Write Concern for Replica Sets文档。
由于从属服务器必须写入与主服务器相同的数据,因此从从属服务器读取数据可能不会提高性能,除非您的应用程序的读操作非常繁重,或者最终具有良好的一致性。
发布于 2014-05-17 23:42:32
按照MongoDB website和Mongoose web site上的文档,您可以添加以下说明,以在Mongoose上配置ReadPreference:
var opts = { replSet: {readPreference: 'ReadPreference.NEAREST'} };mongoose.connect('mongodb://###:###@###:###/###', opts);
这已经使用Mongoose版本3.8.9进行了测试
发布于 2015-02-27 00:51:54
除了设置连接URI (如您所做的那样)和连接选项(如Emas所做的那样),我还必须显式地为每个查询选择服务器,例如
var query = User.find({}).read("nearest");
query.exec(function(err, users) {
// ...
});https://stackoverflow.com/questions/20714340
复制相似问题