Налаштування MongoDB: індекси, реплікація, оптимізація

Проблема: каталог з довільними атрибутами «ламає» реляційну модель

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування MongoDB: індекси, реплікація, оптимізація
Середній
від 1 дня до 3 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1244
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Проблема: каталог з довільними атрибутами «ламає» реляційну модель

Ми налаштовували MongoDB для інтернет-магазину електроніки: кожна категорія має унікальний набір характеристик (діагональ, кількість ядер, об'єм пам'яті). У PostgreSQL довелося б городити EAV або JSON-поля — складні запити та падіння продуктивності при 500 товарах. MongoDB вирішила це без болю: схема не фіксована, а BSON-документи ідеально лягають на структуру товару. Наш клієнт — магазин з 5000 товарів у 20 категоріях — отримав час відповіді запитів під 10 мс без спеціальної оптимізації. Розповімо, як налаштувати таку базу під ключ.

Проблеми, які вирішуємо

  • N+1 запитів при роботі з документами — типова помилка, коли замість вкладених масивів дістають пов'язані документи окремими запитами. Рішення: використовувати $lookup в агрегації або зберігати вкладені підмасиви.
  • Повільний запис без реплікації — при падінні єдиного вузла втрачаються дані за хвилини. Replica Set з трьох серверів дає RPO=0 та автоматичне перемикання.
  • Індекси не покривають запити — без часткових та складених індексів агрегації за статусом і датою виконуються за секунди замість мілісекунд. З правильно налаштованими індексами продуктивність запитів зростає в 10–100 разів.

Як ми налаштовуємо MongoDB: кейс з Replica Set

Для того ж інтернет-магазину ми розгорнули кластер на трьох серверах (MongoDB 7.0, Ubuntu 22.04). Налаштували Replica Set з двома звичайними вузлами та одним прихованим для бекапів. Connection string застосунку: mongodb://myapp:password@mongo1:27017,mongo2:27017/myapp?replicaSet=rs0&readPreference=secondaryPreferred. У результаті — відмовостійкість та балансування читання на вторинні вузли. Навантаження 10 000 запитів на секунду тримається без затримок.

Встановлення та конфігурація

# Установка MongoDB 7.0 curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" > /etc/apt/sources.list.d/mongodb-org-7.0.list apt update && apt install -y mongodb-org systemctl enable mongod && systemctl start mongod # /etc/mongod.conf (основные настройки) net: port: 27017 bindIp: 127.0.0.1 # для продакшена замените на внутренний IP security: authorization: enabled storage: dbPath: /var/lib/mongodb wiredTiger: engineConfig: cacheSizeGB: 2 # 50% RAM replication: replSetName: "rs0" operationProfiling: slowOpThresholdMs: 100 mode: slowOp 

Індекси під типові запити

// Создаём индексы сразу при проектировании схемы // Уникальный индекс по email db.users.createIndex({ email: 1 }, { unique: true, background: true }) // Составной для сортировки заказов пользователя db.orders.createIndex({ userId: 1, createdAt: -1 }) // Частичный — только активные сессии db.sessions.createIndex( { userId: 1, expiresAt: 1 }, { partialFilterExpression: { revokedAt: { $exists: false } } } ) // TTL-индекс — автоудаление логов через 30 дней db.logs.createIndex({ createdAt: 1 }, { expireAfterSeconds: 2592000 }) // Текстовый поиск с русским языком db.articles.createIndex({ title: "text", body: "text" }, { default_language: "russian" }) // Wildcard для каталога с произвольными атрибутами db.products.createIndex({ "attributes.$**": 1 }) 

Агрегація: виручка за категоріями

db.orders.aggregate([ { $match: { createdAt: { $gte: ISODate("2024-01-01"), $lt: ISODate("2024-04-01") }, status: "paid" } }, { $unwind: "$items" }, { $lookup: { from: "products", localField: "items.productId", foreignField: "_id", as: "product" } }, { $unwind: "$product" }, { $group: { _id: "$product.category", revenue: { $sum: { $multiply: ["$items.price", "$items.quantity"] } }, orders: { $addToSet: "$_id" } } }, { $project: { category: "$_id", revenue: { $round: ["$revenue", 2] }, orderCount: { $size: "$orders" } } }, { $sort: { revenue: -1 } } ]) 

Як обрати топологію MongoDB для вашого проекту?

Топологія Навантаження Об'єм даних Відмовостійкість Складність адміністрування
Одиночний вузол до 10 000 оп/с до 100 ГБ Немає Низька
Replica Set до 50 000 оп/с до 10 ТБ Автоматичне перемикання Середня
Шардований кластер >50 000 оп/с >10 ТБ Висока (горизонтальне масштабування) Висока

Чому Replica Set обов'язковий для продакшену?

Replica Set — мінімальна конфігурація для production. Одиночний вузол не забезпечує відмовостійкість: при збої в роботі сервера дані недоступні до відновлення. Replica Set з трьох вузлів гарантує автоматичне перемикання на вторинний вузол протягом секунд. RPO (точка відновлення) прямує до нуля. Для більшості застосунків це оптимальний баланс надійності та вартості. Зв'яжіться з нами — ми проведемо аудит вашої поточної схеми та запропонуємо оптимальну топологію.

Процес роботи

Етап Що робимо Строк
Аналітика Вивчаємо навантаження, схеми, типові запити. Визначаємо необхідність шардування. 1 день
Проектування Обираємо топологію (Replica Set, шардування), конфігурацію серверів, індекси. 1 день
Реалізація Розгортаємо сервери, налаштовуємо реплікацію, створюємо індекси, пишемо міграції. 1–3 дні
Тестування Навантажувальне тестування, перевірка failover, моніторинг. 1 день
Деплой Перемикання на продакшен, документація, навчання команди. 1 день

Що входить в роботу

  • Конфігурація сервера та мережі (авторизація, TLS)
  • Налаштування Replica Set або шардованого кластера
  • Створення індексів під навантаження (часткові, TTL, текстові)
  • Оптимізація агрегаційних запитів
  • Інтеграція з Mongoose/Node.js (схеми, хуки, віртуальні поля)
  • Налаштування моніторингу (MongoDB Atlas, Prometheus + Grafana)
  • Резервне копіювання (mongodump + автоматизація)
  • Документація та інструкції для команди
Типові помилки при налаштуванні MongoDB
  • Відсутність індексів для сортування — sort() без індексу призводить до сканування колекції (колапс продуктивності).
  • Ігнорування розміру WiredTiger cache — за замовчуванням 50% RAM, для великих робочих наборів потрібно збільшувати до 70%.
  • Глобальний unique індекс на email — блокує реєстрацію однакових email в різних статусах. Використовуйте часткові індекси.
  • Запис у Replica Set без writeConcern: majority — при відкаті первинного вузла дані можуть бути втрачені.

Строки та вартість

Базове налаштування Replica Set з індексами та моніторингом — від 2 до 5 днів. Вартість розраховується індивідуально і залежить від складності схеми та кількості вузлів. Зв'яжіться з нами для оцінки вашого проекту — ми підготуємо комерційну пропозицію за один робочий день. Замовте налаштування MongoDB у сертифікованих спеціалістів з 10-річним досвідом.

Чому варто замовити налаштування у нас?

Ми сертифіковані спеціалісти MongoDB (понад 10 років досвіду в адмініструванні NoSQL). За цей час налаштували понад 50 кластерів для проектів з навантаженням до 100 000 запитів на секунду. Надаємо гарантію на всі роботи — від 3 до 12 місяців залежно від SLA. Отримайте консультацію прямо зараз — ми безкоштовно оцінимо вашу поточну архітектуру.