Ich möchte mit versionierten ActiveRecord-Assoziationen arbeiten. Zum Beispiel, ich möchte das Objekt finden, dass ein anderes Objekt zu einem bestimmten vergangenen Datum gehört, oder zu dem, dem es vorher gehörte. Gibt es bereits eine Bibliothek, die ActiveRecord von Rails untergliedert, um relationierte Beziehungen bereitzustellen? Oder eine andere Ruby-Bibliothek, die persistente relationale Beziehungen bietet?Wie erreichen versionierte ActiveRecord-Verknüpfungen?
Antwort
Die Unterstützung des historischen Zustands in einer transaktionalen Anwendung ist eine gute Möglichkeit, die Komplexität massiv zu erweitern, die DB-Leistung zu verlangsamen und das Leben für Sie selbst zu erschweren. Wenn Sie den historischen Status nur anzeigen oder berichten müssen und ihn nicht bis zur Minute benötigen, sollten Sie ein Sternschema mit Type-II slowly changing dimensions und einen periodischen Prozess erstellen, der es aktualisiert.
Dies ist wesentlich weniger komplex als der Aufbau einer Anwendung mit systematischer Ad-hoc-Verlaufsverfolgung über die Codebasis. Wenn dieser Ansatz das tut, was Sie von der Anwendung benötigen, werden Sie wahrscheinlich besser dran sein. Es bedeutet auch, dass die Anwendungsdatenbank gut mit den Vanilla-Datenbankzugriffsmechanismen, die mit dem System geliefert werden, spielt.
Wenn Sie eine relativ häufige Aktualisierung benötigen, können Sie ein geändertes Datenerfassungssystem in der Datenbank implementieren, was relativ einfach ist, wenn die Anwendung nur den aktuellen Status betreffen muss. Bei einem CDC-Mechanismus muss der Ladeprozess nur aufgrund von Änderungen aktualisiert werden und läuft relativ schnell.
Versuchen Sie, die ActsAsVersioned Plugin
Vorausgesetzt, Sie sind nicht mit großen Datenmengen, und die zusätzliche zeitliche Dimension über die Kante nicht schieben Sie Ihre db tun haben, gibt es keine großen Nachteile zu historisch versioniert Daten. Die zusätzliche Abfragekomplexität kann ein kleiner Schmerz sein, aber es ist nichts Wichtiges.
In meinem Fall habe ich ein Schienen-Plugin geschrieben, die Versionierung Griffe, fügt es 5 Spalten zu jeder versioniert Tabelle (und hilft behandeln Abfragen/Manipulation etc.):
valid_from - Datumzeit - die Datetime, die diese Version war bei
valid_to erstellt - Datumzeit - die Datetime, die diese Version gültig
root_id ist gestoppt - integer - die ID des ursprünglichen Zeile (dass dies eine spätere Version)
created_by - integer - Die Benutzer-ID des Benutzers, die die Erstellung dieser Version durchgeführt
retired_by - integer - die Benutzer-ID des Benutzers, Diese Version wurde zurückgezogen
Für derzeit aktive Zeilen ist valid_to null. Das Hinzufügen eines Indexes zu valide_to hilft dabei, die Leistung bissig zu halten.
- 1. Mvc6 versionierte API-Aktionen mit benutzerdefinierten Einschränkungen
- 2. ETag Unterstützung im Frühling für versionierte Entität
- 3. Wie kann ich nicht versionierte Dateien in Bazaar löschen?
- 4. Wie listet man versionierte Dateien in git auf?
- 5. Wie erreichen Image.Clone() in WPF?
- 6. Wie dies in SQL erreichen
- 7. erreichen Funktors
- 8. Basic Reverse mit Namespaced URLs für versionierte APIs
- 9. Erreichen EOF mit fgets
- 10. Erreichen Variablen in jQuery
- 11. Multi-Core in Java erreichen - wie?
- 12. Wie erreichen Sie einen LED-Scroll-Effekt?
- 13. Wie IntroJs die markierten Bereiche erreichen?
- 14. Wie Frames pro Sekunde in WebGL erreichen?
- 15. Wie Timeout-Verhalten mit TestScheduler zu erreichen?
- 16. Wie kann ich dieses Layout CSS erreichen
- 17. Wie kann ich android fab Kurzwahlwähler erreichen?
- 18. Wie erreichen mysql Beitritt mit bedingten Anweisung
- 19. wie man Etikett Popups auf Imagemap erreichen
- 20. Wie erreichen wir MFT über C#
- 21. Wie erreichen Sie einen zuverlässigen Push-Nachrichtendienst?
- 22. Wie erreichen Sie eine zweizeilige Eingabeaufforderung?
- 23. Wie erreichen kreisförmige Layout in Xamarin Formen
- 24. Wie DENSE_RANK() verwenden, real zu erreichen Ranking
- 25. Jackson Fehler: java.lang.NoClassDefFoundError: com/fasterxml/Jackson/core/Versionierte
- 26. SvnClient.GetStatus (Pfad, Argumente, Status) gibt 0 für versionierte Datei zurück?
- 27. Kann Lazarus nichts erreichen?
- 28. erreichen Gmail SMTP Tageslimit
- 29. Artikel nicht erreichen Pipeline
- 30. Erreichen voll funktions Verschiebung Stromsyntax
Nicht mit 'gering' übereinstimmen. Bei einem Versicherungstechnischen System bin ich mit den Schätzungen einigermaßen vertraut, dass das in einer bestimmten Version hinzugefügte Historien-Tracking ungefähr 70% des Entwicklungsaufwands ausmacht. – ConcernedOfTunbridgeWells
Interessant, meine persönliche Erfahrung schwankt etwas anders, aber ich habe das System so konzipiert, dass es von Grund auf versioniert wird. Ich würde mir lieber nicht vorstellen, wie viel Schmerz nötig wäre, um es in einer späteren Version hinzuzufügen. Das System hatte ca. 20 versionierte Tabellen, 10 nicht versioniert. – Michael
Hm, das klingt sehr interessant! Hast du dein Plugin irgendwo veröffentlicht?Könnten Sie es auf GitHub hochladen? Ich würde es gerne sehen, um ein paar Ideen zu bekommen usw. – reto