À l'aide de Solr index de recherche en tant que base de données - est-ce “mal”?
Mon équipe est de travailler avec un tiers de la CMS qui utilise Solr comme un index de recherche. J'ai remarqué qu'il semble que les auteurs sont à l'aide de Solr comme une base de données de toutes sortes à ce que chaque document retourné contient deux champs:
- La Solr d'identification du document (en fait un nom de classe et id de base de données)
- Une représentation XML de l'ensemble de l'objet
Donc, fondamentalement, il exécute une recherche Solr, télécharger la représentation XML de l'objet, puis instancier l'objet de l'XML plutôt que de regarder dans la base de données à l'aide de l'id.
Mon intuition me dit que c'est une mauvaise pratique. Solr est un index de recherche, pas une base de données... donc il fait plus de sens pour moi d'exécuter nos recherches complexes à l'encontre de Solr, obtenir l'id de document, puis tirez les lignes correspondantes de la base de données.
Est l'implémentation actuelle, parfaitement sain, ou est-il données à l'appui de l'idée que c'est mûr pour le refactoring?
EDIT: Quand je dis "représentation XML" - je veux dire celui qui est stocké champ qui contient une chaîne de caractères XML de toutes les propriétés de l'objet, non pas de multiples champs mémorisés.
- Juste par curiosité, quel CMS est-il?
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez utiliser SOLR comme une base de données, mais il y a vraiment de sérieux avertissements :
SOLR les plus communes du motif de l'accès, qui est sur http ne répond particulièrement bien à des lots de l'interrogation. En outre, SOLR n'a PAS de flux de données --- donc vous ne pouvez pas paresseusement itérer sur des millions d'enregistrements à la fois. Cela signifie que vous devez être très attentive lors de la conception de données à grande échelle des modèles d'accès avec SOLR.
Bien que SOLR performance évolue horizontalement (plus de machines, plus de cœurs, etc..) ainsi qu'à la verticale (plus de RAM, de meilleures machines, etc), ses capacités d'interrogation sont sévèrement limitées par rapport à celles de la maturité de SGBDR. Cela dit, il ya quelques excellentes fonctions, comme le champ statistiques des requêtes, qui sont tout à fait confortable.
Les développeurs qui sont utilisés à l'aide de bases de données relationnelles souvent des problèmes lorsqu'ils utilisent les mêmes modèles de conception de DAO dans un SOLR paradigme, en raison de la façon SOLR utilise des filtres dans les requêtes. Il y aura une courbe d'apprentissage pour le développement de la bonne approche pour la construction d'une application qui utilise SOLR pour une partie de ses grandes requêtes ou statefull modifications.
La "enterprisy" des outils qui permettent de avancé de gestion de session et statefull entités que de nombreuses avancées web-cadres (Ruby, Hibernate, ...) offre devront être complètement jeté par la fenêtre.
Bases de données relationnelles sont destinés à traiter des données complexes et les relations - et ils sont ainsi accompagnés par l'état de l'art des mesures et des outils d'analyse automatisée. Dans SOLR, j'ai trouvé moi-même écrit à de tels outils et manuellement les stress-tests de beaucoup, qui peut être un puits de temps.
Le rejoindre : c'est le grand tueur. Les bases de données relationnelles méthodes de soutien pour la création et l'optimisation de vues et les requêtes de jointure tuples basé sur des prédicats simples. Dans SOLR, il n'y a pas de méthodes robustes pour rejoindre données sur les indices.
La résilience : Pour la haute disponibilité, SolrCloud utilise un système de fichiers distribués en dessous (c'est à dire HCFS). Ce modèle est tout à fait différente, alors que d'une base de données relationnelle, qui, habituellement, ne la résilience à l'aide des esclaves et des maîtres, ou du RAID, et ainsi de suite. Donc, vous devez être prêt à fournir la résilience de l'infrastructure SOLR exige si vous voulez qu'il soit de cloud extensible et résistant.
Que dit - il ya beaucoup de avantages évidents pour SOLR pour certaines tâches : (voir http://wiki.apache.org/solr/WhyUseSolr) -- lâche requêtes sont beaucoup plus faciles à exécuter et le retour des résultats significatifs. L'indexation est un défaut, de sorte que la plupart des requêtes arbitraires courir assez efficacement (à la différence d'un SGBDR, où vous avez souvent afin d'optimiser et de normaliser après le fait).
Conclusion: Même si vous POUVEZ utiliser SOLR comme un SGBDR, vous pouvez trouver (que j'ai) qui est, à terme, "pas de repas gratuit" - et les économies de coûts de super-cool lucene texte de recherches et de haute performance, en mémoire de l'indexation, sont souvent pris en charge par la réduction de la souplesse et de l'adoption de nouvelles données d'accès de flux de travail.
Il est parfaitement raisonnable d'utiliser Solr comme une base de données, selon votre application. En fait, c'est à peu près ce que le tuteur.co.royaume-uni est en train de faire.
C'est certainement pas mauvaise pratique en soi. C'est seulement un problème si vous utilisez le mauvais sens, juste comme n'importe quel autre outil à n'importe quel niveau, même GOTOs.
Quand vous dites "Une représentation XML..." je suppose que vous parlez d'avoir plusieurs stockées Solr champs et de la récupération de cette aide Solr format XML, et pas juste un grand XML de contenu de champ (ce qui serait une terrible utilisation de Solr). Le fait que Solr utilise XML en tant que par défaut le format de réponse est largement hors de propos, vous pouvez également utiliser un protocole binaire, il est donc tout à fait comparable aux traditionnelles de bases de données relationnelles à cet égard.
En fin de compte, c'est aux besoins de votre application. Solr est principalement un moteur de recherche, mais peut aussi agir comme une base de données NoSQL pour de nombreuses applications.
Cela a probablement été fait pour des raisons de performance, si elle ne cause pas de problèmes je le laisser seul. Il y a une grande zone d'ombre de ce qui devrait être dans une base de données traditionnelle vs un index solr. Ive semblent les gens faire des choses similaires à ce (généralement de paires clé-valeur ou json au lieu de xml) pour la présentation de l'INTERFACE utilisateur et l'objet réel à partir de la base de données si nécessaire pour les mises à jour/suppression. Mais toutes les lectures il suffit d'aller à Solr.
J'ai vu des choses semblables faites, parce qu'elle permet très vite de recherche. Nous sommes de transférer des données de notre index Lucene dans un fast-key-value store pour suivre SÈCHE principes et aussi diminuer la taille de l'index. Il n'est pas difficile et rapidement la règle pour ce genre de chose.