2017-02-23 3 views
1

Ich habe versucht, ein Schema für meine Android-Anwendung in Amazon Dynamo DB zu erstellen. Ich habe sehr wenig Erfahrung mit NoSQL-Datenbanken.Amazon Dynamo-Tabellenschema

Ich habe eine Umfrage basierend Android-Anwendung erstellt, jetzt habe ich bestimmte Tabellen in Amazon Dynamo DB gespeichert.

Die Tabellen sind Employees-Tabelle, Survey-Tabelle, Question-Tabelle und die Response-Tabelle.

In der Tabelle Mitarbeiter werden die Informationen für alle Mitarbeiter gespeichert. Die Umfragetabelle enthält den Namen der Umfragen und die Mitarbeiter, die die Umfrage durchgeführt haben.

Mein Problem ist mit der Fragetabelle und der Antworttabelle. Die Fragen sind dynamisch und basieren auf den Mitarbeitern, die die Umfrage durchführen.

Die Antworten in der Antworttabelle hängen von der Anzahl der in der Umfrage gestellten Fragen ab.

Ich mag wissen, was meinen @DynamoDBHashKey sein sollte, @DynamoDBIndexHashKey, @DynamoDBIndexRangeKey in der Frage und die Antwort-Tabelle, so dass ich Frage respones abbilden kann und was die @DynamoDBAttribute die Tabellen in beiden sein sollte.

Der Anwendungsfall kann sein: Ein Mitarbeiter des Unternehmens hat 12 Fragen an alle anderen Mitarbeiter des Unternehmens gestellt.

Image was taken earlier, later on I added survey table as well

Antwort

1

DynamoDB ist auf einige Dinge gut und schlecht an andere. Es skaliert massiv und horizontal, während es eine niedrige Lese-/Schreiblatenz beibehält, aber schließlich Konsistenz bringt und Sie dazu zwingt, wichtige Schemaentscheidungen im Voraus zu treffen, z. B. was in einer Tabelle sein sollte und wie Daten partitioniert werden sollten und was sollte seien Sie die Indizes. Es erfordert, dass Sie sein horizontales Skalierungsmodell übernehmen, indem Sie Ihre Tabellen über den Partitionsschlüssel in Teile zerlegen.

Von der Art und Weise, wie Sie die Frage formuliert haben, ist klar, dass Sie sich in einer relationalen Datenbank wohler fühlen. DynamoDB ist nicht ein guter Ort, um über NoSQL-Schema (weniger) Design zu lernen - ich hätte es ziemlich gnadenlos gefunden, wenn es meine erste NoSQL-Datenbank war, vor allem zu versuchen, eine Domäne wie die Sie beschreiben zu modellieren. Es ist einfach keine großartige Domain-Modeling-Umgebung - es geht um horizontale Skalierung und Performance.

Wenn Sie sich in einer relationalen Datenbank wohler fühlen, dann verwenden Sie eine relationale Datenbank. Wenn Sie NoSQL ausprobieren möchten, müssen Sie eine andere Denkweise anwenden, wenn es darum geht, Ihre Domäne in persistente Entitäten zu modellieren. Sie können beispielsweise eng verwandte untergeordnete Objekte in das Schema eines übergeordneten Datensatzes aufnehmen. In Ihrem Beispiel können Sie Fragen als untergeordnete Elemente einer Umfrage aufnehmen und sie in einem Datensatz speichern, im Gegensatz zur relationalen Modellierung, bei der Sie diese in separaten Tabellen ablegen.