2014-06-17 5 views
5

Derzeit sehe ich, dass, wenn ich Versionierung in DynamoDB verwende, ändert es die Versionsnummer, aber der neue Eintrag wird den alten Eintrag ersetzen; dh:Wie kann ich die Versionierung implementieren, ohne den vorherigen Datensatz in DynamoDB zu ersetzen?

alt

{ object:one, name:"hey", version:1} 

neue

{ object:one, name:"ho", version:2} 

Was ich will, ist, beide Einträge in der DB zu haben; dh:

alt

{ object:one, name:"hey", version:1 } 

neue

{ object:one, name:"hey", version:1} 
{ object:one, name:"ho", version:2} 

Jede Art und Weise, dies zu erreichen?

Antwort

5

Ich glaube nicht, dass der DynamoDB-Dienst derzeit nativ Zeile Versionierung unterstützt. Wenn Sie die Versionierungsfunktionalität wünschen, müssen Sie dies auf Ihrer Seite tun.

In DynamoDB wird eine Zeile eindeutig durch ihren Primärschlüssel identifiziert. Der Primärschlüssel könnte entweder HashKey-only oder HashKey + RangeKey sein. Wenn Sie dieselbe Zeile mit verschiedenen Versionen unterscheiden möchten, müssen Sie die Versionsnummer irgendwo in Ihrem Primärschlüssel angeben.

Zum Beispiel können Sie die Versionsnummer an das Ende Ihres Hash-Keys für alle alten Versionen einer Zeile anhängen. Die Zeile mit der neuesten Version verwendet den ursprünglichen Hash-Schlüssel.

Hash Attr Version 
hey  a2  2 
hey_v1 a1  1 

nach dem Update der Zeilen auf der Version 3 die Tabelle sollte wie folgt aussehen:

Hash Attr Version 
hey  a3  3 
hey_v1 a1  1 
hey_v2 a2  2 

Doing Versionierung auf der Client-Seite ist nicht immer perfekt. Zum Beispiel, für den obigen Ansatz, wenn Sie einen Scan machen, erhalten Sie auch hey_V1 und hey_v2. Bitte lassen Sie mich wissen, ob dies für Sie funktioniert oder nicht. Wenn Sie eine bessere Versionsverwaltung auf der Client-Seite haben, schreiben Sie bitte auch hier.

Verwandte Themen