35 votes

Comment effectuer une recherche dans d'énormes ensembles de données non textuelles?

Dans un projet que je suis en train de travailler, le client dispose d'un une ancienne et massive(téraoctet de gamme) SGBDR. Les requêtes de toutes sortes sont lents et il n'y a pas de temps à corriger/refactoriser le schéma. J'ai identifié les ensembles de requêtes communes qui doivent être optimisés. Cet ensemble est divisé en deux: le texte intégral et les métadonnées de requêtes.

Mon plan est d'extraire les données à partir de leur base de données et la partition à travers deux différents systèmes de stockage de chaque optimisé pour une requête particulière définie.

Pour la recherche de texte intégral, Solr est un moteur qui a plus de sens. C'est la fragmentation et la réplication en font un grand ajustement pour la moitié du problème.

Pour les métadonnées de requêtes, je ne suis pas sûr de ce que la route à prendre. Actuellement, je suis en train de penser à l'aide d'un SGBDR avec extrêmement de-schéma normalisé qui représente un sous-ensemble particulier de données à partir de la "foi" des SGBDR. Cependant, mon client est préoccupé par l'absence de la fragmentation et de la réplication de ces sous-système et de la difficulté/complications de réglage des caractéristiques telles que la comparaison avec Solr, qui comprend déjà entre eux. Les métadonnées dans ce cas, prend la forme de nombres entiers, les dates, les booléens, les bits, et les chaînes de caractères(avec la taille max de 10chars).

Est-il une base de données un système de stockage intégré dans la fragmentation et de la réplication peut être particulièrement utile pour la requête a dit métadonnées? Peut-être un no-sql solution qui fournit un bon moteur de recherche?

Éclairer s'il vous plaît.

Ajouts/Réponses:

Solr peut être utilisé pour les métadonnées, toutefois, les métadonnées ne sont pas volatiles. Par conséquent, je voudrais avoir à s'engager souvent à l'index. Ce serait la cause de la recherche à se dégrader assez vite.

22voto

Mauricio Scheffer Points 70470

RavenDB:

Inconvénients: il est sous licence AGPL. En fonction de votre dev/environnement de serveur, vous pourriez envisager de s'exécuter sur .NET un con. Aussi, je ne suis pas au courant de l'état des clients pour d'autres plaforms que .NET.

Solandra:

  • Intègre Solr et Cassandra
  • La recherche plein texte, géré par Solr
  • La réplication et de la fragmentation, géré par Cassandra

Inconvénients: pas encore sorti.

ElasticSearch:

ElasticSearch ressemble à RavenDB mais il semble insister sur la recherche de texte intégral où RavenDB met l'accent sur d'être un général de bases de données NoSQL.

4voto

alan Points 585

L'utilisation de MongoDB pour votre magasin de métadonnées:

Cependant, l'inconvénient est que vous ne pouvez pas effectuer des jointures. Être intelligent sur la dénormalisation vos données de sorte que vous pouvez éviter cela.

2voto

Charles Lambert Points 3051

Je suis sûr que votre conscience que vous n'allez pas pour obtenir rapidement et les temps de requête sur n'importe quel système qui a des mises à jour fréquentes. Pour mettre en œuvre la fragmentation-vous contre un SGBDR vous devez trouver quelques clés pour fractionner les documents et remplir plusieurs bases de données. Ensuite, vous pouvez les interroger tous en même temps pour obtenir et traiter les données dans une carte de réduire de mode. Cela vous permettra d'augmenter le nombre de machines que vos données augmente, et éventuellement vous permettre d'augmenter la vitesse de l'opération. À partir d'une rapide recherche sur google à la fois MongoDB, Hadoop et fournir une carte/réduire les fonctionnalités, je suis pas familier avec les deux.

Il n'est pas rare pour les cas complexes long de l'exécution de rapports pour être générées à la volée. Toutefois, cela est généralement accompagnée par une notification par email lorsque le rapport est terminé génération. Il en fait un bon push notification format d'interface avec les humains. Aussi, si ces rapports sont attendus de façon cyclique (hebdomadaire, mensuelle, etc.) vous pouvez toujours utiliser l'e-mail de notification lorsque ces rapports sont prêts, la seule différence est le coup d'envoi pour la production est automatisée.

2voto

Bashwork Points 1258

Si vous utilisez elasticsearch, vous pouvez simplement ajouter les métadonnées en tant que touches supplémentaires du document json:

{
    "message": ... your full text,
    "date": "2009-11-15T14:12:12",
    ...
}

Ensuite, vous pouvez rechercher avec les deux en même temps. Sinon, si vous voulez toujours faire les deux approche système, monogoDB est une banque de document avec la fonction d'auto-partage qui a un peu assez de requête avancée des mécanismes (champs, réduire la carte, les indices rapide des requêtes).

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