5 Stimmen

Wie erreicht man versionierte ActiveRecord-Zuordnungen?

Ich möchte mit versionierten ActiveRecord-Zuordnungen arbeiten. z.B. Ich möchte das Objekt finden, zu dem ein anderes Objekt ab einem bestimmten Datum in der Vergangenheit gehört, oder das Objekt, zu dem es davor gehörte. Gibt es bereits eine Bibliothek, die ActiveRecord von Rails untergeordnet ist, um versionierte Beziehungen bereitzustellen? Oder eine andere Ruby-Bibliothek, die persistente versionierte Relationen bereitstellt?

7voto

Ken Mayer Punkte 1762

Versuchen Sie die ActsAsVersioned Plugin

2voto

Michael Punkte 8416

Vorausgesetzt, Sie haben es nicht mit riesigen Datenmengen zu tun und die zusätzliche zeitliche Dimension wird Ihre Datenbank nicht überfordern, gibt es keine größeren Nachteile für historisch versionierte Daten. Die zusätzliche Abfragekomplexität kann ein kleiner Schmerz sein, aber das ist nichts Großes.

In meinem Fall schrieb ich ein Rails-Plugin, das Versionierung behandelt, es fügt 5 Spalten zu jeder versionierten Tabelle (und hilft, Abfragen/Manipulation usw. zu behandeln):

gültig_von - datetime - der Zeitpunkt, zu dem diese Version erstellt wurde

gültig_bis - datetime - das Datum, an dem diese Version nicht mehr gültig ist

root_id - integer - die Kennung der ursprünglichen Zeile (von der diese eine Folgeversion ist)

erstellt_von - integer - Die Benutzerkennung des Benutzers, der diese Version erstellt hat

im Ruhestand_von - integer - Die Benutzerkennung des Benutzers, der diese Version zurückgezogen hat

Für derzeit aktive Zeilen ist valid_to null. Das Hinzufügen eines Indexes für valid_to trägt dazu bei, die Leistung zu steigern.

1voto

Die Unterstützung historischer Zustände in einer transaktionalen Anwendung ist ein guter Weg, um die Komplexität massiv zu erhöhen, die DB-Leistung zu verlangsamen und sich das Leben schwer zu machen. Wenn Sie nur historische Zustände anzeigen oder auswerten müssen und diese nicht minutengenau benötigen, sollten Sie ein Sternschema mit Typ-II langsam wechselnde Abmessungen und einen periodischen Prozess, der sie aktualisiert.

Dies ist wesentlich weniger komplex als die Entwicklung einer Anwendung mit einer systemischen Ad-hoc-Verfolgung des Verlaufs, die sich durch die Codebasis zieht. Wenn Sie mit diesem Ansatz Ihre Anforderungen an die Anwendung erfüllen können, ist es wahrscheinlich besser, ihn zu wählen. Das bedeutet auch, dass die Anwendungsdatenbank gut mit den im System enthaltenen Datenbankzugriffsmechanismen zusammenarbeitet.

Wenn Sie eine relativ häufige Aktualisierung benötigen, können Sie ein System zur Erfassung geänderter Daten in der Datenbank implementieren, was relativ einfach ist, wenn sich die Anwendung nur mit dem aktuellen Zustand befassen muss. Mit einem CDC-Mechanismus muss der Ladeprozess nur auf der Grundlage von Änderungen aktualisiert werden und läuft relativ schnell ab.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X