data-engineering
Data engineering
Работа с данными в больших объёмах — как дёшево хранить огромные массивы и строить по ним аналитику и поиск. Продвинутый уровень; сначала изучи обычные базы данных.
Начать трек →С нуля
Перед senior-материалом: что вообще такое дата-инжиниринг и горстка слов, которые остальной трек считает уже знакомыми.Oltp vs olap
OLTP против OLAP: разделение нагрузок, определяющее data engineering
Row-store OLTP и column-store OLAP оптимизируют противоположные формы: крошечные индексированные записи против огромных…
Elt vs etl
ELT против ETL: где выполняется Transform и почему индустрия перевернулась
ETL трансформирует до загрузки в отдельном движке; ELT грузит сырьё в склад и трансформирует в SQL. Дешёвый колоночный…
Parquet
Parquet: почему аналитика хранит колонки, а не строки
Parquet — колоночный, самоописывающий формат: в футере лежат min/max-статистики на каждую row group, поэтому фильтр…
Materialized views
Материализованные представления: меняем устаревание и место на диске на скорость чтения
Материализованное представление хранит результат дорогого запроса вместо пересчёта при каждом чтении. Главное решение —…
Event sourcing
Event sourcing: append-only лог как источник истины
Храни неизменяемый поток событий, меняющих состояние, а не само состояние — текущее состояние это свёртка лога слева.…
Search
Полнотекстовый поиск: инвертированный индекс, анализ и почему ранжирование важнее совпадения
LIKE ''''%term%'''' сканирует каждую строку и игнорирует релевантность. Полнотекстовый поиск переворачивает задачу:…
Vectors
Векторный поиск: треугольник recall–latency–память за RAG
Семантический поиск ранжирует эмбеддинги по расстоянию, но точный kNN — это O(N·d) и умирает на масштабе. ANN-индексы…
Putting it together
Собираем вместе: система ломается на стыках, а не в хранилищах
Проследи один продукт через OLTP, склад, dbt, MV, лог событий, поиск и vector index. Каждое хранилище корректно;…
Проекты по этому треку
Guided-проекты, которые закрепляют изученное здесь.
Фильтр Блума
Собери пространственно-эффективное вероятностное множество, отвечающее на запросы членства за O(1) с настраиваемой вероятностью ложных срабатываний, — и разберись, почему ложных отрицаний в нём быть не может принципиально.
Кодирование Хаффмана
Собери lossless-компрессор с нуля: постройте оптимальное дерево prefix-free кодов снизу вверх, выведи битовые строки и докажи, что round-trip точен, а результат короче кодирования фиксированной шириной.
Идемпотентный ETL-конвейер
Конвейеры не падают аккуратно — они падают в три часа ночи, на середине загрузки, и кто-то их перезапускает. Этот проект учит одному свойству, которое отличает любительский скрипт от настоящей дата-инженерии: прогон, который можно повторить сколько угодно раз и всё равно получить ровно одну копию каждой строки. Ты построишь пакетную загрузку, идемпотентный load, watermark для инкрементальных выгрузок и проверки качества данных, которые останавливают мусор, прежде чем он отравит всё ниже по течению.
Оптимизатор отчётной схемы
Отчётность — это место, где база либо оправдывает себя, либо нет: запросы широкие, таблицы большие, а «тормозит» — самый частый баг в продакшен-аналитике. Ты смоделируешь домен продаж и событий, напишешь честные медленные версии запросов для дашборда, а затем ускоришь их индексами и материализованными представлениями — и прочитаешь EXPLAIN ANALYZE, чтобы доказать ускорение, а не гадать о нём. Это сердце трека: превратить расплывчатое «отчёт подтормаживает» в измеренное, обоснованное изменение плана.
AI / LLM
Как строить функции поверх больших языковых моделей — подавать им свои данные, давать вызывать твой код и проверять, что ответы и правда хорошие.