paint-brush
Utiliser Elasticsearch pour décharger la recherche et l'analyse de DynamoDB : avantages et inconvénientspar@rocksetcloud
4,401 lectures
4,401 lectures

Utiliser Elasticsearch pour décharger la recherche et l'analyse de DynamoDB : avantages et inconvénients

par Rockset8m2024/05/10
Read on Terminal Reader

Trop long; Pour lire

Bien qu'Elasticsearch soit connu pour être flexible et hautement personnalisable, il s'agit d'un système distribué complexe qui nécessite des opérations et une gestion de cluster et d'index pour rester performant.
featured image - Utiliser Elasticsearch pour décharger la recherche et l'analyse de DynamoDB : avantages et inconvénients
Rockset HackerNoon profile picture


Analyses sur DynamoDB

Les équipes d'ingénierie doivent souvent exécuter des filtres, des agrégations et des recherches de texte complexes sur les données de DynamoDB. Cependant, DynamoDB est une base de données opérationnelle optimisée pour le traitement des transactions et non pour l'analyse en temps réel. En conséquence, de nombreuses équipes d'ingénierie rencontrent des limites en matière d'analyse sur DynamoDB et recherchent des options alternatives.


En effet, les charges de travail opérationnelles ont des modèles d'accès très différents de ceux des charges de travail analytiques complexes. DynamoDB ne prend en charge qu'un ensemble limité d'opérations, ce qui rend l'analyse difficile et, dans certaines situations, impossible. Même AWS , la société derrière DynamoDB, conseille aux entreprises d'envisager de transférer les analyses vers d'autres solutions spécialement conçues. Une solution couramment référencée est Elasticsearch dans laquelle nous allons nous plonger aujourd'hui.


DynamoDB est l'une des bases de données NoSQL les plus populaires et est utilisée par de nombreuses entreprises Web dans les domaines des jeux, des médias sociaux, de l'IoT et des services financiers. DynamoDB est la base de données de choix pour son évolutivité et sa simplicité, permettant des performances à un chiffre en millisecondes à des échelles de 20 millions de requêtes par seconde. Afin d'atteindre cette vitesse à grande échelle, DynamoDB se concentre sur les performances optimales pour les charges de travail opérationnelles : opérations à haute fréquence et à faible latence sur des enregistrements de données individuels.


Elasticsearch est un moteur de recherche distribué open source construit sur Lucene et utilisé pour les cas d'utilisation de recherche de texte et d'analyse de journaux. Elasticsearch fait partie de la plus grande pile ELK qui comprend Kibana, un outil de visualisation pour les tableaux de bord analytiques. Bien qu'Elasticsearch soit connu pour être flexible et hautement personnalisable, il s'agit d'un système distribué complexe qui nécessite des opérations et une gestion de cluster et d'index pour rester performant. Il existe des offres gérées d'Elasticsearch disponibles auprès d'Elastic et d'AWS, vous n'avez donc pas besoin de l'exécuter vous-même sur des instances EC2.


Shameless Plug : Rockset est une base de données d'analyse en temps réel conçue pour le cloud. Il dispose d'un connecteur intégré à DynamoDB et ingère et indexe les données pour la recherche, les agrégations et les jointures en moins d'une seconde. Mais cet article vise à mettre en évidence les cas d'utilisation de DynamoDB et Elasticsearch, au cas où vous souhaiteriez explorer cette option.

Connexion de DynamoDB à Elasticsearch à l'aide d'AWS Lambda

Vous pouvez utiliser AWS Lambda pour charger en continu des données DynamoDB dans Elasticsearch à des fins d'analyse. Voici comment cela fonctionne:


  • Créez une fonction lambda pour synchroniser chaque mise à jour d'un flux DynamoDB vers Elasticsearch
  • Créez une fonction lambda pour prendre un instantané de la table DynamoDB existante et l'envoyer à Elasticsearch. Vous pouvez utiliser un script EC2 ou un flux Amazon Kinesis pour lire le contenu de la table DynamoDB.



Il existe une approche alternative pour synchroniser les données avec Elasticsearch impliquant le plug-in Logstash pour DynamoDB, mais elle n'est actuellement pas prise en charge et peut être complexe à configurer.

Recherche de texte sur les données DynamoDB à l'aide d'Elasticsearch

La recherche de texte consiste à rechercher du texte dans un document pour trouver les résultats les plus pertinents. Souvent, vous souhaiterez rechercher une partie d'un mot, un synonyme ou des antonymes de mots ou une chaîne de mots ensemble pour trouver le meilleur résultat. Certaines applications pondéreront même différemment les termes de recherche en fonction de leur importance.


