MongoDB versus MarkLogic, le Combat
Sur la balance
Non, il ne s’agit pas de la dernière œuvre des productions The Asylium mais du match comparatif de deux des principales bases de données NoSQL orientées document.
MongoDB et MarkLogic font partie des bases leader dans le célèbre classement Gartner:
MarkLogic a été créé en 2001 en se présentant sur le créneau des bases XML en vogue à l’époque. Aujourd’hui en version 8, Marklogic qui est leader sur ce marché, a intégré le format Json et des API de requêtage Javascript en plus de ces API natives en XQuery.
MongoDB a été créé en 2007 en profitant de l’engouement naissant du mouvement NoSQL. MongoDB est aujourd’hui en version 3.2.
Depuis sa version 8 de MarkLogic et son intégration du format Json, les deux bases possèdent de nombreux points communs qui permettent maintenant de les comparer:
- univers NoSQL
- bases orientées document
- stockage des documents au format json et binaires
- requêtage javascript
Le combat en dix round se déroule dans un climat tendu, MongoDB bénéficiant d’un large public en soutien tandis que MarkLogic plus lourd et expérimenté attend de poing ferme son challenger.
Le résumé du combat::
- Round 1: Organisation des documents
- Round 2: Opérations de base
- Round 3: Recherche
- Round 4: Performances
- Round 5: API
- Round 6: Map-reduce et aggregation
- Round 7: Documentation / formation / support
- Round 8: Ecosystème
- Round 9: Prix
- Round 10: Évolutions du produit
Sur le ring
Organisation des documents
MongoDB adopte une approche basée sur les collections représentant un groupement logique de documents sans pour autant contraindre leur format. Une collection est un “sac” contenant des documents. Les documents n’étant contenu que dans un seul sac. La notion de collection est centrale dans MongoDB puisque les opérations sur les documents se font au travers des collections, les API CRUD n’offrant pas la possibilité de mettre à jour des documents de manière horizontale sur plusieurs collections. Les collections peuvent être limitées en taille ce qui peut être intéressant dans certains cas d’utilisation.
MarkLogic organise les documents dans une structure arborescente établie à partir de l’uri des documents. Cette forme d’organisation d’une part a l’intérêt de permettre une exposition de la base via le protocole WebDAV, d’autre part autorise une sémantique métier ou technique sur les uris (ex: /records/2015/07/12/12345.json). Dans MarkLogic, les collections sont des métadonnées des documents ce qui permet à un document d’appartenir à plusieurs collections et n’entrave pas la mise à jour horizontale sur l’ensemble de la base. MarkLogic intègre en outre une option permettant le versionning des documents.
En regardant coté stockage physique des données, l’organisation MarkLogic est nettement plus professionnel que celle de MongoDB.
Dans MarkLogic les bases sont organisées en Forest (plus ou moins l’équivalent des Tablespace Oracle).
Dans MongoDB, les bases sont mélangées, l’outil ne contraignant à aucune organisation.
Résultat du premier round: avantage MarkLogic pour la souplesse d’organisation des données coté logique et la cohérence coté physique. MongoDB plus brouillon a baissé sa garde.
Opérations de base
Les deux bases supportent les opérations CRUD avec ou sans lock. L’un ou l’autre propose des possibilités de lecture, d’écriture, de mise à jour et de suppression unitaire ou multiple. MongoDB possède un mode Bulk pour les écritures tandis que MarkLogic propose ce mode pour les écritures et les lectures.
MarkLogic supporte la gestion des transactions ACID sur un ensemble de mises à jour tandis que MongoDB se contente de l’acidité au niveau du document (ce qui semble un minimum).
Résultat du second round: avantage MarkLogic pour les transactions ACID multi-documents qui envoie MongoDB dans les cordes.
Recherche
S’il est un aspect où MongoDB est vraiment pauvre, c’est la recherche. Une racinisation trop simple, assez peu d’options de recherche fine mais quelques possibilités de recherche en expression régulière toutefois et une recherche geospatiale qui semble assez complète (j’avoue n’avoir jamais utilisé cette dernière). MongoDB a clairement besoin d’un moteur de recherche en complément (ElasticSearch par exemple) dès lors que les attentes de résultat métier sont importantes et que les recherches à effectuer ne sont pas de type formulaire.
MarkLogic de son coté est clairement un moteur de recherche et se situe dans les meilleurs. Les options de recherche sont tout simplement énormes (plusieurs niveaux de racinisation, facetting, thesaurus, geospatial, recherche inverse, etc). Il est ainsi possible de créer des index muti-formats sur des champs de document; pour illustrer, si un document au format json contient un champ “auteur” et un document xml contient un élément “author”, il est possible de créer un index basé sur les chemins de ces champs. A lui seul, le guide sur la recherche dans MarkLogic est un pavé de plus de 500 pages.
Résultat du troisième round: encore avantage MarkLogic qui est un vrai moteur de recherche particulièrement performant. MongoDB a frolé le KO sur ce round.
Performances
Il est toujours difficile et délicat de comparer les performances de deux SGBD sans avoir d’outil d’étalonnage commun. Si MongoDB possède une entrée YCSB ce n’est pas le cas de MarkLogic. Ce round se base donc sur mon expérience d’utilisation des deux bases.
J’essaierai de l’appuyer sur des résultats plus tangibles dans un avenir proche.
Sans préciser d’index particulier, après un chargement de données identique, MarkLogic se comporte légèrement mieux que MongoDB sur la plupart des requêtes. Ceci est probablement du au fait que MarkLogic créé certains index par défaut.
Avec index, dans MarkLogic et MongoDB, les résultats peuvent être identiques à 100 fois plus rapide pour MarkLogic particulièrement sur les recherches textuelles.
Résultat du quatrième round: difficile de trancher entre les deux adversaires sur ce round par manque de données objectives. Match nul en attendant une décision ultérieure de l’arbitre. Sifflets dans les tribunes.
API
Côté API, MarkLogic propose des API Javascript (NodeJs), Java (pas de Spring Data), XQuery et surtout REST. Il faut noter que les API NodeJs et Java ne sont qu’une surcouche des API REST. Ces API sont complètes et couvrent autant l’administration de la base et les accès aux données.
MongoDB propose de son coté des API natives en C, C++, Java (sync et async), Javascript. Le modèle Open Source et la large diffusion de MongoDB a permis le développement d’API riches et variées.
Résultat du cinquième round: avantage MongoDB qui se ressaisi et arrive à placer un léger crochet du droit qui déséquilibre MarkLogic.
Map-reduce et aggregation
MarkLogic et MongoDB proposent tous les deux à la fois du map-reduce et de l’agrégation.
De son coté, MarkLogic intègre le moteur de map-reduce d’Hadoop et propose des fonctions d’agrégation (avg, sum, min, max, variance, covariance…). Le concept d’agrégation est un peu différent de celui de MongoDB dans le sens où celui de MarkLogic porte surtout sur les calculs mathématiques, les agrégations au sens regroupement sont traités par d’autres fonctions plus liées à la recherche. Le map-reduce, quant à lui, nécessite de la configuration et de l’écriture de code en java ou C++.
MongoDB fourni des api permettant de faire du map-reduce de manière assez simple et un framework d’agrégation qui mériterait un plus de clarté (cette partie évolue toutefois assez vite). Ces fonctions sont centrales à MongoDB et permette une vraie exploitabilité des documents de la base.
Résultat du sixième round: nouvel avantage MongoDB dont les attaques se font plus précises. MarkLogic se défend toutefois bien et garde un bon jeu de jambe.
Documentation / formation / support
Rarement site de documentation n’aura été plus riche que celui de MarkLogic. La documentation est très précise et quasi exhaustive. Elle est disponible également en grande partie au format PDF et occupe un volume de plusieurs milliers de pages (530 rien que pour le guide de recherche par exemple).
Les supports de formation proposés par MarkLogic sont assez nombreux, que ce soit sous la forme de tutoriaux, de videos ou même de sessions de formation à distance gratuites pour les développeurs ou les administrateurs.
Le site de documentation de MarkLogic est juste Enorme !
MongoDB propose une documentation assez aboutie, mais dont la mise à jour se complète parfois après la sortie de nouvelles fonctionnalités. La documentation manque toutefois d’exhaustivité et de consistance dés lors qu’il faut utiliser les fonctions plus complexes d’agrégation ou de map-reduce. La recherche dans la documentation, si elle utilise MongoDB, montre bien ses lacunes dans ce domaine car une recherche dans la documentation sur “regex” ou “$regex” ne ramène jamais sur la page de l’opérateur $regex.
Coté support, videos et sessions de formation à distance gratuites sont aussi nombreuses et variées.
La police de caractère de la doc. MongoDB permet une meilleure lecture (c’est le seul avantage de la doc !)
Résultat du septième round: pas de miracle dans ce round, avantage MarkLogic qui a encore asséné un violent uppercut à MongoDB. Celui-ci vient de nouveau de finir à terre et s’est relevé juste avant les 10 secondes.
Ecosystème
De par son positionnement open source et sa large diffusion, MongoDB bénéficie d’un ensemble d’outils gratuits ou payants très importants. Citons notamment RoboMongo (gratuit) ou MongoVue (35$) qui offrent une interface client lourde particulièrement agréable pour parcourir le contenu des bases et exécuter des scripts. Le site MongoDB Tools recense les principaux outils dédiés à MongoDB.
L’excellent RoboMongo
MarkLogic dispose nativement d’un ensemble d’outils permettant de démarrer rapidement la création d’une application et d’une interface d’administration particulièrement riche. Malheureusement certains outils (qconsole notamment) ne sont pas à la hauteur du produit. Le site de développement MarlKogic liste un certain nombre d’outils gratuits mis à disposition par Marklogic ou la communauté des développeurs.
La console d’administration de MarkLogic permet de tout régler.
Il faut toutefois noter que MarkLogic héberge plus de projets sur son repository Github que MongoDB sur le sien.
Résultat du huitième round: léger avantage MongoDB qui a particulièrement bien résisté dans ce round et poussé MarkLogic dans les cordes.
Prix
Au niveau des prix de licence, Marklogic et MongoDB ne jouent pas dans la même cour et n’ont pas le même modèle économique. De plus MarkLogic possède une pléthore de fonctionnalités supplémentaires comme un système d’alertes, des recherches inversées, la possibilité de travailler en XML, les aspects sémantiques …, seules les fonctionnalités sur les aspects communs sont ici comparées.
Marklogic s’est positionné sur un modèle à la Oracle, coûteux donc et sûr de son produit. La version de développement, non bridée et disposant de toutes les fonctionnalités est disponible gratuitement. Cette version ne peut être utilisée commercialement.
MongoDB adopte un modèle d’entreprise dont l’outil est gratuit mais les services additionnels sont payants (support, correction de bug particuliers …).
A titre d’exemple, le pricing des deux outils est approximativement le suivant
Developer | SAAS | Hébergement propre | |
Marklogic | Gratuit | 1 $ hr ou 8 500 $ / an | 18 000 $ / an / serveur support inclus ou 32 000 $ en licence perpétuelle. |
MongoDB | Gratuit | 380 $ / an | Gratuit, prix du support non connu |
Résultat du neuvième round: encore avantage MongoDB qui a retrouvé de la fraîcheur et envoi une alternance rapide de crochets à MarkLogic.
Évolutions du produit
Le moins que l’on puisse dire de MarkLogic, c’est que ce n’est pas un outil figé et sclérosé. Les sorties de version majeures sont régulières avec environ une version tous les 1,5 ans et des publications de versions release 3 à 4 fois l’an. Le changement se fait dans la continuité avec l’apport de nouvelles fonctionnalités (json, rdf, bitemporal…)
MongoDB a un processus d’évolution un peu similaire mais le distinguo version majeure/mineure est plus floue (version 2.4 en 2013, 2.6 en 2014 3.0 en 2015). Le changement ne se fait pas toujours dans la continuité, la version 3.0 imposant quelques mises à jour.
Résultat du dixième round: MarkLogic finit sur un dernier round de toute beauté et domine MongoDB.
Fin du combat
MarkLogic remporte logiquement ce match 5 points à 4 et une égalité. MongoDB arrachant 2 de ses rounds de justesse.
MarkLogic fournit indubitablement une solution plus complète, plus industrialisée, répondant aux besoins les plus simples et les plus complexes en regroupant au sein d’un seul produit des fonctionnalités inédites dans le monde des bases de données.
MongoDB propose une solution rapide, peu coûteuse, simple à mettre en œuvre pour stocker des binaires et des documents au format Json puis accéder aux documents eux-mêmes. Dès lors que les besoins et usages se complexifient, la nécessité d’associer un moteur de recherche, de traitements d’exploitation des données en amont ou en aval se fait cruellement sentir (moteur de recherche type ElasticSearch).
Epilogue
ContentSide est partenaire et revendeur Marklogic depuis de nombreuses années, certains pourraient en tirer la conclusion que ce comparatif est biaisé et tient du publi-reportage. Je tiens à souligner que beaucoup de nos projets et produits (dont News’Innov notre produit phare) utilisent avec succès MongoDB. Ce comparatif se veut éclairé par cette double compétence que nous avons et que nous conserverons car ces deux produits répondent à des logiques commerciales différentes.
Ce sujet vous intéresse ?