SGBD NoSQL, et si vous sautiez le pas ?

Le NoSQL (Not only SQL) est un type de système de gestion de base de données (SGBD) qui offre une alternative aux bases de données relationnelles traditionnelles.

Contrairement aux systèmes basés sur le SQL (Structured Query Language), les bases de données NoSQL sont conçues pour traiter de grandes quantités de données non structurées et semi-structurées, ce qui les rend idéales pour les applications modernes qui nécessitent évolutivité, flexibilité et haute disponibilité. Dans cet article, nous allons explorer les raisons pour lesquelles les SGBD NoSQL sont un excellent choix pour les applications modernes, ainsi qu’un exemple concret de code avec MongoDB.

Les raisons de choisir un SGBD NoSQL

Scalability (Évolutivité)

L’un des principaux avantages des SGBD NoSQL est leur évolutivité. Ces systèmes peuvent gérer des quantités massives de données, ce qui en fait un choix idéal pour les applications qui nécessitent une mise à l’échelle horizontale, où les données sont distribuées sur plusieurs serveurs. En revanche, les systèmes traditionnels basés sur SQL s’appuient généralement sur une évolutivité verticale, où le matériel est mis à niveau pour traiter des quantités croissantes de données.

Or le prix d’une mise à l’échelle horizontale est bien important qu’une mise à l’échelle verticale. En effet, il est moins cher d’acheter de nouveaux serveurs que d’améliorer les serveurs existants en ajoutant RAM, SSD, Processeurs …

Une question reste en suspens, pourquoi est-il plus facile de mettre à l’échelle horizontalement un SGBD NoSQL qu’un SGBD relationnel ? 

La réponse est directement liée à la manière de stocker l’information, en NoSQL les objets sont “self-contained”, c’est-à-dire indépendants les uns des autres alors que dans une structure relationnelle, comme son nom l’indique, les éléments sont liés.

Autrement dit, en NoSQL les objets peuvent se trouver sur différents serveurs sans qu’il soit nécessaire de joindre des lignes provenant de plusieurs serveurs, comme c’est le cas avec le modèle relationnel.

Flexibilité

Les SGBD NoSQL sont conçus pour traiter des données non structurées et semi-structurées, ce qui les rend plus flexibles que les systèmes basés sur SQL. Ces bases de données peuvent stocker différents types de données, tels que du texte, des images, des vidéos et des documents, sans nécessiter de modèles de données ou de schémas complexes.

Performance

Les SGBD NoSQL offrent généralement des niveaux de performance élevés par rapport aux systèmes basés sur SQL. Ils peuvent traiter rapidement de grandes quantités de données, ce qui en fait un choix idéal pour les applications qui nécessitent un traitement et une analyse en temps réel.

Disponibilité

Les SGBD NoSQL sont conçus pour offrir une haute disponibilité, avec des mécanismes intégrés de réplication et de basculement qui garantissent que les données sont toujours disponibles, même en cas de défaillance matérielle.

La réalité reste nuancée …

Il est difficile d’affirmer simplement que SQL ou NoSQL est le meilleur. SQL et NoSQL ont tous deux des avantages et des inconvénients dans différentes situations. Les bases de données SQL, du fait qu’elles possèdent des relations, ont un avantage lors de la mise à l’échelle verticale et sont garantes de la cohérence des données (au sens ACID). Comme la cohérence est prioritaire dans les bases de données SQL, le système de gestion de la base de données doit faire beaucoup de travail pour maintenir l’état cohérent, ce qui entraîne une perte de temps. Les bases de données NoSQL, conçues pour être flexibles et rapides, ont moins de contraintes que SQL en réduisant les frais généraux de maintien de la cohérence. En ce qui concerne la flexibilité, NoSQL peut stocker des données dans plusieurs types d’objets (documents ou paires clé-valeur) de manière distribuée. En ce qui concerne la vitesse, NoSQL est généralement plus rapide que SQL, en particulier pour le stockage des couples clé-valeur. D’un autre côté, les bases de données NoSQL peuvent ne pas supporter entièrement les transactions ACID, ce qui peut entraîner des incohérences dans les données.

Exemple pratique pour débuter avec Mongo DB

Pour installer MongoDB, vous pouvez télécharger le package approprié pour votre système d’exploitation depuis le site officiel de MongoDB, puis suivre les instructions d’installation pour votre plateforme. Ensuite, pour communiquer avec mongoDB, nous avons le plus souvent besoin d’un langage de programmation. Dans la suite, nous utiliserons JavaScript pour effectuer des opérations sur la BDD.

Installation de la bibliothèque mongoDB pour JavaScript

Tout d’abord, vous devez installer la bibliothèque mongodb à l’aide de npm (gestionnaire de package pour JavaScript) :

npm install mongodb

Connexion à la base de données

Ensuite, vous pouvez vous connecter à la base de données en utilisant la méthode MongoClient.connect() :


const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
const dbName = 'db';
MongoClient.connect(url, function(err, client) {
console.log("Connecté à la base de données");
const db = client.db(dbName);
// Interagir avec la base de données ici
client.close();
});

view raw

conn_mongodb.js

hosted with ❤ by GitHub

Cela vous connectera à la base de données db sur votre machine locale à l’aide de l’URL mongodb://localhost:27017.

Création d’une collection

Pour créer une collection, vous pouvez utiliser la méthode createCollection() de l’objet db :


db.createCollection("ma_collection", function(err, res) {
console.log("Collection créée !");
});

Cela créera une nouvelle collection appelée ma_collection dans la base de données.

Insertion de données

Pour insérer des données, vous pouvez utiliser la méthode insertOne() ou insertMany() de l’objet collection :


const collection = db.collection('ma_collection');
collection.insertOne({ nom: "Louis", age: 22 }, function(err, res) {
console.log("Document inséré !");
});

view raw

insert_data.js

hosted with ❤ by GitHub

Cela insérera un nouveau document dans la collection ma_collection avec les champs nom et age.

Pour vérifier la bonne création de la collection et la bonne insertion des données vous pouvez utiliser mongo GUI, une interface graphique pour MongoDB. Cette dernière affiche les bases données et les collections associées ainsi que les differents objets qui composent chaque collection.

 

Recherche de données

Pour rechercher des données, vous pouvez utiliser la méthode find() de l’objet collection :


const collection = db.collection('ma_collection');
collection.find({}).toArray(function(err, docs) {
console.log("Résultat de la recherche : ");
console.log(docs);
});

view raw

search_data.js

hosted with ❤ by GitHub

Cela affichera tous les documents de la collection ma_collection.

Mise à jour de données

Pour mettre à jour des documents existants, vous pouvez utiliser la méthode updateOne() ou updateMany() de l’objet collection :


const collection = db.collection('ma_collection');
collection.updateOne({ nom: "Louis" }, { $set: { age: 99 } }, function(err, res) {
console.log("Document mis à jour !");
});

view raw

update_data.js

hosted with ❤ by GitHub

Cela mettra à jour le document avec le champ nom égal à “Louis” en définissant la valeur de age à 99.

Suppression de données

Pour supprimer des documents de la collection, vous pouvez utiliser la méthode deleteOne() ou deleteMany() de l’objet collection :


const collection = db.collection('ma_collection');
collection.deleteOne({ nom: "Louis" }, function(err, res) {
console.log("Document supprimé !");
});

view raw

delete_data.js

hosted with ❤ by GitHub

Cela supprimera le premier document de la collection avec le champ nom égal à “Louis”.