Бакалавриат
2026/2027





Системы баз данных
ID 1135867
Статус:
Курс обязательный (Компьютерные науки и анализ данных)
Где читается:
Факультет компьютерных наук
Когда читается:
2-й курс, 2, 3 модуль
Охват аудитории:
для своего кампуса
Язык:
русский
Кредиты:
4
Контактные часы:
68
Программа дисциплины
Аннотация
Курс посвящён системам хранения и обработки данных - от одной реляционной базы до платформы данных компании. Студенты узнают, как устроена и как исполняет запросы классическая СУБД (PostgreSQL), чем отличаются колоночные аналитические системы (ClickHouse), как проектируют и наполняют хранилища данных, что меняется, когда данные не помещаются на одну машину, и что лежит за пределами реляционной модели - NoSQL и векторные базы данных для приложений на основе LLM.
Цель освоения дисциплины
- Знать устройство реляционной СУБД: организацию хранения, индексы, оптимизатор, транзакции и механизмы обеспечения ACID.
- Уметь писать аналитические SQL-запросы (JOIN, агрегаты, CTE, оконные функции) и оптимизировать их по плану выполнения.
- Уметь проектировать схемы данных для транзакционной и аналитической нагрузки, включая размерное моделирование хранилищ.
- Знать архитектуру хранилищ данных и подходы к их построению (слои, ETL/ELT, Inmon, Kimball, Data Vault) и уметь организовать надёжную загрузку данных с помощью Airflow и dbt.
- Понимать принципы колоночного хранения и аналитических СУБД (ClickHouse, MPP-системы) и область их применения.
- Знать архитектуру Apache Spark и уметь писать и оптимизировать распределённые вычисления: читать планы, выбирать стратегии джойнов, бороться с перекосом данных, подбирать ресурсы.
- Понимать архитектуру Lakehouse, устройство табличных форматов (Iceberg, Delta Lake) и уметь аргументированно выбирать между хранилищем и lakehouse.
- Знать основы потоковой обработки данных (Kafka, Structured Streaming, CDC).
- Знать основные классы NoSQL-систем и векторных баз данных и уметь выбирать систему хранения под задачу, включая задачи поиска для LLM-приложений.
Планируемые результаты обучения
- Навык восстановления СУБД после сбоя
- Навык планирования и оптимизации запросов в СУБД
- Навык организации хранения данных в реляционной СУБД
- Знает примеры баз данных
- Студент проектирует реляционную схему данных по описанию предметной области, обосновывает выбор ключей, ограничений и степени нормализации.
- Студент пишет аналитические запросы на SQL с использованием соединений, агрегатов, CTE и оконных функций.
- Студент читает план выполнения запроса в PostgreSQL, ClickHouse и Spark, находит узкое место и устраняет его (индекс, переписывание запроса, партиционирование, стратегия джойна).
- Студент объясняет механизмы транзакций, уровни изоляции и связанные с ними аномалии, репликацию и её ограничения.
- Студент сравнивает строчное и колоночное хранение и выбирает СУБД под транзакционную или аналитическую нагрузку.
- Студент проектирует хранилище данных по схеме «звезда», реализует медленно меняющиеся измерения.
- Студент реализует инкрементальную идемпотентную загрузку данных в виде DAG в Apache Airflow и описывает трансформации в dbt с проверками качества.
- Студент выбирает формат хранения файлов (CSV, Parquet, Avro и др.) и библиотеку обработки (Pandas, Polars, DuckDB) исходя из объёма и характера данных.
- Студент разрабатывает и оптимизирует приложения на PySpark: объясняет план выполнения, устраняет лишний shuffle и перекос данных, подбирает параметры ресурсов.
- Студент создаёт таблицы в формате Iceberg / Delta Lake, использует time travel и эволюцию схемы, объясняет, как достигается ACID над объектным хранилищем.
- Студент описывает устройство Apache Kafka и реализует простую потоковую обработку с окнами.
- Студент классифицирует NoSQL-системы и векторные базы данных и обосновывает выбор системы хранения для заданного сценария, включая RAG-приложения.
- Студент собирает в команде работающий сквозной конвейер данных и представляет его архитектуру.
Содержание учебной дисциплины
- Введение. Зоопарк систем данных и карта курса: OLTP vs OLAP, реляционная модель, повторение базового SQL, сквозные линии курса
- Проектирование схемы данных: сущности и связи, ключи и ограничения, нормальные формы и осознанная денормализация
- SQL для аналитики: JOIN и их ловушки, GROUP BY и агрегаты, CTE и рекурсия, оконные функции
- Как СУБД исполняет запрос: страницы, B-tree и другие индексы, статистика и оптимизатор, чтение EXPLAIN, антипаттерны
- Транзакции и надёжность: ACID, уровни изоляции и аномалии, MVCC, блокировки, WAL; репликация и шардирование (обзор)
- Колоночные СУБД и аналитическая нагрузка: строчное vs колоночное хранение, компрессия, векторизация, партиционирование; ClickHouse
- Основы построения хранилищ данных: слои staging → core → витрины, подходы Inmon / Kimball / Data Vault, ETL vs ELT, MPP (Greenplum)
- Размерное моделирование: факты и измерения, звезда и снежинка, гранулярность, SCD, суррогатные ключи, календарное измерение
- Оркестрация и загрузка данных: DAG и Apache Airflow, инкрементальная загрузка, идемпотентность, backfill, dbt, проверки качества данных
- Данные на одной машине: форматы файлов (CSV, JSON, Parquet, ORC, Avro, Pickle), Pandas и память, Polars, DuckDB
- Распределённое хранение и вычисления: HDFS и S3, YARN, MapReduce, архитектура Spark (driver, executors, shuffle), RDD vs DataFrame, ленивые вычисления
- Spark: оптимизация и тюнинг: Catalyst и AQE, чтение explain, стратегии джойнов, skew, ресурсы; кейс «ноутбук, который убивает кластер»
- NoSQL и выбор системы под задачу: key-value, документные, широкостолбцовые, графовые СУБД; CAP и согласованность; карта выбора СУБД
- Lakehouse: от data lake к lakehouse, табличные форматы Delta Lake / Iceberg / Hudi, ACID над объектным хранилищем, time travel, каталоги, medallion-архитектура
- Потоковые данные: Kafka (топики, партиции, consumer groups, гарантии доставки), Structured Streaming / Flink, Lambda и Kappa, CDC
- Векторные базы данных и данные для LLM: эмбеддинги, ANN-индексы (HNSW, IVF), pgvector / Qdrant, гибридный поиск, RAG, feature store; итоги курса
Элементы контроля
- Домашнее задание 1. SQL и исполнение запросовВыдаётся после лекции № 4, срок выполнения — 2 недели. Выполняется индивидуально в PostgreSQL на учебной базе данных (схема и данные выдаются). Срок сдачи - перед семинаром 7. Содержит 5 задач: – задачи 1–3 - аналитические запросы (JOIN, агрегаты, CTE, оконные функции: ретеншн / воронка / скользящие агрегаты); – задача 4 - для заданных медленных запросов прочитать план, объяснить причину медленной работы и переписать запрос / добавить индекс, приложив планы до и после; – задача 5 - спроектировать и обосновать партиционирование и индексы для таблицы событий заданного размера.
- Домашнее задание 2. Хранилище данных и оркестрацияВыдаётся после лекции № 9, срок выполнения — 2 недели. Выполняется индивидуально. Срок сдачи - перед семинаром 12. Содержит 3 части: – часть 1 - по описанию предметной области спроектировать схему «звезда»: определить гранулярность фактов, измерения, тип SCD для каждого измерения; реализовать DDL; – часть 2 - реализовать DAG в Apache Airflow, выполняющий инкрементальную идемпотентную загрузку из OLTP-источника в хранилище с поддержкой backfill; – часть 3 - добавить проверки качества данных (dbt tests или собственные) и объяснить, какие ошибки они ловят.
- Домашнее задание 3. Spark и LakehouseВыдаётся после лекции № 13, срок выполнения — 2 недели. Выполняется индивидуально на PySpark. Срок сдачи - перед семинаром 16. Содержит 3 части: – часть 1 - выдан заведомо неэффективный PySpark-ноутбук; нужно по планам выполнения и Spark UI найти причины (лишний shuffle, перекос, неудачный джойн, collect на драйвере и т. п.), переписать и показать выигрыш по времени / объёму shuffle; – часть 2 - сравнить форматы хранения (CSV vs Parquet, с партиционированием и без) на объёме прочитанных данных и времени запроса; – часть 3 - перенести данные в табличный формат Lakehouse (Iceberg или Delta), продемонстрировать атомарное обновление, time travel и эволюцию схемы.
- Проект. Сквозной конвейер данныхВыдаётся на семинаре 7; промежуточная проверка - семинар 12; защита - семинар 16. Выполняется индивидуально или в командах. Задача проекта - перенести данные из транзакционной реляционной базы в аналитическую витрину и показать, что конвейер работает надёжно и воспроизводимо. Студент выбирает предметную область и источник (из предложенного списка учебных OLTP-баз или свой по согласованию) и реализует: – анализ исходной OLTP-схемы в PostgreSQL и проектирование целевой витрины по схеме «звезда» (гранулярность, измерения, SCD); – конвейер загрузки: DAG в Apache Airflow (или аналогичный оркестратор по согласованию), который инкрементально и идемпотентно переносит данные из источника в витрину; целевая система - PostgreSQL, ClickHouse или DuckDB по выбору студента; – 3–5 аналитических запросов к витрине, отвечающих на содержательные вопросы предметной области, с разбором планов выполнения. Сдаётся репозиторий с кодом, инструкцией по запуску (docker compose) и кратким отчётом (2–3 страницы) со схемой конвейера, схемой витрины и обоснованием решений. Защита .
- ЭкзаменУстный экзамен по билетам, проводится дистанционно на платформе видеоконференций (Zoom / MS Teams) с включённой камерой и демонстрацией экрана при подготовке. Студент получает билет случайным образом, на подготовку отводится 30 минут; во время подготовки разрешается пользоваться любыми материалами, во время ответа — только собственными записями, сделанными при подготовке. Ответ — 15–20 минут. Билет содержит 3 задания: – вопрос 1 - теоретический вопрос по лекциям 1–6 – вопрос 2 - теоретический вопрос по лекциям 7–16 (например, сравнить классическое хранилище и lakehouse; объяснить, как Iceberg обеспечивает ACID над объектным хранилищем); – задача - по данному плану запроса (PostgreSQL, ClickHouse или Spark) объяснить, что делает движок, где узкое место и как его устранить, либо по описанию задачи предложить модель данных / архитектуру и обосновать выбор систем.
Промежуточная аттестация
- 2026/2027 3rd moduleИтог = Округление (0,4 · ДЗ + 0,3 · П + 0,3 · Э), где ДЗ - средняя оценка за три домашних задания, П - оценка за проект, Э - оценка за экзамен. Все оценки - по 10-балльной шкале.
Список литературы
Рекомендуемая основная литература
- Kimball, Ralph, and Margy Ross. The data warehouse toolkit: The definitive guide to dimensional modeling. John Wiley & Sons, 2013.
- PostgreSQL 16 изнутри - Рогов Е. - Издательство "ДМК Пресс" - 978-5-93700-305-8 - 2024 - русский - https://e.lanbook.com/book/456800 - ЛАНЬ - 456800
- Высоконагруженные приложения. Программирование, масштабирование, поддержка - Клеппман Мартин - Астана: Спринт Бук - 978-601-08-3514-6 - 2024 - русский - https://ibooks.ru/product/335521 - iBOOKS - 335521
- Системы баз данных : полный курс, Гарсиа-Молина, Г., 2004
Рекомендуемая дополнительная литература
- Введение в системы баз данных. Классическое издание. Т.1: ., Дейт, К. Дж., 2024
- Введение в системы баз данных. Классическое издание. Т.2: ., Дейт, К. Дж., 2024
- Распределенные данные. Алгоритмы работы современных систем хранения информации - Петров Алекс - Санкт-Петербург: Питер - 978-5-4461-1640-9 - 2021 - русский - https://ibooks.ru/product/336732 - iBOOKS - 336732