Лекция 2. Модели данных
Основные понятия
- База данных — организованная совокупность данных, хранящаяся в ЭВМ и отображающая некоторую предметную область.
- Модель данных — набор концепций, правил и структур, которые определяют, как хранятся данные в базе данных.
- СУБД — ПО для создания, манипулирования и совместного использования баз данных.
- ERD (Entity Relation Diagram) — показывает сущности и их связи.
У ERD есть разные нотации:
- Воронья лапка (Crow’s foot)
- E-диаграмма (нотация Чена)
- IDEF1X и другие
Сущности и атрибуты
- Сущности — объекты.
- Атрибуты — свойства сущностей:
- простые и составные;
- обязательные и необязательные.
Модели данных
Это решение определяет, насколько система будет производительной, масштабируемой, гибкой и в конечном итоге успешной. Неверный выбор модели данных подобен выбору неправильного фундамента для здания.
Реляционная
Самая популярная модель, основанная на реляционной алгебре.
Особенности:
- Организует данные в виде двумерных таблиц.
- Использует SQL для запросов.
- Поддерживает ACID-свойства — гарантии инвариантности данных.
Преимущества:
- Целостность и непротиворечивость данных за счёт ключей, ограничений и транзакций.
- SQL как стандарт облегчает разработку, поддержку приложений и миграцию данных.
- Нормализация устраняет избыточность и аномалии.
Недостатки:
- Изменение структуры таблиц на работающей системе — сложная и дорогая операция.
- Горизонтальное масштабирование сложнее, чем у некоторых NoSQL-решений.
- Сложные
JOIN-запросы на огромных таблицах могут выполняться медленно. - Неэффективна для хранения иерархических (древовидных) или графовых данных.
Применение:
- OLTP-системы (Online Transaction Processing) — запросы на каждое действие пользователя.
- Системы с высокими требованиями к целостности — везде, где есть деньги, всё должно быть «чётенько».
- Когда данные чётко структурированы.
OLTP vs OLAP: OLTP — много мелких онлайн-транзакций; OLAP (Online Analytical Processing) — аналитика, агрегации, отчёты по большим объёмам.
Семейства: SQL, NoSQL, NewSQL.
Колоночная
Особенности:
- Вместо хранения записи целиком, данные организуются по столбцам.
- Относятся к семейству NoSQL (хотя есть и реляционные представители).
- Идеальна для OLAP-запросов.
- По сути та же двумерная таблица, но «горизонталь» и «вертикаль» поменяны местами.
- Много оптимизаций (компрессия, векторизованные вычисления).
Преимущества:
- Высокая производительность аналитических запросов.
- Эффективное сжатие данных (в столбце много однотипных значений).
- Улучшенная производительность ввода-вывода.
- При горизонтальном масштабировании — почти линейное увеличение производительности.
Недостатки:
- Операции, характерные для OLTP, работают менее эффективно.
- При частых изменениях данных возникают сложности в синхронизации и обеспечении целостности между столбцами.
Применение: big data, аналитика, BI.
Реализации:
- Cassandra
- ScyllaDB
- Google BigQuery
- ClickHouse (колоночная реляционная СУБД)
Документоориентированные
Особенности:
- Данные хранятся в виде документов, а не строк таблицы.
- Относятся к семейству NoSQL.
- Документы обычно в формате BSON (a-la бинарный JSON).
- Объединяются в коллекции (аналог таблиц, но без обязательного единого формата для всех записей).
- Документы могут содержать вложенные объекты и массивы.
Пример: спроектируем хранение сериала. В реляционной модели — куча таблиц и
FOREIGN KEY(сериал → сезоны → серии → актёры …). В документоориентированной — просто массивы внутри одного документа. Если же использовать ссылки вместо вложенных объектов — теряем целостность ссылок (возможны «висячие» ссылки) — рэйс-кондишены и проблемы.
Преимущества:
- Возможность изменения структуры документов без модификации общей схемы БД.
- Документы в JSON/BSON естественно ложатся на объекты приложения.
Недостатки:
- Ограниченная целостность данных.
- Сложность запросов.
- Потенциальная избыточность.
Применение:
- Хранение логов.
- OLTP-системы.
- Разработка MVP.
- Неструктурированные данные.
- Обработка больших объёмов данных.
Реализации:
- MongoDB
- Firebase Realtime Database
- Elasticsearch (поисковый движок)
- Amazon DynamoDB
- CouchDB
Графовая
Особенности:
- Основные объекты — узлы, рёбра, свойства, а не таблицы.
- Относятся к семейству NoSQL.
Преимущества:
- Запросы на поиск путей, обход графа и анализ связей выполняются очень быстро.
- Нет жёстко фиксированной схемы.
- Легко добавлять новые типы связей и узлов без пересмотра всей структуры.
Недостатки:
- Узко специализированы — за пределами «графовых» задач уступают другим моделям.
Реализации:
- Neo4j
- Dgraph
Ключ-значение
Особенности:
- Простейшая модель: ключ → значение.
Преимущества:
- Операции получения, вставки и удаления выполняются за $O(1)$.
- Быстрые и нетребовательные к ресурсам.
Недостатки:
- Не подходят для сложных запросов, агрегаций или выборок.
Применение:
- Кеширование данных.
- Хранение сессионных данных.
- Реализация очередей.
- Хранение конфигурационных данных.
Реализации: Redis, Memcached, etcd.
Временные ряды (Time Series)
Особенности:
- Каждое значение привязано к моменту времени.
Преимущества:
- Оптимизация под высокую скорость записи.
- Простая агрегация и интерполяция.
- Хранение больших объёмов данных.
- Быстрый доступ к данным за определённые временные интервалы.
Применение:
- Мониторинг и логирование.
- Финансовые рынки.
- Интернет вещей (IoT).
Реализации: InfluxDB, TimescaleDB, Prometheus.
Векторная
Особенности:
- Данные сохраняются в виде векторов вещественных чисел (эмбеддингов).
Преимущества:
- Быстро выполняют запросы поиска похожих векторов благодаря специальным индексам и алгоритмам (например, HNSW — Hierarchical Navigable Small World).
Применение:
- Рекомендательные системы.
- Поиск по смыслу (семантический поиск).
- Кластеризация.
Реализации:
- Pinecone
- Milvus
- Weaviate
- pgvector (расширение PostgreSQL)
Объектные хранилища данных
Особенности:
- Предназначены для работы с файлами: документами, изображениями, видео, аудио.
- Файлы располагаются в каталогах и подкаталогах.
- Хранят помимо файла метаданные.
Преимущества:
- Интеграция с ОС и стандартными программами для работы с файлами.
- Позволяют выстраивать сложные модели доступа.
- Позволяют разворачивать CDN (Content Delivery Network).
Недостатки:
- Поиск осуществляется по именам файлов и метаданным, а не по содержимому.
Применение: хранение слабоструктурированных данных, медиаконтент, бэкапы.
Реализации:
- Amazon S3
- MinIO