Initial commit
This commit is contained in:
67
docs/adr/005-base-de-donnees.md
Normal file
67
docs/adr/005-base-de-donnees.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# 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
|
||||
|
||||
```sql
|
||||
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
|
||||
|
||||
- [Diagramme de séquence cache géospatial](../architecture/sequences/cache-geospatial.md)
|
||||
- [Schéma base de données](../architecture/database/schema.md)
|
||||
Reference in New Issue
Block a user