elasticsearch c. s. MongoDB pour l'application du filtrage

Cette question est à propos de faire un choix architectural avant d'entrer dans les détails de l'expérimentation et de la mise en œuvre. C'est à propos de la pertinence, de l'évolutivité et les performances d'elasticsearch c. s. MongoDB, pour un peu le but spécifique.

Hypothétiquement à la fois de stocker les données des objets qui ont des champs et des valeurs, et de permettre l'interrogation de ce corps d'objets. Donc vraisemblablement le filtrage des sous-ensembles d'objets selon les champs sélectionnés ad-hoc, est quelque chose d'ajustement pour les deux.

Mon application tourne autour de la sélection d'objets selon des critères.
Il serait de sélectionner les objets par filtrage simultanément par plus d'un seul champ, autrement dit, sa requête critères de filtrage serait comportent généralement entre 1 et 5 champs, peut-être plus dans certains cas. Alors que les champs choisis comme des filtres serait un sous-ensemble d'une bien plus grande quantité de champs. Image 20 noms de champs existants, et chaque requête est une tentative pour filtrer les objets par quelques champs de ces total de plus de 20 champs (Ça peut être moins ou de plus de 20 ensemble des noms de champs existants, je viens d'utiliser ce numéro pour démontrer le ratio de champs utilisés comme filtres dans chaque discret de la requête). Le filtrage peut être par l'existence de champs choisis, ainsi que par les valeurs de champ, par exemple le filtrage des objets qui ont Un champ, et leur champ B est entre x et y, et leur champ de C est égale à w.

Mon application sera constamment faire ce genre de filtrage, alors qu'il n'y aurait rien, ou très peu, constante en termes de champs qui sont utilisés pour le filtrage à tout moment. Peut-être dans elasticsearch les index doivent être définies, mais peut-être même sans les indices de vitesse est au pair avec celle de MongoDB.

Que par les données à entrer dans le magasin, il n'y a pas de détails à ce sujet.. les objets seraient presque jamais changé après avoir été inséré. Peut-être de vieux objets devront être abandonné, je tiens à supposer que les deux banques de données à l'appui expiration de la suppression de choses en interne ou par une demande de requête. (De moins en moins souvent, des objets qui correspondent à une certaine requête devra être abandonnée).

Qu'en pensez-vous?
Et, avez-vous expérimenté cet aspect?

Je suis intéressé par la performance et l'évolutivité, de chacune des deux banques de données, pour ce genre de tâche. C'est le genre de l'architecture desing question, et les détails de stocker les options spécifiques à la requête ou de piliers qui doit faire bien conçue sont les bienvenus en tant que manifestation d'une pensée de la suggestion.

Merci!

  • Je n'ai aucune idée de pourquoi ce ne cesse de voix, sont-ils d'aussi éminents options après tout ce temps?
  • juste intéressant de quoi avez-vous choisi il y a 6 ans et quelle a été votre expierence jusqu'à maintenant :)?
  • Mise à JOUR - Pour ceux curieux de savoir si cette réponse est toujours d'actualité, MongoDB a maintenant des index de texte intégral pour fournir les mêmes fonctionnalités et avantages que les élastiques de recherche a été décrit dans la réponse choisie. Ils sont stockés comme des index séparés, et peut être interrogé en tant que de besoin, mais que vous ne perdez pas les avantages d'avoir un objectif général de base de données. J'ai été en utilisant MongoDB pour usage général et pour le texte des requêtes de recherche pour l'année dernière et le recommande fortement. Juste mes deux cents.
InformationsquelleAutor matanster | 2012-10-04