Wie join-Tabellen in AWS DynamoDB?
Ich weiß, das ganze design basiert auf natürlichen Gesteinskörnungen (Dokumente), aber ich bin denken zu implementieren, eine separate Tabelle für die Lokalisierungen (lang, Schlüssel, text) und dann mit Schlüssel in anderen Tabellen. Allerdings war ich nicht in der Lage zu finden Beispiel auf, dies zu tun.
Irgendwelche Hinweise, die hilfreich sein könnten!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie richtig, DynamoDB ist nicht konzipiert als eine relationale Datenbank und unterstützt keine join-Operationen. Das kann man sich denken DynamoDB nur als eine Ansammlung von Schlüssel-Wert-Paaren.
Können Sie den gleichen Schlüssel besitzen, der über mehrere Tabellen (z.B. document_IDs), aber DynamoDB nicht automatisch synchronisiert, oder haben Sie eine foreign key-features. Die document_IDs in einer Tabelle, während die benannt werden, sind technisch eine andere Gruppe als die, die in einer anderen Tabelle. Es ist bis zu Ihrer Anwendung-software, um sicherzustellen, dass die Schlüssel synchronisiert werden.
DynamoDB ist eine andere Art des Denkens über Datenbanken und möchten Sie vielleicht zu prüfen, mit einem verwalteten relationalen Datenbank wie Amazon Aurora: https://aws.amazon.com/rds/aurora/
Eine Sache zu beachten, Amazon EMR erlaubt DynamoDB-Tabellen, die verbunden werden, aber ich bin mir nicht sicher, das ist, was du suchst: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/EMRforDynamoDB.html
Mit DynamoDB, anstatt sich ich denke, die beste Lösung ist die Speicherung der Daten in der Form, die Sie beabsichtigen, um Sie später zu Lesen.
Wenn Sie sich selbst zu finden, die eine komplexe Lesen Sie Fragen, die Sie haben könnten, in die Falle getappt zu erwarten, DynamoDB, sich wie ein RDBMS, das ist es nicht. Transform-und shape-Daten, die Sie schreiben, halten Sie die Lesen einfach.
Festplatte ist deutlich günstiger als compute in diesen Tagen - haben Sie keine Angst zu denormalise.
Müssen Sie die Abfrage der ersten Tabelle, dann Durchlaufen Sie jedes Element mit einer get-Anfrage auf die nächste Tabelle.
Die anderen Antworten sind unbefriedigend, da 1) nicht die Frage beantworten und, noch wichtiger, 2) wie können Sie Ihre design-Tabellen im Voraus zu wissen, deren zukünftige Anwendung? Die technischen Schulden ist einfach zu hoch um eine vernünftige Abdeckung unbegrenzter zukünftiger Möglichkeiten.
Meine Antwort schrecklich ineffizient, aber dies ist der einzige aktuelle Lösung der gestellten Frage.
Spannung erwarte ich eine bessere Antwort.
Einer Lösung, die ich gesehen habe, kommen mehrere Male in diesem Raum ist die sync von DynamoDB in eine separate Datenbank, die ist mehr geeignet für die Arten von Operationen, die Sie suchen.
Schrieb ich eine blog zu diesem Thema den Vergleich verschiedener Ansätze, die ich gesehen habe die Leute nehmen dieses problem sehr, aber ich fasse einige der wichtigsten Imbissbuden hier, so dass Sie nicht haben, um all das gelesen.
DynamoDB sekundäre Indizes
Was ist gut?
Überlegungen
DynamoDB + Kleber + S3 + Athena
Was ist gut?
Überlegungen
DynamoDB + Hive/Spark
Was ist gut?
Überlegungen
DynamoDB + AWS Lambda + Elasticsearch
Was ist gut?
Überlegungen
DynamoDB + Rockset
Was ist gut?
Überlegungen
(Full Disclosure: ich arbeite auf dem Produkt-team @ Rockset)
Überprüfen Sie heraus die blog für mehr details über die einzelnen Ansätze.
Ich weiß, meine Antwort ist etwas spät, um ein paar Jahre. Allerdings war ich in der Lage zu Graben, bis einige zusätzliche Informationen, über Amazon DynamoDB & Verknüpfungen, die davon profitieren könnten, die Sie (oder vielleicht eine andere Person, die stolpern kann auf diese Diskussion, während der recherche dieser Informationen in der Zukunft).
Auf den Punkt zu bringen, ich war in der Lage zu suchen, eine Dokumentation über die Amazon DynamoDB-Website, die besagt, dass der Apache HiveQL-Abfrage-Sprache, die eingesetzt werden können, zum ausführen von Verknüpfungen auf Amazon DynamoDB-Tabellen, Spalten & Daten, etc.
Abfragen von Daten in DynamoDB (w/HiveQL):
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Querying.html
Arbeiten w/Amazon DynamoDB & Apache Hive:
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Tutorial.html
Bearbeitung Amazon DynamoDB-Daten mit Apache Hive in Amazon EMR:
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.html
Ich hoffe, diese information hilft jemand aus, wenn nicht der original-poster.
Vor kurzem habe ich die gleiche Anforderung zum verwenden von join und aggregate-Funktion wie avg und sum mit dynamoDb, um dieses Problem zu lösen ich verwendet die Cdata-JDBC-Treiber und es funktionierte perfekt. It-support als auch Aggregat-Funktionen. Obwohl, ich bin auch auf der Suche nach der Lösung vermeiden Sie die Verwendung von cdata-wegen der Lizenz-Kosten von Cdata.