MongoDB - один из самых популярных движков баз данных NoSQL. Он известен тем, что он масштабируемый, мощный, надежный и простой в использовании. В этой статье мы покажем вам, как импортировать и экспортировать базы данных MongoDB.
Мы должны пояснить, что под импортом и экспортом в этой статье мы имеем в виду работу с данными в удобочитаемом формате, совместимом с другими программными продуктами. Напротив, операции резервного копирования и восстановления создают или используют специфические двоичные данные MongoDB, которые сохраняют не только согласованность и целостность ваших данных, но также и их специфические атрибуты MongoDB. Таким образом, для миграции обычно предпочтительнее использовать резервное копирование и восстановление, если исходная и целевая системы совместимы. Резервное копирование, восстановление и миграция выходят за рамки этой статьи - см. Https://www.digitalocean.com/community/tutorials/how-to-back-up-restore-and-migrate-a-mongodb-database- on-ubuntu-14-04 [Как создать резервную копию, восстановить и перенести базу данных MongoDB в Ubuntu 14.04].
Предпосылки
Прежде чем следовать этому руководству, убедитесь, что вы выполнили следующие предварительные условия:
-
Ubuntu 14.04 Droplet
-
Пользователь без полномочий root. За подробностями обращайтесь к Initial Server Setup с Ubuntu 14.04.
-
MongoDB устанавливается и настраивается с использованием статьи Как установить MongoDB в Ubuntu 14.04.
Если не указано иное, все команды, которым требуются привилегии root в этом учебном пособии, должны запускаться как пользователь без полномочий root с привилегиями sudo.
Понимание основ
Прежде чем продолжить чтение этой статьи, необходимо некоторое базовое понимание по этому вопросу. Если у вас есть опыт работы с популярными системами реляционных баз данных, такими как MySQL, вы можете найти некоторые сходства при работе с MongoDB.
Первое, что вы должны знать, это то, что MongoDB использует форматы json и bson (двоичный json) для хранения своей информации. Json - это читаемый человеком формат, который идеально подходит для экспорта и, в конечном итоге, импорта ваших данных. В дальнейшем вы можете управлять экспортированными данными с помощью любого инструмента, поддерживающего json, включая простой текстовый редактор.
Пример документа json выглядит следующим образом:
Пример формата json
{"address":[
{"building":"1007", "street":"Park Ave"},
{"building":"1008", "street":"New Ave"},
]}
С Json очень удобно работать, но он не поддерживает все типы данных, доступные в bson. Это означает, что при использовании json произойдет так называемая «потеря точности» информации. Вот почему для резервного копирования / восстановления лучше использовать двоичный файл bson, который сможет лучше восстановить вашу базу данных MongoDB.
Во-вторых, вам не нужно беспокоиться о явном создании базы данных MongoDB. Если база данных, которую вы указываете для импорта, еще не существует, она создается автоматически. Еще лучше обстоит дело со структурой коллекций (таблиц базы данных). В отличие от других механизмов баз данных, в MongoDB структура снова автоматически создается при первой вставке документа (строки базы данных).
В-третьих, в MongoDB чтение или вставка больших объемов данных, например, для задач данной статьи, могут быть ресурсоемкими и занимать значительную часть ЦП, памяти и дискового пространства. Это очень важно, учитывая, что MongoDB часто используется для больших баз данных и больших данных. Самым простым решением этой проблемы является запуск экспорта / резервного копирования в течение ночи.
В-четвертых, согласованность информации может быть проблематичной, если у вас есть занятый сервер MongoDB, где информация изменяется в процессе экспорта базы данных. Простого решения этой проблемы не существует, но в конце этой статьи вы увидите рекомендации для дальнейшего чтения о репликации.
Импорт информации в MongoDB
Чтобы узнать, как работает импорт информации в MongoDB, давайте воспользуемся популярной базой данных MongoDB о ресторанах. Он в формате .json и может быть загружен с помощью + wget +
следующим образом:
wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json
После завершения загрузки у вас должен быть файл + primer-dataset.json in
(размер 12 МБ) в текущем каталоге. Давайте импортируем данные из этого файла в новую базу данных с именем + newdb +
и в коллекцию с названием + рестораны . Для импорта мы будем использовать команду ` mongoimport +`, например:
sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json
Результат должен выглядеть так:
Выход моноимпорта
2016-01-17T14:27:04.806-0500 connected to: localhost
2016-01-17T14:27:07.315-0500 imported 25359 documents
Как показывает вышеприведенная команда, 25359 документов были импортированы. Поскольку у нас не было базы данных с именем + newdb +, MongoDB создал ее автоматически.
Давайте проверим импорт, подключившись к недавно созданной базе данных MongoDB с именем + newdb +
следующим образом:
sudo mongo newdb
Теперь вы подключены к недавно созданному экземпляру базы данных + newdb +
. Обратите внимание, что ваш запрос изменился, показывая, что вы подключены к базе данных.
Подсчитайте документы в коллекции ресторанов командой:
db.restaurants.count()
Результат должен отображать + 25359 +
, точно количество импортированных документов. Для еще лучшей проверки вы можете выбрать первый документ из коллекции ресторанов следующим образом:
db.restaurants.findOne()
Результат должен выглядеть так:
Вывод db.restaurants.findOne ()
{
"_id" : ObjectId("569beb098106480d3ed99926"),
"address" : {
"building" : "1007",
"coord" : [
-73.856077,
40.848447
],
"street" : "Morris Park Ave",
"zipcode" : "10462"
},
"borough" : "Bronx",
"cuisine" : "Bakery",
"grades" : [
{
"date" : ISODate("2014-03-03T00:00:00Z"),
"grade" : "A",
"score" : 2
},
...
],
"name" : "Morris Park Bake Shop",
"restaurant_id" : "30075445"
}
Такая детальная проверка может выявить проблемы с документами, такими как их содержание, кодировка и т. Д. Формат json использует кодировку + UTF-8 +
, и ваши экспорты и импорт должны быть в этой кодировке. Имейте это в виду, если вы редактируете файлы json вручную. В противном случае MongoDB автоматически обработает это для вас.
Чтобы выйти из приглашения MongoDB, введите + exit +
в приглашении:
exit
Вы вернетесь к обычной командной строке в качестве вашего пользователя без полномочий root.
Экспорт информации из MongoDB
Как мы уже упоминали, экспортируя информацию из MongoDB, вы можете получить текстовый файл, понятный человеку, с вашими данными. По умолчанию информация экспортируется в формате json, но вы также можете экспортировать в csv (значение, разделенное запятыми).
Чтобы экспортировать информацию из MongoDB, используйте команду + mongoexport +
. Он позволяет вам экспортировать очень детальный экспорт, чтобы вы могли указать базу данных, коллекцию, поле и даже использовать запрос для экспорта.
Простым примером + mongoexport +
может быть экспорт коллекции ресторанов из базы данных + newdb +
, которую мы ранее импортировали. Это можно сделать так:
sudo mongoexport --db newdb -c restaurants --out newdbexport.json
В приведенной выше команде мы используем + - db +
для указания базы данных, + -c +
для коллекции и + - out +
для файла, в котором будут сохранены данные.
Результат успешного + mongoexport +
должен выглядеть следующим образом:
Выход Монгоэкспорта
2016-01-20T03:39:00.143-0500 connected to: localhost
2016-01-20T03:39:03.145-0500 exported 25359 records
Приведенный выше вывод показывает, что было импортировано 25359 документов - столько же, сколько импортированных.
В некоторых случаях вам может понадобиться экспортировать только часть вашей коллекции. Учитывая структуру и содержание файла json для ресторанов, давайте экспортируем все рестораны, которые соответствуют критериям для размещения в районе Бронкса и имеют китайскую кухню. Если мы хотим получить эту информацию напрямую при подключении к MongoDB, снова подключитесь к базе данных:
sudo mongo newdb
Затем используйте этот запрос:
db.restaurants.find( { borough: "Bronx", cuisine: "Chinese" } )
Результаты отображаются на терминале. Чтобы выйти из приглашения MongoDB, введите + exit +
в приглашении:
exit
Если вы хотите экспортировать данные из командной строки sudo вместо подключения к базе данных, сделайте предыдущий запрос частью команды + mongoexport +
, указав его для аргумента + -q +
следующим образом:
sudo mongoexport --db newdb -c restaurants -q "{ borough: 'Bronx', cuisine: 'Chinese' }" --out Bronx_Chinese_retaurants.json
Обратите внимание, что мы используем одинарные кавычки внутри двойных кавычек для условий запроса. Если вы используете двойные кавычки или специальные символы, такие как + $ +
, вам придется экранировать их с помощью обратной косой черты (+ \ +
) в запросе.
Если экспорт был успешным, результат должен выглядеть следующим образом:
Выход Монгоэкспорта
2016-01-20T04:16:28.381-0500 connected to: localhost
2016-01-20T04:16:28.461-0500 exported 323 records
Выше показано, что 323 записи были экспортированы, и вы можете найти их в указанном нами файле + Bronx_Chinese_retaurants.json +
.
Заключение
Эта статья познакомила вас с основами импорта и экспорта информации в базу данных MongoDB и из нее. Вы можете продолжить дальнейшее чтение на How To Резервное копирование, восстановление и миграция базы данных MongoDB в Ubuntu 14.04 и https://www.digitalocean.com/community/tutorials/how-to-set-up-a-scalable-mongodb-database[How для настройки Масштабируемая база данных MongoDB.
Репликация полезна не только для масштабируемости, но и для текущих тем. Репликация позволяет вам продолжать работу службы MongoDB непрерывно с подчиненного сервера MongoDB, пока вы восстанавливаете главный сервер после сбоя. Частью репликации является также operations log (oplog), в котором записываются все операции, которые изменяют ваши данные. Вы можете использовать этот журнал так же, как вы используете двоичный журнал в MySQL, чтобы восстановить ваши данные после последнего резервного копирования. Напомним, что резервное копирование обычно выполняется ночью, и если вы решите восстановить резервную копию вечером, вам не хватит всех обновлений с момента последнего резервного копирования.