Подтвердить что ты не робот

Производительность объемной вставки в MongoDB для больших коллекций

Я использую BulkWriteOperation (java driver) для хранения данных в больших кусках. Сначала кажется, что он работает нормально, но когда коллекция растет в размерах, вставки могут занимать довольно много времени.

В настоящее время для коллекции 20-миллиметровых документов объемная вставка 1000 документов может занимать около 10 секунд.

Есть ли способ сделать вставки независимыми от размера коллекции? У меня нет никаких обновлений или обновлений, это всегда новые данные, которые я вставляю.

Судя по журналу, никаких проблем с замками не возникает. Каждый документ имеет поле времени, которое индексируется, но оно линейно растет, поэтому я не вижу необходимости в том, чтобы mongo потратило время на реорганизацию индексов.

Мне бы хотелось услышать некоторые идеи по улучшению производительности

Спасибо

4b9b3361

Ответ 1

Вы считаете, что для индексации не требуется реорганизация документа и то, как вы описали индекс, предполагает, что правый указатель в порядке. Таким образом, индексирование, как представляется, исключается как проблема. Вы, конечно, могли бы, как было предложено выше, окончательно утвердить это, сбросив индекс и повторно запустив объемную запись.

Помимо индексации, я бы...

  • Подумайте, может ли ваш диск не отставать от объема данных, которые вы сохраняете. Подробнее об этом в Mongo docs
  • Используйте profiling, чтобы понять, что происходит с вашей записью.

Ответ 2

  • У вас есть какой-либо индекс в вашей коллекции? Если да, для построения дерева индексов потребуется время.
  • - временные ряды данных? если да, используйте обновления больше, чем вставки. Пожалуйста, прочитайте этот блог. Блог предлагает обновлять на месте более эффективные, чем вставки (https://www.mongodb.com/blog/post/schema-design-for-time-series-data-in-mongodb)
  • Есть ли у вас возможность настраивать собранные коллекции? если да, это сократило бы время (протестировало его на 3-х оштукатуренных серверах с 15-миллионными записями записи IP-адресов).

Ответ 3

  • Использование диска и процессор: Проверьте использование диска и процессор и посмотрите, не превышено ли это. По-видимому, это должен быть диск, который вызывает эту проблему для вас.

  • Mongo log: Кроме того, если 1000-процентный запрос занимает 10 секунд, тогда проверьте журнал mongo, если есть несколько вложений в объеме 1000, которые требуют времени. Если есть такие запросы, вы можете сузить свой анализ

Еще одна непонятная вещь - порядок запросов, которые происходят в вашем экземпляре Mongo. Является ли вставка единственной операцией, которая происходит, или есть другие поисковые запросы, которые тоже запускаются? Если да, то вы должны посмотреть на масштабирование любого ресурса maxing out.