В предыдущем уроке мы познакомились с общей идеей базы данных и СУБД. На практике, однако, не все базы данных устроены одинаково. Разные типы баз данных оптимизированы для разных видов данных, шаблонов запросов, требований к масштабируемости и потребностей в согласованности.
В этом уроке мы рассмотрим наиболее распространенные типы баз данных, их ключевые различия, типичные сценарии использования и реальные примеры. Мы также подробнее остановимся на реляционных базах данных, поскольку именно они останутся основным фокусом этого курса.
Ни одна модель базы данных не является идеальной для всех приложений.
Например:
Поскольку разные системы решают разные задачи, со временем появилось несколько моделей баз данных.
Вот краткое сравнение перед тем, как мы рассмотрим каждый тип подробнее:
| Тип | Модель данных | Сильные стороны | Типичные сценарии использования | Примеры |
|---|---|---|---|---|
| Реляционные | Таблицы со строками и столбцами | Высокая согласованность, SQL, соединения, структурированные данные | Банковские системы, ERP, CRM, электронная коммерция, отчетность | 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). SQL предоставляет стандартный способ фильтрации, соединения, агрегации, сортировки и изменения структурированных данных.
4. Транзакции ACID
Реляционные базы данных хорошо известны поддержкой свойств ACID:
Эти свойства критически важны в таких системах, как банковские приложения, биллинг, бронирование и управление запасами.
5. Ограничения целостности данных
Реляционные базы данных могут применять правила непосредственно на уровне базы данных, например:
NOT NULLCHECKЭти возможности помогают предотвращать появление некорректных или несогласованных данных.
6. Мощные соединения и отчетность
Реляционные базы данных отлично подходят, когда нужно объединять информацию из нескольких таблиц. Именно поэтому они остаются центральными для отчетности, аналитики, финансов, операционной деятельности и многих транзакционных систем.
7. Нормализация и снижение избыточности
При реляционном проектировании часто используется нормализация, то есть организация данных в связанных таблицах для уменьшения дублирования и повышения согласованности.
Например, информация о клиенте может храниться один раз в таблице customers, а не повторяться в каждой записи заказа.
Реляционные базы данных обычно являются лучшим выбором, когда:
Базы данных типа ключ-значение хранят данные как простую пару: ключ и связанное с ним значение.
Ключ выступает в роли уникального идентификатора, а база данных извлекает значение непосредственно по этому ключу. Эта модель очень проста и очень быстра.
Документные базы данных хранят данные в виде документов, обычно в формате, похожем на JSON. Каждый документ может содержать поля, массивы и вложенные объекты.
В отличие от реляционных баз данных, не все документы обязаны иметь одинаковую структуру.
Широкостолбцовые базы данных, иногда называемые базами данных семейств столбцов, хранят данные в строках, но каждая строка может содержать очень большой и гибкий набор столбцов. Они разработаны для распределения по множеству серверов и для высокой пропускной способности записи.
Колоночная база данных хранит на диске значения одного и того же столбца вместе, вместо хранения полной строки. Это отличается от широкостолбцовой базы данных.
Колоночное хранение особенно эффективно для аналитических запросов, которые читают несколько столбцов из очень большого набора данных.
Графовые базы данных предназначены для данных, в которых связи являются самой важной частью модели. Они хранят узлы (сущности) и ребра (связи).
Базы данных временных рядов специализированы на точках данных, связанных со временем. Они оптимизированы для высокой скорости загрузки, политик хранения, сжатия и агрегации по времени.
Базы данных в памяти хранят большую часть или все данные в RAM, а не на диске. Это делает их чрезвычайно быстрыми, хотя память стоит дороже дискового хранилища.
Некоторые базы данных в памяти используются только как временный кэш, тогда как другие также могут сохранять данные на диск.
При выборе базы данных полезно задавать себе такие вопросы:
Во многих реальных системах организации используют более одного типа базы данных. Например:
Такой подход часто называют polyglot persistence — полиглотной персистентностью.
Главные различия между типами баз данных обычно связаны с:
В следующем уроке мы глубже рассмотрим внутреннюю структуру реляционных баз данных, включая таблицы, строки, столбцы, ключи и ограничения целостности.