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

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

Используйте код: Skills Начать
Рубрики
VPS Выделенные

Полное руководство по 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 с полной изоляцией оборудования — золотой стандарт для production-развертываний MongoDB.

Section 1: Understanding MongoDB's Core Architecture

Before diving into installation, it's important to understand how MongoDB organizes and manages data.

Documents

The fundamental unit of data in MongoDB is a document — a JSON-like object that can contain nested fields, arrays, and mixed data types. For example:

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

Collections

Documents are grouped into collections, which are analogous to tables in SQL databases. However, unlike SQL tables, collections do not enforce a fixed schema — documents within the same collection can have completely different fields.

Databases

A MongoDB server can host multiple databases, each containing its own set of collections. This makes it easy to isolate data for different applications or environments (e.g., development, staging, production) on a single server instance.

Раздел 2: Ключевые особенности MongoDB

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

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

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

2.2 Горизонтальная масштабируемость с помощью шардирования

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

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

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

2.3 Высокая доступность с помощью наборов реплик

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Если у вас еще нет сервера, вы можете развернуть полностью настроенный Ubuntu VPS за несколько минут с помощью 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 — маршрутизатор шардирования 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 в любой производственной или доступной в Интернете среде критически важно включить аутентификацию. По умолчанию 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: Конвейер агрегации

Фреймворк агрегации позволяет выполнять сложный анализ данных непосредственно в 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

Регулярные резервные копии необходимы для любой производственной базы данных. 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Экономичный, полный контроль, простая настройка
Малое и среднее производствоVPS HostingМасштабируемые ресурсы, SSD хранилище, root доступ
Высоконагруженное производствоDedicated ServersПроизводительность bare-metal, без совместного использования ресурсов
ML/AI с MongoDBGPU HostingGPU ускорение для рабочих нагрузок обработки данных
Веб-приложение + MongoDBVPS с cPanelПростой интерфейс управления вместе с вашей базой данных

Для приложений, которым также требуется веб-интерфейс, уведомления по электронной почте или SSL-защищённые соединения, AlexHost предлагает SSL Certificates и Email Hosting для завершения вашего стека инфраструктуры.

Часто задаваемые вопросы

В: MongoDB бесплатна в использовании?

Да. MongoDB Community Edition бесплатна и имеет открытый исходный код под лицензией Server Side Public License (SSPL). MongoDB Enterprise и MongoDB Atlas (облако) предлагают дополнительные функции на платной основе.

В: Какой порт использует MongoDB по умолчанию?

MongoDB прослушивает порт 27017 по умолчанию. Вы можете изменить это в /etc/mongod.conf.

В: Могу ли я запустить MongoDB на плане общего хостинга?

MongoDB требует доступа root или администратора для правильной установки и конфигурации, что недоступно на стандартном общем хостинге. Требуется VPS или выделенный сервер. Общий веб-хостинг AlexHost лучше подходит для приложений PHP/MySQL, в то время как развертывания MongoDB должны использовать VPS или выделенный сервер.

В: Как подключиться к MongoDB из удаленного приложения?

Обновите bindIp в /etc/mongod.conf чтобы включить IP-адрес вашего сервера, настройте брандмауэр для разрешения порта 27017 только с доверенных IP-адресов и используйте строку подключения в формате: mongodb://username:password@your-server-ip:27017/dbname.

В: Какая разница между MongoDB и MySQL?

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

Заключение

MongoDB — это преобразующая технология баз данных, которая позволяет разработчикам создавать современные масштабируемые приложения без ограничений жестких реляционных схем. Её модель, ориентированная на документы, встроенное горизонтальное масштабирование через sharding, встроенная высокая доступность через replica sets и мощный aggregation framework делают её одной из самых универсальных баз данных, доступных сегодня.

Размещая MongoDB на плане VPS Hosting AlexHost, вы получаете полный контроль, выделенные ресурсы и надежную инфраструктуру, необходимые для эффективного запуска MongoDB — будь то прототипирование вашего первого приложения или управление высоконагруженной production-системой.

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

Есть вопросы о настройке MongoDB или нужна помощь в выборе подходящего плана хостинга? Команда экспертной поддержки AlexHost доступна 24/7, чтобы помочь вам на каждом этапе.