Cruz: Versionierung aber wie ?

Beitrag lesen

Nun möchte ich bei jeder Änderung eines Datensatzes eines History erstellen, um immer wieder den alten Zustand herstellen zu können.

Dies lässt immer noch relativ viel Spielraum zu. Hier sind ein paar Alternative Strategien, die mir einfallen:

1. Die Sicherung eines sauberen Initialzustandes, den du per Knopfdruck wiederherstellen kannst, wenn was schiefgeht.

2. Ab und zu mal manuell ein Snapshot ziehen, wenn du der Meinung bist, dass du gerade einen sauberen Datenbestand hast. Wenn was schiefgeht, zum letzten Snapshot zurückgehen.

3. Den Snapshot vielleicht einmal Täglich automatisiert erstellen und dann wenn was schiefgeht schrittweise zurückgehen, bis man einen sauberen Snapshot gefunden hat.

4. Jeden einzelnen Änderungsschritt aufzeichnen und dann eine Art Undo Funktion realisieren.

Was genau schwebt dir vor?

Die Versionen 1 bis 3 sind im Grunde nur Backup Funktionen, die realtiv leicht zu implementieren sind. Für Version 1 musst du ja nur einmalig die Daten z.B. in Form von SQL Befehlen in einer Textdatei bei Seite legen, die du einfach wieder in die Datenbank importieren kannst. So eine Textdatei generiert dir mysqldump. Für Version 2 must du was du bei 1 gemacht hast ab und zu mal manuell wiederholen, bzw. du kannst es dir ja soweit vereinfachen, dass es auf Knopfdruck automatisch abläuft.

Bei Version 3 wird der selbe Mechanismus zeitgesteuert (z.B. cron) ausgeführt, aber hier brauchst du dann tatsächlich eine Versionierung. Du kannst es mit einem Skript abhandeln, dass z.B. täglich einen mysql Dump ablegt mit dem Datum im Dateinamen. Oder du checkst stattdessen den Dump per Skript in CVS ein, dann kriegst du die Versionierung geschenkt. All die Änderungen in der Datenbank zu halten wäre für diese Strategie jedenfalls nicht wünschenswert.

Version 4 ist ungleich aufwendiger und vielleicht auch nicht nötig. Hier kommst wahrscheinlich tatsächlich nicht mehr drum herum alles in der Datenbank zu lassen. In so einem Fall speicherst du jedenfalls nicht wirklich den Content, sondern die Aktionen, die die User ausführen. Aus den Aktionen berechnest du dann mit einem Programm einen aktuellen Stand, den du durchaus auch in einer seperaten DB Tabelle vorhalten kannst. Die Undo Funktion löscht dann die letzte Aktion und errechnet einen neuen Stand.

Von dem was du mir bisher erzählt hast, würde ich persönlich Strategie 3. implementieren.

Aber was hat es mit diesem CSV auf sich ?

CSV heisst Concurrent Versioning System. Es wird meistens bei der Entwicklung von Softwareprojekten eingesetzt und ermöglicht eine automatisierte Versionierung des Quellcodes und unterstützt die Zusammenarbeit von mehreren Entwicklern an einem Projekt. Man kann es aber ruhig für aller Art von Versionierungsaufgaben verwenden.

Gruß,
Cruz