2016-04-29 17 views
1

Ich möchte einige Einblicke in das beste Design meiner DynamoDB-Tabellen für den folgenden Anwendungsfall und warum. Ich habe the best practices gelesen, aber ich bin mir nicht sicher, ob ich noch genug verstehe.DynamoDB-Tabellenformat

Die primäre Verwendung ist ein wöchentlicher Eintrag für jede Gruppe von Benutzern. Ich muss diese Einträge sortiert nach den letzten Einträgen für jede Benutzergruppe auflisten. Ich muss auch in der Lage sein, den neuesten Eintrag für jede Gruppe einfach (oder schnell) zu bekommen.

Meine erste naive Idee vor dem Lesen des Artikels war, separate Tabellen für jede Gruppe zu verwenden, und dann hatte jeder Eintrag nur einen eindeutigen Partitionsschlüssel und einen Sortierschlüssel an einem Datum in Sekunden aus der Epoche konvertiert. Aber nach dem Lesen dieses Artikels scheint dieser Ansatz das Design von Partitionen zu verletzen, denn wird es nicht jedes Element zu einer neuen Partition machen?

Ich weiß, dass der neueste Eintrag ziemlich einfach in meinen Webservern zwischengespeichert werden kann, aber ich bin gespannt, ob das das Design irgendwie beeinflusst.

Irgendeine Anleitung?

Antwort

1

Meiner Meinung nach dem bevorzugten Tabellenentwurf soll wie folgt aussehen:

  • Benutzergruppen als Partitionsschlüssel
  • Zeitstempel als Sortierschlüssel

Diese nicht Verletzung ist jede Partition Design, weil Sie in einer Tabelle mit Primärschlüsseln basierend auf Partitions- und Sortierschlüsseln denselben Partitionsschlüssel für mehrere Elemente verwenden dürfen, solange sie di haben verschiedene Sortierschlüssel. Auf diese Weise können Sie leicht nach Zeitstempel sortierten Benutzergruppeneinträgen und auch leicht z. Holen Sie sich den neuesten Eintrag.

Wenn Sie den bereitgestellten Durchsatz vollständig nutzen möchten, müssen Sie darauf achten, dass die Daten gleichmäßig über die Werte der Partitionsschlüssel verteilt sind. Wenn Sie 20 Partitionen haben und nur ein oder zwei davon stark beansprucht werden, werden Sie eine starke Leistungsminderung feststellen.

In Ihrem Szenario jedoch, wo jede Woche ein Eintrag zu jeder Partition hinzugefügt wird, wird das obige Design sehr gut funktionieren.

+0

Ehrfürchtig. Nachdem ich letzte Nacht darauf geschlafen hatte, kam mir diese Idee in den Sinn. Danke für die Ratschläge zum Durchsatz. Ich hatte nicht viel darüber nachgedacht. – ProdigousRanger

+0

Dies deckt nicht effizient ab (d. H. Keine Abfrage oder Mehrfachabfragen) "Ich muss auch in der Lage sein, den neuesten Eintrag für jede Gruppe leicht (oder schnell) zu erhalten." –

+0

Ja, tut es. Eine Abfrage mit 'ScanIndexForward = false' (absteigend) und' Limit = 1' gibt den neuesten Eintrag einer Benutzergruppe zurück. Ich glaube nicht, dass es einen performanteren Weg gibt. – birnbaum