Können Sie Ihre Gedanken teilen, wie Sie die Datenversionierung in PostgreSQL implementieren würden? (Ich habe ähnliche Frage bezüglich Cassandra und MongoDB gestellt. Wenn Sie irgendwelche Gedanken haben, welche DB für das besser ist teilen Sie bitte)Möglichkeiten zur Implementierung der Datenversionierung in PostreSQL
Angenommen, dass ich Datensätze in einem einfachen Adressbuch versionieren muss. Adressbucheinträge werden zur Vereinfachung in einer Tabelle ohne Beziehungen gespeichert. Ich gehe davon aus, dass die Geschichte:
- wird selten verwendet werden
- wird auf einmal verwendet werden, es in einer „Zeitmaschine“ Art und Weise zu präsentieren
- wird es nicht mehr Versionen als einigen hundert bis ein einzelner Datensatz.
- Geschichte wird nicht ablaufen.
Ich betrachte die folgenden Ansätze:
Erstellen Sie eine neue Objekttabelle Geschichte von Datensätzen mit einer Kopie des Schemas von Adressbuchs Tabelle zu speichern und Zeitstempel und Fremdschlüssel hinzufügen Buchtabelle zu adressieren.
Erstellen Sie eine Art Schema-less-Tabelle, um Änderungen an Adressbucheinträgen zu speichern. Eine solche Tabelle würde bestehen aus: AddressBookId, TimeStamp, FieldName, Value. Auf diese Weise würde ich nur Änderungen an den Datensätzen speichern, und ich müsste die Verlaufstabelle und die Adressbuchtabelle nicht synchron halten.
Erstellen Sie eine Tabelle zum Speichern von serialisierten (JSON) Adressbucheinträgen oder Änderungen an Adressbucheinträgen. Eine solche Tabelle würde folgendermaßen aussehen: AddressBookId, TimeStamp, Object (varchar). Wieder ist dies ein Schema weniger, so dass ich die Verlaufstabelle mit der Adressbuchtabelle nicht synchron halten müsste. (This is modelled after Simple Document Versioning with CouchDB)
Würde es nicht zusätzlichen Aufwand zu meinem Haupttisch hinzufügen? Ich denke, dass Geschichte selten genutzt wird und ich nicht dafür bezahlen will, wenn sie ungenutzt ist. Ich gehe davon aus, dass ungefähr 100 GB Daten in der Adressbuchtabelle verarbeitet werden. –
Veronning Aufzeichnungen ohne Overhead ist utopisch. Oracle speichert viele Versionen eines Datensatzes mit den Feldern 'start_date' und' end_date'. Ich würde sie zu allen Tabellen hinzufügen, die Sie versionieren möchten. –
Ich bin nicht sicher, warum Sie denken, dass es utopisch ist. Wenn Sie die Tabelle in aktuelle Daten und Verlaufsdaten aufteilen, erhalten Sie fast ohne Kosten die Vorteile der Versionierung, wenn sie nicht verwendet wird. –