Выбор базы данных — это как выбор инструмента: молотком не закручивают шурупы, а гаечным ключом не забивают гвозди. Чтобы не ошибиться, давайте разберёмся, какие бывают базы данных, чем они отличаются и когда их стоит использовать.
Данный чек-лист я вывел пару, тройку лет назад и по сей день он меня не подводит. Важно держать его перед глазами, когда вы решаете очередную задачу. Он поможет вам определиться с выбором БД, используя простые правила, а также он станет хорошим помощником на собеседовании по System Design. Поехали!
Какие бывают базы данных и зачем они нужны
Реляционная база данных (SQL) — это таблицы с строгими связями между ними. Данные хранятся в строках и колонках, а для работы с ними используется язык SQL. Примеры: PostgreSQL, MySQL, SQLite. Подходит, когда важна целостность данных, сложные запросы и транзакции. Идеально для финансовых систем, интернет-магазинов и любых задач, где данные должны быть строго структурированы.
Ключ-значение (Key-Value) — простейший тип хранилища, где данные — это пара «ключ» и «значение». Быстро, масштабируемо, но без сложных запросов. Примеры: Redis, DynamoDB. Используется для кеширования, сессий пользователей, временных данных. Если вам нужно быстро сохранить и достать значение по ключу.
Колоночная база данных — хранит данные не по строкам, а по колонкам, что ускоряет аналитические запросы. Пример: ClickHouse. Подходит для аналитики, big data и систем, где нужно быстро агрегировать большие объёмы данных.
Документная база данных (Document Store) — хранит данные в виде документов (например, JSON). Гибкая схема позволяет легко менять структуру. Примеры: MongoDB, CouchDB. Хороша для каталогов, CMS и любых задач, где данные не имеют жёсткой структуры.
Файловое хранилище (S3-подобное) — это не база данных в классическом смысле, а система хранения файлов. Примеры: Amazon S3, MinIO. Используется для медиа, бэкапов, логов — всего, что можно хранить как файл.
SQL vs NoSQL: в чём разница?
SQL-базы данных — это классический подход, где:
Данные хранятся в строгих таблицах с колонками и строками;
Используется язык запросов SQL;
Обязательно соблюдение ACID-принципов (атомарность, согласованность, изоляция, надежность);
Чёткая схема данных;
Поддержка сложных связей между таблицами.
Из наших пяти вариантов к SQL относится только Реляционная БД.
NoSQL-базы — более гибкий подход, где:
Нет жёсткой схемы данных;
Может отсутствовать язык SQL;
Акцент на горизонтальной масштабируемости;
Разные модели данных для разных задач;
Чаще используется BASE-подход (Basically Available, Soft state, Eventually consistent).
К NoSQL относятся все остальные типы из нашего списка: Ключ-значение, Документные БД, Файловые хранилища (S3).
Когда какую базу данных выбирать
Выбираем SQL, когда:
Данные имеют чёткую структуру;
Критична целостность данных (финансы, учёт);
Нужны сложные запросы с соединениями таблиц;
Важны транзакции.
Выбираем NoSQL, когда:
Данные неструктурированы или полуструктурированы;
Нужна горизонтальная масштабируемость;
Требуется высокая скорость записи/чтения;
Схема данных часто меняется;
Работаете с большими данными (Big Data).
Кратко: Если ваши данные чётко структурированы и вам важны транзакции (например, банковские операции) — берите реляционную БД. Если нужно кешировать данные или работать с сессиями — ключ-значение. Для аналитики и больших данных — колоночную. Если данные меняются часто и нет чёткой схемы — документную. А если нужно просто хранить файлы — S3 или аналоги.
Основные критерии выбора БД
1. Тип нагрузки
Много чтений = аналитическая БД (Колоночная БД);
Много записей и обновлений = если важны транзакции, то Реляционная БД или БД Ключ-значение.
2. Структура данных
Фиксированная структура = Реляционная БД;
Гибкая (меняющаяся) структура = Документная БД;
Простые пары ключ-значение = БД Ключ-значение;
Большой объём однотипных данных для агрегаций = Колоночная БД;
3. Связи между данными
Сложные связи и JOIN = Реляционная БД (SQL);
Независимые записи = NoSQL (БД Ключ-значение, Документная БД).
4. Масштабируемость
Нужна горизонтальная масштабируемость = NoSQL;
Подходит вертикальное масштабирование = Реляционные БД (SQL).
5. Тип запроса:
Сложные аналитические запросы = Колоночная БД;
CRUD (Create, Read, Update и Delete) = Реляционная БД, Документная БД или БД Ключ-значение.
Упрощенная схема для выбора

