MongoDB — создание индекса по умолчанию — фоновая конструкция

В настоящее время я использую 3.2.1 mongo driver version.

Случай использования —

Запись – массовая вставка в коллекцию или вставка по строкам. Чтение – чтение на основе _id.

Никаких дополнительных индексов не требуется, достаточно индекса по умолчанию, который mongodb создает в поле _id.

Проблема. Моя служба Mongo (вызывающая mongodb) слишком сильно загружает ЦП.

1.) Создает ли Mongodb индексы для поля _id в фоновом режиме.

2.) Если нет, мне нужно создать индекс в фоновом режиме, чтобы ускорить процесс. Как я могу сделать это программно.

Может быть, что-то вроде этого,

collection.createIndex(new BasicDBObject("_id", 1),new BasicDBObject("background", true));

Я наткнулся на эту ссылку


person Ankur Singhal    schedule 03.05.2016    source источник
comment
Проверьте это api.mongodb.org/java/3.2/com/mongodb/ DBCollection.html, метод отсутствует для (BasicDBObject, IndexOptions)   -  person achuth    schedule 03.05.2016
comment
По умолчанию в поле _id есть индекс, и вы не можете его изменить. Говоря о своей службе Mongo, вы имеете в виду свою службу mongodb или свое приложение?   -  person yaoxing    schedule 03.05.2016
comment
Служба приложений @yaoxing, а не служба монго. Да, индекс на _id по умолчанию, но работает ли он в фоновом режиме, если нет, могу ли я сделать его для создания индекса в фоновом режиме?   -  person Ankur Singhal    schedule 03.05.2016


Ответы (3)


Запуск индекса в фоновом режиме не ускоряет вставку, а наоборот, замедляет ее. Однако запрос будет асинхронным, что позволит вашему приложению одновременно выполнять другие запросы.

Вы можете попробовать следующие подходы для повышения производительности объемных вставок.

  • Создайте реплику, которая разрешает чтение на вторичных узлах. При этом вставки будут выполняться на первичном узле, а чтение будет направлено на вторичный. В этом случае поможет запуск индексации в фоновом режиме. В этом случае важно избегать чтения устаревших данных.
  • Create a new index that works well with the shape of data you are inserting.
    • Create several indexes using a variation of keys on the collection.
    • Запустите запрос на вставку для небольшого набора данных. Mongo проанализирует все индексы, доступные в коллекции, и выберет тот, который лучше всего подходит для формы данных, которые вы вставляете.
    • Запустите db..explain("executionStats") для запроса, чтобы узнать, какой из индексов используется.
    • Удалите все остальные индексы, так как они будут влиять на производительность ваших вставок.
    • Запустите полный запрос и посмотрите, как он работает с использованием нового индекса.
person White Bullet    schedule 03.05.2016
comment
понятно, хорошее объяснение. - person Ankur Singhal; 03.05.2016

Если вы используете Java API, вот ссылка для правильного использования:

http://api.mongodb.org/java/3.0/com/mongodb/client/MongoCollection.html?_ga=1.119232521.1817714352.1461227368#createIndex-org.bson.conversions.Bson-

http://api.mongodb.org/java/3.0/com/mongodb/client/model/IndexOptions.html

В основном вам нужно правильно указать параметр фона, используя IndexOptions API.

person him_j    schedule 03.05.2016
comment
я использую 3.2.1, это не позволяет мне, см. мое редактирование в вопросе, мне нужно изменить что-нибудь еще - person Ankur Singhal; 03.05.2016

Если вы используете Spring Data MongoDB, вы можете использовать методы построителя в классе Index(), чтобы установить свойство фона:

new Index(CREATED_DATE_FIELD_NAME, Sort.Direction.DESC).background();
person Tim Schimandle    schedule 21.05.2019