Какие бывают базы данных
Чему научишься
- отличать пять семейств БД — реляционные, ключ-значение, документные, колоночные, графовые — по способу хранения и типовым задачам
- выбирать хранилище под характер запросов: реляционная база по умолчанию, Redis/MongoDB/ClickHouse — под конкретную задачу, а не «по моде»
- объяснять разницу и и зачем продукт пишет в PostgreSQL, а аналитика читает колоночную
- находить «документную» потребность, которую закрывает столбец
jsonbв PostgreSQL без второй базы
По пути к описи КВЕРИ притормаживает у тёмной секции хранилища. За стеклом — реестр архивов старой Земли, не переживших Большой обрыв: кэш-узлы погасли первыми, документные хранилища дошли рваными фрагментами, аналитические кластеры молчат целыми секторами. А реляционный «Котомаркета» уцелел целиком — со всеми связями.

Не только реляционные
Для «Котомаркета» нам особенно удобны реляционные БД: покупатели, заказы и товары естественно ложатся в таблицы со связями. Именно им посвящён курс. Но в индустрии — что в 2024-м, что сейчас — встречаются и другие подходы:
- ключ-значение (Redis) — очень быстрый формат «ключ → значение», когда нужно мгновенно достать простую запись;
- документоориентированные (MongoDB) — хранят гибкие -документы, где структура может отличаться от записи к записи;
- колоночные (ClickHouse) — сильны в аналитике, когда нужно быстро считать показатели по огромным объёмам данных.
Большинство популярных для продуктовой разработки остаются реляционными: PostgreSQL, MySQL, Oracle, MS SQL. Освоишь SQL здесь — сможешь уверенно читать данные в очень разных компаниях.
КВЕРИ: Каждому архиву — своя работа: одним скорость, другим гибкость, третьим аналитика. Нам с тобой повезло: нам достался тот, в котором всё связано со всем.
Реестр семейств: разбор по полочкам
Реестр за стеклом — повод разобрать семейства баз данных всерьёз: «какие бывают БД и когда какую брать» — один из самых частых вопросов на собеседованиях. Пройдём пять семейств подряд, и про каждое — по одной схеме: способ хранения, сильные и слабые стороны, продукты и когда брать.
Реляционные БД: строгая схема и связи
Способ хранения: строки в таблицах с заранее объявленной схемой — у каждого столбца есть тип, между таблицами действуют связи по ключам, и сама охраняет целостность: заказ от несуществующего покупателя записать не выйдет. Изменения исполняются с гарантиями — «заказ + списание остатка» либо записываются вместе, либо не записываются вовсе.
- Сильные стороны: выразительный SQL (фильтры, , ), целостность на уровне базы, .
- Слабые: схему нужно продумывать заранее и мигрировать при изменениях; горизонтальное масштабирование на много серверов даётся труднее, чем -семействам.
- Продукты: PostgreSQL, MySQL/MariaDB, Microsoft SQL Server, Oracle, SQLite.
- Когда брать: пользователи, заказы, деньги, склад — везде, где данные связаны и ошибка записи недопустима. Для нового продукта это выбор по умолчанию.
Базы ключ-значение: словарь на максимальной скорости
Способ хранения: один гигантский словарь «ключ → значение», чаще всего в оперативной памяти. Ни таблиц, ни связей: положил по ключу — забрал по ключу за доли миллисекунды.
-- Это не SQL, это команды Redis
SET session:8f3a '{"user_id": 42}'
GET session:8f3a
- Сильные стороны: скорость, простота, лёгкое масштабирование.
- Слабые: запросы только по точному ключу — вопрос «найди все сессии покупателей из Москвы» этому формату не задать; внутренность значения для базы непрозрачна.
- Продукты: Redis, Memcached, Amazon DynamoDB.
- Когда брать: кэш, сессии, счётчики, очереди, рейтинги — горячие данные рядом с основной базой, а не вместо неё.
Документные БД: гибкий JSON
Способ хранения: записи — -документы, сгруппированные в коллекции. Схема не объявляется заранее: у смарт-часов есть поле «время работы батареи», у худи — «размерная сетка», и оба документа спокойно лежат в одной коллекции. Вложенные структуры хранятся прямо внутри документа, без отдельных таблиц.
- Сильные стороны: гибкая структура, документ читается целиком одним обращением, удобно для каталогов с разнородными атрибутами и быстрых прототипов.
- Слабые: связи между документами — забота приложения, полноценных почти нет; без дисциплины коллекция превращается в зоопарк несовместимых форматов.
- Продукты: MongoDB, Couchbase, Firestore.
- Когда брать: контент, каталоги с сильно различающимися полями, профили и настройки.
Граница семейств, кстати, размыта: PostgreSQL умеет хранить документы в столбце типа jsonb и строить по ним — часто это закрывает «документную» потребность без второй базы:
-- Пример вне нашего снимка: attrs — столбец типа jsonb
SELECT name, attrs->>'color' AS color
FROM catalog
WHERE attrs @> '{"brand": "Kotomarket"}';
Колоночные БД: аналитика по миллиардам строк
Способ хранения: значения лежат не построчно, а по столбцам: все цены — рядом, все даты — рядом. Запрос «средний чек по месяцам» читает с диска только два столбца вместо всей таблицы, а однотипные значения отлично сжимаются. Отсюда скорость на агрегатах.
-- Любимый жанр колоночной базы (диалект ClickHouse: toYYYYMM — его функция)
SELECT toYYYYMM(created_at) AS month, avg(total_amount) AS avg_check
FROM orders
GROUP BY month;
- Сильные стороны: и сканирование миллиардов строк, сильное сжатие.
- Слабые: точечные обновления и удаления дороги; прочитать одну строку целиком — медленнее, чем в строчной базе; транзакционная нагрузка — для такой нагрузки они не предназначены.
- Продукты: ClickHouse, BigQuery, Snowflake, Amazon Redshift.
- Когда брать: аналитика, отчёты, события, логи, метрики — обычно рядом с «боевой» реляционной базой.
Здесь же пара терминов, которые любят на собеседованиях: (online processing — много коротких операций записи и чтения, мир PostgreSQL) и (online analytical processing — тяжёлые аналитические чтения по всей истории, мир ClickHouse). Продукт пишет в OLTP-базу, аналитика читает OLAP-копию.
И последнее семейство — графовые БД
Когда связи важнее самих записей — «друзья друзей», маршруты доставки, цепочки рекомендаций — берут графовые БД (Neo4j, Memgraph). Данные в них — узлы (это записи) и рёбра (это связи между записями); обход связей любой глубины — родная операция. В реляционной базе такой обход — лестница из соединений таблиц, которая с глубиной тяжелеет.
Мини-гайд: как выбрать базу под проект
- Начни с вопросов, а не с данных. Какие запросы будет задавать продукт: точечные «по ключу», связные «кто что купил», аналитические «сколько за месяц»?
- По умолчанию — реляционная. Связанные данные плюс цена ошибки (заказы, оплаты, остатки) — это PostgreSQL. Самый безопасный старт почти для любого продукта.
- Специализированные базы — под конкретную задачу, а не «про запас». Жмут горячие чтения — добавь кэш на Redis. Выросла аналитика — реплицируй события в ClickHouse. Дикая вариативность полей — сперва
jsonbв PostgreSQL, и лишь когда его не хватит — документная база. - Считай цену второй базы. Каждая новая — это синхронизация данных, бэкапы, мониторинг и ещё одна технология, которую команде поддерживать.
Грабли: выбирать базу «по моде». «Возьмём MongoDB — без схемы быстрее» заканчивается тем, что схему всё равно проектируют, только теперь её правила живут в коде приложения, а не под защитой базы. Обратные грабли тоже встречаются: тащить ClickHouse под объёмы, которые PostgreSQL агрегирует за миллисекунды. Базу подбирают под характер запросов и цену ошибки — не под хайп.
ClickHouse — колоночная для аналитики: её любят за быстрые расчёты по большим таблицам событий и заказов. У неё свой SQL; на платформе есть отдельный тренажёр по ClickHouse. А наш — реляционный: дальше КВЕРИ открывает опись и показывает, из чего он сложен, — таблицы, строки и нити-ключи между ними.
Вопрос с собеседования
Вопрос с собеседования: какие типы баз данных ты знаешь и как выберешь хранилище для нового сервиса?
Сильный ответ: реляционные (PostgreSQL, MySQL) — строгая схема, связи, -; ключ-значение (Redis) — кэш, сессии, счётчики; документные (MongoDB) — гибкие -документы; колоночные (ClickHouse, BigQuery) — аналитика по большим объёмам; графовые (Neo4j) — глубокие связи. В выборе иду от характера запросов: источником истины делаю реляционную базу, специализированные подключаю под конкретную задачу (кэш, аналитика), а не вместо неё.
Дополнительный вопрос: чем отличается от ?
Сильный ответ: OLTP — много коротких транзакций записи и чтения (оформление заказов), строчные вроде PostgreSQL; OLAP — тяжёлые аналитические чтения и по истории, колоночные СУБД вроде ClickHouse. Часто работают парой: продукт пишет в OLTP, аналитика читает OLAP-.