Analytics auf DynamoDB Entwicklungsteams müssen häufig komplexe Filter, Aggregationen und Textsuchen auf Daten aus DynamoDB ausführen. Allerdings ist DynamoDB eine operative Datenbank, die für die Transaktionsverarbeitung und nicht für Echtzeitanalysen optimiert ist. Daher stoßen viele Entwicklungsteams bei der Analyse von DynamoDB an Grenzen und suchen nach Alternativen. Das liegt daran, dass operative Workloads ganz andere Zugriffsmuster aufweisen als komplexe analytische Workloads. DynamoDB unterstützt nur eine begrenzte Anzahl von Operationen, was Analysen schwierig und in manchen Situationen unmöglich macht. Sogar , das Unternehmen hinter DynamoDB, rät Unternehmen, die Auslagerung von Analysen auf andere, speziell entwickelte Lösungen in Betracht zu ziehen. Eine häufig erwähnte Lösung ist Elasticsearch, mit der wir uns heute befassen werden. AWS ist eine der beliebtesten NoSQL-Datenbanken und wird von vielen Web-Scale-Unternehmen in den Bereichen Gaming, Social Media, IoT und Finanzdienstleistungen verwendet. DynamoDB ist aufgrund seiner Skalierbarkeit und Einfachheit die Datenbank der Wahl und ermöglicht eine Leistung im einstelligen Millisekundenbereich bei einer Größenordnung von 20 Millionen Anfragen pro Sekunde. Um diese Geschwindigkeit in großem Maßstab zu erreichen, konzentriert sich DynamoDB ganz darauf, die Leistung für operative Workloads zu optimieren – hochfrequente Operationen mit geringer Latenz an einzelnen Datensätzen. DynamoDB ist eine Open-Source-Suchmaschine, die auf Lucene basiert und für Anwendungsfälle wie Textsuche und Protokollanalyse verwendet wird. Elasticsearch ist Teil des größeren ELK-Stacks, zu dem auch Kibana gehört, ein Visualisierungstool für analytische Dashboards. Elasticsearch ist zwar für seine Flexibilität und hohe Anpassbarkeit bekannt, ist jedoch ein komplexes verteiltes System, das Cluster- und Indexvorgänge sowie -verwaltung erfordert, um leistungsfähig zu bleiben. Es gibt verwaltete Angebote von Elasticsearch von Elastic und AWS, sodass Sie es nicht selbst auf EC2-Instanzen ausführen müssen. Elasticsearch Unverhohlene Werbung: ist eine Echtzeit-Analysedatenbank für die Cloud. Sie verfügt über einen integrierten Konnektor zu DynamoDB und nimmt Daten auf und indiziert sie für sekundenschnelle Suchvorgänge, Aggregationen und Verknüpfungen. In diesem Beitrag geht es jedoch darum, Anwendungsfälle für DynamoDB und Elasticsearch hervorzuheben, falls Sie diese Option erkunden möchten. Rockset Verbinden von DynamoDB mit Elasticsearch mithilfe von AWS Lambda Sie können AWS Lambda verwenden, um DynamoDB-Daten kontinuierlich in Elasticsearch für Analysen zu laden. So funktioniert es: Erstellen Sie eine Lambda-Funktion, um jedes Update von einem mit Elasticsearch zu synchronisieren DynamoDB-Stream Erstellen Sie eine Lambda-Funktion, um einen Snapshot der vorhandenen DynamoDB-Tabelle zu erstellen und ihn an Elasticsearch zu senden. Sie können ein oder einen verwenden, um den Inhalt der DynamoDB-Tabelle zu lesen. EC2-Skript Amazon Kinesis-Stream Es gibt einen alternativen Ansatz zum Synchronisieren von Daten mit Elasticsearch unter Verwendung des für DynamoDB. Dieser wird derzeit jedoch nicht unterstützt und die Konfiguration kann komplex sein. Logstash-Plugins Textsuche in DynamoDB-Daten mit Elasticsearch Bei der Textsuche wird Text in einem Dokument durchsucht, um die relevantesten Ergebnisse zu finden. Oftmals möchten Sie nach einem Wortteil, einem Synonym oder einem Antonyme von Wörtern oder einer Wortfolge suchen, um das beste Ergebnis zu finden. Einige Anwendungen gewichten Suchbegriffe sogar je nach ihrer Wichtigkeit unterschiedlich. DynamoDB kann einige begrenzte Anwendungsfälle der Textsuche unterstützen, indem es einfach Partitionierung verwendet, um die Daten zu filtern. Wenn Sie beispielsweise eine E-Commerce-Site betreiben, können Sie Daten in DynamoDB basierend auf einer Produktkategorie partitionieren und dann die Suche im Arbeitsspeicher ausführen. Offensichtlich handhabt viele Anwendungsfälle der Textsuche auf diese Weise. DynamoDB unterstützt auch eine , mit der Sie eine Zeichenfolge finden können, die eine bestimmte Teilzeichenfolge von Daten enthält. die Einzelhandelsabteilung von Amazon.com Funktion „Contains“ Eine E-Commerce-Site kann Daten nach Produktkategorie aufteilen. Mit den gesuchten Daten können zusätzliche Attribute wie Marke und Farbe angezeigt werden. In Szenarien, in denen die Volltextsuche für Ihre Anwendung von zentraler Bedeutung ist, sollten Sie eine Suchmaschine wie Elasticsearch mit Relevanzranking verwenden. So funktioniert die Textsuche auf hoher Ebene in Elasticsearch: : Elasticsearch verfügt über ein standardmäßiges Relevanz-Ranking für die Suchergebnisse, Sie können das Ranking aber auch an Ihren spezifischen Anwendungsfall anpassen. Standardmäßig erstellt Elasticsearch einen Ranking-Score basierend auf der Begriffshäufigkeit, der inversen Dokumenthäufigkeit und der Feldlängennorm. Relevanz-Ranking : Elasticsearch zerlegt Text in Token, um die Daten zu indizieren. Dies wird als Tokenisierung bezeichnet. Anschließend werden Analysetools auf die normalisierten Begriffe angewendet, um die Suchergebnisse zu verbessern. Das standardmäßige Standardanalysetool zerlegt den Text gemäß dem Unicode-Konsortium, um allgemeine, mehrsprachige Unterstützung zu bieten. Textanalyse Elasticsearch verfügt außerdem über Konzepte wie Fuzzy-Suche, Auto-Vervollständigungssuche und noch erweiterte Relevanz, die an die Besonderheiten Ihrer Anwendung angepasst werden kann. Komplexe Filter für DynamoDB-Daten mit Elasticsearch Komplexe Filter werden verwendet, um den Ergebnissatz einzugrenzen und so Daten schneller und effizienter abzurufen. In vielen Suchszenarien möchten Sie mehrere Filter kombinieren oder nach einem Datenbereich filtern, z. B. über einen Zeitraum. DynamoDB partitioniert Daten und die Wahl eines guten Partitionsschlüssels kann dazu beitragen, das Filtern von Daten effizienter zu gestalten. DynamoDB unterstützt auch sekundäre Indizes, sodass Sie Ihre Daten replizieren und einen anderen Primärschlüssel verwenden können, um zusätzliche Filter zu unterstützen. können hilfreich sein, wenn es mehrere Zugriffsmuster für Ihre Daten gibt. Sekundäre Indizes Beispielsweise könnte eine Logistikanwendung so konzipiert werden, dass Artikel basierend auf ihrem Lieferstatus gefiltert werden. Um dieses Szenario in DynamoDB zu modellieren, erstellen wir eine Basistabelle für die Logistik mit einem Partitionsschlüssel von , einem Sortierschlüssel von und den Attributen Käufer, und . Item_ID Status ETA SLA Wir müssen außerdem ein zusätzliches Zugriffsmuster in DynamoDB unterstützen, wenn Lieferverzögerungen das SLA überschreiten. Sekundärindizes in DynamoDB können genutzt werden, um nur die Lieferungen herauszufiltern, die das SLA überschreiten. Für das Feld wird ein Index erstellt, der eine Replik des ETA-Attributs ist, das sich bereits in der Basistabelle befindet. Diese Daten werden nur dann in aufgenommen, wenn die ETA das SLA überschreitet. Der sekundäre Index ist ein Sparse-Index, der die Datenmenge reduziert, die in der Abfrage gescannt werden muss. Der ist der Partitionsschlüssel und der Sortierschlüssel ist . ETADelayedBeyondSLA ETADelayedBeyondSLA buyer ETADelayedBeyondSLA Sekundärindizes können verwendet werden, um mehrere Zugriffsmuster in der Anwendung zu unterstützen, einschließlich Zugriffsmuster mit komplexen Filtern. DynamoDB verfügt in seiner Abfrage- und Scan-API über eine , um Ergebnisse zu filtern, die nicht mit einem Ausdruck übereinstimmen. Der wird nur nach einer Abfrage- oder Scan-Tabellenoperation angewendet, sodass Sie immer noch an das Datenlimit von 1 MB für eine Abfrage gebunden sind. Allerdings ist der hilfreich, um die Anwendungslogik zu vereinfachen, die Größe der Antwortnutzlast zu reduzieren und den Ablauf der Lebensdauer zu validieren. Zusammenfassend müssen Sie Ihre Daten immer noch entsprechend den Zugriffsmustern Ihrer Anwendung partitionieren oder sekundäre Indizes verwenden, um Daten in DynamoDB zu filtern. Filterausdrucksoperation filterexpression filterexpression DynamoDB organisiert Daten in Schlüsseln und Werten für einen schnellen Datenabruf und ist nicht ideal für komplexe Filter. Wenn Sie komplexe Filter benötigen, sollten Sie zu einer Suchmaschine wie Elasticsearch wechseln, da diese Systeme ideal für die Suche nach der Nadel im Heuhaufen sind. In Elasticsearch werden Daten in einem Suchindex gespeichert, d. h. in der Liste der Dokumente, für die der Spaltenwert als Postingliste gespeichert ist. Jede Abfrage mit einem Prädikat (z. B.: user=A) kann schnell die Liste der Dokumente abrufen, die das Prädikat erfüllen. Da die Postinglisten sortiert sind, können sie zum Abfragezeitpunkt schnell zusammengeführt werden, sodass alle Filterkriterien erfüllt sind. Elasticsearch verwendet außerdem um den Abrufprozess häufig aufgerufener komplexer Filterabfragen zu beschleunigen. WHERE einfaches Caching, Filterabfragen, in Elasticsearch allgemein als bezeichnet, können Daten schneller und effizienter abrufen als Textsuchabfragen. Das liegt daran, dass für diese Abfragen keine Relevanz erforderlich ist. Darüber hinaus unterstützt Elasticsearch auch Bereichsabfragen, sodass Daten zwischen einer oberen und unteren Grenze (z. B. zwischen 0 und 5) schnell abgerufen werden können. Abfragen ohne Bewertung age Aggregationen von DynamoDB-Daten mit Elasticsearch Bei Aggregationen werden Daten gesammelt und in zusammengefasster Form für Business Intelligence oder Trendanalysen dargestellt. Beispielsweise möchten Sie möglicherweise Nutzungsmetriken für Ihre Anwendung in Echtzeit anzeigen. DynamoDB unterstützt keine Aggregatfunktionen. Die von AWS empfohlene Problemumgehung besteht darin zu verwenden, um eine aggregierte Datenansicht in einer DynamoDB-Tabelle beizubehalten. , DynamoDB und Lambda Als Beispiel verwenden wir auf einer Social-Media-Site wie Twitter. Wir machen die zum Primärschlüssel und den Sortierschlüssel zum Zeitfenster, nach dem wir Likes aggregieren. In diesem Fall aktivieren wir DynamoDB-Streams und fügen eine Lambda-Funktion an, sodass Tweets, die geliked (oder nicht geliked) werden, in mit einem Zeitstempel (z. B. “) tabellarisch aufgeführt werden. die Aggregation von Likes tweet_ID like_count last_ updated In diesem Szenario werden DynamoDB-Streams und Lambda-Funktionen verwendet, um einen Like_Count als Attribut in der Tabelle darzustellen. Eine weitere Option besteht darin, Aggregationen auf eine andere Datenbank wie Elasticsearch auszulagern. Elasticsearch ist im Kern ein Suchindex und verfügt über Erweiterungen zur Unterstützung von Aggregationsfunktionen. Eine dieser Erweiterungen ist , eine Struktur, die beim Indexieren erstellt wird, um Dokumentwerte spaltenorientiert zu speichern. Die Struktur wird standardmäßig auf Felder angewendet, die Doc Values unterstützen, und Doc Values führt zu einer gewissen Speicheraufblähung. Wenn Sie nur Unterstützung für Aggregationen von DynamoDB-Daten benötigen, ist es möglicherweise kostengünstiger, ein Data Warehouse zu verwenden, das Daten für analytische Abfragen über große Datensätze effizient komprimieren kann. Doc Values Hier ist ein allgemeiner Überblick über : das Aggregationsframework von Elasticsearch : Sie können sich Bucketing ähnlich wie in der Welt der SQL-Datenbanken vorstellen. Sie können Dokumente basierend auf Feldwerten oder Bereichen gruppieren. Elasticsearch-Bucket-Aggregationen umfassen auch die verschachtelte Aggregation und die übergeordnete/untergeordnete Aggregation, die gängige Workarounds für die fehlende Join-Unterstützung sind. Bucket-Aggregationen GROUP BY Mit Metriken können Sie Berechnungen wie , , , , usw. für eine Reihe von Dokumenten durchführen. Metriken können auch verwendet werden, um Werte für eine Bucket-Aggregation zu berechnen. Metrikaggregationen: SUM COUNT AVG MIN MAX : Die Eingaben für Pipeline-Aggregationen sind keine Dokumente, sondern andere Aggregationen. Häufige Verwendungszwecke sind Durchschnittswerte und Sortierungen basierend auf einer Metrik. Pipeline-Aggregationen Die Verwendung von Aggregationen kann zu Leistungseinbußen führen, insbesondere wenn Sie . Elasticsearch skalieren Alternative zu Elasticsearch für Suche, Aggregationen und Verknüpfungen auf DynamoDB Elasticsearch ist zwar eine Lösung für komplexe Suchvorgänge und Aggregationen von Daten aus DynamoDB, doch viele äußern Bedenken gegenüber dieser Wahl. Entwicklungsteams entscheiden sich für DynamoDB, weil es serverlos ist und mit sehr geringem Betriebsaufwand in großem Maßstab eingesetzt werden kann. In einem anderen Blog haben wir einige andere Optionen für bewertet, darunter Athena, Spark und Rockset, und zwar hinsichtlich einfacher Einrichtung, Wartung, Abfragefähigkeit und Latenz. Befürworter serverloser Systeme Analysen auf DynamoDB Rockset ist eine Alternative zu Elasticsearch und Alex DeBrie hat mit SQL auf Rockset erläutert. Rockset ist eine Cloud-native Datenbank mit , die den Einstieg erleichtert und analytische Anwendungsfälle skaliert, einschließlich Anwendungsfälle mit komplexen Verknüpfungen. Sie können Rockset als Alternative zu Elasticsearch in unserer mit 300 $ Guthaben erkunden. das Filtern und Aggregieren von Abfragen integriertem Connector zu DynamoDB kostenlosen Testversion