Введение в паттерны проектирования в инженерии данных (DEDP)
Поскольку мы уже познакомились с историей и нынешним состоянием инженерии данных, а также с ее основными проблемами, пришло время поговорить о паттернах проектирования, существующих в этой области.
В этой главе мы рассмотрим основные понятия, которым посвящена эта книга, начиная с определения конвергентной эволюции. Постараемся разобраться в том, что она собой представляет и почему так важна для инженерии данных. Определим, что такое просто паттерн и в чем его отличие от паттерна проектирования. Расскажем о паттернах инженерии данных и паттернах проектирования, существующих в инженерии данных.
Что такое конвергентная эволюция?
Итак, что же такое конвергентная эволюция? Если коротко, то это ситуация, когда результаты двух разных эволюций совпадают. Самый известный пример - полет. И птица, и пчела умеют летать, но по-разному. У птицы в процессе эволюции появились сложные перья, а у пчелы - экзоскелет. Известно, что первая пернатая птица появилась на Земле около 150 миллионов лет назад, а первая пчела - чуть позже, около 120 миллионов лет назад.
Почему это так важно? Потому что именно это мы и будем изучать в этой книге - конвергентные эволюции в рамках инженерии данных, в результате которых в разное время были достигнуты схожие результаты.
Что такое паттерн?
Как гласит конвергентная эволюция, паттерн возникает на основе двух похожих процессов эволюции. Теперь давайте поясним разницу между просто паттерном, паттерном проектирования и паттерном проектирования инженерии данных, которым посвящена данная книга.
Как правило, под «паттерном» понимается повторяющийся, идентифицируемый дизайн, проект, процедура или практика. Это может быть что угодно - от природных паттернов (например, полоски на зебре) до паттернов в программном коде и поведенческих паттернов в социологии. Паттерны - это повторяющиеся структуры, формы, события или другие наблюдаемые явления, которые могут обладать определенной предсказуемостью и повторяемостью.
Что такое паттерн проектирования?
В отличие от этого, «паттерн проектирования», особенно в контексте (программной) инженерии, является специфическим термином, который относится к лучшим практикам проектирования. Паттерны проектирования - это проверенные на практике решения общих проблем, с которыми сталкиваются разработчики в процессе разработки. Их можно использовать несколько раз, основной отличительной чертой является высокая степень гибкости, позволяющая вписать их в абсолютно любой проект.
Общая идея паттерна проектирования взята из легендарной книги «Приёмы объектно-ориентированного проектирования. Па́ттерны проектирования» (Design Patterns: Elements of Reusable Object-Oriented Software). В книге описываются 23 паттерна проектирования, которые подразделяются на творческие, структурные и поведенческие.
Паттерны проектирования следует рассматривать как практику более высокого уровня, применимую к разным задачам и случаям использования.
Что такое паттерн проектирования в инженерии данных ?
Поясним, что паттерн проектирования в инженерии данных отличается от паттерна проектирования в целом только конкретной областью, в которой он применяется. Если я говорю о паттернах проектирования, я имею в виду паттерны проектирования данных.
Зачем в инженерии данных нужны паттерны проектирования?
Решать задачи, возникающие на каждом этапе жизненного цикла инженерии данных, с каждым днем становится все сложнее и сложнее. У каждого специалиста есть свои способы и методы. Паттерны проектирования направлены на стандартизацию всех этих вариантов решения широко распространенных проблем.
Безусловно, у паттернов проектирования всегда будут альтернативы, но в данной книге я хочу поговорить именно о базовом наборе инструментов, необходимом для решения основных задач инженерии данных, которым сможет воспользоваться любой начинающий специалист.
Понятие конвергентной эволюции
В этой главе мы постараемся разобраться в том, что такое конвергентная эволюция и как это понятие может быть применимо к области инженерии данных.
Что такое конвергентная эволюция?
Итак, мы уже познакомились с одним из наиболее ярких примеров конвергентной эволюции в природе – полетом; мы поняли, что птица и пчела пришли к одному и тому же результату разными способами, «не сговариваясь друг с другом». В это и состоит суть конвергентной эволюции – один и тот же результат, достигнутый разными методами в разное время.
Давайте рассмотрим еще несколько примеров, взятых из природы.
Эхолокация у летучих мышей и китов, развивавшихся в совершенно разных средах. В процессе своей эволюции и те, и другие получили непревзойденную способность ориентироваться в пространстве и охотиться на добычу с помощью эхолокации. Летучая мышь излучает звуковые волны. Когда они ударяются о предмет, возникает эхо, которое затем отражается обратно в уши летучей мыши. Киты же издают щелчки, которые отражаются от предметов и впоследствии воспринимаются самими млекопитающими.
Во-вторых, это глаза позвоночных и головоногих. У позвоночных, включая человека, глаза камерные, с хрусталиком, сетчаткой и зрительным нервом. У головоногих моллюсков, таких как осьминоги и кальмары, структура глаз примерно такая же, однако сетчатка расположена перед хрусталиком, а не за ним. Обе группы научились обнаруживать и обрабатывать визуальную информацию несмотря на то, что эволюционировали в совершенно разных средах.
Разве это не поразительно? Все эти факты настолько поразили меня, что я начал искать примеры конвергентные эволюции повсюду, особенно в своей любимой области разработки данных.
Полная противоположность - дивергентная эволюция
Полной противоположностью конвергентной эволюции является дивергентная эволюция, представляющая собой эволюционную модель, в которой в процессе развития родственные виды приходят к различным результатам.
Конвергентная эволюция в области инженерии данных
Я работаю с данными уже более 20 лет, за все время свой профессиональной деятельности каких новых терминов я только не встречал. Каждый раз при появлении незнакомого слова я задавался вопросом: “это действительно что-то принципиально новое или мы опять изобретаем велосипед?”.
Возможно, Вы, так же как и я, не раз замечали, что многие термины, появляющиеся в процессе развития инженерии данных, чем-то похожи на те, что мы использовали некоторое время назад, и тоже спрашивали себя: «а не слышал ли я об этом раньше?». По большому счету это и есть отголоски конвергентной эволюции, только уже не в природе, а в одной из самых сложных областей работы с данными.
В какой-то момент мне стало настолько интересно разобраться во всех этих новомодных терминах, что я решил проанализировать их и пришел к выводу, что, как правило, за незнакомым на первый взгляд словом прячется вполне себе известное понятие. Например, усовершенствованная существующая технология.
Примеры конвергентной эволюции
Приведу несколько примеров.
Все началось с термина, который я использовал в самом начале своей карьеры бизнес-аналитика в 2008 году, а именно с материализованных представлений (MV). Материализованные представления очень интересны, поскольку хранят результаты запроса в виде физической таблицы в БД, что позволяет пользователю выполнять новые запросы за считанные секунды. Слышали ли Вы об инструменте под названием dbt? Для того чтобы иметь возможность использовать какие-либо данные, нужно запустить dbt, который материализует все Ваши таблицы из SQL в физическую таблицу, к которой затем можно будет делать запросы.
Еще один вариант - One Big Table (OBT). OBT денормализуют несколько таблиц в одну таблицу с большим количеством столбцов. То же самое можно сделать и с материализованными представлениями в слое витрин данных. Существует еще одна техника, Snapshotting, которую мы часто используем для создания моментальных снимков месяцев или дней для быстрого выполнения запросов. Все эти техники схожи, поскольку направлены на достижение одной и той же цели - получение быстрого кэша для быстрого извлечения данных.
Вот Вам и первый паттерн - кэширование (Caching).
Давайте посмотрим на еще один новый термин - семантический слой, который опять же пытается обеспечить быстрый отклик на запросы Ваших BI-инструментов, но в большей степени ориентированный на метрики и KPI. Например, у инструмента под названием Cube есть свой собственный механизм кэширования.
Итак, Вы видите, что все новое – это видоизмененное старое. Впервые материализованные представления были реализованы в Oracle Database в версии 8i (1998 год). Позже они были добавлены в Postgres и SQLServer. В апреле 2020 года сама Google анонсировала возможности материализованных представлений в BigQuery…
Это лишь пример одной конвергентной эволюции. Надеюсь, теперь Вы понимаете, какие именно связи мы пытаемся изучить в этой книге.
Не ведитесь на хайповые словечки
Конвергентная эволюция позволяет понять, что на самом деле скрывается под красивой оберткой. Сейчас, когда все пытаются создать новые термины, чтобы создать некий ажиотаж и привлечь внимание, понимание принципов конвергентной эволюции важно как никогда – с их помощью можно свободно ориентироваться в информационном пространстве, фокусироваться на закономерностях развития новых понятий и понимать, откуда «растут их ноги».
Важно понимать то, что если термин новый, это не значит, что сама технология тоже новая. Возможно, принципиально новая методика появится только через два года, если не через пять, а может и вообще никогда не появится.
One Big Table (OBT), в основном большая денормализованная таблица, - то же самое, что и моделирование размерности ядра и витрина данных Кимбалла, впервые описанные в феврале 1996 года, только с использованием техники материализации.
Обратный ETL можно назвать управлением основными данными (Master Data Management, MDM), когда пользователи добавляют бизнес-данные обратно в DWH. Семантические слои существуют с момента появления инструментов бизнес-аналитики (называемых BO Universe); можно сказать, что это еще одно название OLAP-кубов. Их очень хвалят, хотя они существуют с самого начала развития BI в SSAS (MS), OBIEE (Oracle) и SAP BI/BW (SAP).
Data Mesh - еще один раскрученный термин и, в некотором смысле, еще одно название микросервисов.
А контракты на данные, разве раньше мы не утверждали схемы и типы данных? Lakehouse - это хранилище данных, основанное на открытых стандарта… и т.д. и т.п.
Не зацикливайтесь на самих словах, постарайтесь сосредоточиться на их сути, на том, что они несут, какую технологию подразумевают.
Эффект Линди
Действительно хорошие вещи времени не боятся. Эффект Линди - хороший пример. Он гласит, что чем старше что-то, тем дольше оно будет существовать в будущем. Материализованные представления, ODS (оперативное хранилище данных) и классическая архитектура хранилища данных - это методики, которые я изучал в самом начале своей карьеры, они актуальны и сегодня.
Почаще обращайте внимание на «старые» техники, о которых говорят до сих пор. Они проверены в бою и, скорее всего, будут существовать еще долгое время, поэтому вполне целесообразно вернуться к ним, узнать их поближе и постараться примерить на сегодняшние реалии.
Сила - в долголетии
Долговечность подразумевает устойчивость к изменениям, устареванию или конкуренции, а также большие шансы на продолжение существования в будущем.
Именно такие паттерны, которые выдержали испытание временем, выжили в «старых» условиях и могут пригодиться в будущем, и интересуют нас, только в контексте инженерии данных.
Паттерны и конвергентная эволюция
Я надеюсь, что Вы тоже увлеклись темой конвергентной эволюции в контексте инженерии данных и готовы как следует покопаться в них, чтобы выявить паттерны и лучшие практики.
Подводя итог этой главы, можно сказать, что термины, появившиеся в ходе конвергентной эволюции, которые продержались двадцать лет, на самом деле и являются паттернами проектирования инженерии данных.




