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!
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
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.
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 .
(Vollständige Offenlegung: Ich arbeite im Produktteam von Rockset) Weitere Informationen zu den einzelnen Ansätzen finden Sie im Blog .
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.
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.
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.