Java MongoDB Object Versioning
Muss ich tun, Versionierung auf (einfache) Java-Objekt-Graphen gespeichert, die in eine Dokument-orientierte Datenbank (MongoDB). Für relationale Datenbanken und Hibernate, entdeckte ich Envers und bin sehr erstaunt über die Möglichkeiten. Gibt es etwas ähnliches, die verwendet werden können mit Spring-Daten-Dokumenten?
Fand ich dieser Beitrag Gliederung der Gedanken, die ich hatte (und mehr...) zum speichern der objektversionen, und meine aktuelle Implementierung funktioniert ähnlich, dass es speichert Kopien der Objekte in einer separaten history-Kollektion mit timestamp, aber ich möchte, um dies zu verbessern, um Speicherplatz zu sparen. Also, ich glaube, ich brauche beide implementieren eine "diff" - operation auf Objekt-Bäume und ein "merge" - operation für die Rekonstruktion der alten Objekte. Gibt es Bibliotheken gibt, helfen mit diesem?
Bearbeiten:
Irgendwelche Erfahrungen mit MongoDB und Versionsverwaltung sehr geschätzt! Ich sehe die meisten wahrscheinlich, es wird nicht eine Spring-Data-Lösung.
- Nicht vollständige Versionierung, aber wir haben implementiert eine winzige auditing-system - Protokollierung, die verändert, die alten Werte zu neuen. Wir sind mit Morphia ' s
prePersist()
- Methode (die funktioniert nur für vollständige Entität speichert, nicht-spezifische updates). Einige code-Beispiele, aber es ist nichts anspruchsvolles... - Vielen Dank für Ihren Kommentar! Ich wäre sehr daran interessiert, etwas mehr details zeigen Sie Ihre Lösung. Nur full-tracking-Einheit spart, ist definitiv ok: Das ist unsere wichtigste Anwendungsfall zu. Ein sehr interessanter Punkt ist die Art und Weise Sie vergleichen die alte auf die neue Gesellschaft über, die Identifizierung der veränderten Eigenschaften. Ich sah in den Grafik-Vergleich-frameworks hier aber nicht zu finden, die eine schnelle und einfache Lösung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden wir ein Basis-Entität (wo wir die Id, Erstellung + Letzte Daten ändern,...). Darauf aufbauend verwenden wir eine generische Persistenz-Methode, die wie folgt aussieht:
Delta-Methode sieht wie folgt aus (ich werde versuchen, diese so allgemein wie möglich):
Delta-Einheit sieht so aus (ohne die Getter + setter, toString, hashCode und equals):
Hoffe, dies hilft Ihnen den Einstieg 🙂
Dies ist, wie ich landete Umsetzung der Versionierung für MongoDB Personen. Dank StackOverflow-Gemeinde für die Unterstützung!
equals
Methode der Entitäten, so dass es tests für die Datenbank primary key und nicht der sub Eigenschaften. (Ansonsten JavaObjectDiff erkennt keine änderungen der Eigenschaft in der collection elements enthalten sind.)Hier sind die Entitäten, die ich für Versionsverwaltung (Getter/setter etc. entfernt):
Hier ist die saveChangeHistory Betrieb:
Dies ist, wie es aussieht, wie bei MongoDB:
EDIT: Hier ist der Besucher-code:
sieht aus wie Javers, ist das richtige Werkzeug für diesen job, siehe http://javers.org/documentation/features/#javers-repository
Javers ist konzeptionell ein VCS für domain-Objekt die Versionierung, unterstützt von JSON und MongoDB