Повний посібник 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.
Розділ 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, виробництво) на одному екземплярі сервера.
Розділ 2: Ключові функції MongoDB
2.1 Зберігання, орієнтоване на документи
Модель документів MongoDB є однією з її найпотужніших функцій. Оскільки кожен документ може мати іншу структуру, розробники можуть органічно розвивати схему бази даних у міру зміни вимог додатку — без запуску складних міграцій ALTER TABLE або простоїв.
Ця гнучкість особливо цінна в гнучких середовищах розробки, де вимоги часто змінюються, або в додатках, які агрегують дані з кількох гетерогенних джерел.
2.2 Горизонтальна масштабованість з Sharding
Однією з визначальних можливостей MongoDB є її вбудована підтримка горизонтального масштабування через sharding. Sharding розподіляє дані на кількох серверах (називаються shards), дозволяючи MongoDB обробляти набори даних і рівні пропускної спроможності, які б перевантажили одну машину.
Кожен shard містить підмножину загальних даних, а маршрутизатор mongos спрямовує запити до відповідного shard(ів) на основі налаштовуваного ключа sharding. Ця архітектура забезпечує майже лінійну масштабованість у міру зростання обсягу ваших даних і навантаження запитів.
Для високотрафікових виробничих середовищ розміщення 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() - Текстовий пошук з повнотекстовими індексами
- Геопросторові запити для додатків на основі місцезнаходження
Фреймворк агрегації забезпечує підхід на основі конвеєра до трансформації та аналізу даних, підтримуючи операції такі як $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— демон бази даних MongoDBmongos— маршрутизатор sharding MongoDBmongosh— оболонка 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"Найкращі практики продуктивності
- Виділіть достатньо RAM — механізм зберігання WiredTiger MongoDB використовує кеш у пам’яті. Встановіть
cacheSizeGBприблизно на 50% доступної системної RAM. - Використовуйте відповідні індекси — Проаналізуйте повільні запити за допомогою
db.collection.explain("executionStats")та створіть індекси відповідно. - Моніторьте за допомогою MongoDB Atlas або mongostat — Використовуйте інструменти командного рядка
mongostatтаmongotopдля моніторингу продуктивності в реальному часі. - Увімкніть журналювання — Журналювання увімкнено за замовчуванням і забезпечує відновлення після збою; не вимикайте його у виробництві.
- Використовуйте пулінг з’єднань — Налаштуйте драйвер MongoDB вашого додатку для використання пулінгу з’єднань, щоб зменшити накладні витрати на з’єднання.
- Регулярно компактуйте колекції — Використовуйте
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 для автоматичного зап
