MongoDB: документы вместо таблиц
Введение
MongoDB хранит JSON-подобные документы в коллекциях вместо строк в таблицах. Каталог товаров, профиль пользователя, лента событий — всё, что в реляционной базе разъехалось бы на пять таблиц с join'ами, здесь лежит одним документом.
Схема, которой нет
Отсутствие схемы — это свобода и ловушка одновременно: поле можно добавить без миграции, но через год в коллекции живут пять поколений документов. Держите схему в коде (валидация на уровне приложения) или в самой базе через JSON Schema, иначе гибкость превратится в археологию.
Когда MongoDB, а когда нет
Берите для справочников, контента и прототипов, где структура меняется быстрее, чем пишутся миграции. Не берите для денег и склада: там, где нужны транзакции через несколько сущностей, честнее SQL. А для горячих счётчиков и кеша держите рядом Redis.
Индексы и запросы
Без индекса MongoDB делает COLLSCAN — полный проход по коллекции. Индексируйте поля фильтра и сортировки, стройте составные индексы по правилу ESR (equality, sort, range). Команда explain() показывает, использует ли запрос индекс, — проверьте это до того, как коллекция вырастет до миллионов документов.
Бэкапы и реплики
В продакшене нужен replica set минимум из трёх узлов: primary принимает запись, secondary подстраховывают и отдают чтение. Бэкапы снимайте со secondary через mongodump по расписанию и проверяйте восстановление в песочнице: дамп, который никто не разворачивал, — это надежда, а не бэкап.
Автор статьи: Клавдия Кондакова