DWH Flashcards
Что такое Data Lake и Lakehouse?
Теги: #собес
Озеро данных
Озеро данных (Data Lake) – это хранилище большого объема неструктурированных данных, собранных или генерированных одной компанией. В таком подходе в озеро данных поступают все данные, которые собирает компания, без предварительной очистки и подготовки.
Примеры данных:
Видеозаписи с беспилотников и камер наружного наблюдения. Транспортная телеметрия. Фотографии. Логи пользовательского поведения. Метрики сайтов. Показатели нагрузки информационных систем и пр.
Эти данные пока непригодны для типового использования в ежедневной аналитике в рамках BI-систем, но могут быть использованы для быстрой отработки новых бизнес-гипотез с помощью ML-алгоритмов.
Основные особенности использования подхода:
Хранятся все данные, включая «бесполезные», которые могут пригодиться в будущем или не понадобиться никогда. Структурированные, полуструктурированные и неструктурированные разнородные данные различных форматов: от мультимедийных файлов до текстовых и бинарных из разных источников. Высокая гибкость, позволяющая добавлять новые типы и структуры данных в процессе эксплуатации. Из-за отсутствия четкой структуры необходима дополнительная обработка данных для их практического использования. Озеро данных дешевле DWH с точки зрения проектирования.
Преимущества озера данных:
Масштабируемость: распределенная файловая система позволяет подключать новые машины или узлы без изменения структуры хранилища. Экономичность: Data Lake можно построить на базе свободного ПО Apache Hadoop, без дорогих лицензий и серверов. Универсальность: большие объемы разнородных данных могут использоваться для различных исследовательских задач (например, прогнозирование спроса или выявление пользовательских предпочтений). Быстрота запуска: накопленные объемы Data Lake позволяют быстро проверять новые модели, не тратя время на сбор информации из различных источников.
Lakehouse – Databricks определяет Lakehouse как систему управления данными на базе недорогих хранилищ, которая расширяет функции управления и производительности традиционных аналитических СУБД, таких как ACID-транзакции, версионирование, кэширование и оптимизация запросов. Таким образом, Lakehouse сочетает в себе преимущества обоих миров. В следующих разделах мы познакомимся с возможным дизайном Lakehouse, предложенным Databicks.
В чем разница между OLTP и OLAP (тип нагрузки, принципы)?
Почему OLAP считается append-optimized, а OLTP — нет?
Теги: #wildberries #ЛеруМерлен #🐺 #okko #cобес
OLTP для дата инженера это источник данных, production база или её реплика, откуда забираем данные. Строковый тип хранения, работа преимущественно с одной строкой за раз, частые операции вставки/изменения/чтения/удаления. Много простых запросов с высокой степенью concurrency (два и более запроса с пересекающимся временным диапазоном запуска, которые обращаются к одному объекту БД). Может выполнять аналитические запросы, но не оптимизирована для них. Обычно на порядки (в десятки и сотни раз) меньше OLAP базы. Редко хранит историю, чаще SCD1 (перезапись). С ней чаще работают приложения, а не люди напрямую. Примеры: Postgres, MySQL, SQL Server.
OLAP это приёмник данных, зачастую – собственно и представляет собой хранилище (DWH). Может выполнять транзакционные запросы, но не оптимизирована для них. Ориентирована на сложные аналитические запросы (джоины, агрегации, цепочки CTE и/или подзапросов), преимущественно на чтение. Обновление и удаление строк часто ограничено или оптимизировано под замену целиком партиции (insert overwrite table <table> partition (year=<year>, month=<month>) и т.п.). Часто хранит историю (напр. SCD2). К ней могут часто писать ad-hoc запросы (одноразовые, для проверки гипотезы или изучения данных).
Примеры: Greenplum, Clickhouse, Bigquery.</month></year>
- OLAP считается append-optimized, так как в аналитических системах в основном добавляются новые данные, а обновления минимальны.
- OLTP не оптимизирован под append, так как делает частые апдейты и удаления, ориентировано на быструю транзакционную обработку.
Сравнение OLAP и OLTP систем
Property | OLAP | OLTP |
|—————————|————————————————————|———————————————–|
| Степень детализации | Хранение детализированных и обобщенных (агрегированных) данных | Хранение детализированных данных |
| Формат хранения | Единый согласованный | Варьируется от задач |
| Допущение избыточности| Контролируемая избыточность | Максимальная нормализация, сложные структуры |
| Управление данными | Периодическое добавление данных | Добавление\удаление\изменение в любое время |
| Количество хранимых данных | Должны быть доступны все данные, в том числе исторические | Должны быть доступны все оперативные данные |
| Характер запросов к данным | Произвольные запросы (ad-hoc анализ данных) | Заранее составленные запросы |
Чем отличаются колоночные СУБД от строковых, и в каких сценариях используются?
теги #wildberries
Строковые (Row-based) СУБД
Принцип хранения данных:
* Данные хранятся построчно — каждая строка полностью записывается в смежных блоках памяти или на диске.
* Это означает, что для каждой строки хранятся значения всех её полей в одном месте.
Преимущества:
1. Оптимальны для транзакционных нагрузок (OLTP):
o Частые операции INSERT, UPDATE, DELETE выполняются быстрее, так как строка читается или изменяется целиком.
o Эффективны для работы с большим количеством небольших транзакций, часто затрагивающих всю строку.
2. Поддержка сложных транзакций:
o Поддерживают ACID-свойства, что делает их идеальными для систем с критичными данными (банковские системы, ERP, CRM).
3. Нативная работа с нормализованными данными:
o Хорошо подходят для моделей данных с высокой степенью нормализации и сложными связями (JOIN-ами).
Недостатки:
* Слабая производительность в аналитических запросах:
o Чтение больших объемов данных для агрегаций или выборки по нескольким полям менее эффективно.
* Слабое сжатие данных:
o Разнотипные значения в строках хуже поддаются сжатию, по сравнению с однотипными колонками.
Сценарии использования:
* OLTP-системы:
o Интернет-магазины, банковские системы, CRM/ERP.
* Системы с большим количеством коротких транзакций:
o POS-системы, системы бронирования.
Примеры строковых СУБД:
* Oracle Database
* PostgreSQL
* MySQL
* Microsoft SQL Server
________________________________________
Колоночные (Column-based) СУБД
Принцип хранения данных:
* Данные хранятся по столбцам — все значения одного столбца записываются в смежных блоках памяти или на диске.
* Это позволяет читать только нужные столбцы для выполнения запросов, игнорируя остальные.
Преимущества:
1. Оптимальны для аналитических нагрузок (OLAP):
o Эффективны для операций агрегации и сканирования больших массивов данных по отдельным колонкам.
o Запросы типа SUM, AVG, COUNT по миллионам строк выполняются быстрее.
2. Эффективное сжатие данных:
o Однотипные значения в колонках хорошо сжимаются.
o При ручной сортировке данных компрессия может увеличиться в разы (до 300x), улучшая производительность и снижая требования к памяти.
3. Поддержка in-memory вычислений:
o Благодаря сильному сжатию данные могут быть загружены в оперативную память, обеспечивая крайне высокую скорость выполнения запросов.
4. Гибкость в построении моделей данных:
o Нормализация данных не обязательна — колоночные СУБД поддерживают денормализованные схемы (звезда, снежинка), упрощая аналитику.
5. Семантика аналитических выражений:
o Поддержка специализированных аналитических функций (скользящие окна, оконные функции, агрегаты).
Недостатки:
* Слабо подходят для OLTP:
o Частые INSERT/UPDATE/DELETE операции менее эффективны, так как затрагивают несколько колонок одновременно.
* Оверхед на запись:
o Необходимость обновления индексов и поддержания сжатия увеличивает время записи данных.
Сценарии использования:
* OLAP-системы:
o Хранилища данных (DWH), BI-решения, аналитика больших данных.
* Системы с интенсивными аналитическими запросами:
o Отчёты, дашборды, прогнозные модели.
Примеры колоночных СУБД:
* ClickHouse
* Amazon Redshift
* Google BigQuery
* Apache Druid
* Vertica
* Microsoft SSAS
Что такое индексы в базах данных, какие бывают типы? Как они работают в OLTP-системах, как влияют на вставку данных и как решать возникающие проблемы?
Теги: #wildberries #🐺 #open
- Индексы — специальные структуры для ускорения поиска строк в таблице.
- Типы:
o B-Tree (подходит для диапазонных запросов)
o Hash (для точного поиска по ключу)
o Есть и другие (GiST, GIN и т.п.) - Работа в OLTP: ускоряют SELECT, но замедляют INSERT/UPDATE/DELETE и занимают место, так как нужно поддерживать структуру индекса.
- Решение проблем: оптимальный набор индексов, регулярная перестройка и реорганизация, шардинг/партиционирование.
Что такое модель данных Data Vault?
теги #wildberries #Астон #ПетровичТех #okko
Что такое Data Vault
Data Vault – это методология моделирования и построения хранилищ данных (DWH), ориентированная на гибкость, масштабируемость и историзацию данных. Основная идея заключается в разделении логических сущностей (бизнес-ключи, связи, описательные признаки) по разным типам таблиц, что упрощает как процесс интеграции данных из множества источников, так и дальнейшее развитие хранилища.
Основные объекты Data Vault
1. Hub (Хаб)
o Содержит уникальные бизнес-ключи (Business Keys, BK).
o Физически представляет собой таблицу, состоящую как минимум из:
Бизнес-ключа
Технического (суррогатного) ключа (обычно называемого HubKey или HashKey)
Метаданных (LoadDate, RecordSource и т.д.)
o Хабы отвечают на вопрос «Кто / что является центральной сущностью?»
2. Link (Линк)
o Отражает связи (отношения) между хабами (бизнес-ключами).
o Физически содержит ссылки (суррогатные ключи) на все соответствующие хабы, плюс собственный суррогатный ключ и метаданные.
o Линки отвечают на вопрос «Как эти сущности связаны между собой?»
3. Satellite (Сателлит)
o Содержит контекстные (описательные) атрибуты для хаба или линка.
o Физически содержит:
Суррогатный ключ ссылки на хаб или линк
Дескриптивные поля (атрибуты)
Метаданные (LoadDate, RecordSource, иногда дату закрытия версии и т.д.)
o Сателлиты отвечают на вопрос «Какие свойства / характеристики были у данной сущности / связи в конкретный момент?»
Как устроена модель
С точки зрения логики:
* Hub – «центральная точка»: каждая уникальная бизнес-сущность (например, «клиент», «продукт», «заказ») имеет свой хаб.
* Link – «отношения между хабами»: например, «клиент сделал заказ», «товар поставлен в магазин».
* Satellite – «история и контекст»: к каждому хабу или линку может быть один или несколько сателлитов с разными наборами атрибутов (например, Сателлит для личных данных клиента, Сателлит для адресов клиента и т.д.).
Таким образом, Data Vault предполагает, что вы сначала фиксируете «что/кто?» и «как они связаны?», а всю динамику и описательные характеристики храните в отдельных таблицах (сателлитах). Это упрощает реорганизацию модели при добавлении новых источников или изменении структуры данных.
Как обрабатывать историчность в сателлитах дата волт и что происходит при изменении объектов дата волт один и два?
Теги: #wildberries #Астон #ПетровичТех #okko
Историчность в сателлитах Data Vault
Сателлиты (satellites) — это таблицы в Data Vault, которые хранят исторические значения изменяемых атрибутов, связанных с хабами (hubs) или линками (links). Они реализуют SCD Type 2, но с рядом особенностей. Историзация означает, что при изменении данных создаются новые версии, а старые не удаляются и не обновляются.
Общее устройство сателлита (DV 1.0 и 2.0)
- Hub_ID или Link_ID — внешний ключ (обычно HashKey) на хаб или линк
- Изменяемые атрибуты — бизнес-данные (например, email, phone)
- LoadDate / LoadDTS — дата загрузки (момент фиксации версии)
- RecordSource — название источника (система, откуда пришли данные)
Дополнительно (в DV 1.0, опционально в DV 2.0):
- EndDate — дата завершения действия версии
- IsCurrent — булевый флаг “текущая ли версия”
Только в DV 2.0:
- HashDiff — хэш от бизнес-атрибутов для определения изменений
Как фиксируются изменения?
DV 1.0: классическая модель
- Находится последняя строка по Hub_ID через MAX(LoadDate) или флаг IsCurrent.
- Идёт побайтовое сравнение всех атрибутов:
- Если изменений нет — запись не вставляется.
- Если атрибуты изменились — добавляется новая строка.
- Дополнительно (опционально):
- У предыдущей версии ставится EndDate = New.LoadDate - 1
- Или сбрасывается флаг IsCurrent = false
Минусы:
- Трудно масштабируется при большом количестве атрибутов.
- Сложности с null-ами и форматами (например, “123” против 123)
DV 2.0: хеш-базированный подход
- Для каждого входного набора атрибутов считается HashDiff:
Пример: MD5(CONCAT_WS(‘|’, COALESCE(attr1, ‘∅’), COALESCE(attr2, ‘∅’), …)) - HashDiff сравнивается с последним сохранённым HashDiff по ключу (Hub_ID).
- Если совпадает — изменений нет.
- Если различается — создаётся новая версия с новым LoadDate.
- EndDate не используется — “текущая” версия определяется аналитикой:
Пример: ROW_NUMBER() OVER (PARTITION BY Hub_ID ORDER BY LoadDate DESC)
Плюсы:
- Масштабируемо, даже с сотнями полей.
- Стандартизирует diff-логику, решает проблемы null-ов.
Пример изменения объекта (клиента)
Изменение email клиента:
Было:
Hub_ID: 123
Email: a@x.com
Phone: 111
LoadDate: 2025-01-01
HashDiff: A1B2
Стало:
Hub_ID: 123
Email: b@x.com
Phone: 111
LoadDate: 2025-04-10
HashDiff: C3D4
→ В сателлит добавляется новая строка, старая остаётся.
Сравнение DV 1.0 и DV 2.0 по историчности
Фича: | DV 1.0 | DV 2.0
—————————–|——————————–|———————————–
Сравнение изменений | По атрибутам | По HashDiff
Обозначение текущей версии | EndDate / IsCurrent | Аналитика (ROW_NUMBER / LEAD)
Null-safe сравнение | Нужно кастомизировать | Стандартизировано через COALESCE
Масштабируемость | Плохо на больших схемах | Отлично масштабируется
Поддержка параллелизма | Сложно | Хорошо реализуется
Расширяемость | Модификации трудоёмки | HashDiff автоматически адаптируется
Тип хранилища | Обычно EDW на RDBMS | DV 2.0 лучше ложится на Big Data, DWH, MPP
Дополнительные нюансы (редкие кейсы)
- Split Satellite: если атрибуты изменяются с разной частотой — разделяются на разные сателлиты (например, личные данные и адреса отдельно).
- Out-of-order ingestion: если данные приходят позже, чем LoadDate — требуется обработка через LEAD() и повторная запись EndDate, если используется.
- Soft deletes: логическое удаление можно фиксировать флагом в сателлите (например, is_deleted = true).
- HashDiff коллизии: крайне редки, но в критичных системах можно использовать SHA-256.
Итог
Оба подхода сохраняют историю изменений через вставку новых строк.
DV 1.0 проще, но не масштабируется и не стандартизирует diff-логику.
DV 2.0 — индустриальный стандарт: использует HashDiff, отказывается от EndDate, ориентирован на автоматизацию и большие объёмы.
чем хороша и чем плоха дата ваолт?
Теги: #wildberries #Астон #ПетровичТех #okko
Преимущества и недостатки Data Vault
Преимущества
Гибкость и масштабируемость
o Добавление нового источника в модель в большинстве случаев требует лишь добавления новых сателлитов (а иногда и линков, если появились новые связи) без перестройки всех существующих таблиц.
o Модель легко расширяется на новые бизнес-области.
Историзация «из коробки»
o Сателлиты по своей природе уже учитывают историчность: при изменении данных всегда создаётся новая версия записи в сателлите.
o Нет сложностей с поддержанием «эффективных дат» в основных таблицах, как в классической «медленно меняющейся размерности» (SCD) по Кимбаллу.
Разделение ответственности
o Хранение «факта существования сущности/связи» отдельно от «состояния и описательных полей» упрощает логику загрузки и исправления/перезагрузки данных.
Агильная разработка
o Data Vault ориентирован на поэтапное развитие (iterative & incremental). Удобен при больших, часто меняющихся требованиях.
Недостатки
Рост количества таблиц
o Data Vault-модель содержит большее число таблиц по сравнению с классическими звёздными схемами. Это может усложнять её понимание и сопровождение.
o Для аналитиков и бизнес-пользователей такая модель часто выглядит избыточной: она «труднее читать» напрямую без создания витрин.
Сложность формирования витрин
o Чтобы получить «понятные» аналитические витрины (звёздные схемы, дэшборды), нужно строить дополнительные слои (например, Data Marts в звёздной схеме).
o Сложнее SQL-запросы при необходимости напрямую стыковаться с Data Vault-структурами.
Относительно высокая пороговость для вхождения
o Требуются специальные знания методологии.
o Если команда не знакома с принципами Data Vault, кривая обучения может быть достаточно крутой.
Проблемы при работе с «волатильными» бизнес-ключами
o Если бизнес-ключи часто меняются или неустойчивы, это может создавать сложности и приводить к росту сателлитов или другим обходным решениям (например, искусственным ключам).
Что такое Anchor-модель (Anchor modeling), в чем ее особенности и как она устроена?
Теги: #wildberries #Астон
Anchor Modeling – гибкий метод моделирования, подходящий для работы с постоянно растущими объемами данных, которые меняются по структуре или содержанию. Якорная модель позволяет воспользоваться преимуществами высокой степени нормализации, при этом оставаясь интуитивно понятной.
Якорная модель включает конструкции:
* Якорь – представляет собой сущность или событие, содержит суррогатные ключи, ссылку на источник и время добавления записи
* Атрибут – используется для моделирования свойств и характеристик якорей, содержит суррогатный ключ якоря, значение атрибута, ссылку на источник записи и время добавления записи
* Связь – моделирует отношения между якорями
* Узел – используется для моделирования общих свойств (состояния)
Плюсы Anchor Modeling
* Нормализованная модель, которая эффективно обрабатывает изменения и позволяет масштабировать хранилища данных без отмены предыдущих действий
* Можно независимо разрабатывать смежные источники, так как данные почти полностью отвязаны друг от друга
* Значительная экономия места в связи с отсутствием нулевых значений (null) и дублирования
Минусы Anchor Modeling
* Создает высокую нагрузку на базу даже для основных видов запросов
* Сложно настроить проверку данных, так как модель состоит из большого количества сущностей со сложными связями
* Большое количество таблиц и join’ов, повышающих риск ошибок
* Требует постоянной поддержки и документирования, так как документация уникальна для каждого бизнеса. Специалистам необходимы дополнительные знания для понимания документации
Что такое SCD (Slowly Changing Dimensions) и какие существуют типы?
Теги #мир #ЛеруМерлен #Иннотех
- SCD — механизм ведения историчности в измерениях (Dimensions) в DWH.
- Типы:
o Type 1: данные перезаписываются (нет истории)
o Type 2: создаётся новаые строки с датой начала/окончания (история сохраняется)
o Type 3: В самой записи содержатся дополнительные поля для предыдущих значений атрибута. При получении новых данных, старые данные перезаписываются текущими значениями. Те есть колонка апдейт дейт и текущая версия и старый
Работали ли вы с Delta Lake?
теги #мир
Delta Lake — это хранилище данных с поддержкой ACID-транзакций поверх Apache Spark и Apache Parquet. Разработанное Databricks, оно предоставляет функционал Data Lakehouse, объединяя гибкость Data Lake с надежностью и управляемостью традиционных хранилищ данных (Data Warehouse).
🔑 Основные особенности Delta Lake:
1. ACID-транзакции:
Поддержка атомарных операций гарантирует целостность данных, что особенно важно для параллельных потоков ETL.
2. Схема Enforcement и Evolution:
Delta Lake следит за структурой данных. Он предотвращает загрузку несовместимых данных и поддерживает автоматическую эволюцию схемы (например, добавление новых колонок).
3. Time Travel:
Возможность “путешествовать во времени” и обращаться к старым версиям данных благодаря поддержке версионности.
4. Управление метаданными:
Delta Lake хранит метаданные внутри файлового слоя, что упрощает управление большими данными по сравнению с классическими Metastore.
5. Управление удалением данных (Data Deletion):
Поддержка команд DELETE, UPDATE, и MERGE (Upserts) прямо по данным в хранилище.
6. Управление качеством данных:
Delta Lake позволяет реализовать Data Quality через Delta Live Tables и правила валидации.
Что такое CDC (Change Data Capture)?
Теги: #ЛеруМерлен
CDC (Change Data Capture) — что это?
CDC (Change Data Capture) — это способ получения данных из базы без прямого запроса к таблицам (SELECT
). Вместо этого система читает изменения (вставки, обновления, удаления) напрямую из журнала транзакций базы данных. Это позволяет избежать дополнительной нагрузки на рабочие таблицы, где может идти активная работа под продакшен-нагрузкой.
Чем CDC лучше обычной батч-загрузки?
Обычная батч-загрузка (например, раз в час) просто берет срез данных на момент запроса, но не видит промежуточные изменения, произошедшие в течение периода. CDC же фиксирует каждое изменение, поэтому:
✅ Можно восстановить полную историю изменений записей.
✅ Нет необходимости делать тяжёлые запросы к самой таблице — всё берётся из журнала транзакций.
✅ Данные можно получать в реальном времени, без задержек, как в обычной батч-загрузке.
Проблема с лишними версиями данных
CDC записывает все версии изменений. Если данные обновлялись несколько раз за короткий промежуток времени, их нужно схлопывать — например, оставлять только последнее изменение или брать среднее значение за период.
Пример использования
Допустим, у нас есть интернет-магазин, в котором все заказы хранятся в PostgreSQL. Эта база работает в режиме OLTP и используется для обработки покупок клиентов.
Однако для аналитики и отчетности нам нужно переносить данные в ClickHouse, который гораздо быстрее обрабатывает большие объёмы информации.
Как это сделать с минимальной нагрузкой на PostgreSQL? Используем CDC через Airflow и Python:
1. Извлекаем изменения из PostgreSQL: Вместо того, чтобы делать тяжёлые SQL-запросы, мы читаем изменения из журнала транзакций базы. Это позволяет получать только изменённые записи, а не всю таблицу заново.
2. Обрабатываем изменения в Airflow: Airflow каждые 5 минут запускает задачу, которая собирает изменения. Например, если заказ обновился 3 раза за период, то мы видим все версии.
3. Записываем данные в ClickHouse: Перед записью мы схлопываем изменения, оставляя только актуальную версию заказа, чтобы избежать лишних записей.
В результате, мы имеем поток обновлений в ClickHouse почти в реальном времени без избыточной нагрузки на PostgreSQL. Такой подход удобен для построения дашбордов и аналитики.
В чём разница между логической и физической моделью данных?
Теги: #ЛигаЦифровогоИнтернета
- С помощью логической модели данных бизнес-аналитики и архитекторы данных могут визуализировать операционные или транзакционные процессы на диаграмме взаимоотношений между сущностями. Логические модели данных определяют, как работают и взаимодействуют объекты данных, понятным для заинтересованных представителей бизнеса способом. По этой причине они разрабатываются независимо от реальной базы данных, в которой позже будут развернуты данные.
- Физические модели данных предоставляют подробные сведения, на основе которых администраторы и разработчики баз данных воспроизводят бизнес-логику в физической базе данных. Эти модели содержат дополнительные атрибуты, которых не было в логической модели данных, например триггеры, хранимые процедуры и типы данных. Поскольку физические модели данных сопоставляют элементы данных с реальной базой данных, в них должны учитываться специфические ограничения платформы, в том числе соглашения об именовании и зарезервированные слова.
Знакомы ли вы с архитектурами Lambda и Kappa? Расскажите архитектуру и плюс и минусы
Теги: #Иннотех
**Основы Kappa **
Kappa-архитектура — это архитектура только потоковой обработки данных. При этом есть возможность сохранять данные из Serving layer в долговременное хранилище.
Ключевые аспекты:
Стриминговая обработка данных: Основным принципом Kappa является стриминговая обработка данных, что позволяет анализировать и обрабатывать данные по мере их поступления. Это означает, что данные обрабатываются в режиме реального времени, что особенно важно для приложений, где требуется моментальный отклик.
* Унификация обработки данных: Kappa обеспечивает унифицированный способ обработки данных, независимо от их типа или источника. Это делает его гибким решением, подходящим для разнообразных приложений, включая IoT, аналитику веб-трафика, мониторинг систем и другие.
* Преимущества масштабируемости: Kappa позволяет легко масштабировать систему при увеличении объема данных. Стриминговые платформы, такие как Apache Kafka, предоставляют средства для горизонтального масштабирования.
* Отсутствие необходимости в хранилище “сырых” данных: В Kappa не требуется хранить данные в двух различных хранилищах, как в архитектуре Lambda. Это упрощает архитектуру и снижает накладные расходы на обслуживание.
Лямбда-архитектура: Адаптация к динамике рынка
Лямбда-архитектура представляет собой service-based подход, способный быстро адаптироваться к изменениям рынка и обеспечивать релевантность предложений. Эта архитектура становится особенно актуальной, когда речь идет о таких задачах, как рассылка персонализированных предложений о скидках, где необходимо учитывать как исторические данные клиентов, так и их текущее местоположение.
Если мы объединим потоковую и пакетную обработку, то получим Lambda-архитектуру. У Lambda-архитектуры очень простой подход: мы делим общий поток данных на два потока. Первый поток — это пакетная обработка (Batch layer), а второй поток — это потоковая обработка (Real-time layer).
В Batch layer представлены Primary data layer и Core layer из классического DWH. Затем данные из Batch layer попадают в Serving layer, где находится витрина данных. В Real-time layer появляются представления Real-time View, которые попадают в Serving layer и к которым могут обращаться аналитики.
У Lambda-архитектуры есть свой минус: нам необходимо дублировать логику в оба потока обработки данных. Если нам не нужна пакетная обработка, мы можем убрать её из архитектуры.
Компоненты Лямбда-архитектуры:
1. Пакетный уровень (Batch Layer) - “холодный путь”: Здесь данные хранятся в исходном виде и обрабатываются с задержкой. Этот уровень содержит “сырые” данные, включая нормативно-справочную информацию, изменяющуюся редко. Используя методы машинного обучения, на пакетном уровне проводится анализ исторических данных для сегментации клиентов и создания прогнозных моделей.
2. Скоростной уровень (Speed Layer) - “горячий путь”: Этот уровень обеспечивает анализ данных в реальном времени с минимальной задержкой. Он использует фреймворки потоковой обработки данных, такие как Apache Spark, Storm или Flink, для обработки информации с коротким жизненным циклом. В этом слое делаются некоторые компромиссы в точности в пользу скорости.
3. Сервисный уровень (Serving Layer): Сервисный уровень предоставляет интерфейс для объединения данных из пакетного и скоростного уровней. Он позволяет пользователям получить доступ к консолидированным, актуализированным данным для аналитических целей.
Лямбда-архитектура представляет собой гибкий подход, позволяющий быстро адаптироваться к изменениям и обеспечивать релевантность предложений, что критично в условиях динамичного рыночного окружения.
Отличия от Lambda
1. Kappa vs. Lambda: В архитектуре Lambda данные обрабатываются в двух параллельных потоках: “сырые” данные хранятся в “сыром” хранилище (например, HDFS), а затем обрабатываются и сохраняются в “обработанном” хранилище (например, HBase). Это увеличивает сложность архитектуры и может вызвать задержки между появлением данных и их доступностью.
2. Упрощенная архитектура Kappa: В Kappa данные обрабатываются только в потоке реального времени, и нет необходимости в разделении хранилищ. Это упрощает архитектуру, уменьшает задержки и снижает затраты на обслуживание.
3. Сложность и надежность: Хотя Lambda может быть более надежным при обработке больших объемов данных, Kappa обеспечивает более простую масштабируемость и обновления системы.
4. Пример гибкости Kappa: Представьте себе систему мониторинга событий в реальном времени, где Kappa позволяет обрабатывать и анализировать потоки событий мгновенно, в то время как Lambda может создать задержки в обработке данных.
С учетом этих различий и тенденции к обработке данных в реальном времени, Kappa становится предпочтительным выбором для многих профессиональных разработчиков, особенно в сферах, где скорость и масштабируемость играют важную роль.
Есть ли у вас опыт с CI/CD? Как понимаете этот процесс?
Теги: #Астон
CI (Continuous Integration — непрерывная интеграция)
* Разработчики часто заливают код в общий репозиторий (Git).
* При каждом изменении код автоматически проверяется на ошибки (линтеры, статический анализ).
* Запускаются автоматические тесты (юнит-тесты, интеграционные тесты).
* Если что-то сломалось, разработчики сразу узнают и могут исправить.
🔧 Пример инструментов CI:
Jenkins, GitLab CI/CD, GitHub Actions, TeamCity, Travis CI.
________________________________________
CD (Continuous Delivery — непрерывная доставка)
* После CI код собирается в артефакт (Docker-образ, JAR, ZIP).
* Можно в любой момент развернуть его вручную на тестовой/продуктовой среде.
* Часто используется staging-среда для финальных проверок.
🔧 Пример инструментов CD:
ArgoCD, Spinnaker, Octopus Deploy, Ansible, Helm (для Kubernetes).
________________________________________
CD (Continuous Deployment — непрерывное развертывание)
* Полностью автоматизированный процесс, код сразу уходит в прод.
* Тестирование, сборка, деплой без участия человека.
* Требует мощных автоматических тестов и продвинутого мониторинга.
🔧 Популярные инструменты для деплоя:
Kubernetes, Terraform, Docker Swarm, AWS CodeDeploy, Azure DevOps.
________________________________________
Как всё это выглядит вместе?
1. Разработчик делает git push.
2. CI запускает тесты, проверяет качество кода.
3. Если всё ок — создаётся Docker-образ или другой артефакт.
4. CD доставляет код в staging или сразу в прод.
5. Если Continuous Deployment — код автоматически уходит в бой.
🔍 Главные плюсы CI/CD: ✔ Быстрая обратная связь (если код сломан, узнаём сразу).
✔ Минимум ручных ошибок.
✔ Быстрое развертывание новых фич.
✔ Лёгкий откат (rollback) в случае проблем.
Если работаешь с Big Data, то CI/CD может быть полезен не только для кода, но и для ETL-пайплайнов, например, с Airflow или dbt.
Знакомы ли вы со схемами «звезда» и «снежинка»? В чем разница между таблицами фактов и измерений?
Теги: #Астон #Yandex
Схемы «звезда» и «снежинка» — это два способа структурировать хранилище данных.
Схема типа «звезда» (пространственная модель, модель измерений и фактов, модель «сущность-связь», dimensional model, star schema) представляется двумя видами таблиц: таблицами фактов и таблицами измерений, которые описывают факты. Схема разбивает таблицу фактов на ряд денормализованных таблиц измерений. Таблица фактов содержит агрегированные данные, которые будут использоваться для составления отчетов, а таблица измерений описывает хранимые данные. Денормализованные проекты менее сложны, потому что данные сгруппированы. Таблица фактов использует только одну ссылку для присоединения к каждой таблице измерений. Более простая конструкция звездообразной схемы значительно упрощает написание сложных запросов.
Схема типа «снежинка» отличается тем, что использует нормализованные данные. Нормализация означает эффективную организацию данных так, чтобы все зависимости данных были определены, и каждая таблица содержала минимум избыточности. Таким образом, отдельные таблицы измерений разветвляются на отдельные таблицы измерений. Схема «снежинки» использует меньше дискового пространства и лучше сохраняет целостность данных. Основным недостатком является сложность запросов, необходимых для доступа к данным — каждый запрос должен пройти несколько соединений таблиц, чтобы получить соответствующие данные.
Таблица фактов — главная таблица, в которой пишутся события, например, текущие заказы или действия пользователей на сайте. Т.е. некие события, которые скорее всего имеют уникальный характер.
Таблица измерений (англ. dimension table) — таблица, в которой хранятся описания объектов. Например id, ФИО курьера, который доставил заказ. Или данные каждого клиента. Таблицы измерений удобны тем, что там можно хранить те данные, которые не часто меняются. Очевидно, что писать в таблице фактов номер телефона клиента будет избыточно. Нам достаточно один раз его записать в таблицу измерений и дать ссылку на это в таблице фактов. И при любом запросе к определенному заказу, мы всегда получим актуальный номер телефона клиента, потому что мы изменили его в таблице измерений.
Как строите/организуете процесс ETL и какие есть принципы построения? С какими инструментами и технологиями работали?
Теги: #Астон #TezaHedgeFund
- ETL: Extract (извлечение данных), Transform (преобразование), Load (загрузка в DWH или хранилище).
- Шаги:
1. Получение данных из источников (API, DB, файлы).
2. Очистка, агрегация, обогащение.
3. Загрузка в целевую систему (DWH/Data Lake). - Инструменты: Airflow, Oozie, NiFi, SSIS, Talend, dbt, Spark.
🔧 Архитектурные и инженерные
1. Идемпотентность
Повторный запуск пайплайна с теми же данными должен давать тот же результат. Используйте MERGE
вместо INSERT
, избегайте дублей.
-
Инкрементальность
Считайте и загружайте только новые или изменённые данные. Используйте поля типаlast_updated
,created_at
, контрольные суммы, CDC и пр. -
Работа с репликой источника
Используйте только реплики баз данных, чтобы не повлиять на продакшн-системы. -
Оптимизация забора данных
Пишите эффективные SQL-запросы или используйте CDC, используйте индексы иWHERE
-фильтры, загружайте только нужные столбцы. -
Модульность
Разделяйте пайплайн на независимые блоки:extract
,transform
,load
,validate
,notify
.
Строили ли вы Data Mart (витрину данных)? Что это?
Теги: #Астон
- Data Mart: узконаправленный раздел (витрина) DWH, оптимизированный под конкретную бизнес-задачу (отдел продаж, маркетинг и т.д.).
- Часто реализуется по звёздной схеме (Fact + Dimensions) для удобства аналитиков.
Какие слои могут быть в DWH (хранилище данных), и каковы цели каждого слоя?
Теги: #wildberries
- Staging (Landing): сырые данные без изменений, промежуточное хранение.
- ODS (Operational Data Store): нормализованные, очищенные данные, близкие к источникам.
- Core (Enterprise Data Warehouse Layer): интеграция и консолидация, единая модель данных.
- Data Marts: витрины под нужды конкретных бизнес-задач.
Batch vs Streaming. Какие отличия?
Теги: #Ярослав
- Batch: обработка больших объёмов данных «пакетами» по расписанию.
- Streaming: непрерывная (или почти непрерывная) обработка в реальном времени, по мере поступления данных.
Batch Processing (Пакетная обработка)
Batch Processing — это обработка данных, собранных за определённый период, одним большим пакетом. Это подходит для задач, где не требуется мгновенная реакция.
Частота: Периодическая (например, раз в час, день).
Задержка: Высокая, данные обрабатываются с временной задержкой.
Инфраструктура: Эффективна для больших объемов данных (ETL, ML-модели).
Примеры: Ежедневные отчеты, создание рекомендаций, аналитика.
Преимущества: Обработка больших данных эффективна, позволяет проводить сложную аналитику на полном наборе данных.
Недостатки: Задержка не подходит для задач, требующих реального времени.
Streaming Processing (Потоковая обработка)
Streaming — это обработка данных по мере их поступления, практически в реальном времени. Подходит для задач с минимальной задержкой и немедленным реагированием.
Частота: Постоянная, данные обрабатываются сразу.
Задержка: Минимальная.
Инфраструктура: Требует платформы с низкой задержкой (например, Apache Kafka, Flink).
Примеры: Мониторинг событий, обработка транзакций, отслеживание активности пользователей.
Преимущества: Быстрая реакция на события, позволяет анализировать и обрабатывать данные по мере поступления.
Недостатки: Сложность в реализации, возможно дублирование данных и менее точный результат, чем в Batch.
Итог: Batch — для задач с более длинным циклом обработки и сложной аналитики, а Streaming — для задач с требованием к скорости и минимальной задержке.
Что такое нормализация данных и нормальные формы (1NF, 2NF, 3NF, BCNF)? Как связаны нормализация и денормализация, и как это влияет на производительность?
Теги: #🐺 #cобес
- Нормализация – это процесс организации структуры таблиц в базе данных, чтобы уменьшить дублирование данных и повысить целостность (то есть взаимную непротиворечивость) данных.
- Нормальные формы (1NF, 2NF, 3NF и BCNF) – это последовательные «ступени» требований к таблицам, каждая из которых ужесточает правила и уменьшает избыточность:
o 1NF: каждая ячейка содержит одно значение, нет повторяющихся групп полей.
o 2NF: для таблиц, где есть составной (композитный) первичный ключ, все неключевые поля должны зависеть от всего ключа, а не от части.
o 3NF: в таблице не должно быть транзитивных зависимостей (когда поле зависит не напрямую от ключа, а от другого неключевого поля).
o BCNF: общее правило – любая детерминирующая зависимость должна идти от ключа, ещё более строгая форма, чем 3NF. - Денормализация – это сознательное «ослабление» нормализации (добавление дублирующих полей или таблиц), чтобы ускорить чтение данных. Как следствие:
o Ускоряется выборка (меньше джойнов, данные уже «под рукой»).
o Усложняется обновление (при изменении данных необходимо править их копии).
Почему это важно для производительности?
* Сильная нормализация повышает целостность и уменьшает объём хранимых данных, но иногда замедляет сложные запросы (т.к. нужно делать много JOIN-ов).
* Денормализация ускоряет аналитические запросы, но «драгоценную плату» за это – усложнение внесения изменений, рост объема данных и контроль целостности.
Какие паттерны/принципы проектирования приложений используете?
Теги: #TezaHedgeFund
- TDD (Test-Driven Development): сначала пишем тесты, отражающие нужное поведение кода, затем код, который их проходит, и в конце рефакторим.
- KISS (Keep It Simple, Stupid): не усложняйте дизайн и код, когда это не нужно.
- YAGNI (You Aren’t Gonna Need It): не добавляйте функциональность «на будущее», пока она действительно не потребуется.
- DRY (Don’t Repeat Yourself): не дублируйте логику, используйте переиспользуемые модули/методы.
- SOLID (набор принципов для ООП: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion).
Каждый из принципов, в общем, направлен на то, чтобы сделать код более поддерживаемым, понятным и гибким к изменениям.
В чём разница между «DWH по Кимбаллу» и «DWH по Инмону»?
Теги: #cобес
Кимбалл (Kimball):
* Подход «снизу вверх» (bottom-up):
o Начинаем с отдельных мартов (Data Marts) в формате звёздных (star) или снежинок (snowflake) схем.
Инмон (Inmon):
* Подход «сверху вниз» (top-down):
o Сначала строится Enterprise Data Warehouse (EDW) в более «нормализованном» виде (3NF или близко к этому).
o Сверху для бизнеса создаются витрины (Data Marts) на основании общего корпоративного хранилища.
* Структура более нормализована, изначально ориентирована на целостность и гибкость в долгосрочной перспективе.
На одном сервере две базы данных. Можно ли «подключить» таблицу из одной базы в другую и как это сделать?
Теги: #open
- Да, существуют механизмы, которые позволяют делать запросы к таблицам в другой базе данных, как будто они находятся локально:
o Linked Server в MS SQL Server или Database Link в Oracle.
o FDW (Foreign Data Wrapper) в PostgreSQL.
o Synonyms (Oracle, SQL Server) – создаётся объект «синоним», указывающий на удалённую таблицу. - Они упрощают написание запросов, так как не нужно постоянно вручную подключаться к другой БД.
Какие есть подходы к проектированию DWH? #тг
В зависимости от наличия центрального слоя существует два основополагающих подхода
DWH по Инмону - проектирование сверху вниз
DWH по Кимбаллу - проектирование снизу вверх