Definition
NoSQL (Not Only SQL) designe une famille de systemes de gestion de bases de donnees qui s'eloignent du modele relationnel traditionnel. Elles offrent des modeles de donnees flexibles, une scalabilite horizontale et des performances optimisees pour des cas d'usage specifiques.
Le terme "NoSQL" ne signifie pas "pas de SQL" mais "pas seulement SQL". Beaucoup de bases NoSQL supportent des langages de requete similaires a SQL.
Les 4 types de bases NoSQL
1. Bases orientees documents
Stockent des donnees sous forme de documents JSON/BSON. Chaque document peut avoir une structure differente.
Exemples : MongoDB, CouchDB, Firestore Cas d'usage : catalogues produits, profils utilisateurs, CMS
{
"_id": "user_123",
"nom": "Alice",
"commandes": [
{"produit": "Laptop", "prix": 999},
{"produit": "Souris", "prix": 29}
]
}
2. Bases cle-valeur
Le modele le plus simple : une cle associee a une valeur. Extremement rapides pour les lectures/ecritures simples.
Exemples : Redis, DynamoDB, Memcached Cas d'usage : cache, sessions, compteurs, rate limiting
3. Bases orientees colonnes
Organisent les donnees par colonnes plutot que par lignes. Optimisees pour les requetes analytiques sur de grands volumes.
Exemples : Apache Cassandra, HBase, ScyllaDB Cas d'usage : time series, IoT, logs, analytics a grande echelle
4. Bases orientees graphes
Modelisent les donnees comme des noeuds et des relations. Optimisees pour les requetes de traverse de graphe.
Exemples : Neo4j, ArangoDB, Amazon Neptune Cas d'usage : reseaux sociaux, moteurs de recommandation, detection de fraude
SQL vs NoSQL : quand choisir quoi ?
| Critere | SQL | NoSQL |
|---|---|---|
| Schema | Fixe, normalise | Flexible, evolutif |
| Relations | Jointures natives | Denormalisation |
| Scalabilite | Verticale (principalement) | Horizontale native |
| Coherence | ACID fort | Eventual consistency (souvent) |
| Requetes | SQL standard | API specifique a chaque base |
| Cas ideal | Transactions, relations complexes | Big data, haute performance |
Le theoreme CAP
Toute base de donnees distribuee ne peut garantir que 2 des 3 proprietes suivantes :
Consistency : tous les noeuds voient les memes donnees
Availability : chaque requete recoit une reponse
Partition tolerance : le systeme fonctionne malgre des coupures reseau
MongoDB : CP (coherence + partition tolerance)
Cassandra : AP (disponibilite + partition tolerance)
Redis : CP avec configuration AP possible