284 votes

Base de données NoSQL (MongoDB) vs Lucene (ou Solr)

Avec la croissance du mouvement NoSQL basé sur les bases de données documentaires, je me suis penché sur MongoDB dernièrement. J'ai remarqué une similitude frappante avec la façon de traiter les éléments comme des "documents", tout comme Lucene le fait (et les utilisateurs de Solr).

Donc, la question : Pourquoi voudriez-vous utiliser NoSQL (MongoDB, Cassandra, CouchDB, etc) plutôt que Lucene (ou Solr) comme "base de données" ?

Ce que je recherche (et je suis sûr que d'autres le font aussi) dans une réponse, c'est une comparaison approfondie de ces systèmes. Ne parlons pas des bases de données relationnelles, car elles ont un but différent.

Lucene offre de sérieux avantages, tels que des systèmes de recherche et de pondération puissants. Sans parler des facettes dans Solr (qui sera bientôt intégré à Lucene, youpi !). Vous pouvez utiliser les documents Lucene pour stocker les identifiants, et accéder aux documents en tant que tels, tout comme MongoDB. Mélangez le tout avec Solr, et vous obtenez une solution équilibrée en termes de charge, basée sur les services Web.

Vous pouvez même ajouter une comparaison des fournisseurs de cache hors-proc comme Velocity ou MemCached lorsque vous parlez du stockage de données et de l'évolutivité similaires de MongoDB.

Les restrictions autour de MongoDB me rappellent l'utilisation de MemCached, mais je peux utiliser Velocity de Microsoft et avoir plus de puissance de regroupement et de collecte de listes que MongoDB (je pense). Il n'y a rien de plus rapide ou de plus évolutif que la mise en cache des données en mémoire. Même Lucene a un fournisseur de mémoire.

MongoDB (et d'autres) ont quelques avantages, comme la facilité d'utilisation de leur API. Créez un document, créez un identifiant et stockez-le. C'est fait. C'est simple et facile.

8 votes

4 votes

Merci, mais cela ne répond pas à ma question : pourquoi utiliser MongoDB plutôt que Lucene pour ma base de données ? Les deux gèrent des documents, mais Lucene possède des options de recherche très puissantes. +1 cependant pour trouver réellement une question connexe. J'ai cherché plusieurs fois sur Stackoverflow, et je n'ai pas trouvé de comparaison proche.

0 votes

Comment utilisez-vous Lucene pour qu'il offre une fonctionnalité similaire à MongoDB ? Le liez-vous à une base de données relationnelle pour le stockage ?

259voto

Mikos Points 5204

C'est une excellente question, à laquelle j'ai beaucoup réfléchi. Je vais résumer les leçons que j'en ai tirées :

  1. Vous pouvez facilement utiliser Lucene/Solr à la place de MongoDB dans presque toutes les situations, mais pas l'inverse. L'article de Grant Ingersoll résume la situation ici.

  2. MongoDB, etc. semble servir un objectif pour lequel il n'est pas nécessaire d'effectuer des recherches et/ou des facettes. Il semble que ce soit une transition plus simple et sans doute plus facile pour les programmeurs qui se désintoxiquent du monde des SGBDR. À moins d'y être habitué, Lucene et Solr ont une courbe d'apprentissage plus raide.

  3. Il n'y a pas beaucoup d'exemples d'utilisation de Lucene/Solr en tant que magasin de données, mais Guardian a fait quelques progrès et les résume dans un excellent article intitulé pont coulissant mais eux aussi ne sont pas décidés à prendre le train en marche de Solr et "étudient" la possibilité de combiner Solr et CouchDB.

  4. Enfin, je vais vous faire part de notre expérience, qui ne peut malheureusement pas révéler grand-chose sur le business-case. Nous travaillons à l'échelle de plusieurs To de données, une application en temps quasi réel. Après avoir étudié diverses combinaisons, nous avons décidé de nous en tenir à Solr. Aucun regret jusqu'à présent (6 mois et plus) et je ne vois aucune raison de passer à une autre solution.

Résumé : si vous n'avez pas d'exigence en matière de recherche, Mongo offre une approche simple et puissante. Cependant, si la recherche est un élément clé de votre offre, vous feriez mieux de vous en tenir à une seule technologie (Solr/Lucene) et de l'optimiser au maximum - moins de pièces mobiles.

Mes deux centimes, j'espère que ça vous a aidé.

11 votes

Solr n'a pas de fonctionnalité de réduction de carte. Par conséquent, les rapports, les statistiques, le calcul des scores, etc. ne sont pas possibles ! N'utilisez Solr que si vous avez/peut menacer vos données sous forme de texte.

8 votes

Solr ne dispose pas de map-reduce intégré, mais vous pouvez le combiner avec Hadoop. architectes.dzone.com/articles/solr-hadoop-big-data-love

6 votes

Map-reduce non, mais il a la capacité d'exécuter une requête en parallèle sur plusieurs serveurs Solr et d'agréger ces résultats. Ainsi, bien qu'il ne dispose pas de map-reduce à usage général, il a déjà écrit ce que vous écririez avec map-reduce, à savoir des requêtes de recherche parallèles.

37voto

Peter Long Points 2112

Vous ne pouvez pas mettre à jour partiellement un document dans Solr. Vous devez réafficher tous les champs afin de mettre à jour un document.

Et la performance compte. Si vous n'effectuez pas de validation, votre modification de solr ne prend pas effet. Si vous effectuez une validation à chaque fois, les performances en pâtissent.

Il n'y a pas de transaction dans Solr.

Comme Solr présente ces inconvénients, NoSQL est parfois un meilleur choix.

UPDATE : Solr 4+ a commencé à supporter les commit et soft-commits. Voir le dernier document https://lucene.apache.org/solr/guide/8_5/

15 votes

MongoDB n'a pas non plus de transactions.

1 votes

Solr ou Lucene permettent d'effectuer des recherches en temps réel, de sorte que l'engagement n'est pas un problème.

2 votes

@user183037 dans MongoDB toute mise à jour dans un document est atomique. Et pour votre information, Lucene n'a pas de transactions (dans votre sens) non plus.

29voto

parvin Points 8064

Nous utilisons MongoDB et Solr ensemble et ils fonctionnent bien. Vous pouvez trouver mon article de blog ici où j'ai décrit comment nous utilisons ces technologies ensemble. En voici un extrait :

[...] Cependant, nous observons que la performance des requêtes de Solr diminue lorsque la taille de l'index augmente. augmente. Nous avons réalisé que la meilleure solution est d'utiliser à la fois Solr et Mongo DB ensemble. Ensuite, nous intégrons Solr à MongoDB en stockant MongoDB et en créant un index avec Solr pour la recherche plein texte. plein texte. Nous ne stockons que l'identifiant unique de chaque document dans l'index Solr et récupérons le contenu réel de MongoDB après une recherche sur Solr. L'obtention de documents à partir de MongoDB est plus rapide que Solr car il n'y a pas d'analyseurs, de notation, etc. d'analyseurs, de notation, etc. [...]

3 votes

Bon article de blog. Oui, c'est exactement la façon dont j'ai utilisé Lucene dans le passé avec des bases de données SQL et MySql plus anciennes (en stockant les ID dans Lucene et en récupérant les types complexes dans la base de données). Techniquement cependant, cette question visait à explorer les différences entre les deux - pas exactement comment utiliser le "meilleur des deux mondes". +1 pour l'utiliser de cette façon, car c'est vraiment la seule véritable façon d'utiliser des quantités massives de données.

0 votes

Merci pour votre réponse. Je sais que la question porte sur le choix de Nosql par rapport à Lucene mais ici je veux montrer qu'au lieu de choisir l'un par rapport à l'autre, les utiliser de manière hybride donnera un meilleur résultat.

2 votes

Vous souvenez-vous (maintenant 1,5 an plus tard) de la taille approximative de la base de données Solr lorsque les performances des requêtes ont tellement diminué que vous avez commencé à penser à ajouter MongoDB ? (Était-ce 10 000 docs ou 10 000 000 docs ?)

24voto

Prasith Govin Points 742

Veuillez également noter que certaines personnes ont intégré Solr/Lucene dans Mongo en stockant tous les index dans Solr et en surveillant les opérations d'oplog et les mises à jour pertinentes en cascade dans Solr.

Grâce à cette approche hybride, vous pouvez vraiment bénéficier du meilleur des deux mondes, avec des capacités telles que la recherche en texte intégral et les lectures rapides dans un datastore fiable qui peut également avoir une vitesse d'écriture fulgurante.

C'est un peu technique à mettre en place mais il y a beaucoup de tailers oplog qui peuvent s'intégrer à Solr. Voyez ce que rangespan a fait dans cet article.

http://denormalised.com/home/mongodb-pub-sub-using-the-replication-oplog.html

0 votes

Si j'ai bien compris, la raison pour laquelle vous utilisez MongoDB (en plus de Solr), est que MongoDB a une vitesse d'insertion et de lecture plus rapide ? Avez-vous également indiqué que MongoDB dispose d'un datastore plus fiable ? (Ou faisiez-vous référence à Solr ?) - Avec quoi avez-vous commencé initialement ? Seulement MongoDB, seulement Solr, ou Mongo + Solr ?

11voto

Aquarelle Points 633

Puisque personne d'autre ne l'a mentionné, permettez-moi d'ajouter que MongoDB est sans schéma, alors que Solr impose un schéma. Donc, si les champs de vos documents sont susceptibles de changer, c'est une raison de choisir MongoDB plutôt que Solr.

6 votes

Qui, à mon avis, n'est pas tout à fait vrai. Solr dispose d'un schéma tel que défini dans le document schema.xml MAIS il dispose également de "champs dynamiques", c'est-à-dire de champs dont les types sont déterminés par des caractères de remplacement, de sorte que tous les champs peuvent correspondre, par exemple, *_i indexés en tant que champs entiers. Lorsque vous ajoutez des documents, vous pouvez alors avoir des documents contenant des champs tels que count_i , foo_i , bar_i qui sont tous compris comme des champs entiers sans apparaître dans schema.xml Littéralement. Sans aucun schéma, je dirais. Voir youtube.com/watch?v=WYVM6Wz-XTw pour plus.

0 votes

Je dois revenir et ajouter un +1 parce que c'est vrai - les changements de schémas dans Solr ont toujours été un casse-tête pour rester synchronisé avec les autres magasins de données.

4 votes

Solr dispose d'une fonctionnalité qui prend en charge le schéma ou le non-schéma !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X