2014-12-02 2 views
3

Я работаю Mongo 2.6.3 Я обновляю около 900 записей, а иногда и до 5000 записей. Раньше у меня было это в цикле, и для 900 записей для перезарядки потребовалось около 1 минуты.MongoDB Bulk Update is slow

Прямо сейчас, я использую API initializeUnorderedBulkOp и занимает около 40 секунд для 900 записей. Почему это так медленно?

я в основном имеют

var batch = collection.initializeUnorderedBulkOp({useLegacyOps: true}); 
// for loop 
batch.find(query).upsert().updateOne({my object}); 
batch.execute({w:0},function(err, result) { 

Это используется драйвер узла. Снимок экрана моей сетевой панели для этих вызовов http://cl.ly/image/0L2a0o0w1I1b

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

Любые идеи о том, как получить это время?

+0

Может 'запрос' использовать индекс? Если нет, убедитесь, что это возможно. – JohnnyHK

+0

Можем ли мы получить дополнительную информацию? Что такое запрос? Он проиндексирован? Какие обновления? Какие индексы существуют в коллекции? – wdberkeley

+0

Уг, индексирование - это ответ. Вы должны оставить это, чтобы я мог отметить это. Я тупой, потому что не понимаю. –

ответ

2

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

Добавить индекс в свою коллекцию, который может использоваться find(query); используйте explain(), чтобы подтвердить, что он используется.