15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
01.11.2024
2 +1

Полное руководство по MongoDB: установка, функции и лучшие практики на VPS

MongoDB — один из самых мощных и широко используемых NoSQL баз данных в мире, и не без причины. Его гибкая, ориентированная на документы архитектура делает его идеальным выбором для разработчиков, создающих современные, требующие больших объемов данных приложения, которые должны быстро масштабироваться. Независимо от того, запускаете ли вы стартап MVP или управляете инфраструктурой корпоративного уровня, MongoDB в сочетании с высокопроизводительной средой хостинга обеспечивает скорость, гибкость и надежность, которые требуют ваши приложения.

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

Что такое MongoDB и почему его следует использовать?

MongoDB — это открытая, ориентированная на документы NoSQL база данных, которая хранит данные в гибких, похожих на JSON документах, называемых BSON (Binary JSON). В отличие от традиционных реляционных баз данных, которые полагаются на жесткие структуры таблица-строка-столбец, MongoDB позволяет каждому документу в коллекции иметь свою собственную уникальную структуру. Это делает его исключительно хорошо подходящим для приложений с развивающимися или непредсказуемыми моделями данных.

Ключевые преимущества MongoDB перед традиционными SQL базами данных

ФункцияMongoDB (NoSQL)Традиционный SQL
Модель данныхГибкие документы (BSON)Фиксированная схема (таблицы/строки)
МасштабируемостьГоризонтальная (sharding)Преимущественно вертикальная
Изменения схемыБез схемы, динамическаяТребует миграций
Язык запросовБогатый MQL + агрегацияSQL
Лучше всего дляДинамические, неструктурированные данныеСтруктурированные, реляционные данные
Производительность в масштабеОтличная с shardingМожет снизиться без настройки

MongoDB идеален для широкого спектра вариантов использования, включая аналитику в реальном времени, системы управления контентом, платформы электронной коммерции, прием данных IoT, мобильные бэкенды и любые приложения, где структуры данных могут меняться со временем.

Почему размещать MongoDB на VPS?

Размещение MongoDB на выделенном виртуальном приватном сервере дает вам уровень контроля, производительности и безопасности, который просто не может обеспечить общая среда. С планом VPS Hosting от AlexHost вы получаете:

  • Полный доступ root для настройки MongoDB в соответствии с требованиями вашего приложения
  • Выделенные ресурсы RAM и CPU для обработки требовательных рабочих нагрузок чтения/записи
  • Изолированная среда, которая исключает проблему «шумного соседа», распространенную в общем хостинге
  • Беспрепятственное вертикальное и горизонтальное масштабирование по мере роста ваших данных
  • Пользовательские правила брандмауэра и сети для блокировки доступа к базе данных

Для приложений с исключительно высокими требованиями к пропускной способности Dedicated Servers AlexHost предлагают производительность bare-metal с полной изоляцией оборудования — золотой стандарт для развертываний MongoDB в production.

Раздел 1: Понимание основной архитектуры MongoDB

Перед установкой важно понять, как MongoDB организует и управляет данными.

Документы

Основной единицей данных в MongoDB является документ — объект, похожий на JSON, который может содержать вложенные поля, массивы и смешанные типы данных. Например:

{
  "_id": ObjectId("64b1f2c3e4b0a1d2e3f4a5b6"),
  "name": "Alice",
  "age": 30,
  "email": "alice@example.com",
  "address": {
    "city": "New York",
    "zip": "10001"
  },
  "tags": ["developer", "mongodb", "nodejs"]
}

Коллекции

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

Базы данных

Сервер MongoDB может размещать несколько баз данных, каждая содержит свой собственный набор коллекций. Это облегчает изоляцию данных для различных приложений или сред (например, разработка, staging, production) на одном экземпляре сервера.

Раздел 2: Ключевые функции MongoDB

2.1 Хранилище, ориентированное на документы

Модель документов MongoDB — одна из его самых мощных функций. Поскольку каждый документ может иметь другую структуру, разработчики могут органически развивать схему базы данных по мере изменения требований приложения — без выполнения сложных миграций ALTER TABLE или простоев.

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

