Entwerfen von Tabellen in Amazon dynamodb

8

Ich bin neu in DynamoDB und habe ein großes Durcheinander: Wie meine Tabellen aussehen sollten.

Ich habe die Beiträge hier gelesen: (empfohlen für diejenigen, die es noch nicht gelesen haben) Ссылка

Und jetzt habe ich ein Dilemma, das ich glaube, dass jeder, der DynamoDB benutzt, es haben wird.

Erstens, meine Tabellen: STUDENTEN, TEAMS, PROJEKTE

STUDENTEN : id , Alter ...

TEAMS : id , Studenten-1-ID, Studenten-2-ID, Aktuelles-Projekt, Vorheriges-Projekt, Zuletzt aktualisiert-auf

PROJEKTE : ID , Team-ID, Liste der Fragen, liste student1answers, list student2answers

auf

einige Kommentare:

  1. Wie Sie sehen können, verwende ich keinen Range-Key. Muss ich? .
  2. Jede Antwort ist ein JSON von (Anzahl der Fragen, Text, Datum des Einfügens)
  3. jeder Schüler kann in mehreren Teams sein.

Meine Dilemmata:

  1. Ich möchte alle Teams eines bestimmten Studenten bekommen, die nach einem bestimmten Datum aktualisiert wurden.

für den Moment verwende ich 2 Scans-Operationen: eine suche den Schüler1 und die zweite suche den Schüler2.

%Vor%

Ich habe darüber nachgedacht, eine neue Tabelle hinzuzufügen: user-Battles: Studenten-ID, Team-ID so kann ich die Teams für die spezifischen Studenten abfragen und dann Batch_get_item alle Teams Aber was ist mit dem letzten Update? wie kann ich das auch innerhalb des batch_get_items abfragen?

  1. Wenn ein Projekt überläuft, benutze ich es nicht mehr. Was macht man mit den alten Sachen? löschen? Verschieben Sie sie an einen anderen Tisch?

  2. In der Projekttabelle sind die Attribute, die aktualisiert werden können, die Antwortattribute also denke ich, sie für Performances an einen anderen Tisch zu bringen.

Muss ich sie wirklich verschieben, wenn sie nur zweimal aktualisiert wird? (Wenn Student1 Antwort sendet und Student2 Antwort sendet - und dann ist das Projekt alt)

* Wenn ich eine neue Tabelle für die Antworten erstelle, muss ich sie nicht in einem JSON-Format speichern

Wie würden Sie die Tische gestalten? Bitte lass es mich wissen.

    
user1623454 05.10.2012, 18:02
quelle

1 Antwort

2

Nette Frage mit vielen Details:)

Wenn ich nur einen Rat hätte, wäre es:

  

Denken Sie daran, dass es mit NoSQL nicht nur OK, sondern normal ist, sogar empfohlen, Ihre Daten zu de-normalisieren.

Dies sagte, für Sie "Dilemna", war Ihr Vorschlag ziemlich gut. Sie sollten sich mit dem Datum als range_key ent-normalisieren. Eine Möglichkeit könnte sein, eine Tabelle wie folgt hinzuzufügen:

  • hash_key : Schüler
  • range_key : Datum
  • team : team_id

Aber immer noch, das ist nicht perfekt, da der Tisch weiter wachsen würde. Jede Aktualisierung fügt ein neues Objekt ein. In der Tat ist es nicht möglich, einen Schlüssel zu bearbeiten. Sie müssten Ihren eigenen Reinigungscode machen.

In DynamoDB müssen Sie sich keine Sorgen über eine Leistungsverlangsamung machen, die durch "alte" Elemente verursacht wird (außer beim Scannen). Dies ist die Hauptstärke von DynamoDB. Nichtsdestotrotz ist dies immer eine gute Methode, Daten sauber zu halten, aber konsistent zu sein. Wenn Sie abgelaufene Projekte verschieben, verschieben Sie alle oder Sie werden nicht wissen, wo sich Ihre Daten befinden.

Letzter Vorschlag: Sind Sie sicher, dass "ids" am besten Ihre Objekte beschreiben? Meistens macht ein Name, ein Datum oder irgendein eindeutiges Attribut einen besseren Schlüssel.

    
yadutaf 05.10.2012 18:41
quelle