DynamoDB peut prendre en charge certains cas d'utilisation limités de la recherche de texte simplement en utilisant le partitionnement pour filtrer les données. Par exemple, si vous êtes un site de commerce électronique, vous pouvez partitionner les données dans DynamoDB en fonction d'une catégorie de produits, puis exécuter la recherche en mémoire. Apparemment, c'est ainsi que la division de vente au détail d'Amazon.com gère de nombreux cas d'utilisation de la recherche de texte. DynamoDB prend également en charge une fonction contain qui vous permet de rechercher une chaîne contenant une sous-chaîne de données particulière.



Un site de commerce électronique peut partitionner les données en fonction de la catégorie de produits. Des attributs supplémentaires peuvent être affichés avec les données recherchées, comme la marque et la couleur.


Dans les scénarios où la recherche en texte intégral est au cœur de votre application, vous souhaiterez utiliser un moteur de recherche comme Elasticsearch avec un classement par pertinence. Voici comment fonctionne la recherche de texte à un niveau élevé dans Elasticsearch :


  • Classement de pertinence : Elasticsearch propose un classement de pertinence qu'il attribue immédiatement aux résultats de recherche. Vous pouvez également personnaliser le classement en fonction du cas d'utilisation spécifique de votre application. Par défaut, Elasticsearch créera un score de classement basé sur la fréquence des termes, la fréquence inverse des documents et la norme de longueur de champ.


  • Analyse de texte : Elasticsearch décompose le texte en jetons pour indexer les données, appelé tokenisation. Des analyseurs sont ensuite appliqués aux termes normalisés pour améliorer les résultats de recherche. L'analyseur standard par défaut divise le texte selon le consortium Unicode pour fournir une prise en charge générale et multilingue.


Elasticsearch propose également des concepts tels que la recherche floue, la recherche à saisie semi-automatique et une pertinence encore plus avancée qui peuvent être configurés pour répondre aux spécificités de votre application.

Filtres complexes sur les données DynamoDB à l'aide d'Elasticsearch

Des filtres complexes sont utilisés pour affiner l'ensemble de résultats, récupérant ainsi les données plus rapidement et plus efficacement. Dans de nombreux scénarios de recherche, vous souhaiterez combiner plusieurs filtres ou filtrer sur une plage de données, par exemple sur une période donnée.


DynamoDB partitionne les données et choisir une bonne clé de partition peut contribuer à rendre le filtrage des données plus efficace. DynamoDB prend également en charge les index secondaires afin que vous puissiez répliquer vos données et utiliser une clé primaire différente pour prendre en charge des filtres supplémentaires. Les index secondaires peuvent être utiles lorsqu'il existe plusieurs modèles d'accès à vos données.


Par exemple, une application logistique pourrait être conçue pour filtrer les articles en fonction de leur statut de livraison. Pour modéliser ce scénario dans DynamoDB, nous allons créer une table de base pour la logistique avec une clé de partition Item_ID , une clé de tri Status et les attributs acheteur, ETA et SLA .


Nous devons également prendre en charge un modèle d'accès supplémentaire dans DynamoDB lorsque les délais de livraison dépassent le SLA. Les index secondaires de DynamoDB peuvent être exploités pour filtrer uniquement les livraisons qui dépassent le SLA.


Un index sera créé sur le champ ETADelayedBeyondSLA qui est une réplique de l'attribut ETA déjà dans la table de base. Ces données ne sont incluses dans ETADelayedBeyondSLA que lorsque l'ETA dépasse le SLA. L'index secondaire est un index clairsemé, ce qui réduit la quantité de données à analyser dans la requête. L' buyer est la clé de partition et la clé de tri est ETADelayedBeyondSLA .




Les index secondaires peuvent être utilisés pour prendre en charge plusieurs modèles d'accès dans l'application, y compris des modèles d'accès impliquant des filtres complexes.


DynamoDB dispose d'une opération filterexpression dans son API Query and Scan pour filtrer les résultats qui ne correspondent pas à une expression. L' filterexpression n'est appliquée qu'après une opération de requête ou d'analyse de table, vous êtes donc toujours limité à la limite de 1 Mo de données pour une requête. Cela dit, l' filterexpression est utile pour simplifier la logique de l'application, réduire la taille de la charge utile de réponse et valider l'expiration de la durée de vie. En résumé, vous devrez toujours partitionner vos données en fonction des modèles d'accès de votre application ou utiliser des index secondaires pour filtrer les données dans DynamoDB.


DynamoDB organise les données en clés et valeurs pour une récupération rapide des données et n'est pas idéal pour un filtrage complexe. Lorsque vous avez besoin de filtres complexes, vous souhaiterez peut-être passer à un moteur de recherche comme Elasticsearch, car ces systèmes sont idéaux pour les requêtes pointues dans la botte de foin.


Dans Elasticsearch, les données sont stockées dans un index de recherche, c'est-à-dire la liste des documents pour lesquels la valeur de colonne est stockée sous forme de liste de publication. Toute requête comportant un prédicat (c'est-à-dire : WHERE user=A) peut récupérer rapidement la liste des documents satisfaisant le prédicat. À mesure que les listes de publications sont triées, elles peuvent être fusionnées rapidement au moment de la requête afin que tous les critères de filtrage soient remplis. Elasticsearch utilise égalementune mise en cache simple pour accélérer le processus de récupération des requêtes de filtrage complexes fréquemment consultées.


