Урок 1.2 · Время чтения: ~15 мин
Существует много типов баз данных, каждый из которых оптимизирован под определённый вид данных, шаблон запросов или требования к масштабируемости. В этом уроке вы узнаете об основных моделях БД — реляционных, ключ-значение, документных, широкостолбцовых, графовых, временных рядов и колоночных — с их ключевыми отличиями, типичными сценариями применения и примерами реальных систем.
В предыдущем уроке мы познакомились с общей идеей базы данных и СУБД. На практике не все базы данных устроены одинаково. Разные типы БД оптимизированы под разные виды данных, шаблоны запросов, требования к масштабируемости и потребности в согласованности.
Мы также подробнее остановимся на реляционных базах данных, поскольку именно они останутся основным фокусом курса.
Ни одна модель базы данных не является идеальной для всех приложений.
Например:
Поскольку разные системы решают разные задачи, со временем появилось несколько моделей баз данных.
Краткое сравнение перед подробным разбором каждого типа:
| Тип | Модель данных | Сильные стороны | Типичные сценарии | Примеры |
|---|---|---|---|---|
| Реляционные | Таблицы со строками и столбцами | Высокая согласованность, SQL, соединения, структурированные данные | Банковские системы, ERP, CRM, e-commerce, отчётность | PostgreSQL, MySQL, MariaDB, SQLite, Oracle |
| Ключ-значение | Ключ + значение | Очень быстрый поиск, простое масштабирование | Кэширование, сессии, feature flags, корзины покупок | Redis, Amazon DynamoDB, Riak |
| Документные | Документы в формате JSON | Гибкая схема, вложенные данные | Управление контентом, профили пользователей, каталоги | MongoDB, Couchbase, Firestore |
| Широкостолбцовые | Строки с гибкими столбцами по семействам | Высокая пропускная способность записи, горизонтальное масштабирование | Журналы событий, IoT, крупные распределённые нагрузки | Apache Cassandra, HBase, ScyllaDB |
| Графовые | Узлы и рёбра | Запросы по связям | Социальные сети, обнаружение мошенничества, рекомендации | Neo4j, Amazon Neptune, ArangoDB |
| Временных рядов | Записи с временными метками | Эффективная загрузка и агрегация по времени | Мониторинг, метрики, датчики, финансовые тики | InfluxDB, TimescaleDB, OpenTSDB |
| Колоночные аналитические | Данные хранятся по столбцам | Быстрое аналитическое сканирование и агрегация | BI, дашборды, хранилища данных, OLAP | ClickHouse, DuckDB, Amazon Redshift, BigQuery |
| В памяти | Данные преимущественно в RAM | Сверхнизкая задержка | Кэширование, таблицы лидеров, счётчики реального времени | Redis, Memcached, SAP HANA |
Реляционные базы данных хранят данные в таблицах, состоящих из строк и столбцов. Таблицы могут быть связаны друг с другом через отношения, обычно с использованием первичных и внешних ключей.
Эта модель особенно хорошо подходит, когда данные хорошо структурированы и важны точность, согласованность и сложные запросы.
1. Структурированная схема
Реляционные БД обычно требуют чётко определённой схемы. Перед сохранением данных задаются таблицы, столбцы, типы данных, ограничения и связи. Это делает структуру предсказуемой и удобной для проверки.
2. Связи между таблицами
Одна из главных сильных сторон реляционных систем — возможность явно моделировать связи между сущностями.
Например:
customers может быть связана с таблицей orders.orders — с таблицей order_items.3. Поддержка SQL
Реляционные БД запрашиваются с помощью SQL (Structured Query Language) — стандартного языка для фильтрации, соединения, агрегации, сортировки и изменения структурированных данных.
4. ACID-транзакции
Реляционные БД хорошо известны поддержкой свойств ACID:
Эти свойства критически важны в банковских системах, биллинге, бронировании и управлении запасами.
5. Ограничения целостности данных
Реляционные БД могут применять правила на уровне базы: первичные ключи, внешние ключи, ограничения уникальности, NOT NULL, CHECK. Это предотвращает некорректные или несогласованные данные.
6. Мощные соединения и отчётность
Реляционные БД отлично подходят для объединения информации из нескольких таблиц — именно поэтому они остаются центральными для отчётности, аналитики и финансовых систем.
7. Нормализация и снижение избыточности
Реляционное проектирование часто использует нормализацию: организацию данных в связанных таблицах для уменьшения дублирования. Например, информация о клиенте хранится один раз в customers, а не повторяется в каждом заказе.
Реляционные базы данных — лучший выбор, когда:
Базы данных ключ-значение хранят данные как простую пару: ключ и связанное с ним значение. Доступ идёт непосредственно по ключу — модель очень простая и очень быстрая.
Документные БД хранят данные в виде документов в формате, похожем на JSON. Каждый документ может содержать поля, массивы и вложенные объекты. Структура документов может различаться.
Широкостолбцовые БД (базы данных семейств столбцов) хранят данные в строках, но каждая строка может содержать очень большой гибкий набор столбцов. Спроектированы для распределения по многим серверам и высокой пропускной способности записи.
Колоночная БД хранит на диске значения одного столбца вместе, а не полную строку — это отличается от широкостолбцовой модели. Особенно эффективна для аналитических запросов, читающих несколько столбцов из очень большого набора данных.
Графовые БД предназначены для данных, где связи — самая важная часть модели. Хранят узлы (сущности) и рёбра (связи).
Специализированы для данных, связанных со временем. Оптимизированы для высокой скорости загрузки, политик хранения, сжатия и агрегации по временным окнам.
Хранят большую часть или все данные в RAM, а не на диске. Это обеспечивает сверхнизкую задержку, хотя память дороже дискового хранилища.
При выборе БД задайте себе эти вопросы:
Во многих реальных системах используется более одного типа БД:
Такой подход называют polyglot persistence (полиглотная персистентность).
| Критерий | Что сравнивается |
|---|---|
| Модель данных | Таблицы, документы, ключ-значение, графы, временны́е ряды |
| Гибкость схемы | Фиксированная или гибкая структура |
| Стиль запросов | SQL, поиск по ключу, документные запросы, обход графов |
| Модель согласованности | Строгие ACID-гарантии или масштабируемость |
| Профиль производительности | Транзакции, аналитика, связи или сверхбыстрый доступ |
Ключевые выводы:
Реляционные БД используют фиксированную табличную схему, обеспечивают ACID-транзакции и запрашиваются через SQL. NoSQL — зонтичный термин для ключ-значение, документных, широкостолбцовых и графовых моделей: они жертвуют частью гарантий согласованности ради гибкости схемы или горизонтального масштабирования. Правильный выбор зависит от данных и нагрузки.
Используйте документную БД, когда данные имеют вложенную переменную структуру (например, каталог товаров с разными атрибутами) и соединения между коллекциями редки. Используйте реляционную БД, когда данные структурированы, сущности взаимосвязаны и нужны надёжные транзакции с многотабличными запросами.
Да — это называется polyglot persistence. Типичный пример: PostgreSQL для транзакционных данных, Redis для кэширования, ClickHouse для аналитики. Каждый тип БД используется там, где он показывает лучшую производительность.
Начните с требований к нагрузке: структура данных, требования к согласованности, тип запросов, целевая задержка и масштаб. Например, реляционная БД подходит для ACID-транзакций, документная БД — для гибких JSON-подобных структур, а БД временных рядов — для метрик с временными метками.
Каждая модель — это компромисс. Реляционные БД дают строгую согласованность, соединения и зрелую SQL-экосистему, но изменения схемы могут быть более жёсткими на большом масштабе. Модели NoSQL часто дают больше гибкости или горизонтального масштабирования, но могут ограничивать соединения и требовать более внимательного проектирования согласованности.
Да. Это называется polyglot persistence: в одной системе используются несколько БД, каждая под свой профиль нагрузки. Типичный вариант: PostgreSQL для транзакций, Redis для кэширования и ClickHouse (или другое колоночное хранилище) для аналитики.