NoSQL (MongoDB) vs Lucene (ou Solr) comme firebase database

Avec le mouvement NoSQL basé sur des bases de données basées sur des documents, j’ai récemment consulté MongoDB. J’ai remarqué une similitude frappante avec la façon de traiter les éléments comme “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 firebase database?

Ce que je suis (et je suis sûr que d’autres) recherchent dans une réponse, ce sont des comparaisons approfondies. Sautons par-dessus toutes les discussions sur les bases de données relationnelles, car elles servent un objective 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!). Vous pouvez utiliser des documents Lucene pour stocker des identifiants et accéder aux documents en tant que tels, tout comme MongoDB. Mélangez-le avec Solr et vous obtenez maintenant une solution WebService basée sur la charge équilibrée.

Vous pouvez même proposer une comparaison des fournisseurs de cache externes tels que Velocity ou MemCached lorsque vous parlez de stockage et d’évolutivité de données similaires de MongoDB.

Les ressortingctions autour de MongoDB me rappellent l’utilisation de MemCached, mais je peux utiliser Microsoft Velocity et avoir plus de pouvoir de regroupement et de collecte de listes 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) ont certains avantages, tels que la facilité d’utilisation de leur API. Créer un document, créer un identifiant et le stocker. Terminé. Nice et facile.

C’est une excellente question, quelque chose sur laquelle j’ai beaucoup réfléchi. Je vais résumer mes leçons apsockets:

  1. Vous pouvez facilement utiliser Lucene / Solr au lieu de MongoDB pour pratiquement toutes les situations, mais pas l’inverse. Le post de Grant Ingersoll résume la situation ici.

  2. MongoDB, etc., semble servir à des fins de recherche et / ou de facettage. Il semble être une transition plus simple et sans doute plus facile pour les programmeurs détoxifiant du monde des SGBDR. À moins d’y avoir l’habitude, Lucene & Solr ont une courbe d’apprentissage plus raide.

  3. Il n’ya pas beaucoup d’exemples d’utilisation de Lucene / Solr en tant que banque de données, mais Guardian a fait des progrès et en a fait une excellente diapositive , mais ils ne sont pas du tout prêts à sauter sur Solr. avec CouchDB.

  4. Enfin, je vais offrir notre expérience, malheureusement, ne peut pas révéler beaucoup sur l’affaire. Nous travaillons à l’échelle de plusieurs To de données, une application en temps quasi réel. Après avoir étudié différentes combinaisons, a décidé de restr avec Solr. Pas de regrets jusqu’ici (6 mois et comptage) et ne vois aucune raison de passer à autre chose.

Résumé: si vous n’avez pas besoin de recherche, Mongo propose une approche simple et puissante. Cependant, si la recherche est la clé de votre offre, vous êtes probablement mieux en mesure de restr fidèle à une technologie (Solr / Lucene) et d’en optimiser le rendement – moins de pièces mobiles.

Mes 2 cents, j’espère que ça a aidé.

Vous ne pouvez pas mettre à jour partiellement un document dans solr. Vous devez republier tous les champs pour mettre à jour un document.

Et la performance compte. Si vous ne vous engagez pas, votre modification de Solr ne prend pas effet, si vous vous engagez à chaque fois, les performances en pâtissent.

Il n’y a pas de transaction dans Solr.

Comme solr a ces inconvénients, quelques fois nosql est un meilleur choix.

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 les mises à jour pertinentes en cascade dans Solr.

Avec cette approche hybride, vous pouvez vraiment avoir le meilleur des deux mondes avec des fonctionnalité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 commerçants oplog qui peuvent s’intégrer dans Solr. Découvrez ce que rangespan a fait dans cet article.

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

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. Voici un extrait:

[…] Cependant, nous observons que les performances de requête de Solr diminuent lorsque la taille de l’index augmente. Nous avons réalisé que la meilleure solution consiste à utiliser à la fois Solr et Mongo DB. Ensuite, nous intégrons Solr avec MongoDB en stockant le contenu dans MongoDB et en créant un index en utilisant Solr pour la recherche en texte intégral. Nous stockons uniquement 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. Obtenir des documents de MongoDB est plus rapide que Solr car il n’y a pas d’parsingurs, de scoring, etc. […]

Comme personne d’autre ne l’a mentionné, permettez-moi d’append 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.

D’après mon expérience des deux, Mongo est idéal pour une utilisation simple et directe. Le principal inconvénient de Mongo est la faible performance des requêtes imprévues (vous ne pouvez pas créer d’index mongo pour toutes les combinaisons filtre / sorting possibles, vous ne pouvez tout simplement pas).

Et là où Lucene / Solr prévaut, surtout avec la mise en cache FilterQuery, les performances sont exceptionnelles.

@ mauricio-scheffer a mentionné Solr 4 – pour ceux que cela intéresse, 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 dans les détails sur les fonctionnalités NoSQL (ish). (Le -ish est pour leur version de schemaless étant un schéma dynamic.)

Si vous souhaitez simplement stocker des données en utilisant le format clé-valeur, Lucene n’est pas recommandé car son index inversé gaspille 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 les redis, car elles permettent d’enregistrer des données dans la RAM. L’avantage le plus important pour Lucene est qu’il supporte beaucoup de requêtes, donc les requêtes floues peuvent être supscopes.

Les solutions tierces, comme la queue de mongo op-log sont attrayantes. Certaines reflections ou questions demeurent quant à savoir si les solutions pourraient être étroitement intégrées, en adoptant une perspective de développement / architecture. Je ne m’attends pas à voir une solution étroitement intégrée pour ces fonctionnalités pour quelques raisons (quelque peu spéculative et sujette à clarification et non à jour avec les efforts de développement):

  • mongo est c ++, lucene / solr sont java
  • lucene supporte divers formats de doc
    • mongo se concentre sur JSON (BSON)
  • lucene utilise des documents immuables
    • les mises à jour sur un seul champ posent problème, si elles sont disponibles
  • les index lucene sont immuables avec des opérations de fusion complexes
  • mongo requêtes sont javascript
  • mongo n’a aucun parsingur / tokenizer de texte (AFAIK)
  • les formats mongo doc sont limités, cela pourrait aller à contre-courant pour lucene
  • les opérations d’agrégation mongo peuvent ne pas avoir de place dans lucene
    • lucene a des options pour stocker des champs sur plusieurs documents, mais ce n’est pas la même chose
    • solr fournit en quelque sorte une agrégation / des statistiques et des requêtes SQL / graph

NoSQL fonctionne comme une firebase database multi-nœuds offrant de grandes fonctionnalités d’évolutivité. Aujourd’hui, de nombreuses bases de données NoSQL prennent en charge le partitionnement des données sur différents nœuds, ce qui permet de dimensionner des ensembles de données volumineux tout en réduisant la duplication inutile. L’efficacité de l’application à construire dépend non seulement des modèles de données, mais également de l’efficacité des nouvelles fonctionnalités. Les modèles de données fonctionnent comme un pont entre les problèmes du monde réel et les logiciels. Les solutions de firebase database NoSQL développent des applications logicielles modernes.