Итог с примерами
1. Реляционные БД выбираем когда
Данные структурированы (таблицы, связи);
Сложные запросы к данным (JOIN, агрегации);
Важны транзакции (ACID) (банки, платежи).
Интернет-магазин (заказы, пользователи);
Финансовые системы.
2. Ключ-значение выбираем когда
Нужен быстрый доступ по ключу (кэш, сессии);
Данные простые (ключ = значение);
Требуется высокая производительность (миллионы операций в секунду).
Кэширование;
Корзины покупок.
3. Документные БД выбираем когда
Данные полуструктурированы (JSON, XML);
Нужна гибкость схемы (часто меняются поля);
Много вложенных данных.
Каталоги товаров;
Контент-менеджмент (CMS).
4. Колоночные БД выбираем когда
Аналитика (большие объёмы данных);
Частые агрегации (SUM, AVG);
Запись > чтение (логгирование, метрики).
Системы аналитики;
Данные с датчиков для умного дома.
Спасибо за внимание!
PS
Если вы хотите не только верно выбирать БД под вашу задачу, но и узнать больше про каждый тип БД, принимать взвешенные архитектурные решения, которые выдержат миллионы пользователей и не сломаются при первой же проблеме. С гордостью представляю вам свой новый курс по System Design: C нуля до проектирования систем уровня senior-инженера.. Специально для Habr действует промокод 20% HABR20 до конца июля . Этот курс — не просто сборник советов для собеседований. Это ваш путь от базовых концепций до проектирования сложных, высоконагруженных систем, которые работают в условиях реального мира. Здесь нет «волшебных таблеток» — только глубокое понимание принципов, разбор реальных кейсов и практика, практика, практика.
Комментарии (10)
ialexander
09.07.2025 23:05Ох ну и путаница в статье. К примеру, с каких это пор колоночные СУБД обязательно NoSQL? Колоночные - это просто способ организации хранения данных, заточенного под аналитические запросы. Они при этом как правило являются реляционными.
То же самое с чего это согласованность зависит от реляционная или нет СУБД? Модель организации данных и согласованность - это разные вещи.
IvanZiv972003 Автор
09.07.2025 23:05Спасибо за комментарий.
Поправил недочеты по поводу Колодочной БД.
По поводу согласованности: как правило реляционные СУБД остаются безальтернативным выбором если важна строгая согласованность, NoSQL же жертвуют этим ради масштабируемости.ialexander
09.07.2025 23:05По поводу согласованности: как правило реляционные СУБД остаются безальтернативным выбором если важна строгая согласованность, NoSQL же жертвуют этим ради масштабируемости.
Что вы совсем все напутали. Есть consistency в ACID модели, в применении к транзакция, а есть consistency в CAP теореме в применении к распределенным данным, если речь идет о горизонтальнйо масштабируемости. Это разные вещи.
Что касается consistency в CAP - тут все базы данных играют по одним и тем же правилам, не важно реляционная она или NoSQL. Реляционные появились раньше, и как правило работали на одном хосте поэтому CAP consistency вопроса там не стояло - данные всегда были согласованы, просто по той простой причине, что они были в одной копии на одном хосте. Когда вошла в моду репликация данных и появились копии данных на разных машинах, то все поменялось. Но еще раз повторю все базы данных здесь играют по одним правилам - если данные хранятся на одном хосте, strong consistency обеспечена, если данные реплицированы - начинаются сложности.
Что касается ACID Consistency, то был период когда NoSQL базы данных были молоды и не поддерживали транзакции ACID, но этот период давно прошел. Транзакции не являются прерогативой реляционных баз данных. Притом в случае с ACID речь идет больше о consistency в смысле корректности, а не согласованности на разных хостах.
Судя по вашей статье вы не очень понимаете разницу и мешаете все вместе:5. Требования к транзакциям (ACID)
Важна строгая согласованность = Реляционная БД (SQL);
Достаточно конечной согласованности = NoSQL.
kudryashov-marketing
09.07.2025 23:05Возможно, стоило бы упомянуть графовые базы данных (типа Neo4j) для задач со сложными связями (соцсети, системы рекомендаций)
Но как отправная точка и шпаргалка для 80% случаев — чек-лист сгодится. Спасибо!
Avangardio
Кассандра - не колоночная база данных :/
IvanZiv972003 Автор
Добрый день.
Cassandra является колоночно-ориентированной БД так как данные внутри партиций хранятся по столбцам, а также она соответствует принципам wide column store.
ialexander
Ну тогда успехов выполнить аналитические запросы на Кассандре - Кассандра заточена на запись данных, а не на чтение.
Вы путаете wide-column store (Cassandra) и column-oriented store (ClickHouse).
IvanZiv972003 Автор
Спасибо за комментарий.
Исключил Кассандру из колоночных БД во избежании путаницы.
ialexander
Тогда уберите и это
Это ложное утвеждение - модель данных и способность к масштабированию не зависят друг от друга. Есть реляционная база данных CockroachDB, которая отлично масштабируется. Amazon релизовал для PostgreSQL Disaggregated Storage и назвал все это Amazon Aurora.
На самом деле в статье удивительно много неточностей, вы бы хоть попробовали этот топик поизучать сначала? Почитали бы классику Клеппмана, его книга немного устарела в том, что касается возможностей конкретных баз данных - так как все течет, все меняется. Но база там верная, позволяет хотя бы не попадать впросак как вы с этой статьей.
ialexander
А если надумаете опять написать рекомендации по выбору баз днных из раздела SQL vs NoSQL, почитайте сначала статью уважаемых в мире баз данных людей Майкла Стоунбрекера и Энди Павло: What Goes Around Comes Around... And Around... По-моему они там очень убедительно показывают, что такое противопоставление не имеет смысла.