open atlas

databases

Базы данных

Как базы данных хранят и быстро находят данные, сохраняют их целостность, когда пишут сразу много пользователей, и растут вместе с объёмом.

9 юнитов·79 уроков·~48 ч

Начать трек
00

С нуля

Перед senior-материалом: что вообще такое база данных и горстка слов, которые остальной трек считает уже знакомыми.
01

Реляционная модель: таблицы, ключи, constraints, когда гнуть правила

Почему модель Кодда 1970 года всё ещё выигрывает по integrity, что покупает каждая нормальная форма, где расходятся surrogate vs natural keys, когда JSONB и массивы бьют side-таблицу, и почему некоторые hyperscale-конторы отключают foreign keys.
02

Индексы в PostgreSQL: B-tree, GIN, GiST, BRIN и цена неправильного

Как устроены индексы Postgres (B-tree, GIN, GiST, BRIN, SP-GiST, hash), почему leading-column rule — самый нарушаемый принцип в продакшне, как partial / expression / covering индексы меняют cost-модель и когда добавлять или дропать индекс.
03

Планы выполнения: как PostgreSQL ищет и выполняет ваш запрос

Как планировщик PostgreSQL читает статистику для выбора сканирований и соединений, почему ошибки оценки строк каскадируются в плохие планы и как зафиксировать стабильный план под нагрузкой.
04

MVCC и изоляция в PostgreSQL: снимки, аномалии, bloat

Как Postgres даёт тысячам читателей и писателей делить строки без блокировок — и почему одна долгая транзакция может раздуть таблицу на 100 ГБ.
05

Пулинг соединений в PostgreSQL: режимы PgBouncer, математика размера и сбои от исчерпания пула

Почему backend Postgres тяжёлый, как режимы session/transaction/statement PgBouncer меняют контракт, математика размера пула, ловушка prepared statement + transaction mode (фикс PgBouncer 1.21+), и ландшафт Supavisor/Odyssey/PgCat.
06

Миграции схемы в PostgreSQL: блокировки, expand-contract и режим отказа очереди блокировок

Почему ALTER TABLE за долгим запросом замораживает базу, как разбить каждое ломающее изменение на безопасные фазы expand-contract и как выглядят девять режимов отказа миграций в продакшне.
07

Шардирование PostgreSQL: ключи шардирования, режим hot-shard, partitioning против Citus

Когда одного Postgres мало — выбор ключа шардирования, стратегии hash/range/list/directory, declarative partitioning против Citus, ко-локация, режим hot-shard, online resharding, schema-based sharding.
08

Всё вместе

Один продукт проходит путь от однотабличного MVP до кластера Citus на миллиард строк через семь моментов отказа базы — схема, индексы, статистика, bloat, пулинг, миграции, шардинг — каждый назван, упорядочен и готов к триажу.

Проекты по этому треку

Guided-проекты, которые закрепляют изученное здесь.

◆ Проекты

Сервис RAG с опорой на источники

Демо RAG, отвечающее по корпусу, собирается легко; сервис RAG, которому ты доверишь живых пользователей, — нет. Сложность не в поиске, а в опоре на источники: заставить модель говорить только то, что подтверждает найденный текст, прикреплять цитаты, которые читатель может проверить, и доказать на eval-наборе, что ответы не уплывают в уверенную выдумку. Ты соберёшь весь цикл — нарезка, эмбеддинги, хранилище, retrieval top-k, опора, цитаты, оценка — и нащупаешь, где именно он течёт.

◆ Проекты

Идемпотентный ETL-конвейер

Конвейеры не падают аккуратно — они падают в три часа ночи, на середине загрузки, и кто-то их перезапускает. Этот проект учит одному свойству, которое отличает любительский скрипт от настоящей дата-инженерии: прогон, который можно повторить сколько угодно раз и всё равно получить ровно одну копию каждой строки. Ты построишь пакетную загрузку, идемпотентный load, watermark для инкрементальных выгрузок и проверки качества данных, которые останавливают мусор, прежде чем он отравит всё ниже по течению.

◆ Проекты

Планировщик задач

Планировщик задач cron + backoff с доставкой at-least-once, идемпотентными обработчиками и visibility timeout — чтобы ни одна задача не терялась молча, даже при краше воркера на середине выполнения.

◆ Проекты

Мини-CRUD API

Собери свой первый настоящий бэкенд: крошечный HTTP API, который создаёт, читает, обновляет и удаляет заметки — на SQLite, чтобы данные пережили перезапуск. Ты пройдёшь путь от сервера в одну строку с «hello» до небольшого сервиса, который проверяет ввод и хранит строки, — честно, шаг за шагом.

◆ Проекты

Визуализатор планов запросов

Вставь EXPLAIN (ANALYZE, FORMAT JSON) и отрисуй дерево плана с таймингом по узлам и ошибкой оценки строк, чтобы плохой join был виден сразу.

◆ Проекты

Оптимизатор отчётной схемы

Отчётность — это место, где база либо оправдывает себя, либо нет: запросы широкие, таблицы большие, а «тормозит» — самый частый баг в продакшен-аналитике. Ты смоделируешь домен продаж и событий, напишешь честные медленные версии запросов для дашборда, а затем ускоришь их индексами и материализованными представлениями — и прочитаешь EXPLAIN ANALYZE, чтобы доказать ускорение, а не гадать о нём. Это сердце трека: превратить расплывчатое «отчёт подтормаживает» в измеренное, обоснованное изменение плана.

◆ Проекты

Список с пропусками

Реализуй вероятностную упорядоченную структуру данных, которая обеспечивает O(log n) поиск, вставку и удаление без балансировочной бухгалтерии деревьев — только слоистые «экспресс-полосы» через отсортированный связный список.

◆ Проекты

URL-сокращатель под нагрузкой

Собери URL-сокращатель, который выдерживает настоящий трафик, — а потом эксплуатируй его: задеплой, наблюдай и разберись с инцидентом, когда одна горячая ссылка плавит твой кэш.

◆ Проекты

Краш-устойчивое key-value хранилище с WAL

Собери крошечное дисковое KV-хранилище, которое переживает kill -9 на середине записи, дописывая в write-ahead log до изменения основного файла.

Следующий трек

Кеширование

Как ускорять приложения, запоминая результаты вместо повторного вычисления — и самое сложное: понимать, когда запомненная копия устарела.