0

我已经使用文档示例中给出的标签字段配置了我的副本集:

{
    "_id" : "rs0",
    "version" : 2,
    "members" : [
             {
                     "_id" : 0,
                     "host" : "mongodb0.example.net:27017",
                     "tags" : {
                             "dc": "east",
                             "use": "production"
                     }
             },
             {
                     "_id" : 1,
                     "host" : "mongodb1.example.net:27017",
                     "tags" : {
                             "dc": "east",
                             "use": "reporting"
                     }
             },
             {
                     "_id" : 2,
                     "host" : "mongodb2.example.net:27017",
                     "tags" : {
                             "use": "production"
                     }
             }
     ]
}

现在我的问题是,如果我发送带有“最近”、“primarypreferred”之类的读取问题的读取查询,它是否能够自动选择此标签,或者我应该将“dc”名称与我的查找查询一起传递。如果有人可以帮助我关于同样的。

4

1 回答 1

1

如果您想使用您的阅读偏好设置标签(除了主要的标签),您必须手动设置它,例如:

DBCollection collection = ...    

ReadPreference dcReadPref =
     ReadPreference.nearest(new BasicDBObject("dc", "east"));

collection.findOne(new BasicDBObject("field", "value"), null, dcReadPref);

不幸的是,该find()方法没有差异,包括ReadPreference作为参数(至少在 javadoc 中找不到)。你将不得不做这样的事情:

DBCollection collection = ...
ReadPreference defaultReadPref = collection.getReadPreference();
collection.setReadPreference(dcReadPref);
...
collection.find(new BasicDBObject("field", "value"));
...
collection.setReadPreference(defaultReadPref); // when done restore default

您可以在驱动程序、数据库、集合或操作级别设置读取首选项(无标签)。

要将您的环境也包含在标签集中:

String env = ... / get it from somewhere

DBObject dcTag = new BasicDBObject("dc", "east"):
DBObject envTag = new BasicDBObject("use", env);

ReadPreference pref = ReadPreference.primaryPreferred(dcTag, envTag);
于 2013-09-18T10:20:07.913 回答