Установка и настройка СУБД MongoDB

MongoDB — одна из самых распространенных нереляционных систем управления базами данных, работает под Linux. В основе Mongo лежит «Документ», в то время как в основе самой распространенной реляционный СУБД MySQL лежат столбцы и колонки.

Установка MongoDB

Устанавливаем MongoDB из стандартного репозитория

apt-get update

apt-get install mongodb

Данные mongodb по умолчанию будет хранить в каталоге /var/lib/mongodb Логи — в каталоге — /var/log/mongodb

Также, для работы MongoDB необходимо создать директорию /data/db, которая не создается при установке:

sudo mkdir -p /data/db

Далее нужно назначить пользователя mongodb владельцем каталога:

sudo chown mongodb:mongodb /data/db

Стартуем сервис

systemctl start mongodb

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

systemctl status mongodb Вывод:

● mongodb.service - An object/document-oriented database
     Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2023-07-28 07:56:11 UTC; 20min ago
       Docs: man:mongod(1)
   Main PID: 93976 (mongod)
      Tasks: 23 (limit: 2236)
     Memory: 44.9M
     CGroup: /system.slice/mongodb.service
             └─93976 /usr/bin/mongod --unixSocketPrefix=/run/mongodb --config /etc/mongodb.conf

Jul 28 07:56:11 cluster-one systemd[1]: Started An object/document-oriented database.

Заходим в mongo

mongo

Welcome to the MongoDB shell. For interactive help, type «help». For more comprehensive documentation, see http://docs.mongodb.org/ Questions? Try the support group http://groups.google.com/group/mongodb-user >

СУБД используем BSON — своеобразную интерпретацию JSON (JavaScript Object Notation)

Рассмотрим примеры и убедимся в том, что синтаксис очень схож. JavaScript:

firstname = "Andrey";
 lastName = "Ivanov";
 Age = 25

BSON:

USER COLLECTION
 {
 _id:ObjectId("7678sd6fsdfbhw367er3"),
 "firstName":"Andrey",
 "lastName": "Ivanov"
 "Age": 25,
 "projects:["Project A", "Project B", "Project C"]"
 "addresses": [
 {
 street: "123 Lunacharskogo st"
 city: "Yekaterinburg",
 state: "Sverdlovskaya oblast"
 },
 {
 street: "4568 Sadovaya st"
 city: "Moscow",
 state: "Central region"
 }
 ]
 },
 {
 _id:ObjectId("7678s7826fsdfbhw367er3"),
 "firstName":"Nikolay",
 "lastName": "Petrov"
 "Age": 54
 };

Таким образом, заметно основное отличие реляционных БД.

Определенные элементы могут иметь признаки, которых другие элементы той же таблицы не имеют. В MySQL потребовалось бы создавать ряды и колонки для адреса и проектов, в Mongodb это не нужно.

>use admin

>db.getUsers()

Выводим всех пользователей, существующих в документах — элементах БД

Поскольку в данный момент пользователей нет, вывода также не будет.

Создадим пользователя admin и пользователей с ограниченными правами для MongoDB Linux

Заходим в консоль СУБД

mongo

Даем указание на необходимость использования базы

>use admin

switched to db admin

Создадим пользователя с правами "userAdminAnyDatabase".Чтобы создать пользователя, введите:

db.createUser(
  {
    user: "username",
    pwd: "password",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

Где:

username — имя пользователя,

password — пароль.

Теперь мы можем проверить список пользователей в БД admin:

>db.getUsers()

Создаем новую базу

Чтобы создать новую базу данных, введите команду:

use database

Вместо database введите название базы данных.

Создадим базу данных people:

use people

Если БД с таким названием уже существует, вы переключитесь на работу с ней.

Как узнать, с какой базой данных идёт работа:

db

Чтобы увидеть список баз данных:

show dbs

Добавляем другого пользователя

Добавляем пользователя с правами на чтение и запись

db.createUser(
   {
    user: "username",
    pwd: "password",
    roles: [ { role: "readWrite", db: "people" } ]
  }
)

Где:

username — имя пользователя,

password — пароль.

Включаем авторизацию

По умолчанию вход в СУБД разрешен без пароля, для того чтобы обезопасить ваши базы данных нужно включить функцию авторизации.

Открываем конфигурационный файл:

nano /etc/mongodb.conf

Находим директиву security и задаем параметр authorization (либо добавляем директиву при её отсутствии):

security: authorization: enabled

Перезапускаем сервис mongodb:

systemctl restart mongodb

Теперь пробуем подключиться к mongo. Мы можем авторизоваться несколькими способами.

а) Авторизация при подключении:

mongo --authenticationDatabase "admin" -u "gutovad" -p

* в данном примере мы подключимся к базе под пользователем gutovad. Пароль будет запрошен системой после ввода команды. Также, после опции -p можно указать пароль в кавычках, например, -p "P@ssw0rd", таким образом пароль не будет запрашиваться системой.

б) Авторизация после подключения:

> use admin

> db.auth("root", passwordPrompt())

Недостатки СУБД MongoDB

В сравнении с реляционными базами данных, MongoDB имеет не только преимущества, но и недостатки. Вот основные из них:

  • Сложность работы с транзакциями.

  • Меньшее соответствие требованиям к транзакционным системам (ACID — атомарность, согласованность, изолированность, прочность), чем реляционные БД.

Таким образом мы установили пакет, авторизовались в консоли, создали первые базы данных, а также пользователей, одного с безграничным доступом ко всем базам, другого с доступом на чтение и запись.

Сравнение MongoDB и MySQL в зависимости от задач:

Last updated