NoSQL базы данных: типы и когда их брать

Содержание
Введение
Четыре типа NoSQL
Когда брать NoSQL
А когда SQL
Моделирование без таблиц
Эксплуатация

Введение

NoSQL это не «без SQL», а «не только SQL»: базы без жёсткой табличной схемы, заточенные под горизонтальное масштабирование и гибкую структуру данных. Реляционные базы вроде PostgreSQL никуда не делись, но для части задач NoSQL проще и быстрее.

Четыре типа NoSQL

Документные (MongoDB): JSON-подобные документы, удобно для каталогов и профилей. Key-value (Redis): сверхбыстрое хранилище по ключу, кэш и сессии. Колоночные (Cassandra): огромные разреженные таблицы и запись миллионами строк. Графовые (Neo4j): связи как данные первого класса, соцграфы и рекомендации.

Когда брать NoSQL

Три честных сигнала: структура данных меняется чаще, чем раз в квартал; нагрузка растёт горизонтально и шардировать реляционную базу больно; записи важнее сложных джойнов (ленты, каталоги, телеметрия).

Отдельный случай это кэш: Redis перед SQL базой снимает до 90 процентов чтений одной строчкой кода.

А когда SQL

Деньги, склад и всё, где нужна транзакция через несколько сущностей, остаются за реляционными базами. ACID, внешние ключи и декларативные запросы это то, за что SQL любят уже пятьдесят лет.

Частый рабочий вариант гибрид: система записи на SQL, витрины чтения на NoSQL, между ними очередь или репликация.

Моделирование без таблиц

Главная ошибка новичков тащить реляционное мышление: нормализовать документы и собирать их джойнами на приложении. Проектируйте от запросов: один экран — один документ, денормализация это норма, а не грех. Дублирование адреса в тысяче заказов дешевле тысячи джойнов при каждом показе.

Версионируйте схему в коде (поле v: 2), чтобы читать старые и новые документы одним ридером, и мигрируйте лениво при записи.

Эксплуатация

Распределённые базы требуют думать о консистентности заранее: eventual consistency означает, что свежезаписанное видно не всем сразу — проектируйте UI с этим допущением. Мониторьте lag репликации и рост компакшенов, а бэкапы снимайте со вторичных узлов, чтобы не душить мастер.

Похожие статьи
Базы данных
NoSQL databases
SQL in general
PostgreSQL
MariaDB

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: