MongoDB: документы вместо таблиц

Содержание
Введение
Схема, которой нет
Когда MongoDB, когда нет
Индексы и запросы
Бэкапы и реплики

Введение

MongoDB хранит JSON-подобные документы в коллекциях вместо строк в таблицах. Каталог товаров, профиль пользователя, лента событий — всё, что в реляционной базе расползалось бы на пять таблиц с джойнами, здесь лежит одним документом.

Схема, которой нет

Отсутствие схемы это свобода и ловушка сразу: добавлять поля можно без миграций, но через год в коллекции живут пять поколений документов. Держите схему в коде (валидация на уровне приложения или JSON Schema в самой базе), иначе «гибкость» превратится в археологию.

Когда MongoDB, когда нет

Берите для каталогов, контента и прототипов, где структура меняется быстрее, чем пишутся миграции. Не берите для денег и склада: там, где нужны транзакции через несколько сущностей, честнее SQL. А для горячих счётчиков и кэша поверх всего этого держите рядом Redis.

Индексы и запросы

Без индекса MongoDB делает COLLSCAN — полное сканирование коллекции. Индексируйте поля фильтров и сортировок, составные индексы стройте в порядке ESR (равенство, сортировка, диапазон). Команда explain() показывает, использует ли запрос индекс, до того как коллекция вырастет до миллионов.

Бэкапы и реплики

Продакшен это replica set минимум из трёх узлов: primary принимает запись, secondary страхуют и отдают чтение. Бэкапы снимайте со secondary через mongodump по расписанию и проверяйте восстановлением в песочницу — дамп, который никто не разворачивал, это надежда, а не бэкап.

Похожие статьи
Базы данных
MongoDB
NoSQL databases
Redis
Banner image

Search this site

Subscribe to Telegram channel @aofeed to follow new articles and updates to old ones

Go to channel

@aofeed

Ask a question in the Telegram group

@aofeedchat

Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su, info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: