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 , 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. AWS 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. DynamoDB 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. Elasticsearch Shameless Plug : 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. Rockset 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 vers Elasticsearch flux DynamoDB Créez une fonction lambda pour prendre un instantané de la table DynamoDB existante et l'envoyer à Elasticsearch. Vous pouvez utiliser un ou un pour lire le contenu de la table DynamoDB. script EC2 flux Amazon Kinesis Il existe une approche alternative pour synchroniser les données avec Elasticsearch impliquant le pour DynamoDB, mais elle n'est actuellement pas prise en charge et peut être complexe à configurer. plug-in Logstash 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 gère de nombreux cas d'utilisation de la recherche de texte. DynamoDB prend également en charge une qui vous permet de rechercher une chaîne contenant une sous-chaîne de données particulière. la division de vente au détail d'Amazon.com fonction contain 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 : : 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. Classement de pertinence : 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. Analyse de texte 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. peuvent être utiles lorsqu'il existe plusieurs modèles d'accès à vos données. Les index secondaires 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 , une clé de tri et les attributs acheteur, et . Item_ID Status ETA 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 qui est une réplique de l'attribut ETA déjà dans la table de base. Ces données ne sont incluses dans 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' est la clé de partition et la clé de tri est . ETADelayedBeyondSLA ETADelayedBeyondSLA buyer 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 dans son API Query and Scan pour filtrer les résultats qui ne correspondent pas à une expression. L' 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' 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. filterexpression filterexpression filterexpression 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 : 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 également pour accélérer le processus de récupération des requêtes de filtrage complexes fréquemment consultées. WHERE une mise en cache simple Les requêtes de filtrage, communément appelées 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 : compris entre 0 et 5 ans). requêtes sans notation age 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 pour conserver une vue agrégée des données dans une table DynamoDB. DynamoDB et Lambda Prenons comme exemple sur un site de réseau social comme Twitter. Nous ferons du 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 avec un horodatage (c'est-à-dire : ). le regroupement de likes tweet_ID like_count 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 , 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. doc values Voici un aperçu général du cadre : d'agrégation d'Elasticsearch : vous pouvez considérer le bucketing comme un 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 buckets GROUP BY les métriques vous permettent d'effectuer des calculs tels que , , , , , 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 métriques : SUM COUNT AVG MIN MAX : 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. Agrégations de pipeline 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 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' , notamment Athena, Spark et Rockset, sur la facilité de configuration, de maintenance, de capacité de requête et de latence dans un autre blog. partisans du sans serveur analyse sur DynamoDB Rockset est une alternative à Elasticsearch et Alex DeBrie a parcouru à l'aide de SQL sur Rockset. Rockset est une base de données cloud native avec un , 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 avec 300 $ de crédits. le filtrage et l'agrégation des requêtes connecteur intégré à DynamoDB essai gratuit