Avec le mouvement NoSQL se développant basé sur des bases de données basées sur des documents, j'ai regardé MongoDB récemment. J'ai remarqué une similitude frappante avec la façon de traiter les éléments comme des "documents", tout comme Lucene (et les utilisateurs de Solr).
Alors, la question: pourquoi voudriez-vous utiliser NoSQL (MongoDB, Cassandra, CouchDB, etc.) sur Lucene (ou Solr) comme "base de données"?
Ce que je recherche (et je suis sûr que d'autres le souhaitent) dans une réponse, ce sont des comparaisons approfondies. Sautons ensemble les discussions sur les bases de données relationnelles, car elles servent un objectif différent.
Lucene offre de sérieux avantages, tels que des systèmes de recherche et de poids puissants. Sans parler des facettes de Solr (dont Solr sera bientôt intégré à Lucene, yay!). Vous pouvez utiliser des documents Lucene pour stocker des ID et accéder aux documents en tant que tels, tout comme MongoDB. Mélangez-le avec Solr et vous obtenez maintenant une solution basée sur WebService et à charge équilibrée.
Vous pouvez même ajouter une comparaison de fournisseurs de cache hors processus tels que Velocity ou MemCached lorsque vous parlez de stockage de données similaire et d'évolutivité de MongoDB.
Les restrictions autour de MongoDB me rappellent d'utiliser MemCached, mais je peux utiliser Velocity de Microsoft et avoir plus de pouvoir de regroupement et de collecte de liste sur MongoDB (je pense). Ne peut pas être plus rapide ou é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) présente certains avantages, tels que la facilité d'utilisation de son API. Créez un document, créez un identifiant et stockez-le. Terminé. Agréable et facile.
Réponses:
C'est une excellente question, quelque chose que j'ai longuement réfléchi. Je vais résumer mes leçons apprises:
Vous pouvez facilement utiliser Lucene / Solr à la place de MongoDB pour à peu près toutes les situations, mais pas l'inverse. Le post de Grant Ingersoll le résume ici.
MongoDB etc. semble servir un objectif où il n'y a aucune exigence de recherche et / ou de facettage. Il semble que ce soit une transition plus simple et sans doute plus facile pour les programmeurs qui se désintoxiquent du monde du SGBDR. À moins que l'on ne s'y habitue, Lucene & Solr ont une courbe d'apprentissage plus abrupte.
Il n'y a pas beaucoup d'exemples d'utilisation de Lucene / Solr comme magasin de données, mais Guardian a fait des progrès et résume cela dans un excellent diaporama , mais ils ne sont pas non plus contraignants à sauter totalement sur le train de Solr et à "enquêter" sur la combinaison de Solr avec CouchDB.
Enfin, je proposerai notre expérience, mais je ne peux malheureusement pas en dire grand-chose sur l'analyse de rentabilisation. Nous travaillons à l'échelle de plusieurs To de données, une application en temps quasi réel. Après avoir étudié diverses combinaisons, a décidé de s'en tenir à Solr. Aucun regret jusqu'à présent (6 mois & comptage) et ne voyez aucune raison de passer à un autre.
Résumé: si vous n'avez pas d'exigence de recherche, Mongo propose une approche simple et puissante. Cependant, si la recherche est la clé de votre offre, vous feriez probablement mieux de vous en tenir à une seule technologie (Solr / Lucene) et d'en optimiser le diable - moins de pièces mobiles.
Mes 2 cents, j'espère que ça a aidé.
la source
Vous ne pouvez pas mettre à jour partiellement un document dans solr. Vous devez republier tous les champs afin de mettre à jour un document.
Et la performance compte. Si vous ne vous engagez pas, votre passage à solr ne prend pas effet, si vous vous engagez à chaque fois, les performances en souffrent.
Il n'y a aucune transaction dans solr.
Comme solr a ces inconvénients, nosql est parfois un meilleur choix.
la source
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 ensemble ces technologies. Voici un extrait:
la source
Veuillez également noter que certaines personnes ont intégré Solr / Lucene dans Mongo en ayant tous les index stockés dans Solr et en surveillant également les opérations d'oplog et en cascadant les mises à jour pertinentes dans Solr.
Avec cette approche hybride, vous pouvez vraiment avoir le meilleur des deux mondes avec des capacités telles que la recherche en texte intégral et des lectures rapides avec une banque de données fiable qui peut également avoir une vitesse d'écriture fulgurante.
C'est un peu technique à configurer mais il y a beaucoup de tailleurs d'oplog qui peuvent s'intégrer dans solr. Découvrez ce que la portée a fait dans cet article.
http://denormalised.com/home/mongodb-pub-sub-using-the-replication-oplog.html
la source
D'après mon expérience avec les deux, Mongo est idéal pour une utilisation simple et directe. Le principal inconvénient de Mongo que nous avons subi est la mauvaise performance des requêtes imprévues (vous ne pouvez pas créer d'index mongo pour toutes les combinaisons possibles de filtre / tri, vous ne pouvez tout simplement pas).
Et ici où Lucene / Solr prédomine, surtout avec la mise en cache FilterQuery, les performances sont exceptionnelles.
la source
Comme personne d'autre ne l'a mentionné, permettez-moi d'ajouter que MongoDB est sans schéma, tandis que Solr applique un schéma. Donc, si les champs de vos documents sont susceptibles de changer, c'est une des raisons de choisir MongoDB plutôt que Solr.
la source
schema.xml
, MAIS il a également des «champs dynamiques», c'est-à-dire des champs dont les types sont déterminés via des caractères génériques, de sorte que vous pouvez avoir tous les champs correspondant, disons,*_i
indexés en tant que champs entiers. lors de l' ajout de documents, vous pouvez avoir des documents conaining domaines tels quecount_i
,foo_i
,bar_i
qui sont tous compris comme des champs entiers sans apparaître dans laschema.xml
lettre. assez sans schéma, je dirais. voir youtube.com/watch?v=WYVM6Wz-XTw pour en savoir plus.@ mauricio-scheffer a mentionné Solr 4 - pour ceux qui sont intéressés, LucidWorks décrit Solr 4 comme "le serveur de recherche NoSQL" et il y a une vidéo sur http://www.lucidworks.com/webinar-solr-4-the-nosql -search-server / où ils vont en détail sur les fonctionnalités de NoSQL (ish). (Le -ish est pour leur version de schemaless étant en fait un schéma dynamique.)
la source
Si vous voulez simplement stocker des données en utilisant le format de valeur-clé, Lucene n'est pas recommandé car son index inversé gaspillera trop d'espace disque. Et avec la sauvegarde des données sur le disque, ses performances sont beaucoup plus lentes que celles des bases de données NoSQL telles que redis car redis enregistre les données en RAM. L'avantage le plus important pour Lucene est qu'il prend en charge la plupart des requêtes, donc les requêtes floues peuvent être prises en charge.
la source
Les solutions tierces, comme une queue mongo op-log, sont attrayantes. Certaines réflexions ou questions demeurent quant à savoir si les solutions pourraient être étroitement intégrées, en supposant une perspective de développement / architecture. Je ne m'attends pas à voir une solution étroitement intégrée pour ces fonctionnalités pour plusieurs raisons (quelque peu spéculatives et sujettes à clarification et pas à jour avec les efforts de développement):
la source
MongoDB Atlas aura bientôt un moteur de recherche basé sur lucene. La grande annonce a été faite lors de la conférence MongoDB World 2019 de cette semaine. C'est un excellent moyen d'encourager une plus grande utilisation de leur produit MongoDB Atlas à revenus élevés.
J'espérais le voir intégré dans la version 4.2 de MongoDB Enterprise, mais il n'y a pas eu de nouvelles concernant son introduction sur sa gamme de produits sur site.
Plus d'informations ici: https://www.mongodb.com/atlas/full-text-search
la source