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