Как импортировать и экспортировать базу данных MongoDB в Ubuntu 14.04

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].

Предпосылки

Прежде чем следовать этому руководству, убедитесь, что вы выполнили следующие предварительные условия:

Если не указано иное, все команды, которым требуются привилегии 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, чтобы восстановить ваши данные после последнего резервного копирования. Напомним, что резервное копирование обычно выполняется ночью, и если вы решите восстановить резервную копию вечером, вам не хватит всех обновлений с момента последнего резервного копирования.

Related