Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist der kompakteste Weg, Diffs in einer Datenbank zu speichern?

Es ist viel einfacher, jeden Datensatz vollständig zu speichern, als Diffs davon zu speichern. Wenn Sie dann einen Unterschied zwischen zwei Revisionen wünschen, können Sie bei Bedarf einen erstellen, indem Sie den PECL Text_Diff Bibliothek .

Ich speichere gerne alle Versionen des Datensatzes in einer einzigen Tabelle und rufe die neueste mit MAX(revision) ab , ein "aktuelles" boolesches Attribut oder ähnliches. Andere ziehen es vor, zu denormalisieren und eine Spiegeltabelle zu haben, die nicht aktuelle Revisionen enthält.

Wenn Sie stattdessen Diffs speichern, werden Ihr Schema und Ihre Algorithmen viel komplexer. Sie müssen dann mindestens eine "vollständige" Revision und mehrere "Diff"-Versionen speichern und eine Vollversion aus einem Satz von Diffs rekonstruieren, wann immer Sie eine Vollversion benötigen. (So ​​speichert SVN Dinge. Git speichert eine vollständige Kopie jeder Revision, keine Unterschiede.)

Programmierzeit ist teuer, aber Speicherplatz ist normalerweise billig. Bitte überlegen Sie, ob das vollständige Speichern jeder Revision wirklich ein Problem darstellt.