Une des questions que je me suis posées il y a plusieurs années, quand j’ai entendu parler d'Elasticsearch pour la première fois, c'était : 'OK, mais en vrai, c'est quoi la différence avec une base de données SQL ?'
Pour faire simple, les bases de données SQL et NoSQL sont deux visions différentes pour stocker et organiser les données. Les bases SQL sont dites relationnelles, c'est le modèle le plus classique, vous définissez un schéma, vous créez des tables avec des colonnes bien précises et vous pouvez faire des jointures entre les tables grâce aux clés. Les données sont normalisées, les relations sont claires et vous interrogez le tout avec SQL.
NoSQL repose sur une logique plus flexible. On travaille avec des documents (souvent au format JSON) plutôt qu'avec des lignes de table. Tous les documents ne sont pas obligés d'avoir exactement les mêmes champs, et vous pouvez faire évoluer la structure plus facilement. Il n'y a généralement pas de grosses jointures complexes puisqu'il faut organiser les données de manière à les éviter. On distingue d'ailleurs plusieurs grandes familles de bases NoSQL : les bases clé-valeur, les bases orientées documents, les bases en colonnes larges et les bases orientées graphe, chacune adaptée à des cas d’usage bien précis. C’est très pratique lorsque vos données changent souvent de forme ou lorsque vous devez ingérer beaucoup d’informations peu ou mal structurées.
Là où la différence devient vraiment intéressante, c'est sur la façon de “scaler”. Avec SQL, en général, quand ça commence à ramer, vous prenez une machine plus puissante (plus de RAM, plus de CPU, plus de disque). C'est la scalabilité verticale ce qui veut dire c'est toujours le même serveur, mais mieux musclé. Avec NoSQL, l’idée est plutôt d'ajouter plusieurs machines “normales” et de répartir les données et le trafic entre elles. C'est la scalabilité horizontale donc au lieu d’un seul monstre, vous avez une armée de serveurs qui travaillent ensemble.
| Aspect | SQL | NoSQL |
|---|---|---|
| Modèle | Base de données relationnelle (tables, lignes, colonnes) | Base non relationnelle (documents, clé-valeur, colonnes, graphes) |
| Schéma | Schéma fixe et défini à l'avance | Schéma flexible |
| Relations | Relations fortes via clés primaires / étrangères, JOIN | Relations souvent limitées ou gérées au niveau applicatif |
| Langage de requête | SQL | APIs ou langages spécifiques à chaque moteur |
| Scalabilité | Principalement verticale (serveur plus puissant) | Principalement horizontale (ajout de serveurs au cluster) |
| Cas d’usage typiques | Transactions, données structurées, systèmes métiers, finance etc.. | Gros volumes, données variées, logs, événements, applications web à forte charge, jeux mobiles multi etc.. |
| Exemples | MySQL, PostgreSQL, SQL Server, Oracle | MongoDB, Cassandra, DynamoDB, Redis, Neo4j |
Voici des exemples de différentes bases de données.


