MongoDump и MongoRestore против MongoExport и MongoImport

Jan 25 2023
MongoDB — это доступная в исходном коде кросс-платформенная документо-ориентированная программа базы данных. MongoDB классифицируется как программа базы данных NoSQL и использует JSON-подобные документы с необязательными схемами.

MongoDB — это доступная в исходном коде кросс-платформенная документо-ориентированная программа базы данных. MongoDB классифицируется как программа базы данных NoSQL и использует JSON-подобные документы с необязательными схемами.

В этом блоге я расскажу об использовании mongodump и mongorestore по сравнению с mongoexport и mongoimport . Блог учитывает тот факт, что читатели этого блога имеют опыт работы с MongoDB , а используемые термины тесно связаны только с MongoDB.

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

Поговорим о том, зачем нам нужны эти утилиты. Из названия можно сделать вывод, что mongodump и mongoexport должны использоваться для экспорта данных из базы данных, а mongorestore и mongoimport должны быть для импорта данных в базу данных, но важная часть заключается в том, что несколько утилит для схожих задач. Это то, что мы собираемся понять.

монгодамп

mongodump — это утилита командной строки для создания двоичного экспорта содержимого базы данных. mongodump может экспортировать данные из экземпляров mongod или mongos ; т.е. может экспортировать данные из автономного развертывания, набора реплик и сегментированного кластера. Пример команды для использования mongodump:

$ mongodump --uri=<MONGO_URL> --db=<DB_NAME> --collection=<COLL_NAME>

Это команда, которую нужно запустить для извлечения дампа с помощью mongodump. По умолчанию будет создана папка дампа, и в той же папке будет создан дамп базы данных. Нам нужно передать либо параметр MONGO_URL --uri, либо мы можем использовать его --user=myuser and --password=somepass, чтобы позволить утилите подключиться к клиенту MongoDB. Мы можем указать базу данных и коллекцию для получения дампа с использованием --db and --collectionпараметров, и даже мы можем использовать --outпараметр для изменения имени каталога дампа. Всякий раз, когда мы делаем дамп, для каждой коллекции он генерирует два файла, один файл .bson, а другой .metadata.jsonфайл. Для получения дополнительной информации о mongodump можно обратиться к документации . Резервную копию базы данных также можно запустить в файл архива с помощью --archiveполя.

Причина, по которой мы используем mongodump, заключается в том, что он создает двоичные копии и более эффективен ( под эффективным подразумевается, что он быстрее, чем mongoexport, и создает более сжатый дамп данных ). Другая причина заключается в том, что, поскольку mongodump создает .bson дамп, он сохраняет расширенные типы данных BSON. Он также сохраняет индексы и другую статистику в .metadata.jsonфайле, поэтому после восстановления данных индексы будут созданы неявно. Следовательно, как правило, он используется (и рекомендуется для использования MongoDB ) для запланированного резервного копирования данных через cron или что-то еще.

Примечание. Мы не можем использовать --archiveфлаг и --outфлаги вместе в одной команде mongodump.

монгорестор

mongorestore является дополнением к mongodump и используется для импорта данных, выгруженных через mongodump или mongoexport. mongorestore — это операция только для вставки , что означает, что она не перезапишет уже существующий документ в базе данных.

Mongorestore позволяет нам выполнять некоторые параметры частичного восстановления, указав коллекцию или список коллекций, которые мы хотели бы восстановить в вашей базе данных. Если нам нужно восстановить только одну коллекцию, мы можем использовать флаг, --collectionв котором нам нужно будет указать --dbфлаг с базой данных, в которую мы восстанавливаем, а также путь к BSONфайлу коллекций. Рекомендуется использовать --nsIncludeфлаг вместо флага коллекции.

Если мы хотим проверить, mongorestoreбудет ли работать перед импортом базы данных, мы можем использовать, чтобы --dryRunпроверить, будет ли восстановление работать должным образом. С --dryRunфлагом mongorestore будет возвращать сводную информацию mongorestore без импорта каких-либо данных.

$ mongorestore --db=mydb --nsInclude="staging.*" dump/

монгоэкспорт

mongoexport работает точно так же, как mongodump, но менее эффективно использует пространство и создает дамп данных в удобочитаемом формате, то есть в формате JSON , и, следовательно, занимает больше времени. По умолчанию mongoexport записывает в стандартный вывод, но мы также можем записать данные в файл, используя параметр --out. Но, как мы обсуждали в mongodump, дамп mongoexport не сжимается и не создается, .metadata.jsonпоэтому он не может сохранять индексы, и по умолчанию он также не может сохранять богатые типы данных BSON. Хотя в более новой версии mongo mongoexport поддерживает сохранение расширенных типов BSON с помощью --jsonFormat=canonicalпараметра.

Преимущество mongoexport заключается в том, что мы также можем экспортировать определенные поля, используя --fields=field1,field2...параметр и указывая все значения через запятую. Мы также можем использовать --skip, --limitи --sortв mongoexport для получения отфильтрованных и ограниченных результатов. Также есть много полей, которые мы можем использовать при использовании mongoexport. Мы также можем использовать --queryпараметры, чтобы получить больше отфильтрованных результатов/дампов. Когда мы получаем дамп с помощью mongoexport, становится легко вставить их в приложения пользовательского интерфейса базы данных, такие как MongoDB Compass .

монгоимпорт

mongoimport является дополнением к mongoexport и используется для восстановления расширенного экспорта JSON, CSV или TSV, созданного mongoexportили, возможно, другим сторонним инструментом экспорта. Большая разница между mongorestore и утилитой mongoimport заключается в --modeфлаге, который имеет параметры вставки, добавления и слияния. Только из названий мы можем понять, что в случае режима вставки мы можем вставлять только уникальные документы _id и логировать ошибку в случае дублирования. В случае upsert , если уже существует документ с таким же идентификатором _, новый документ заменит предыдущий документ с тем же идентификатором _. Третий случай — слияние, где существующие документы, соответствующие документу в файле импорта, объединяются с новым документом.

Вывод: Утилиты mongodump/ mongorestore идеально подходят для стратегии резервного копирования и восстановления базы данных mongo . Эти утилиты позволяют нам создавать дамп и восстанавливать из одного файла архива, который можно легко сжать и сохранить или передать по электронной почте. Mongorestoreпозволяет нам включать или исключать определенные коллекции из импорта и/или восстановления в новую базу данных с помощью параметров флага и. Утилиты mongoexport / mongoimport отлично подходят для работы с коллекциями в базе данных mongo и вставки/обновления документов в этих коллекциях. Мы можем использоватьфлаг в mongoimport--nsInclude--nsExclude--modeчтобы определить, хотим ли мы вставить, заменить или объединить документы из нашего импортированного файла.

Спасибо за прочтение. Вы можете связаться со мной через LinkedIn и GitHub .