MongoDB et SQLite : deux bases de données, deux architectures
La base de données a été lancée en 2009 par la société 10gen, fondée en 2007 par Dwight Merriman, Eliot Horowitz et Kevin Ryan. Le nom MongoDB est dérivé de « humongous » — la base de données est conçue pour de grandes quantités de données qui ne rentrent pas dans des structures de tables fixes.
Mise à l'échelle horizontale avec le sharding
MongoDB se distingue des bases de données relationnelles par son extensibilité horizontale. Les bases de données relationnelles s'appuient souvent sur un seul serveur puissant (extensibilité verticale). MongoDB peut être étendu sur plusieurs serveurs via le sharding, où les données sont automatiquement réparties sur différentes machines.En outre, MongoDB prend en charge les architectures de jeux de réplicas. Les données sont automatiquement répliquées vers plusieurs nœuds. Cela garantit la fiabilité, une haute disponibilité et des opérations de lecture plus rapides, car les requêtes peuvent être réparties sur plusieurs réplicas.
Installer et tester MongoDB
Les étapes suivantes installent MongoDB Community Server sur un système Debian/Ubuntu et testent les fonctionnalités de base.1. Importez la clé GPG de MongoDB et ajoutez le dépôt :
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/7.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list2. Mettez à jour la liste des paquets et installez MongoDB :
sudo apt-get update
sudo apt-get install -y mongodb-org3. Démarrez le service MongoDB et vérifiez son état :
sudo systemctl start mongod
sudo systemctl status mongod4. Ouvrez le shell MongoDB et créez une base de données de test :
mongosh
use testdb
db.users.insertOne({ name: "Pixzo", role: "admin", active: true })5. Ajoutez un document avec une structure différente — cela fonctionne sans modification du schéma :
db.users.insertOne({ name: "Tux", role: "user", active: false, lastLogin: new Date() })
6. Récupérez tous les documents :
db.users.find().pretty()
7. Vérifiez que les deux documents avec des structures différentes se trouvent dans la même collection :
db.users.countDocuments()
SQLite : base de données relationnelle embarquée
SQLite est un moteur de base de données relationnelle embarquable, développé par D. Richard Hipp en 2000 lors de son travail pour General Dynamics sous contrat avec l'United States Navy. Contrairement à MongoDB, qui fonctionne comme un serveur séparé, SQLite est une bibliothèque autonome, sans serveur, intégrée directement dans une application. Les données sont stockées dans un seul fichier sur le disque.SQLite est écrit en C et disponible sur pratiquement toutes les plateformes — des smartphones aux routeurs. Il est présent dans presque toutes les applications Android et iOS, les navigateurs web comme Chrome et Firefox, et les systèmes d'exploitation comme Windows et macOS.
Chiffrement SQLite avec SQLCipher
SQLite ne prend pas en charge le chiffrement natif. Pour un stockage chiffré, vous utilisez SQLCipher, un fork de SQLite qui ajoute le chiffrement AES-256. Un exemple de cette approche est AloxBook, une application de bureau Linux pour la gestion financière. Sans mot de passe, AloxBook utilise une base de données SQLite non chiffrée ; avec mot de passe, il bascule vers SQLCipher.La simplicité de SQLite est soulignée par des outils comme sqldiff, un utilitaire en ligne de commande qui affiche les différences entre deux bases de données SQLite. Il génère un script SQL qui transforme une base de données en une autre — pratique pour le contrôle de version, les migrations et le débogage.
Tester SQLite sous Linux
SQLite est présent par défaut sur la plupart des distributions Linux. Les étapes suivantes testent les fonctionnalités de base.1. Vérifiez la version installée :
sqlite3 --version
2. Créez une base de données et ajoutez une table :
sqlite3 test.db "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, role TEXT);"
3. Insérez des données :
sqlite3 test.db "INSERT INTO users (name, role) VALUES ('Pixzo', 'admin');"
4. Récupérez les données :
sqlite3 test.db "SELECT * FROM users;"
5. Affichez les différences entre deux bases de données avec sqldiff :
sqlite3 test2.db "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, role TEXT);"
sqldiff test.db test2.db
Comparaison : MongoDB versus SQLite
MongoDB et SQLite diffèrent fondamentalement dans leur architecture, leur utilisation et leur public cible.| Caractéristique | MongoDB | SQLite | |---------|---------|--------| | Type | NoSQL, orienté documents | Relationnel | | Architecture | Client-serveur, distribué | Embarqué, sans serveur | | Stockage | Documents BSON dans des collections | Un seul fichier sur disque | | Schéma | Agnostique au schéma, flexible | Schéma fixe avec tables et colonnes | | Passage à l'échelle | Horizontal via le sharding | Vertical, limité à une seule machine | | Transactions ACID | Limité, en croissance dans les versions modernes | Complet | | Idéal pour | Systèmes volumineux, dynamiques et distribués | Stockage local de petite à moyenne taille |
MongoDB excelle dans les scénarios où les données croissent rapidement, où les schémas changent souvent, et où une haute disponibilité et une évolutivité sont essentielles — médias sociaux, plateformes de commerce électronique ou surveillance en temps réel. SQLite est parfait pour les applications qui n'ont pas besoin de prendre en charge des requêtes complexes ou plusieurs utilisateurs simultanés — applications mobiles, logiciels de bureau et outils système.
Les deux bases de données sont complémentaires, pas concurrentes. MongoDB tourne dans le cloud ou sur un cluster ; SQLite tourne en arrière-plan de votre téléphone ou de votre ordinateur portable.
NoSQL : pas une norme, mais une philosophie
MongoDB est un représentant éminent du paradigme NoSQL, mais pas le seul. NoSQL n'est pas une technologie mais une approche. Il englobe les bases de données documentaires (MongoDB), les magasins clé-valeur (Redis), les magasins de familles de colonnes (Cassandra) et les bases de données graphes (Neo4j). Caractéristique commune : l'abandon du modèle relationnel strict en échange d'évolutivité, de performances et de flexibilité.Le choix de NoSQL est motivé par le besoin d'une conception agnostique au schéma. Dans les bases de données relationnelles traditionnelles, vous définissez à l'avance quelles colonnes une table possède, quels types de données sont utilisés, et comment les tables sont reliées entre elles. Avec MongoDB, ce n'est pas nécessaire : chaque document peut contenir des champs uniques, et le schéma peut évoluer pendant l'exécution. C'est pratique dans le développement agile où les exigences changent rapidement.
NoSQL a aussi des inconvénients. Il manque souvent des propriétés ACID (Atomicité, Cohérence, Isolation, Durabilité) sous la forme stricte offerte par les bases de données relationnelles. Bien que les versions modernes de MongoDB offrent de plus en plus de support transactionnel, il reste plus difficile d'effectuer des transactions complexes et cohérentes sur plusieurs collections. SQLite prend en charge les transactions ACID complètes et est donc plus fiable pour un stockage local et cohérent.
Vérification
Vérifiez que les deux bases de données fonctionnent correctement :mongosh --eval "db.runCommand({ ping: 1 })"
sqlite3 test.db "PRAGMA integrity_check;"La requête MongoDB renvoie `{ ok: 1 }`. SQLite renvoie `ok` si la base de données est intacte.
Problèmes fréquents
1. MongoDB ne démarre pas après l'installation — Vérifiez que le chemin du répertoire de la base de données est correct. MongoDB exige que le répertoire `/var/lib/mongodb` existe et appartienne à l'utilisateur `mongodb` :sudo mkdir -p /var/lib/mongodb
sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo systemctl restart mongod2. La base de données SQLite est verrouillée — SQLite ne prend pas en charge les écritures simultanées. Vérifiez qu'aucun autre processus n'a la base de données ouverte :
lsof /chemin/vers/base.db
3. Le sharding MongoDB ne fonctionne pas avec les replicasets — Le sharding exige que chaque nœud de shard fasse partie d'un replicaset. Configurez d'abord le replicaset avec `rs.initiate()` avant d'activer le sharding via `sh.addShard()`.
Le monde des bases de données n'est pas un choix binaire. Le choix entre MongoDB et SQLite dépend de votre cas d'utilisation : avez-vous un système distribué avec des données dynamiques, ou une application locale avec une structure fixe — et la frontière entre les deux s'estompe à mesure que des outils comme SQLCipher et MongoDB Atlas continuent de faire évoluer le paysage.