Как работает коллекция переименования mongo?

Меня смущает то, как монго переименовывает коллекции и сколько времени потребуется, чтобы переименовать очень большую коллекцию.

Вот сценарий: у меня есть коллекция монго со слишком большим объемом данных (588 миллионов документов), что замедляет поиск и вставку, поэтому я создаю архивную коллекцию для хранения всех этих данных. Для этого я думаю переименовать старую коллекцию в oldcollectionname_archive и начать со свежей коллекции с oldcollectionname. И планирует сделать это с помощью следующей команды:

db.oldCollectionName.renameCollection("oldCollectionName_archive")

Но я не уверен, сколько времени это займет. Я прочитал mongodocs и многие ответы stackoverflow относительно переименования коллекции, но я мог найти где угодно какие-либо данные о том, влияет ли размер коллекции на время, необходимое для переименования коллекции.

Пожалуйста, помогите, если у кого-то есть какие-либо знания об этом или любом другом опыте.

Примечание. Я читал другие проблемы, которые могут возникнуть во время переименования, в документации mongo и других ответах SO.


person kadamb    schedule 04.02.2016    source источник
comment
У меня нет такого опыта в отношении времени, которое нужно потреблять. но я полагаю, это не займет слишком много времени. Это просто изменить некоторую метаинформацию о коллекции.   -  person BAE    schedule 04.02.2016
comment
@BAE: я попробовал это на некоторых небольших коллекциях (с данными 1-2 миллиона документов), и это не заняло много времени. Завтра буду вносить изменения в коллекцию, поделится статистикой после переименования.   -  person kadamb    schedule 05.02.2016
comment
@kadamb Мне было бы любопытно узнать результат вашего переименования, я нахожусь в той же ситуации, и в документах действительно неясна стоимость такой операции.   -  person Thomas    schedule 15.06.2017


Ответы (2)


Из документации mongodb (https://docs.mongodb.com/manual/reference/command/renameCollection/)

renameCollection имеет разные последствия для производительности в зависимости от целевого пространства имен.

Если целевая база данных совпадает с исходной базой данных, renameCollection просто изменяет пространство имен. Это быстрая операция.

Если целевая база данных отличается от исходной базы данных, renameCollection копирует все документы из исходной коллекции в целевую коллекцию. В зависимости от размера коллекции это может занять больше времени. Другие операции, требующие монопольного доступа к затронутым базам данных, будут заблокированы до завершения переименования. См. раздел Какие блокировки используются некоторыми распространенными клиентскими операциями? для операций, требующих монопольного доступа ко всем базам данных.

Обратите внимание, что: * renameCollection не совместим с сегментированными коллекциями. * renameCollection завершится ошибкой, если target является именем существующей коллекции и вы не укажете dropTarget: true.

person kim    schedule 16.01.2019

Я переименовал несколько коллекций, содержащих около 500 млн документов. Он завершается в ~0 раз. Это верно для MongoDB 3.2 и 3.4, и я думаю, что и для более старых версий.

person Zohar Bar-Yehuda    schedule 09.10.2017