Выбор базы данных — это как выбор инструмента: молотком не закручивают шурупы, а гаечным ключом не забивают гвозди. Чтобы не ошибиться, давайте разберёмся, какие бывают базы данных, чем они отличаются и когда их стоит использовать.

Данный чек-лист я вывел пару, тройку лет назад и по сей день он меня не подводит. Важно держать его перед глазами, когда вы решаете очередную задачу. Он поможет вам определиться с выбором БД, используя простые правила, а также он станет хорошим помощником на собеседовании по 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)


  1. Avangardio
    09.07.2025 23:05

    Кассандра - не колоночная база данных :/


    1. IvanZiv972003 Автор
      09.07.2025 23:05

      Добрый день.

      Cassandra является колоночно-ориентированной БД так как данные внутри партиций хранятся по столбцам, а также она соответствует принципам wide column store.


      1. ialexander
        09.07.2025 23:05

        Ну тогда успехов выполнить аналитические запросы на Кассандре - Кассандра заточена на запись данных, а не на чтение.

        Вы путаете wide-column store (Cassandra) и column-oriented store (ClickHouse).


        1. IvanZiv972003 Автор
          09.07.2025 23:05

          Спасибо за комментарий.

          Исключил Кассандру из колоночных БД во избежании путаницы.


          1. ialexander
            09.07.2025 23:05

            Тогда уберите и это

            •  Нужна горизонтальная масштабируемость = NoSQL

            Это ложное утвеждение - модель данных и способность к масштабированию не зависят друг от друга. Есть реляционная база данных CockroachDB, которая отлично масштабируется. Amazon релизовал для PostgreSQL Disaggregated Storage и назвал все это Amazon Aurora.


            На самом деле в статье удивительно много неточностей, вы бы хоть попробовали этот топик поизучать сначала? Почитали бы классику Клеппмана, его книга немного устарела в том, что касается возможностей конкретных баз данных - так как все течет, все меняется. Но база там верная, позволяет хотя бы не попадать впросак как вы с этой статьей.


          1. ialexander
            09.07.2025 23:05

            А если надумаете опять написать рекомендации по выбору баз днных из раздела SQL vs NoSQL, почитайте сначала статью уважаемых в мире баз данных людей Майкла Стоунбрекера и Энди Павло: What Goes Around Comes Around... And Around... По-моему они там очень убедительно показывают, что такое противопоставление не имеет смысла.


  1. ialexander
    09.07.2025 23:05

    Ох ну и путаница в статье. К примеру, с каких это пор колоночные СУБД обязательно NoSQL? Колоночные - это просто способ организации хранения данных, заточенного под аналитические запросы. Они при этом как правило являются реляционными.

    То же самое с чего это согласованность зависит от реляционная или нет СУБД? Модель организации данных и согласованность - это разные вещи.


    1. IvanZiv972003 Автор
      09.07.2025 23:05

      Спасибо за комментарий.

      Поправил недочеты по поводу Колодочной БД.

      По поводу согласованности: как правило реляционные СУБД остаются безальтернативным выбором если важна строгая согласованность, NoSQL же жертвуют этим ради масштабируемости.


      1. 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.


  1. kudryashov-marketing
    09.07.2025 23:05

    Возможно, стоило бы упомянуть графовые базы данных (типа Neo4j) для задач со сложными связями (соцсети, системы рекомендаций)

    Но как отправная точка и шпаргалка для 80% случаев — чек-лист сгодится. Спасибо!