Daten-History, wie realisieren? Hallo.
Ich möchte eine Daten-History realisieren.
Es soll möglich sein, die Änderungen eines Datensatzes lückenlos nachvollziehen zu können. Aber nicht nur der Datensatz selbst soll eine History haben, auch alle hochgeladenen Daten sollen archiviert werden.
Auch vom User gelöschte Datensätze und Dateien sollen im System bleiben.
Nur die Admins sollen in der Lage sein, bestimmte Datensätze und Dateien komplett oder auch nur bestimmte Archiveinträge komplett zu löschen, samt zugehörigem Verlaufseintrag.
Nun gibts ja mehrere Methoden, so etwas zu realisieren. Ich gehe jetzt erst mal nur vom Datensatz selbst aus, und nicht von den angehängten Dateien:
1. Man kann den ursprünglichen Datensatz speichern, und alle Änderungen nur als Differenz speichern.
2. Man kann den aktuellen Datensatz komplett speichern, und die alten Einträge als Differenz speichern.
3. Man kann den aktuellen Datensatz sowie alle Änderungen jeweils komplett speichern (Also jede Version voll), und zwar in der Arbeitsdatenbank.
4. Man kann die aktuelle Version in der Arbeitsdatenbank speichern, und die alten Versionen in einer zweiten Archivdatenbank als Differenz oder auch im Ganzen.
Ich selbst habe mich für folgendes entschieden:
In der Arbeitsdatenbank werden die jeweils aktuellen Datensätze gespeichert. In einer speziellen Archivdatenbank werden die alten Datensätze im Ganzen gespeichert. Eine extra Archivdatenbank deswegen, damit die Arbeitsdatenbank nicht zu groß wird und die Performance nicht leidet.
Aus Gründen der Einfachheit werde ich mich auch nicht mit irgendwelchen Differenz-Speichermechanismen auseinander setzen, sondern die Datensätze bei jeder Änderung einfach komplett in die Archivdatenbank umkopieren und in der Arbeitsdatenbank immer nur die aktuelle Version vorhalten.
Bei jeder Änderung den Datensatz komplett im Archiv speichern hat natürlich einen größeren Speicherverbrauch, da die nicht geänderten Daten ja in jedem Archiveintrag doppelt gespeichert sind. Bei einer Datensatzgröße von wenigen kb ist das meiner Meinung nach noch tolerierbar. In Zeiten wo man ettliche Gigabyte Webspace für wenig Geld bekommt, spielt diese Speicherplatzvergeudung keine so große Rolle finde ich.
Neben dem Datensatz selbst werden die angehängten Dateien ebenfalls in einem Archivordner in der jeweils alten Version gespeichert. Auch hier werde ich nicht mit irgendwelchen Differenzverfahren arbeiten. Ich werde lediglich jede angehängte Datei einzeln verwalten und nicht einfach alle Dateien ins Archiv schieben, sondern nur die, die wirklich aktualisiert wird.
Damit die Archivdatenbank auch nicht gigantisch groß wird, wollte ich in der Datenbank auch nur eine gewisse Anzahl von Archiv-Einträgen speichern, und die ältesten Einträge automatisch als XML Datei in einen Archivordner exportieren. Die Daten der XML Dateien wollte ich bei Anforderung dann temporär wieder importieren und nach der Verarbeitung und Ausgabe gleich wieder aus der db entfernen.
Was haltet ihr davon? Oder würdet ihr mir lieber eine andere Methode empfehlen?
(P.S. Das Ganze soll etwa aussehen wie bei Wikipedia, wo man alle Bearbeitungsschritte und Dateiversionen nachvollziehen kann) |