Les requêtes de filtrage, communément appelées requêtes sans notation dans Elasticsearch, peuvent récupérer des données plus rapidement et plus efficacement que les requêtes de recherche de texte. C'est parce que la pertinence n'est pas nécessaire pour ces requêtes. De plus, Elasticsearch prend également en charge les requêtes par plage permettant de récupérer rapidement des données entre une limite supérieure et inférieure (c'est-à-dire : age compris entre 0 et 5 ans).

Agrégations sur les données DynamoDB à l'aide d'Elasticsearch

Les agrégations se produisent lorsque les données sont collectées et exprimées sous une forme récapitulative à des fins de veille économique ou d'analyse des tendances. Par exemple, vous souhaiterez peut-être afficher les métriques d'utilisation de votre application en temps réel.


DynamoDB ne prend pas en charge les fonctions d'agrégation. La solution de contournement recommandée par AWS consiste à utiliser DynamoDB et Lambda pour conserver une vue agrégée des données dans une table DynamoDB.


Prenons comme exemple le regroupement de likes sur un site de réseau social comme Twitter. Nous ferons du tweet_ID la clé primaire, puis de la clé de tri la fenêtre temporelle selon laquelle nous regroupons les likes. Dans ce cas, nous activerons les flux DynamoDB et attacherons une fonction Lambda afin que, lorsque les tweets sont appréciés (ou détestés), ils soient tabulés dans like_count avec un horodatage (c'est-à-dire : last_ updated ).



Dans ce scénario, les flux DynamoDB et les fonctions Lambda sont utilisés pour tabuler un like_count en tant qu'attribut sur la table.


Une autre option consiste à décharger les agrégations vers une autre base de données, comme Elasticsearch. Elasticsearch est essentiellement un index de recherche et a ajouté des extensions pour prendre en charge les fonctions d'agrégation. L'une de ces extensions est doc values , une structure construite au moment de l'index pour stocker les valeurs du document de manière orientée colonnes. La structure est appliquée par défaut aux champs qui prennent en charge les valeurs de document et il existe une certaine surcharge de stockage associée aux valeurs de document. Si vous avez uniquement besoin de prendre en charge les agrégations sur les données DynamoDB, il peut être plus rentable d'utiliser un entrepôt de données capable de compresser efficacement les données pour les requêtes analytiques sur de vastes ensembles de données.


Voici un aperçu général du cadre d'agrégation d'Elasticsearch :


  • Agrégations de buckets : vous pouvez considérer le bucketing comme un GROUP BY dans le monde des bases de données SQL. Vous pouvez regrouper des documents en fonction de valeurs de champ ou de plages. Les agrégations de buckets Elasticsearch incluent également l'agrégation imbriquée et l'agrégation parent-enfant qui constituent des solutions courantes au manque de prise en charge des jointures.

  • Agrégations de métriques : les métriques vous permettent d'effectuer des calculs tels que SUM , COUNT , AVG , MIN , MAX , etc. sur un ensemble de documents. Les métriques peuvent également être utilisées pour calculer les valeurs d’une agrégation de compartiments.

  • Agrégations de pipeline : les entrées sur les agrégations de pipeline sont d'autres agrégations plutôt que des documents. Les utilisations courantes incluent les moyennes et le tri basé sur une métrique.


L'utilisation d'agrégations peut avoir des conséquences sur les performances, en particulier lorsque vous faites évoluer Elasticsearch .

Alternative à Elasticsearch pour la recherche, les agrégations et les jointures sur DynamoDB

Bien qu'Elasticsearch soit une solution pour effectuer des recherches et des agrégations complexes sur les données de DynamoDB, de nombreux partisans du sans serveur ont fait écho à leurs préoccupations concernant ce choix. Les équipes d'ingénierie choisissent DynamoDB car il est sans serveur et peut être utilisé à grande échelle avec très peu de frais opérationnels. Nous avons évalué quelques autres options d' analyse sur DynamoDB , notamment Athena, Spark et Rockset, sur la facilité de configuration, de maintenance, de capacité de requête et de latence dans un autre blog.


Rockset est une alternative à Elasticsearch et Alex DeBrie a parcouru le filtrage et l'agrégation des requêtes à l'aide de SQL sur Rockset. Rockset est une base de données cloud native avec un connecteur intégré à DynamoDB , facilitant le démarrage et la mise à l'échelle des cas d'utilisation analytiques, y compris les cas d'utilisation impliquant des jointures complexes. Vous pouvez explorer Rockset comme alternative à Elasticsearch dans notre essai gratuit avec 300 $ de crédits.