Эффективность массового обновления MongoDB с использованием forEach

77
7

Как вы подходите к документам для массового/пакетного обновления (до 10 тыс. Документов) в сочетании с forEach? (Нет конкретных критериев для обновления, используемых для выбора случайного документа)

Я рассматриваю два варианта:

Соберите весь документ _id в закрытии forEach в массив, а затем обновите его с помощью collection.update({_id: {$in: idsArray}},...) Добавьте запросы обновления в закрытие forEach к массовой операции и выполните однократное выполнение, где-то вдоль линий bulk.find({_id: doc.id}).updateOne({...}); bulk.execute(); bulk.find({_id: doc.id}).updateOne({...}); bulk.execute();

Я скоро сравню это, но я хотел бы знать, что больше ввода-вывода эффективно и считается "умным" с Монго.

спросил(а) 2016-06-28T20:31:00+03:00 5 лет назад
1
Решение
78

Хорошо, поэтому я сравнил два варианта.

TL; DR вариант один в два раза быстрее, поэтому собирайте идентификаторы и обновляйте один раз.

для дальнейшего использования, некоторые подробности для:

    Общее количество документов в db составляет около 500 тыс. Документы содержат около 20-25 полей. Была обновлена информация о 10-30 тыс. Документов.

Результаты (время зависит от машины, но относительная разница имеет значение):

Одно обновление с массивом идентификаторов: 200-500 мс. Массовое обновление: 600-1000мс.

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

ответил(а) 2016-06-29T18:45:00+03:00 5 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема