MongoDB является документо-ориентированной базой данных, которая является свободной и с открытым исходным кодом. Она классифицируется как база данных NoSQL, потому что он не опирается на традиционные таблицы на основе реляционной структуры базы данных. Вместо этого она использует JSON-подобные документы с динамическими схемами. В отличии от реляционных баз данных, MongoDB не требует предопределенных схем, прежде чем добавлять данные в базу данных. Вы можете изменить схему в любое время и так часто, как это необходимо, без необходимости установки новой базы данных с обновленной схемой.
Это руководство проведет вас через установку MongoDB Community Edition на сервере CentOS 7.
Перед выполнением этого учебника, убедитесь, что у вас есть обычный, не корневой пользователь с привилегиями sudo. Вы можете узнать больше о том, как создать пользователя с этими привилегиями в руководстве, как создать пользователя sudo на CentOS.
Пакет mongodb-org отсутствует в репозитории по умолчанию для CentOS. Однако, MongoDB поддерживает специальный репозиторий. Давайте добавим его на наш сервер.
С помощью редактора vi, создайте файл:
sudo vi /etc/yum.repos.d/mongodb-org.repo
Затем, посетите раздел установки на Red Hat документацию MongoDB и добавьте информацию хранилища для последней стабильной версии в файл:
[mongodb-org-3.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
Сохраните и закройте файл.
Прежде чем двигаться дальше, мы должны убедиться, что хранилище MongoDB существует при помощи утилиты yum. Команда repolist выводит список разрешенных хранилищ:
yum repolist
. . . repo id repo name base/7/x86_64 CentOS-7 - Base extras/7/x86_64 CentOS-7 - Extras mongodb-org-3.2/7/x86_64 MongoDB Repository updates/7/x86_64 CentOS-7 - Updates . . .
Давайте теперь перейдем к установке.
Мы можем установить пакет mongodb-org из репозитория третьих сторон с помощью утилиты yum.
sudo yum install mongodb-org
Есть два приглашения Is this ok [y/N]:. Первый из них позволяет установку пакетов MongoDB и второй один импортирует ключ GPG. Издатель MongoDB подписывает свое программное обеспечение и yum использует ключ для подтверждения целостности загруженных пакетов. В каждой строке введите, Y затем нажмите клавишу ENTER.
Далее запустите службу MongoDB с утилитой systemctl:
sudo systemctl start mongod
Несмотря на то, что мы не будем использовать их в этой статье, вы можете также изменить состояние службы MongoDB с командами reload и stop.
Команда reload просит процесс mongod считывает файл конфигурации, /etc/mongod.conf и применяет какие-либо изменения, не требуя перезагрузки.
sudo systemctl reload mongod
Команда stop останавливает все запущенные процессы mongod.
sudo systemctl stop mongod
Утилита systemctl не обеспечивает результат после выполнения команды start, но мы можем проверить, что служба начала просмотрев конец файла mongod.log с помощью команды tail:
sudo tail /var/log/mongodb/mongod.log
. . . [initandlisten] waiting for connections on port 27017
Выход waiting for a connection подтверждает, что MongoDB успешно запустился, и мы можем получить доступ к серверу базы данных с помощью MongoDB Shell:
mongo
Примечание: Когда вы запустили MongoDB Shell вы можете увидеть предупреждение, примерно такого содержания:
** WARNING: soft rlimits too low. rlimits set to 4096
processes, 64000 files. Number of processes should be at least 32000 :
0.5 times number of files.
MongoDB является многопоточным приложением. Он может запускать дополнительные процессы для обработки своей рабочей нагрузки. Предупреждение говорит, что для MongoDB, наиболее эффективное число процессов, которые он может осуществлять, должно составлять половину от числа файлов, которые он может открыть в любой момент времени. Чтобы устранить это предупреждение, измените значение processes rlimit для mongod, путем редактирования файла 20-nproc.conf:
sudo vi /etc/security/limits.d/20-nproc.conf
Добавьте следующую строку в конец файла:
. . . mongod soft nproc 32000
Чтобы новые ограничения были доступны для MongoDB, перезапустите его при помощи утилиты systemctl:
sudo systemctl restart mongod
После этого, при подключении к MongoDB Shell, предупреждение должно исчезнуть.
Чтобы узнать, как взаимодействовать с MongoDB из оболочки, вы можете просмотреть вывод метода db.help(), который обеспечивает список методов объекта db.
db.help()
DB methods: db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(...) ] db.auth(username, password) db.cloneDatabase(fromhost) db.commandHelp(name) returns the help for the command db.copyDatabase(fromdb, todb, fromhost) db.createCollection(name, { size : ..., capped : ..., max : ... } ) db.createUser(userDocument) db.currentOp() displays currently executing operations in the db db.dropDatabase() . . .
Оставьте процесс mongod работающим в фоновом режиме, но выйдите из оболочки с помощью команды exit:
exit
Bye
Поскольку приложение на основе баз данных не может функционировать без базы данных, мы удостоверимся, что демон MongoDB, mongod начнет с системой.
Используйте утилиту systemctl, чтобы проверить состояние запуска:
systemctl is-enabled mongod; echo $?
Выход 0 подтверждает включения демона, который мы хотим. 1, однако, подтверждает отключенный демон, который не запустится.
. . . enabled 0
В случае неполноценного демона, используйте утилиту systemctl, чтобы включить его:
sudo systemctl enable mongod
Поздравления! У нас есть запущенный экземпляр MongoDB, который будет автоматически запускать после перезагрузки системы.
В отличие от других серверов баз данных, MongoDB не комплектуется с набором данными в своей базе данных test. Так как мы не хотим, экспериментировать с новым программным обеспечением, используя данные о производстве, мы загрузим образец набор данные из “Import Example Dataset” документации «Начало работы с MongoDB». Документ JSON содержит коллекцию ресторанов, которые мы будем использовать на практике взаимодействия с MongoDB и не причинять вред к конфиденциальным данным.
Начните с перемещения в записываемый каталог:
cd /tmp
Используйте команду curl и ссылку на MongoDB, чтобы загрузить файл в формате JSON:
curl -LO https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json
Команда mongoimport будет вставлять данные в тестовую базу данных. Флаг —db определяет, какие базы данных используются в то время как флаг —collection указывает, где в базе данных будет храниться информация, а флаг —file указывает команду, какой файл для выполнения действия на импорт:
mongoimport --db test --collection restaurants --file /tmp/primer-dataset.json
Выход подтверждает импорт данных из файла primer-dataset.json:
connected to: localhost imported 25359 documents
С образцом набора данными, мы выполним запрос к ней.
Перезапустите MongoDB Shell:
mongo
Оболочка выбирает базу данных test по умолчанию, где мы импортировали наши данные.
Запрос в ресторанах с методом find(), для отображения списка всех restuarants в наборе данных. Так как набор содержит более 25 000 записей, использовать дополнительный метод limit(), чтобы уменьшить выходной сигнал запроса на указанный номер. Кроме того, метод pretty() делает информацию более удобочитаемой для человека с новой строкой и углублениями.
db.restaurants.find().limit( 1 ).pretty()
{ "_id" : ObjectId("57e0443b46af7966d1c8fa68"), "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 }, { "date" : ISODate("2013-09-11T00:00:00Z"), "grade" : "A", "score" : 6 }, { "date" : ISODate("2013-01-24T00:00:00Z"), "grade" : "A", "score" : 10 }, { "date" : ISODate("2011-11-23T00:00:00Z"), "grade" : "A", "score" : 9 }, { "date" : ISODate("2011-03-10T00:00:00Z"), "grade" : "B", "score" : 14 } ], "name" : "Morris Park Bake Shop", "restaurant_id" : "30075445" }
Вы можете продолжать использовать образец набора данных, чтобы ознакомиться с MongoDB или удалить его с помощью метода db.restaurants.drop():
db.restaurants.drop()
И, наконец, выйдите из оболочки с помощью команды exit:
exit
Bye
В этой статье мы рассмотрели добавление репозитория третьих сторон к yum, установке сервера базы данных MongoDB, импортирование образца набора данных, а также выполнение простого запроса. Мы едва охватили возможности MongoDB. Вы можете создать свою собственную базу данных с несколькими коллекциями, заполнить их с большим количеством документов и начать строить надежные приложения.