Запрашиваемый набор реплик на основе тегов

Я настроил свой набор реплик с полями тегов, как показано в примере с документом:

{
    "_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"
                     }
             }
     ]
}

Теперь мой вопрос: если я отправлю запросы на чтение с вопросом о прочтении, например, "ближайшие", "первичные", сможет ли он автоматически выбирать эти теги, или я должен передать имя "dc" вместе с запросом поиска. Если кто-то может мне помочь относительно того же.

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

Вы можете установить предпочтение чтения (w/wo теги) на уровне драйвера, базы данных, коллекции или операции.

Чтобы также включить вашу среду в набор тегов:

String env = ... / get it from somewhere

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

ReadPreference pref = ReadPreference.primaryPreferred(dcTag, envTag);
Другие вопросы по тегам