Как стать автором
Обновить

Комментарии 6

Практика показывает, что классический Anchor Modeling, несмотря на все его несомненные достоинства для ядра (детального слоя) хранилища данных, бывает очень неудобен в некоторых важных случаях. Например, в эту методологию не укладываются такие вещи, связанные с событиями, как таблица бухгалтерских проводок, лог (журнал), очередь сообщений. Поэтому Anchor Modeling модифицируют. Примеры:

  1. Эта статья

  2. https://habr.com/ru/users/sergeyprokhorenko/posts/

  3. https://habr.com/ru/company/yandex/blog/557140/

Привет! Мы тоже используем в работе производную от Anchor Modeling модель (Minimal Modeling). С событиями да, тоже замечали такую проблематику.

Сори, сейчас будет длинный комментарий :)

Вообще интересно, откуда берутся event'ы (давайте для простоты про мобильные event'ы только поговорим). Event’ы берутся из взаимодействия пользователя с интерфейсными элементами. Например:

  • USER clicked BUTTON

  • USER viewed PRODUCT_CARD итп

Где button, product_card - это реально анкера (в терминах Anchor Modeling), а действие с ними (USER clicked BUTTON) - это честный линк.

Но вместо «USER clicked BUTTON» логируется событие «green_button_click», которое содержит в себе след этого линка с потерей анкера + атрибуты.

В общем event - это реально линк, в котором мы потеряли информацию, и поэтому оно такое стрёмное.

Ещё про event’ы отдельно интересно, что они (почти) всегда достаточно хорошо документированы. Потому что прежде чем event’ы появляются в мобилке или на сайте, например, сначала появляется натурально ЭКСЕЛЬКА, в которой написано как именно какой event называется, когда логируется, какое-то у него есть описание, иногда даже скриншоты места в приложении откуда оно логируется.

Ну то есть у  отдельного event’а самого по себе так-то довольно много самостоятельных описательных атрибутов.

Ну и простое следствие из этих рассуждений - что рядом с этим вот стрёмным анкером event есть анкер event_catalog со списком логируемых событий и их честными атрибутами.

И следующая мысль: а не получится ли на уровне вот этого event_catalog’а восстановить у event’а потерянный анкер и семантику линка (все равно event catalog это полностью ручная штука), и не появится ли от этого в event’ах интересного слоя дополнительного смысла.

Ну то есть, например, событие green_button_click не получится ли восстановить до USER clicked Button (с двумя анкерами, ликнком между ними и атрибутом green).

Мы как-то провели эксперимент и раскрыли User made Event в недостающие анкера и получилась вот такая штука:

То есть, в трекинг-плане например были события:

  • onboarding_shown

  • onboarding_second_step_shown

  • onboarding_third_step_shown

  • onboarding_fourth_step_shown

  • onboarding_fifth_step_shown

Каждое из этих событий – это атрибут линка "USER views ONBOARDING_SCREEN".

В общем мы сейчас размышляем о том, как бы на уровне инструмента ведения трекинг-планов вернуть потерянные анкера для этих event'ов. Потому что если получается так делать, то возникает еще интересная связка события с объектом реального мира (например, с конкретным товаром, item'ом итп)

А откуда получается потеря сущностей (Anchor-ов)?

Потери вообще недопустимы.
USER clicked BUTTON - такое событие заполняет три сущности: UserEvent, User, Button.

Это обязательно и в классическом моделирование, и в концепции Streams.

Далее в классическом подходе нужно заполнить две связи (Link, Tie, Relation) событие->user, событие->button
А в концепции Streams ключевые связи интегрируются в денормализованную таблицу S_UserEvent, содержащую User_id и Button_id.

По поводу значительно количества событий - представьте, что аналитику нужно проанализировать все события, произошедшие с пользователем на сайте. Сколько таблиц ему нужно проанализировать? 10, 20.... или только одну: S_UserEvent?

Получается, что при добавлении новых атрибутов события, нужно модифицировать существующие таблицы и ETL? Т.е. если у события UserEvent со временем появится новый факт (тип нажатия click or tap), то придется расширять заполненную таблицу S_UserEvent + модифицировать соответствующие загрузчики.

Нет, просто поверх стрима появится новый атрибут. A_UserEvent_ClickOrTap, грубо говоря.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий