Ich habe ein Projekt mit einem Web-Voting-System. Die aktuellen Werte und zugehörigen Daten sind in mehreren Tabellen gespeichert. Historische Daten werden ein wichtiger Aspekt dieses Projekts sein, daher habe ich auch Audit-Tabellen erstellt, auf die die aktuellen Daten regelmäßig übertragen werden.Versionskontrollierte Datenbank mit effizienter Verwendung von Diff
Ich finde diese Strategie sehr ineffizient. Selbst wenn ich nur täglich Daten archiviere, wird die Anzahl der Zeilen sehr groß, selbst wenn nur 1 oder 2 Benutzer an einem bestimmten Tag Updates vornehmen.
Die nächste Alternative, die ich mir vorstellen kann, ist das Speichern von Einträgen, die sich geändert haben. Dies bedeutet, dass Logik erstellt werden muss, um automatisch eine Ansicht eines bestimmten Tages zu erstellen. Dies bedeutet weniger gespeicherte Zeilen, aber erhebliche Komplexität.
Meine letzte Idee ist ein bisschen weniger konventionell. Da die Protokolldaten für die Berichterstellung verwendet werden, müssen Webbenutzer keinen schnellen Zugriff haben. Ich denke, dass meine Datenbank keine historischen Daten enthalten könnte. DB repräsentiert nur den aktuellen Zustand. Dann könnte täglich die gesamte db in Objekte geladen werden (Anzahl der Benutzer/Daten ist relativ niedrig) und dann zu etwas wie XML oder JSON serialisiert werden. Diese Dateien können mit dem vorherigen Tag verglichen und gespeichert werden. In der Tat könnte SVN das für mich tun. Wenn ich die Daten für einen bestimmten vergangenen Tag haben möchte, muss das System die Version für diesen Tag abrufen und in Objekte deserialisieren. Dies ist offensichtlich eine kostspielige Operation, aber Leistung ist hier nicht so wichtig. Ich überlege, LINQ dafür zu verwenden, was meiner Meinung nach die Dinge vereinfachen würde. Die Serialisierungsprozedur müsste ziemlich gut organisiert sein, damit das Diff gut funktioniert.
Welchen Ansatz würden Sie wählen?
Dank
Voting ist eine fortlaufende Sache. Stimmen können von Benutzern entfernt oder von Administratoren zurückgegeben werden. Weitere Details zu den Elementen, über die Nutzer abstimmen, ändern sich ebenfalls mit der Zeit. Es gibt 4 Tabellen und insgesamt ca. 20 Datenzeilen zum Archivieren. –
Meine Frage wurde etwas allgemein formuliert, weil ich finde, dass dies ein ziemlich allgemeines Problem ist: Was ist die eleganteste Art, Versionskontrolle und Zeilenoperationen zu mischen? –