Activity Schema. Можно ли обойтись одной таблицей вместо хранилища данных?

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Что такое Activity Schema?

Activity Schema — это стандарт моделирования данных, разработанный для современных хранилищ данных. Идея принадлежит Ахмеду Эльсамадиси и заключается она в том, чтобы сделать моделирование и анализ данных значительно проще, быстрее и надежнее, чем существующие методологии (например, чем схема «звезда»).

Он противопоставляется сложным уровням зависимостей, соединениям по внешнему ключу и чрезвычайно сложным SQL-запросам в схемах «звезда» или «снежинка».

Основной подход заключается в отделении моделирования от выполнения запросов. Модели должны быть полностью независимыми: постановка новых вопросов к данным не должна требовать создания новых моделей. Вместо этого запросы могут комбинировать любое количество существующих моделей для создания всего, что им нужно.

Основая идея

Основная идея состоит в том, чтобы свести несколько необработанных исходных таблиц в единую таблицу временных рядов, которая называется Activity Stream. Все последующие поиски инсайтов в данных: построение графиков, таблиц, проверка гипотез и т. д., которые используются для бизнес-аналитики, строятся непосредственно из этой единственной таблицы без каких-либо других зависимостей.

Бизнес-концепции представлены как сущности, выполняющие действия («клиент совершил перевод денежных средств», «клиент пополнил депозит» и т.д.), а не как факты или сущности (переводы, депозиты). Сущности являются «действующим лицом» в данных и каждое действие (событие) в Activity Schema выполняется определенной сущностью с уникальным идентификатором.

События (действия) — это конкретные действия, которые совершает сущность. Например, если объект является клиентом, действие может быть «открытие нового депозита» или «снятие начисленных процентов с депозита». Каждая строка в таблице, смоделированной Activity Schema, представляет собой отдельный экземпляр действия, выполняемого определенной сущностью.

События предназначены для моделирования реальных бизнес-процессов. В совокупности последовательность действий, например, для клиента будет представлять все соответствующие взаимодействия этого клиента с компанией.

С каждым событием  связаны метаданные, помимо клиента, события и временной метки. Например, событие «Пополнение депозита» будет хранить сумму, на которую был пополнен депозит. Таблицы activity stream имеют конечное число столбцов метаданных, которые могут быть связаны с каждым событием.

Все запросы выполняются в одной таблице activity stream, чтобы собрать таблицы для анализа, бизнес-аналитики и отчетов. Вместо традиционных объединений по внешнему ключу запросы объединяют действия, используя отношения во времени (например, количество клиентов, которые после закрытия депозита открыли новый, и среднее количество дней между двумя этими событиями).

Структура

Основное преимущество Activity Schema заключается в том, что все данные представлены в согласованном формате. Это означает, что для него требуются таблицы с определенными именами, типами и количеством столбцов.

Таблицы

В Activity Schema есть два типа таблиц:

  1. поток активности (Activity Stream)

  2. таблица сущностей (Entity)

В таблице activity stream хранятся все действия, их временные метки, идентификатор объекта и некоторые метаданные.

Таблица activity stream является основной и единственной необходимой таблицей в Activity Schema . Она содержит большую часть смоделированных данных в хранилище.

Column

Description

Type

activity_id

Уникальный идентификатор записи активности

string

ts

Отметка времени в формате UTC, когда произошло действие

timestamp

customer

Глобальный уникальный идентификатор клиента

string

activity

Название действия (например, «выполненный заказ»)

string

anonymous_customer_id

Уникальный идентификатор анонимного клиента (например, 'segment_abfb8a')

string

feature_1

Характеристика действия 1

string

feature_2

Характеристика действия 2

string

feature_3

Характеристика действия 3

string

revenue_impact

Доход или затраты, связанные с деятельностью

float

link

URL-адрес, связанный с действием

string

activity_occurrence

Сколько раз это действие произошло для этого клиента. Используется для оптимизации запросов.

integer

activity_repeated_at

Отметка времени следующего экземпляра этого действия для этого клиента. Используется для оптимизации запросов.

timestamp

_activity_source

Сценарий преобразования, который создал это действие

string

В таблице сущностей хранятся метаданные для каждой сущности. Например, таблица клиентов может хранить паспортные данные, номер договора обслуживания, сумму депозита и т. д.

Таблица activity stream предназначена для быстрых запросов к общим хранилищам данных, таким как Redshift, BigQuery и Snowflake. Почти все современные хранилища данных ориентированы на столбцы — таблицы с меньшим количеством столбцов и большим количеством строк работают быстрее. Кроме того, таблицу activity stream обычно нужно соединять только с самой собой при запросе, что еще больше повышает производительность по сравнению с другими подходами к моделированию.

При этом важно выбрать правильную сортировку/распределение/раздел/кластер/индекс (в зависимости от технологии хранилища), чтобы обеспечить высокую производительность.

Дополнительные столбцы

Activity Schema содержит два специальных столбца, которые упрощают запросы и повышают их производительность.

Столбец activity_occurrence — количество совершенных объектом аналогичных действий на момент времени ts. activity_repeated_at — это дата и время, когда аналогичное действие совершалось в последний раз. Оба должны быть NULL, если аналогичное действие еще не произошло.

И activity_occurrence, и activity_repeated_at вычисляются из самоой таблицы activity stream, поэтому их заполнение зависит от реализации Activity Schema. Они полагаются на предыдущие экземпляры данного действия, поэтому должны вычисляться после записи действия.

Столбец _activity_source помогает реализовать таблицу activity stream — это метаданные о том, как создается сама таблица activity stream, и они не используются в запросах. Он записывает идентификатор в сценарий преобразования, который создал это событие и используется реализациями Activity Schema для поддержки инкрементальных обновлений таблицы activity stream (идентифицировать все строки с событиями, созданные данным преобразованием, найти максимальную отметку времени и вставить новые строки с более новой отметкой времени).

Таблица сущностей

Таблица сущностей хранит неограниченное количество столбцов метаданных. Концептуально таблица содержит столбец первичного ключа для идентификации уникального клиента и неограниченное количество необязательных столбцов, содержащих метаданные. Это похоже на таблицы измерений в схеме «звезда». При запросе эту таблицу можно соединить с таблицей activity stream, когда это необходимо, с использованием идентификатора объекта.

Столбец первичного ключа — единственный обязательный столбец.

В заключение

В заключение хотелось бы отметить несколько преимуществ и недостатков Activity Schema.

К преимуществам можно отнести:

  • меньше моделей — одна (и только одна) бизнес-концепция для каждого вида деятельности означает меньше моделей для управления, понимания и поддержки

  • легко построить — отсутствие соединений между моделями означает, что нет необходимости связывать разрозненные исходные системы вместе

  • легко вносить изменения в исходные данные — нужно только обновить одно действие

  • простое происхождение данных — единый слой данных значительно упрощает отслеживание происхождения данных и отладку

  • более быстрые обновления — моделирование временных рядов означает добавочные обновления (а не полные перестроения) по умолчанию

  • нет словарей — значительно упрощает документирование Activity Schema

  • выполнять запросы во многих исходных системах — соединения на основе времени означают, что любое действие может быть запрошено и объединено с другим без определения внешних ключей

  • настоящие нерегламентированные запросы — поскольку все действия связаны во времени, замена одного действия на другое не требует структурных изменений в запросах

  • высокая производительность — запросы выполняются значительно быстрее к таблице activity stream, которая имеет меньше столбцов, требует меньше объединений и может быть легко секционирована/индексирована по времени

Если говорить о недостатках, то можно отметить следущее:

  • время разработки может сократиться, если текущая модель требует большого количества объединений, чтобы получить хоть какое-то представление о данных. Однако если исходные данные изначально слишком сложны, это не поможет решить серьезные проблемы с исходными данными

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

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

  • в долгосрочной перспективе технические требования к оборудованию/программному обеспечению для поддержки ненормализованной модели будут увеличиваться быстрее, чем скорость, с которой они будут увеличиваться при использовании звездообразной схемы

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

Источник: https://habr.com/ru/post/699254/


Интересные статьи

Интересные статьи

У нас был сложный сайт с личным кабинетом клиентов, устаревшая, переписанная 1С-ка, десяток маркетинговых сервисов, и телефония на Asterisk.Единственное, что вызывало у меня опасение — это учётная сис...
В первую очередь React это JS библиотека, а не полноценный фреймворк, так что для создания полноценного веб приложения тебе нужно знать много дополнительных вещей, чтобы использовать их вместе с React...
Источник: СNEWS Сразу стоит сказать, что ОС Phantom, которую готовит к выходу российский разработчик Дмитрий Завалишин, существует лишь в виде прототипа. Но прототипа уже вполне работоспособного...
Пять лет назад стартовал проект Lamptest.ru. За это время я протестировал более 3500 моделей ламп и светильников. Недавно на Lamptest были добавлены новые параметры ламп и ещё кое-что...
В прошлой статье мы говорили о трёх картриджах с интересной особенностью: у них был разъём, в который вставлялись другие картриджи. Некоторые другие картриджи развили эту идею, позволив подключ...