Архитектура Аналитики и BI — Архыз.CLUB¶
Этот документ описывает архитектуру аналитической системы, построенной на базе PostgreSQL (Supabase), Apache Superset и Grafana.
1. Общая схема¶
graph TD
User[Пользователь] -->|Действия| App[Web/Mobile App]
App -->|API| Backend[FastAPI Backend]
Backend -->|CRUD| DB[(PostgreSQL / Supabase)]
Backend -->|Events| SystemEvents[system_events]
subgraph "Data Layer"
DB
SystemEvents
LiveSessions[live_sessions]
end
subgraph "Analytics Layer"
MatViews[Materialized Views]
AnalyticsViews[Analytical Views]
end
DB --> MatViews
SystemEvents --> MatViews
MatViews --> AnalyticsViews
subgraph "Visualization"
Superset[Apache Superset]
Grafana[Grafana]
end
AnalyticsViews --> Superset
LiveSessions --> Grafana
SystemEvents --> Grafana
DB --> Grafana
2. Основные сущности данных¶
2.1. Операционные таблицы (Source of Truth)¶
users,roles— Пользователи и права.hotels,room_types— Объекты размещения.room_bookings— Бронирования (основной источник дохода).bookings(tours),skipass_bookings,transfers_bookings— Доп. услуги.
2.2. Аналитические таблицы (Events)¶
system_events— Журнал всех событий (login, booking_created, payment_success, error).event_type: тип события.payload: JSONB с деталями.source: источник (web, mobile, backend).
live_sessions— Активные сессии пользователей (для realtime).
3. Аналитические представления (SQL Views)¶
Для Superset создаются специальные SQL-представления, скрывающие сложность джойнов и JSON-парсинга.
3.1. analytics_daily_overview (Materialized View)¶
Ежедневный срез ключевых метрик. Обновляется раз в час/сутки.
* date: Дата.
* dau: Daily Active Users.
* new_users: Количество регистраций.
* total_revenue: Общая выручка.
* total_bookings: Количество бронирований.
* conversion_rate: Конверсия (Bookings / Sessions).
3.2. analytics_hotel_performance¶
Детальная статистика по отелям.
* hotel_id, hotel_name.
* occupancy_rate: Загрузка (%).
* adr: Average Daily Rate (Средняя цена за ночь).
* revpar: Revenue Per Available Room.
* total_revenue: Выручка отеля.
3.3. analytics_booking_funnel¶
Воронка продаж на основе событий system_events.
* Step 1: search
* Step 2: view_hotel
* Step 3: select_room
* Step 4: initiate_booking
* Step 5: payment_success
4. KPI и Метрики¶
| Метрика | Описание | Формула | Частота |
|---|---|---|---|
| DAU | Активные пользователи за сутки | COUNT(DISTINCT user_id) из system_events (login/active) |
Realtime/Daily |
| Revenue | Выручка (подтвержденная) | SUM(total_price) из room_bookings где status='confirmed' |
Realtime |
| Occupancy | Загрузка отелей | (Booked Nights / Available Nights) * 100% |
Daily |
| ADR | Средняя цена номера | Revenue / Booked Nights |
Daily |
| RevPAR | Доход на доступный номер | Revenue / Total Available Nights |
Daily |
5. Интеграция с ClickHouse (Advanced)¶
Для обработки больших объемов исторических данных (логов событий) используется ClickHouse.
* Синхронизация: Через ETL-процесс (Airbyte или custom script) данные из system_events переливаются в ClickHouse.
* Прогнозирование: ClickHouse используется для обучения ML-моделей прогнозирования спроса (seasonality forecasting).
6. Безопасность (RLS)¶
- Superset Service Role: Superset подключается под специальной ролью
analytics_reader, имеющей доступ только к схемеanalytics(илиpublicс ограничениями). - RLS: Аналитические вью используют
SECURITY DEFINERчтобы обойти RLS таблиц пользователей, но выдают только агрегированные данные.