319просмотров
25 января 2024 г.
question📷 ФотоScore: 351
Как вам идея хранить все данные для аналитики в одной таблице? Activity Schema - концепция организации хранилища данных именно таким образом. Как видно на изображении, изначально у нас как обычно много таблиц-источников, которые мы складываем в один "стрим" (по сути это обычная таблица), а его используем для чего душе угодно: в качестве источника для BI-инструмента, для разовых выгрузок и прочего. Основа любого стрима это метка времени, сущность (например, пользователь) и активити, т.е. название события, относящегося к нашей сущности, в нашем примере к пользователю. Вероятно, сейчас вы подумали: "невозможно поместить абсолютно все данные в одну таблицу" и это действительно может быть так, это уже зависит от конкретного набора данных. На самом деле у вас может быть и несколько стримов, где каждый отвечает за отдельную сущность (но предпочтительный подход всё-таки иметь один стрим). К примеру, у вас может быть два стрима: - Пользователь. Всё, что мы можем отнести к действиям пользователям: зашел в приложение, сделал заказ, открыл письмо из рассылки и т.д. - Продукт/товар. Всё, что касается каких-то внутренних процессов и не относится к пользователю напрямую. К примеру, поступление товара на склад. В ManyChat используется около 5 стримов, например. И это сервис на 50млн+ пользователей и десятки терабайт данных, что говорит о применимости подхода и на больших данных. Оф. документация достаточно подробно описывает детали реализации активити схемы и множество её плюсов, но вот два основных, на мой взгляд: - Простота. За счет такой структуры данные в ней легче найти, проще понять, проще писать запросы к этим данным.
- Унификация и автогенерация запросов. Это большая тема и пожалуй я оставлю её на другой пост. В двух словах: такая модель данных позволяет часто переиспользовать запросы, лишь немного меняя их, и даже генерировать запросы, описывая отношения между событиями. Хотели бы такую модель данных видеть в своей компании? 🤨