2.2 Горизонтальная масштабируемость с Sharding

Одна из определяющих возможностей MongoDB — это встроенная поддержка горизонтального масштабирования через sharding. Sharding распределяет данные на несколько серверов (называемых shards), позволяя MongoDB обрабатывать наборы данных и уровни пропускной способности, которые перегрузили бы одну машину.

Каждый shard содержит подмножество общих данных, а маршрутизатор mongos направляет запросы на соответствующий shard (или shards) на основе настраиваемого ключа sharding. Эта архитектура обеспечивает почти линейную масштабируемость по мере роста объема данных и нагрузки запросов.

Для высоконагруженных production сред размещение MongoDB на Dedicated Servers AlexHost гарантирует, что каждый shard имеет доступ к изолированным, высокопроизводительным ресурсам оборудования.

2.3 Высокая доступность с Replica Sets

MongoDB обеспечивает встроенную отказоустойчивость через replica sets — группы экземпляров MongoDB, которые поддерживают идентичные копии одних и тех же данных. Replica set состоит из:

  • Одного первичного узла, который получает все операции записи
  • Одного или нескольких вторичных узлов, которые реплицируют данные с первичного
  • Необязательного арбитра, который участвует в выборах без хранения данных

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

2.4 Мощный язык запросов и фреймворк агрегации

MongoDB Query Language (MQL) MongoDB поддерживает богатый набор операций, включая:

  • Фильтрацию на уровне полей с операторами сравнения, логическими и элементными операторами
  • Проекцию для возврата только определенных полей
  • Сортировку и пагинацию с sort(), limit() и skip()
  • Полнотекстовый поиск с полнотекстовыми индексами
  • Геопространственные запросы для приложений на основе местоположения

Aggregation Framework предоставляет подход на основе pipeline к трансформации и анализу данных, поддерживая операции такие как $match, $group, $sort, $project, $lookup (объединения), $unwind и многое другое — предлагая функциональность, сравнимую со сложными операциями SQL GROUP BY и JOIN.

2.5 Гибкое индексирование

MongoDB поддерживает несколько типов индексов для оптимизации производительности запросов:

  • Индексы одного поля для простых запросов
  • Составные индексы для запросов с несколькими полями
  • Многоключевые индексы для полей массива
  • Текстовые индексы для полнотекстового поиска
  • Геопространственные индексы для запросов местоположения
  • TTL индексы для автоматического истечения документа (полезно для данных сеанса или логов)

Раздел 3: Установка MongoDB на Ubuntu (пошаговое руководство)

В этом разделе описывается полная установка MongoDB на Ubuntu 20.04 LTS (Focal Fossa). Эти шаги оптимизированы для среды VPS AlexHost с доступом root или sudo.

Предварительные требования

  • Сервер Ubuntu 20.04 LTS
  • Учетная запись пользователя с привилегиями sudo
  • Базовое знакомство с командной строкой Linux

Если у вас еще нет сервера, вы можете развернуть полностью настроенный VPS Ubuntu за считанные минуты с помощью AlexHost VPS Hosting.

Шаг 1: Импортируйте открытый ключ GPG MongoDB

Пакеты MongoDB подписаны ключом GPG для проверки их подлинности. Импортируйте ключ с помощью следующей команды:

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

Вы должны увидеть OK в качестве вывода, подтверждающего, что ключ был успешно импортирован.

Шаг 2: Добавьте репозиторий MongoDB

Создайте файл списка для добавления официального репозитория MongoDB к источникам пакетов вашей системы:

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

> Примечание: Эта команда добавляет репозиторий MongoDB 6.0. Отрегулируйте номер версии, если вам нужен другой выпуск.

Шаг 3: Обновите базу данных пакетов

Обновите локальный индекс пакетов, чтобы включить вновь добавленный репозиторий MongoDB:

sudo apt update

Шаг 4: Установите MongoDB

Установите последнюю стабильную версию MongoDB со всеми необходимыми компонентами:

sudo apt install -y mongodb-org

Это устанавливает следующие пакеты:

  • mongod — демон базы данных MongoDB
  • mongos — маршрутизатор sharding MongoDB
  • mongosh — оболочка MongoDB (современная замена устаревшей оболочки mongo)
  • Инструменты и библиотеки MongoDB

Шаг 5: Запустите и включите сервис MongoDB

Запустите сервис MongoDB немедленно:

sudo systemctl start mongod

Включите MongoDB для автоматического запуска при загрузке системы:

sudo systemctl enable mongod

Проверьте, что MongoDB работает правильно:

sudo systemctl status mongod

Вы должны увидеть вывод, указывающий, что сервис active (running). Если MongoDB успешно запустился, вы также увидите строку, подтверждающую, что он прослушивает порт 27017.

Шаг 6: Защитите вашу установку MongoDB (рекомендуется)

Перед использованием MongoDB в любой production или интернет-ориентированной среде критически важно включить аутентификацию. По умолчанию MongoDB не требует имя пользователя или пароль.

Создайте административного пользователя:

mongosh

Внутри оболочки MongoDB:

use admin

db.createUser({
  user: "adminUser",
  pwd: "YourStrongPasswordHere",
  roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
})

Включите аутентификацию, отредактировав файл конфигурации MongoDB:

sudo nano /etc/mongod.conf

Найдите раздел security и добавьте:

security:
  authorization: enabled

Перезагрузите MongoDB, чтобы применить изменения:

sudo systemctl restart mongod

С этого момента все подключения к MongoDB потребуют действительные учетные данные.

Раздел 4: Использование MongoDB — основные команды и операции

С установленным и защищенным MongoDB давайте изучим наиболее важные операции, которые вы будете использовать ежедневно.

Шаг 1: Доступ к оболочке MongoDB

Подключитесь к вашему экземпляру MongoDB с помощью современной оболочки mongosh:

mongosh

Если аутентификация включена, подключитесь с учетными данными:

mongosh -u adminUser -p YourStrongPasswordHere --authenticationDatabase admin

Шаг 2: Операции с базой данных

Список всех баз данных:

show dbs

Создайте или переключитесь на базу данных:

use mydatabase

> MongoDB автоматически создает базу данных при первой вставке данных в нее.

Проверьте текущую выбранную базу данных:

db

Удалите базу данных:

db.dropDatabase()

Шаг 3: Операции с коллекциями

Явно создайте коллекцию:

db.createCollection("users")

Список всех коллекций в текущей базе данных:

show collections

Удалите коллекцию:

db.users.drop()

Шаг 4: Операции CRUD документов

#### Вставьте документы

Вставьте один документ:

db.users.insertOne({
  name: "Alice",
  age: 30,
  email: "alice@example.com",
  role: "developer"
})

Вставьте несколько документов одновременно:

db.users.insertMany([
  { name: "Bob", age: 25, email: "bob@example.com", role: "designer" },
  { name: "Carol", age: 35, email: "carol@example.com", role: "manager" },
  { name: "Dave", age: 28, email: "dave@example.com", role: "developer" }
])

#### Прочитайте документы

Найдите все документы в коллекции:

db.users.find()

Найдите документы с определенным условием:

db.users.find({ role: "developer" })

Найдите документы с несколькими условиями:

db.users.find({ role: "developer", age: { $gte: 28 } })

Возвращайте только определенные поля (проекция):

db.users.find({ role: "developer" }, { name: 1, email: 1, _id: 0 })

Найдите один документ:

db.users.findOne({ name: "Alice" })

Отсортируйте результаты:

db.users.find().sort({ age: 1 })   // Ascending
db.users.find().sort({ age: -1 })  // Descending

Ограничьте и разбейте результаты на страницы:

db.users.find().limit(10).skip(20)  // Page 3 with 10 results per page

#### Обновите документы

Обновите один документ:

db.users.updateOne(
  { name: "Alice" },
  { $set: { age: 31, role: "senior developer" } }
)

Обновите несколько документов:

db.users.updateMany(
  { role: "developer" },
  { $set: { department: "Engineering" } }
)

Увеличьте числовое поле:

