MongoDB: Профилирование - Удалить - PullRequest
0 голосов
/ 11 декабря 2011

Я создаю отдельную коллекцию данных ночного обновления, и первое, что я делаю, это удаляю все записи, которые в настоящее время находятся в нем.Посредством профилирования я обнаружил, что эта команда удаления может занимать до 101190 миллисекунд.

Это нормально?Что-то, что я должен сделать, чтобы ускорить этот запрос?кажется, что просто очистить коллекцию должно быть достаточно быстро.

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 11 декабря 2011

Выполнение remove() без условия фильтра может быть очень медленным, поскольку каждый документ должен быть удален из файлов данных коллекции и любых существующих индексов (включая индекс по умолчанию для _id).

Если вы удаляете все документы в коллекции, и особенно если вы используете только индекс по умолчанию или вы можете легко воссоздать свои индексы из кода приложения, вы можете вместо этого drop() собрание, а затем начните добавлять новые данные.

Вы можете дополнительно минимизировать время, когда коллекция кажется пустой или частично заполненной, используя команду renameCollection like (в псевдо-Python):

for new_record in new_records:
    db.newcollection.insert(new_record)

for index_spec in index_specs:
    db.newcollection.ensure_index(index_spec)

db.oldcollection.drop()
db.command('renameCollection', 'newcollection', to='oldcollection')
0 голосов
/ 11 декабря 2011

dcrosta описал причину, по которой remove() может быть медленным, и поэтому также не стоит очищать все данные в коллекции.

Поскольку вы можете создавать или удалять коллекции на лету в MongoDB, гораздо более быстрый и удобный способ - просто отбросить коллекцию, а затем вставить новые документы (коллекция будет автоматически создана заново).

Так что просто сначала выдайте db.collname.drop().

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