Содержание
Для большинства веб-продуктов основной базой стоит выбрать реляционную — обычно PostgreSQL: она даёт транзакции, связи между данными, гибкие запросы и умеет хранить JSON. NoSQL-базы стоит добавлять рядом под конкретные задачи: Redis — для кеша и очередей, колоночные — для аналитики, поисковые — для полнотекстового поиска, графовые — для сложных связей.
Разберём, какие бывают базы данных, чем они отличаются и как выбрать под задачу.
Чем SQL отличается от NoSQL?
SQL-базы хранят данные в таблицах со строгой схемой и связями и поддерживают транзакции с гарантиями согласованности. NoSQL — общее название для баз с другими моделями данных: документами, парами ключ-значение, колонками или графами. Они жертвуют частью гарантий или гибкости запросов ради масштабирования или скорости на определённых задачах.
| Тип | Примеры | Модель данных | Для чего |
|---|---|---|---|
| Реляционные | PostgreSQL, MySQL | Таблицы и связи | Основные данные продукта |
| Документные | MongoDB | JSON-документы | Гибкие структуры, каталоги с разными атрибутами |
| Ключ-значение | Redis | Ключ и значение в памяти | Кеш, сессии, счётчики, очереди |
| Колоночные | ClickHouse | Колонки для аналитики | Отчёты по миллиардам строк |
| Графовые | Neo4j | Узлы и связи | Рекомендации, социальные связи |
| Поисковые | Elasticsearch, Meilisearch | Инвертированный индекс | Полнотекстовый поиск |
Почему реляционная база — разумный выбор по умолчанию?
Реляционная база — разумный выбор по умолчанию, потому что данные почти любого продукта связаны: пользователи, заказы, товары, платежи. Транзакции гарантируют, что деньги не спишутся без заказа, а SQL позволяет задать новый вопрос к данным без переписывания кода.
Что даёт реляционная база:
- транзакции — несколько изменений выполняются целиком или не выполняются вовсе;
- целостность — внешние ключи и ограничения не дают сохранить противоречивые данные;
- гибкие запросы — объединения, группировки и отчёты без заранее подготовленных структур;
- JSON при необходимости — в PostgreSQL можно хранить и индексировать документы.
Как выбрать между двумя популярными вариантами — в статье PostgreSQL или MySQL, а про транзакции подробнее — в материале транзакции и уровни изоляции.
Фото: Unsplash
Когда документная база действительно лучше?
Документная база лучше, когда данные естественно представляются независимыми документами с разной структурой, их редко нужно объединять между собой, а схема часто меняется. Например, журнал событий от разных устройств или контент с произвольными блоками.
Признаки, что документная база подходит:
- Документ читается и записывается целиком, а не по частям из разных таблиц.
- Связи между документами редкие и простые.
- Структура сильно отличается от записи к записи.
- Строгие транзакции между несколькими документами не нужны.
Если же в проекте появляются заказы, остатки и платежи, документная модель начинает мешать: связи приходится поддерживать вручную, а целостность — проверять в коде.
Какие NoSQL-базы добавляют рядом с основной?
Рядом с основной реляционной базой обычно добавляют специализированные хранилища для задач, где она неэффективна. Важно понимать, что основным источником правды остаётся реляционная база, а остальные — производные копии или временные данные.
- Redis — кеш, сессии, ограничение частоты запросов, очереди; подробнее в статье Redis в веб-проекте;
- ClickHouse — аналитика по большим объёмам событий; подробнее в статье ClickHouse для аналитики;
- поисковый движок — поиск с опечатками и фасетами, статья поиск на сайте;
- векторная база — семантический поиск и AI-функции, статья векторные базы данных.
Как не ошибиться с выбором?
Чтобы не ошибиться, выбирайте базу по тому, как данные будут читаться и меняться, а не по моде. Опишите основные сущности, связи между ними и самые частые запросы — обычно после этого ответ становится очевидным.
- не выбирайте NoSQL только ради «масштабирования на будущее» — реляционные базы масштабируются дальше, чем нужно большинству продуктов;
- не храните деньги и остатки там, где нет транзакций;
- не добавляйте новую базу, пока существующая справляется: каждая база — это бэкапы, мониторинг и экспертиза;
- проверяйте выбор на реальных запросах и объёмах.
Коротко
- По умолчанию выбирайте реляционную базу — чаще всего PostgreSQL.
- NoSQL — это разные модели данных: документы, ключ-значение, колонки, графы.
- Документные базы хороши для независимых документов с разной структурой.
- Redis, ClickHouse, поиск и векторные базы добавляют рядом под конкретные задачи.
- Выбирайте по тому, как данные читаются и меняются, а не по моде.
Частые вопросы
Правда ли, что NoSQL быстрее SQL?
Не в общем случае. Специализированные базы быстрее на своих задачах — например, ключ-значение для кеша. Но для типичного приложения правильно спроектированная реляционная база с индексами работает не хуже и даёт больше гарантий.
Можно ли хранить JSON в PostgreSQL?
Да, тип jsonb позволяет хранить документы, индексировать поля внутри них и делать по ним запросы. Это закрывает многие сценарии, ради которых раньше брали документную базу.
Сложно ли поменять базу данных позже?
Перейти между похожими реляционными базами — посильная задача. Переход между разными моделями данных, например с документной на реляционную, почти всегда означает переписывание значительной части кода.



