1.7 KiB
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