Cependant, il révèle aussi les inconvénients et les limites de MongoDB, qu’il a découverts au fil du temps. Il cite notamment les problèmes de fiabilité, de sécurité, de consistance et de complexité des requêtes. Il explique que ces problèmes l’ont amené à remettre en question son choix de base de données, et à envisager une alternative plus adaptée à ses besoins.
Il présente alors PostgreSQL, une base de données relationnelle qui offre des garanties de qualité, de robustesse et de standardisation. Il explique pourquoi il a choisi PostgreSQL comme nouvelle base de données, en mettant en avant ses avantages par rapport à MongoDB, comme la maturité, la stabilité, la compatibilité et la diversité des extensions.
MongoDB est un système de gestion de base de données orienté documents, répartissable sur un nombre quelconque d'ordinateurs et ne nécessitant pas de schéma prédéfini des données. Il permet de manipuler des objets structurés au format BSON (JSON binaire), sans schéma prédéterminé. Il est écrit en C++. Le serveur et les outils sont distribués sous licence SSPL.
En octobre 2018, la base de données MongoDB est publiée sous SSPL. La plupart des utilisateurs de MongoDB n'ont pas besoin des nombreuses fonctionnalités avancées offertes par MongoDB, mais ils ont besoin d'une solution de base de données open source.
En 2019, MongoDB annonce un chiffre d’affaires de 99,4 millions de dollars, en hausse de 67 %, sur le 2e trimestre de son exercice 2020. L’éditeur de la base de données revendique 15 000 clients dans plus de 100 pays, en incluant ceux qu’il a acquis avec les rachats d’ObjectLabs et de la base de données mobile Realm (ex-Tightdb).
Alors que la perte d’exploitation a été réduite de moitié pour atteindre 14,8 millions de dollars, les revenus du deuxième trimestre ont augmenté de 67 %, les produits tirés des abonnements se sont élevés à 94,2 millions USD, en hausse de 71 % par rapport à 25,2 millions USD, tandis que ceux des services professionnels ont atteint 5,2 millions USD, en hausse de 15 % par rapport à l'année précédente.
En 2021, MongoDB annonce la disponibilité de Realm Sync, un dispositif de synchronisation des données dans le cloud. « Afin d’appuyer notre stratégie informatique de pointe, nous avons commencé à étendre l’utilisation des technologies d’automatisation dans nos centres de distribution. Nous évaluons l’opportunité d’utiliser Realm et Realm Sync dans les cas d’utilisation d’envoi de colis entrants et sortants », avait déclaré James Fairweather, Directeur de l’innovation chez Pitney Bowes.
« Par exemple, nous envisageons de créer une application sur Realm pour nos collaborateurs de première ligne qui permettrait de scanner un colis pour synchroniser automatiquement les données avec MongoDB Atlas. Cela permettrait d’assurer la cohérence des rapports et de garder la logistique à jour tout au long de l’expédition ».
Les problèmes de Mongo
« Le choix de Mongo est peut-être mon plus grand regret technique dans un projet logiciel. J'ai lu de nombreux guides. J'ai essayé et mesuré de nombreux changements de configuration. Mon code Python-Flask a fait des pirouettes pour Mongo », déclare Spence. Voici, ci-dessous, quelques faiblesses évoquées par Spence :
- erreurs de connexion fréquentes (ServerSelectionTimeoutError, OperationFailure, AutoReconnect) ;
- utilisation erratique de la mémoire vive dépassant de loin ce que le trafic devrait exiger ;
- parfois le service refuse de redémarrer (systemctl restart/start) ;
- des procédures de mise à jour difficiles (après apt dist-upgrade) ;
- procédures de migration difficiles pour un nouveau moteur de stockage (WiredTiger) ;
- pas de support officiel pour le dernier Ubuntu LTS des mois après sa sortie ;
- documentation peu claire sur "mongo.com" à propos des requêtes ;
- mauvaise documentation sur pymongo.
Enfin, Spence indique que l'écriture des insertions et des mises à jour en JSON est compliquée. « Ce qui devrait être une opération assez simple comme : "Incrémenter atomiquement cette valeur imbriquée, ou insérer si la valeur n'est pas là" était tout simplement un désastre », déclare-t-il. Par exemple, incrémenter "api" de un ou insérer "api":1 si nécessaire :
Code : | Sélectionner tout |
1 2 3 4 5 6 | {"turtle":123, "visit_count":{"web":2, "api":8}} {"turtle":123, "visit_count":{"web":3}} |
Migration des données de MongoDB vers PostgreSQL
Dans son billet de blog, Stuart Spence détaille le processus qu’il a suivi pour migrer ses données de MongoDB vers PostgreSQL, en insistant sur les défis et les solutions qu’il a rencontrés. Il décrit les outils qu’il a utilisés pour effectuer la conversion des données, la validation des résultats et le déploiement des changements. Il donne aussi des conseils pour optimiser les performances, la sécurité et la maintenance de PostgreSQL.
« PostgreSQL a été un choix facile. J'ai failli le choisir en 2019, c'est un logiciel libre, mature et très populaire. Je n'ai pas besoin de ses fonctionnalités sophistiquées, mais c'est bien qu'elles existent. Grâce à une bonne planification, ma classe Python DatabaseManager sépare ma logique métier des spécificités de la base de données. Il m'a donc suffi de remplacer Mongo par PostgreSQL dans toutes ces fonctions », précise Spence.
« Une chose qui est un peu choquante est que j'ai écrit une fonctionnalité JSON de type Mongo au-dessus de PostgreSQL et, pour autant que je puisse en juger, elle fonctionne beaucoup plus rapidement », ajoute-t-il. Par exemple, une des fonctions Python retourne les résultats SQL sous forme de liste de dictionnaires basés sur les noms de colonnes de la table :
Code : | Sélectionner tout |
1 2 3 | SELECT a, b, c FROM table1 ; [{"a":2,"b":3,"c":4}, {"a":11,"b":44,"c":66}] |
Si l'avis de Stuart Spence peut paraître trop sévère, il nous montre tout de même qu’il n’existe pas de base de données idéale, mais que chaque base de données a ses forces et ses faiblesses, en fonction du contexte et des besoins du projet. La vision négative de Spence au sujet de MongoDB reste questionnable. En effet, le choix d’une base de données peut aussi être un choix stratégique, qui peut avoir un impact important sur la qualité, la performance et la sécurité de nos applications. Pour certains analystes d'ailleurs, MongoDB est une base de données innovante, qui offre des possibilités de stockage et de manipulation des données très intéressantes, notamment pour les applications web modernes.
Source : Stuart Spence's blog post
Et vous ?
Quel est votre avis sur le sujet ?
Quel SGBD utilisez-vous ? Qu'est-ce qui motive votre choix ?
Quels sont les défis ou les difficultés que vous avez rencontrés avec votre SGBD ?
Quels sont les types de projets pour lesquels vous recommanderiez MongoDB ou PostgreSQL ?
Voir aussi :
MongoDB Inc. annonce un chiffre d'affaires de 99,4 millions USD au deuxième trimestre de son exercice fiscal 2020, une hausse de 67 % largement tirée par la part des abonnements en hausse de 71 %
MongoDB annonce la disponibilité de Realm Sync, un dispositif de synchronisation des données dans le cloud, pour accélérer le développement d'applications mobiles essentielles
MangoDB : une véritable alternative Open Source à MongoDB, un proxy open source, qui convertit les requêtes du protocole filaire de MongoDB en SQL