Производительность объемной вставки в MongoDB для больших коллекций
Я использую BulkWriteOperation (java driver) для хранения данных в больших кусках. Сначала кажется, что он работает нормально, но когда коллекция растет в размерах, вставки могут занимать довольно много времени.
В настоящее время для коллекции 20-миллиметровых документов объемная вставка 1000 документов может занимать около 10 секунд.
Есть ли способ сделать вставки независимыми от размера коллекции?
У меня нет никаких обновлений или обновлений, это всегда новые данные, которые я вставляю.
Судя по журналу, никаких проблем с замками не возникает.
Каждый документ имеет поле времени, которое индексируется, но оно линейно растет, поэтому я не вижу необходимости в том, чтобы mongo потратило время на реорганизацию индексов.
Мне бы хотелось услышать некоторые идеи по улучшению производительности
Спасибо
Ответы
Ответ 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.