wake-up-neo.com

Wie werden Tabellen in AWS DynamoDB verbunden?

Ich weiß, dass das gesamte Design auf natürlichen Aggregaten (Dokumenten) basieren sollte. Allerdings denke ich daran, eine separate Tabelle für Lokalisierungen (lang, key, text) zu implementieren und Schlüssel in anderen Tabellen zu verwenden. Ich konnte jedoch kein Beispiel dafür finden. 

Alle Hinweise können hilfreich sein!

24
Centurion

Sie sind korrekt, DynamoDB ist nicht als relationale Datenbank konzipiert und unterstützt keine Join-Vorgänge. Sie können sich DynamoDB als eine Menge von Schlüssel-Wert-Paaren vorstellen.

Sie können dieselben Schlüssel für mehrere Tabellen verwenden (z. B. document_IDs), sie werden jedoch von DynamoDB nicht automatisch synchronisiert oder weisen Fremdschlüssel-Funktionen auf. Die document_IDs in einer Tabelle sind zwar identisch, sind jedoch technisch eine andere Menge als die in einer anderen Tabelle. Es ist Sache Ihrer Anwendungssoftware, sicherzustellen, dass diese Schlüssel synchronisiert sind.

DynamoDB ist eine andere Art, über Datenbanken nachzudenken. Möglicherweise möchten Sie eine verwaltete relationale Datenbank wie Amazon Aurora in Betracht ziehen: https://aws.Amazon.com/rds/aurora/

Beachten Sie, dass Amazon EMR das Verknüpfen von DynamoDB-Tabellen zulässt. Ich bin jedoch nicht sicher, wonach Sie suchen: http://docs.aws.Amazon.com/ElasticMapReduce/latest/DeveloperGuide/EMRforDynamoDB .html

24
Reid Hughes

Mit DynamoDB glaube ich, dass Sie die Daten in der Form speichern möchten, die Sie später lesen möchten.

Wenn Sie feststellen, dass Sie komplexe Leseabfragen benötigen, sind Sie möglicherweise in die Falle geraten, zu erwarten, dass sich DynamoDB wie ein RDBMS verhält, was jedoch nicht der Fall ist. Transformieren und formen Sie die Daten, die Sie schreiben, halten Sie das Lesen einfach.

Festplatten sind heutzutage weitaus billiger als Berechnungen - haben Sie keine Angst, denormalisieren.

9
Lloyd

Eine Lösung, die ich mehrmals in diesem Bereich gesehen habe, ist die Synchronisierung von DynamoDB in eine separate Datenbank, die für die von Ihnen gesuchten Vorgangsarten besser geeignet ist.

Ich habe ein Blog zu diesem Thema geschrieben, in dem ich verschiedene Ansätze verglichen habe, mit denen die Leute dieses Problem angegangen sind, aber ich fasse hier einige der wichtigsten Erkenntnisse zusammen, damit Sie nicht alles lesen müssen .

DynamoDB-Sekundärindizes

Was ist gut?

  1. Schnell und ohne weitere Systeme!
  2. Geeignet für eine bestimmte Analysefunktion, die Sie erstellen (wie eine Bestenliste).

Überlegungen

  1. Begrenzte Anzahl von Sekundärindizes, begrenzte Genauigkeit von Abfragen
  2. Teuer, wenn Sie auf Scans angewiesen sind
  3. Sicherheits- und Leistungsprobleme bei der direkten Verwendung der Produktionsdatenbank für Analysen

DynamoDB + Kleber + S3 + Athena

Architecture

Was ist gut?

  1. Alle Komponenten sind „serverlos“ und erfordern keine Bereitstellung der Infrastruktur
  2. Einfach zu automatisierende ETL-Pipeline

Überlegungen

  1. Hohe End-to-End-Datenlatenz von mehreren Stunden, was veraltete Daten bedeutet
  2. Die Abfragelatenz variiert zwischen zehn Sekunden und Minuten
  3. Durch die Schemaerzwingung können Informationen mit gemischten Typen verloren gehen
  4. Der ETL-Prozess muss möglicherweise von Zeit zu Zeit gewartet werden, wenn sich die Datenstruktur in der Quelle ändert

DynamoDB + Hive/Spark

Architecture

Was ist gut?

  1. Abfrage der neuesten Daten in DynamoDB
  2. Erfordert keine andere ETL/Vorverarbeitung als die Angabe eines Schemas

Überlegungen

  1. Bei der Durchsetzung von Schemas können Informationen verloren gehen, wenn Felder gemischte Typen aufweisen
  2. Der EMR-Cluster erfordert einige Administrations- und Infrastrukturverwaltungsaufgaben
  3. Abfragen über die neuesten Daten sind mit Scans verbunden und teuer
  4. Die Abfragelatenz variiert zwischen zehn Sekunden und Minuten direkt in Hive/Spark
  5. Auswirkungen auf die Sicherheit und Leistung beim Ausführen von analytischen Abfragen in einer operativen Datenbank