db.users.updateOne(
  { name: "Bob" },
  { $inc: { age: 1 } }
)

#### Удалите документы

Удалите один документ:

db.users.deleteOne({ name: "Dave" })

Удалите несколько документов, соответствующих условию:

db.users.deleteMany({ role: "designer" })

Шаг 5: Индексирование для производительности

Создание индексов для часто запрашиваемых полей значительно улучшает производительность запросов.

Создайте индекс одного поля:

db.users.createIndex({ email: 1 })

Создайте составной индекс:

db.users.createIndex({ role: 1, age: -1 })

Создайте уникальный индекс:

db.users.createIndex({ email: 1 }, { unique: true })

Список всех индексов в коллекции:

db.users.getIndexes()

Шаг 6: Aggregation Pipeline

Фреймворк агрегации позволяет выполнять сложный анализ данных непосредственно в MongoDB.

Пример: подсчитайте пользователей по роли и отсортируйте по количеству:

db.users.aggregate([
  { $group: { _id: "$role", count: { $sum: 1 } } },
  { $sort: { count: -1 } }
])

Пример: фильтруйте, группируйте и вычисляйте средний возраст по ролям:

db.users.aggregate([
  { $match: { department: "Engineering" } },
  { $group: { _id: "$role", avgAge: { $avg: "$age" }, total: { $sum: 1 } } },
  { $sort: { avgAge: 1 } }
])

Раздел 5: Конфигурация MongoDB и настройка производительности

Конфигурирование mongod.conf

Основной файл конфигурации MongoDB находится в /etc/mongod.conf. Ключевые параметры для проверки и оптимизации:

# Network settings
net:
  port: 27017
  bindIp: 127.0.0.1  # Restrict to localhost for security; use server IP for remote access

# Storage settings
storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2  # Set to ~50% of available RAM

# Logging
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Security
security:
  authorization: enabled

# Replication (for replica sets)
replication:
  replSetName: "rs0"

Лучшие практики производительности

  1. Выделите достаточно RAM — механизм хранилища WiredTiger MongoDB использует кэш в памяти. Установите cacheSizeGB примерно на 50% доступной системной RAM.
  2. Используйте соответствующие индексы — анализируйте медленные запросы с db.collection.explain("executionStats") и создавайте индексы соответственно.
  3. Мониторьте с помощью MongoDB Atlas или mongostat — используйте инструменты командной строки mongostat и mongotop для мониторинга производительности в реальном времени.
  4. Включите журналирование — журналирование включено по умолчанию и обеспечивает восстановление после сбоя; не отключайте его в production.
  5. Используйте пулинг соединений — настройте драйвер MongoDB вашего приложения для использования пулинга соединений, чтобы снизить накладные расходы на соединение.
  6. Регулярно компактируйте коллекции — используйте db.runCommand({ compact: "collectionName" }) для освобождения дискового пространства после больших удалений.

Раздел 6: Резервное копирование и восстановление MongoDB

Регулярные резервные копии необходимы для любой production базы данных. MongoDB предоставляет встроенные инструменты для этой цели.

Создайте резервную копию с mongodump

mongodump --uri="mongodb://adminUser:password@localhost:27017" --out=/backup/mongodb/$(date +%Y%m%d)

Восстановите из резервной копии с mongorestore

mongorestore --uri="mongodb://adminUser:password@localhost:27017" /backup/mongodb/20240115/

Автоматизируйте резервные копии с помощью Cron

Добавьте задание cron для автоматического запуска ежедневных резервных копий:

sudo crontab -e

Добавьте следующую строку для запуска резервной копии каждый день в 2:00 AM:

0 2 * * * mongodump --uri="mongodb://adminUser:password@localhost:27017" --out=/backup/mongodb/$(date +%Y%m%d) >> /var/log/mongodb-backup.log 2>&1

Выбор правильного плана AlexHost для MongoDB

Правильный план хостинга зависит от масштаба, трафика и требований к данным вашего приложения:

Вариант использованияРекомендуемый планПочему
Разработка / ТестированиеVPS Hosting
15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать