2017-07-27 1 views
0

Ich möchte den Transaktionsverlauf in der Dynamodatenbank speichern. Es gibt 2 vorgeschlagene Ansätze.Modellierung der Transaktionsverlaufsdaten in der Dynamodatenbank

Ansatz 1: Transaktion Ref -> Partition Key & GSI [Cardnumber, Transaction]

Ansatz 2: Cardnumber -> Partition Key, Transaktion Ref -> Bereich Key & LSI [Cardnumber, Transaction]

Ich beschloss, mit dem ersten zu gehen, weil ich heiße Partitionierung vermeiden wollte.

Kann jemand bitte einen besseren Ansatz vorschlagen oder in die richtige Richtung zeigen.

+0

In Ansatz 2, warum definieren Sie LSI? Haben Sie nach dem Transaktionsdatum eine Sortieranforderung? Bitte erwähnen Sie auch, wie Sie auf die Daten für die meisten Anwendungsfälle zugreifen können. d.h. durch Transaktionsref oder Kartennummer? – notionquest

+0

Die Daten werden nach Kartennummer und Datumsbereich abgerufen. – cody123

Antwort

0

Ich würde vorschlagen, mit Ansatz 2 mit geringfügiger Änderung gehen.

  • Cardnumber -> Partition Key
  • Transaction -> Sort Key (nehme ich an Sie, die Transaktion speichern timestamp nicht nur Datum)
  • Transaktion Ref -> GSI erstellen bei Bedarf (dh wenn Sie jeder Anwendungsfall, um die Daten nur auf Basis von Referenz zu erhalten)

Grund: -

Das Datenmodell sollte die wichtigsten Anwendungsfälle erfüllen oder Zugriffsmuster abfragen. In Ihrem Ansatz 1 würden Sie GSI für die Hauptanwendungsfälle verwenden, was keine optimale Vorgehensweise zum Entwerfen eines Datenmodells darstellt. Wir können GSI für alternative oder Randfälle verwenden.

Normalerweise sollte der GSI sofort synchronisiert werden. In einigen seltenen Fällen kann es jedoch zu geringfügigen Verzögerungen kommen. Außerdem sollten Sie überlegen, ob Sie eventuell konsistente oder konsistente Lesevorgänge verwenden möchten.

Wenn Sie GSI vermeiden können, können Sie auch Kosten sparen.

+0

Das Transaktionsdatum kann kein Sortierschlüssel sein, da es möglich sein kann, mehrere Transaktionen gleichzeitig zu erhalten [z. wenn jemand eine Rückerstattung in Form von Guthaben sendet und Sie gleichzeitig eine Transaktion durchführen], aber das Erstellen eines Partitionsschlüssels als Kartennummer wird nicht unter der "heißen Partitionierung" leiden? http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html – cody123

Verwandte Themen