Или как собрать аналитическое приложение за $2 в месяц.
Изучая стек dlt + DuckDB + dbt + Observable (Streamlit), я наткнулся на интересную архитектуру. Оказывается, можно создать функциональное, но в то же время легковесное аналитическое приложение, которое работает почти без серверов.
🟡 Конкретная схема:
GitHub Actions (CI) → dlt загружает данные →
dbt трансформирует → DuckDB файл → S3/Object storage →
Observable/Streamlit читает DuckDB-WASM в браузере
🔵 Реальные цифры:
— Object storage / S3: $0.015 за GB хранения
— GitHub Actions: 2000 минут бесплатно
— Observable: бесплатно
— Итого: ~$2/месяц для приложения с 10GB данных
🟢 Что получается:
✅ Дашборд грузится за 200ms (всё в браузере)
✅ Работает офлайн после первой загрузки
✅ Выдерживает любые нагрузки (статика!)
✅ Автообновление через GitHub Actions
🔴 Ограничения (честно):
❌ Размер данных ограничен памятью браузера (~2-4GB), но вряд ли нам вообще понадобится больше (ведь хранить мы будем агрегированные витрины)
❌ Сложные real-time обновления проблематичны
❌ Нет серверной логики для сложной авторизации
❌ Ограниченная интерактивность и self-service (для этого нужны BI типа Superset)
🟤 Где это работает лучше всего:
— B2B SaaS аналитика для клиентов / Сквозная аналитика / Sales, Markeplace metrics, etc.
— Встраиваемая (Embedded) в web / mobile apps аналитика
— Демонстрационные стенды (showcasing)
— Публичная аналитика (типа COVID дашбордов)
— Дашборды для внутреннего контура компании (до 1000 сотрудников)
— Персональные и pet-проекты с историческими данными
✅ Такой подход особенно хорош для стартапов и небольших команд - вместо настройки сервисов, Kubernetes кластеров, организации потоков данных можно получать результат за один коммит в моно-репо в GitHub.
⬇ Конкретный пример использования:
— Собираем данные Я.Метрика, Я.Директ, AmoCRM (Bitrix) с помощью dlt в DuckDB
— Варим эти данные, чистим, нормализуем, объединяем, считаем витрины (dbt + DuckDB)
— Создаем интерактивное приложение на основе Observable с DuckDB-WASM под капотом (т.е. бразуер = сервер, который процессит витрину в DuckDB)
— В приложении видим динамику ключевых метрик Marketing, Sales разрезах: даты, каналы, георгафия, воронки, sales-менеджеры
— Приложение = статический вебсайт, который размещается на любом хостинге (Object storage / S3) и не требует сервера
💬 У кого какие мнения на этот счет?
Где еще можно (нужно) применить такой подход?
Кто пробовал похожие решения?
🌐 @data_apps | Навигация по каналу