Mongoimport: обновление сбора ночей без прерывания потребления данных
-
22-10-2019 - |
Вопрос
У меня есть коллекция из приблизительно 625 000 объектов.
Ночью через Cron я получаю обновленный файл (TSV) этих данных от поставщика данных и должен повторно импортировать их в мой MongoDB.
Как лучше всего сделать это, не прерывая веб -сайт/сервис и его пользователей, которые потребляют данные? Mongoimport -Upsert прямо в коллекции лучшим способом? Это просто так медленно.
Должен ли я думать о других методах, включающих копии моей коллекции?
Решение
Mongoimport -Upsert прямо в коллекции лучшим способом? Это просто так медленно.
Это сработает, но по моему опыту mongoimport
был медленным и громоздким. Он также имеет некоторые другие серьезные ограничения: нет возможности отслеживать прогресс, нет места для проверки/проверки, нет журнала того, что это делает.
Должен ли я думать о других методах, включающих копии моей коллекции?
Альтернативный метод здесь состоит в том, чтобы написать сценарий, который делает это. На большинстве языков это довольно тривиально.
Это даст вам возможность отслеживать прогресс и обрабатывать плохие данные. Если вы обнаружите импорт особенно медленным, вы также можете расколоть процесс и разделить работу.
О скорости
Помните, что вы обновляете объекты 625K. Если вы можете получить 1K обновления/секунду, это еще 10 минут для обновления. Если вы бежите mongostat
Или проверьте свой мониторинг во время процесса импорта, вы должны получить некоторое представление о том, сколько работы выполняется.