À propos du projet

Spectrum est un entrepôt d'analyse produit auto-hébergé conçu comme une alternative open-source aux plateformes commerciales telles qu'Amplitude et Mixpanel. Le projet démontre comment une architecture basée exclusivement sur PostgreSQL peut gérer l'ingestion d'événements, la sessionisation, l'analyse d'entonnoir, la rétention de cohorte, l'attribution des revenus et les tests A/B sans nécessiter de courtiers de messages externes ou de frameworks big-data. Le système ingère des événements clickstream bruts via un point de terminaison FastAPI, les traite via un pipeline ELT idempotent utilisant des revendications de lots `FOR UPDATE SKIP LOCKED`, et calcule des constructions analytiques purement en SQL — incluant des limites de session de 30 minutes via des fonctions de fenêtrage et des entonnoirs de conversion hebdomadaires à travers des dimensions au niveau du compte. Des vues matérialisées fournissent des métriques pré-agrégées pour les tableaux de bord Grafana, tandis que la sécurité au niveau des lignes (row-level security) isole les données des tenants. Les modèles architecturaux clés incluent une conception à trois schémas séparant les couches de staging, d'entrepôt et d'analyse ; des tables de faits partitionnées par plages mensuelles avec élagage de partitions (partition pruning) ; des index BRIN sur les horodatages chronologiques des événements ; une file d'attente de lettres mortes (dead-letter queue) pour les charges utiles malformées ; et une exécution de pipeline sécurisée pour la concurrence qui tolère des instances de runner simultanées sans traitement en double. Le projet est livré avec des migrations Alembic, l'exposition de métriques Prometheus, des tests d'intégration qui affirment les taux d'entonnoir exacts et l'isolation de la rétention, ainsi qu'un script de benchmark démontrant les gains de vitesse grâce à l'élagage des partitions. Le déploiement repose sur des conteneurs Podman orchestrant PostgreSQL, le serveur API et Grafana, avec une commande unique `make demo` provisionnant l'ensemble, générant une activité utilisateur simulée, exécutant le pipeline de transformation et lançant la couche de visualisation.