DynamoDB + AWS Lambda + Elasticsearch

Was ist gut?

  1. Unterstützung für die Volltextsuche
  2. Unterstützung für verschiedene Arten von analytischen Abfragen
  3. Kann die neuesten Daten in DynamoDB überarbeiten

Überlegungen

  1. Erfordert die Verwaltung und Überwachung der Infrastruktur für das Aufnehmen, Indizieren, Replizieren und Sharding
  2. Erfordert ein separates System, um die Datenintegrität und -konsistenz zwischen DynamoDB und Elasticsearch sicherzustellen
  3. Die Skalierung erfolgt manuell und erfordert die Bereitstellung zusätzlicher Infrastrukturen und Vorgänge
  4. Keine Unterstützung für Verknüpfungen zwischen verschiedenen Indizes

DynamoDB + Rockset

Architecture

Was ist gut?

  1. Völlig ohne Server. Kein Betrieb oder Bereitstellung von Infrastruktur oder Datenbank erforderlich
  2. Live-Synchronisation zwischen DynamoDB und der Rockset-Sammlung, sodass sie nie mehr als ein paar Sekunden voneinander entfernt sind
  3. Überwachung, um die Konsistenz zwischen DynamoDB und Rockset sicherzustellen
  4. Automatische Indizes, die über die Daten erstellt werden und Abfragen mit geringer Latenz ermöglichen
  5. SQL-Abfragedienst, der sich auf hohe QPS skalieren lässt
  6. Verknüpfung mit Daten aus anderen Quellen wie Amazon Kinesis, Apache Kafka, Amazon S3 usw.
  7. Integrationen mit Tools wie Tableau, Redash, Superset und SQL API über REST und unter Verwendung von Client-Bibliotheken.
  8. Funktionen wie Volltextsuche, Transformationen von Ingests, Aufbewahrung, Verschlüsselung und differenzierte Zugriffskontrolle

Überlegungen

  1. Keine gute Lösung zum Speichern selten abgefragter Daten (wie Maschinenprotokolle)
  2. Kein Transaktionsdatenspeicher

(Vollständige Offenlegung: Ich arbeite im Produktteam von Rockset) Weitere Informationen zu den einzelnen Ansätzen finden Sie im Blog .

2

Sie müssen die erste Tabelle abfragen und dann jedes Element mit einer Abrufanforderung für die nächste Tabelle durchlaufen. 

Die anderen Antworten sind unbefriedigend, da 1) die Frage nicht beantwortet wird und, was noch wichtiger ist, 2) wie können Sie Ihre Tabellen vor dem Erkennen ihrer zukünftigen Anwendung entwerfen? Die technische Verschuldung ist einfach zu hoch, um unbegrenzte zukünftige Möglichkeiten angemessen zu decken. 

Meine Antwort ist schrecklich ineffizient, aber dies ist die einzige derzeitige Lösung für die gestellte Frage. 

Ich warte gespannt auf eine bessere Antwort. 

2
James Shiztar

Ich weiß, dass meine Antwort etwas verspätet ist, um ein paar Jahre. Ich konnte jedoch einige zusätzliche Informationen zu Amazon DynamoDB & Joins ausgraben, von denen Sie profitieren könnten (oder vielleicht eine andere Person, die möglicherweise in der Zukunft bei der Erforschung dieser Informationen auf diese Diskussion stößt).

Um auf den Punkt zu kommen, konnte ich einige Dokumentationen auf der Amazon DynamoDB-Website finden, die besagt, dass die Apache HiveQL-Abfragesprache verwendet werden kann, um Joins in Amazon DynamoDB-Tabellen, -Säulen & -Daten usw. auszuführen.

Abfragen von Daten in DynamoDB (mit HiveQL): https://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Querying.html

Arbeiten mit Amazon DynamoDB & Apache Hive: https://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Tutorial.html

Verarbeiten von Amazon DynamoDB-Daten mit Apache Hive in Amazon EMR: https://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.html

Ich hoffe, diese Informationen helfen jemandem, wenn nicht dem Originalplakat.

0
Matti

Vor kurzem habe ich die gleiche Anforderung, Join- und Aggregat-Funktion wie avg und sum mit dynamoDb zu verwenden. Um dieses Problem zu lösen, habe ich den Cdata-JDBC-Treiber verwendet und es hat perfekt funktioniert. Es unterstützt sowohl Join- als auch Aggregatfunktionen. Obwohl ich auch nach einer Lösung suche, um die Verwendung von cdata aufgrund von Lizenzkosten für Cdata zu vermeiden. 

0
vivek agrawal