Cette question consiste à faire un choix architectural avant de plonger dans les détails de l'expérimentation et de la mise en œuvre. Il s'agit de l'adéquation, en termes d'évolutivité et de performances, d'elasticsearch par rapport à MongoDB, dans un but quelque peu spécifique.
En théorie, les deux stockent des objets de données qui ont des champs et des valeurs et permettent d'interroger ce corps d'objets. Donc, vraisemblablement, filtrer des sous-ensembles d'objets en fonction de champs sélectionnés ad hoc, est quelque chose qui convient aux deux.
Mon application tournera autour de la sélection d'objets selon des critères. Il sélectionnerait des objets en filtrant simultanément par plus d'un seul champ, en d'autres termes, ses critères de filtrage de requête comprendraient généralement entre 1 et 5 champs, peut-être plus dans certains cas. Alors que les champs choisis comme filtres seraient un sous-ensemble d'un plus grand nombre de champs. Imaginez quelque 20 noms de champs existants, et chaque requête est une tentative de filtrer les objets par quelques champs sur ces 20 champs globaux (il peut y avoir moins ou plus de 20 noms de champs globaux existants, je viens d'utiliser ce nombre pour démontrer le rapport de champs aux champs utilisés comme filtres dans chaque requête discrète). Le filtrage peut se faire par l'existence des champs choisis, ainsi que par les valeurs des champs, par exemple en filtrant les objets qui ont le champ A, et leur champ B est compris entre x et y,
Mon application fera en permanence ce type de filtrage, alors qu'il n'y aurait rien ou très peu de constante quant aux champs utilisés pour le filtrage à tout moment. Peut-être que dans elasticsearch, les index doivent être définis, mais peut-être que même sans index, la vitesse est au même niveau que celle de MongoDB.
Selon les données entrant dans le magasin, il n'y a pas de détails particuliers à ce sujet. Les objets ne seraient presque jamais modifiés après avoir été insérés. Peut-être que les anciens objets devraient être supprimés, j'aimerais supposer que les deux magasins de données prennent en charge la suppression de données en interne ou par une requête créée par l'application. (Moins fréquemment, les objets qui correspondent à une certaine requête devraient également être supprimés).
Qu'est-ce que tu penses? Et avez-vous expérimenté cet aspect?
Je m'intéresse aux performances et à l'évolutivité de celui-ci, de chacun des deux data stores, pour ce genre de tâche. C'est le genre de question de conception architecturale, et les détails des options spécifiques au magasin ou des pierres angulaires de la requête qui devraient le rendre bien architecturé sont les bienvenus comme démonstration d'une suggestion entièrement réfléchie.
Merci!