Самый быстрый способ обновления большого количества данных - PullRequest
2 голосов
/ 27 августа 2011

У меня миллионы строк в коллекции монго, и мне нужно обновить все из них. Я написал скрипт оболочки Mongo (JS), например:

db.Test.find().forEach(function(row) {
    // change data and db.Test.save()
});

который (я думаю) должен быть быстрее, чем, например, обновление через любой языковой драйвер из-за возможной задержки между веб-сервером и самим сервером mongo, а также просто потому, что драйвер " что-то сверху ", а mongo " что-то в подвале ».

Даже если он может обновляться приблизительно 2 100 rec./sec на четырехъядерном процессоре 2,27 ГГц с 4 ГБ ОЗУ.

Как я знаю, mongoimport может справиться с 40k rec./sec (на той же машине), я не думаю, что упомянутая скорость является чем-то "быстрым".

Есть ли более быстрый способ?

1 Ответ

3 голосов
/ 27 августа 2011

Здесь возможны два ограничивающих фактора:

  1. Одиночная блокировка записи: MongoDB имеет только одну блокировку записи, это может быть определяющим фактором.
  2. Доступ к диску: , если обновляемые данные не находятся активно в памяти, их необходимо будет загрузить с диска, что приведет к замедлению.

Есть ли что-нибудь быстрееКстати?

Ответ здесь зависит от узкого места.Попробуйте запустить iostat и mongostat, чтобы увидеть, где находится узкое место.Если iostat показывает высокий уровень дискового ввода-вывода, то диск удерживает вас.Если mongostat показывает высокий «% блокировки», то вы максимально расширили доступ к глобальной блокировке записи.

Если вы увеличили IO, простого исправления кода не существует.Если вы исчерпали блокировку записи, простого исправления кода не существует.Если ни одна из этих проблем не является проблемой, возможно, стоит попробовать другой драйвер.

Как я знаю, mongoimport может обрабатывать около 40 тыс. Запросов в секунду (на той же машине)

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

Я бы начал с проверки iostat / mongostat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...