Files
roadwave/docs/adr/005-base-de-donnees.md
2026-01-31 11:45:11 +01:00

1.7 KiB

ADR-005 : Base de Données

Statut : Accepté Date : 2025-01-17

Contexte

Requêtes géolocalisées intensives (contenus à proximité), données utilisateurs, historiques d'écoute.

Décision

  • PostgreSQL + PostGIS : Données persistantes et requêtes géospatiales
  • Redis Cluster : Cache géolocalisation et sessions

Architecture

Requête → Redis Cache → [HIT] → Réponse
              ↓
           [MISS]
              ↓
          PostGIS → Cache → Réponse

Alternatives considérées

Usage Option choisie Alternatives
Données utilisateurs PostgreSQL MySQL, MongoDB
Géolocalisation PostGIS MongoDB Geo, Elasticsearch
Cache Redis Memcached, KeyDB
Analytics (futur) ClickHouse TimescaleDB

Justification

PostgreSQL + PostGIS

  • Requêtes géospatiales complexes et précises
  • Index GIST pour performance
  • ACID, fiabilité éprouvée
  • Écosystème mature

Redis

  • Cache géo natif (GEORADIUS) : 100K+ requêtes/sec
  • Sessions utilisateurs
  • Pub/sub pour temps réel

Exemple de requête

SELECT id, name,
       ST_Distance(location::geography, ST_MakePoint($lon, $lat)::geography) as distance
FROM contents
WHERE ST_DWithin(location::geography, ST_MakePoint($lon, $lat)::geography, 50000)
ORDER BY distance
LIMIT 20;

Conséquences

  • TTL cache Redis : 5 minutes (le contenu géolocalisé ne bouge pas)
  • Index GIST sur colonnes géométriques
  • Réplication read replicas pour scaling lecture

Documentation technique détaillée