Ich speichere eine Entität A in meinem Datenspeicher auf einer App-Engine. A hat eine ID des Typs Long. Ich möchte eine Geschichte aller Änderungen behalten, die an den Feldern von A vorgenommen werden. Was sind die besten Methoden, um diese Art der Versionsverwaltung für Entitäten durchzuführen? Ich würde eine Lösung vorziehen, die gut mit Unterklassen von A funktioniert und so automatisch wie möglich ist.
Danke!
Sie könnten eine verknüpfte Liste von Entitäten erstellen, wobei jede Entität zwei Referenzen hat: eine auf ihre vorherige Version und eine auf die nächste Version. Sie müssen diese Referenzen natürlich selbst pflegen. Die neueste Version einer Entität ist die ohne eine Referenz auf eine nächste Version (oder eine leere / Null-Referenz).
Abhängig von Ihrem Anwendungsfall sollten Sie auch nach Wegen suchen, um nur die Unterschiede zwischen zwei Versionen einer Entität zu speichern (wenn die Änderungen klein und die Entitäten groß sind).
Wir machen etwas Ähnliches für eine unserer AppEngine-Apps. Der einzige effiziente Weg, den wir gefunden haben, ist, dass eine Entität B Ihre Versionen sind und Entität A eine Liste von Schlüsseln enthält.
Wir verwenden dann ETags in unseren REST-Diensten, um zu ermitteln, welche Version unser Kunde erhält.
Es gibt viele Möglichkeiten, das zu tun.
Wenn Sie möchten, dass im Datenmodell keine weiteren Klassen erforderlich sind, können Sie das übergeordnete Attribut zum Schreiben der Versionen und der Vorgängerabfrage verwenden, um die neueste Version zu lesen.
Hier ist ein Beispiel dafür, wie dies in einer Wiki-Seite mit dem Framework ndb.Model und webapp2 in Python GAE funktionieren könnte:
Das Modell könnte sein:
%Vor%Der Handle könnte sein:
%Vor%Tags und Links database google-app-engine versioning datastore