Best Practice: Ableitbare Daten berechnen oder speichern?

Naryxus

Aktives Mitglied
Hallo,

ich frage mich öfters, was sinnvoller wäre.
Ganz klar das Alter aus einem Geburtsdatum zu berechnen ist in konstanter Laufzeit bewältigt. Da würde ich sagen auf jeden Fall berechnen.
Ich habe aber auch momentan ein Projekt am laufen, das auf Grundlage von Bankkontentransaktionen den Kontostand berechnen soll. Klar könnte ich einfach bei dem Wert 0 anfangen und alle Transaktionen aufsummieren. Die Anzahl der Transaktionen steigt aber kontinuierlich an, sodass es irgendwann teuer wird, alle Transaktionen aufzusummieren.
Würde ich jedoch einen Kontostand redundant mitzählen, so wäre er offensichtlich einfach zugänglich, aber ich müsste die korrekte Funktionsweise meiner Methoden beweisen, da diese nun kritischer sind und ich könnte unter Umständen (wenn auch sehr unwahrscheinlich) Probleme mit dem gleichzeitigen Zugriff auf den Kontostand bekommen.
Denkbar wäre auch eine dritte Variante: Ein Hybrid aus Berechnung und Speicherung. Dass man in regelmäßigen Abständen den Kontostand aktualisiert und die bis dahin berechneten Transaktionen archiviert.

Von den drei Ansätzen fänd ich die letzte am unschönsten. Was ist denn eure Meinung, bis wann sich eine Berechnung noch lohnt und ab wann eine Speicherung notwendig wird?

Grüße
 

Thallius

Top Contributor
Ich würde den aktuellen Kontostand schon speichern. Wichtig dabei ist natürlich, dass alle Änderungen an den Daten nur über den Kontostand laufen dürfen. Es muss also eine Controller klasse geben, die als einzige Zugriff auf die Datenbank hat und alle Änderungen an der Datenbank vornimmt und diese weis dann auch immer den aktuellen Stand und kann diesen ebenfalls speichern.

Gruß

Claus
 

Joose

Top Contributor
Genau in den Fall mit Kontostand wäre CQRS wahrscheinlich praktikabler.
Wobei hier auch die Frage wichtig ist: Ist es eine Software wo nur alle paar Tage etwas eingetragen wird oder wo sehr oft am Tag Änderungen passieren usw.
 

Naryxus

Aktives Mitglied

Danke für den Verweis! Also wird es vermutlich doch auf eine Mischung aus Speichern und Berechnen hinauslaufen.
Meine erste Idee wäre jetzt gewesen, die Berechnung immer über das laufende Jahr laufen zu lassen. Der Benutzer soll dann am Ende des Jahres seinen Endkontostand bestätigen (die Transaktionen werden alle jeweils per Hand eingegeben) und dann wird der Kontostand in einer anderen Tabelle gespeichert.
Die Berechnung erfolgt dann ab dem letzten Eintrag in dieser Tabelle als Grundwert mit jeweils allen neueren Transaktionen.

Ist es eine Software wo nur alle paar Tage etwas eingetragen wird oder wo sehr oft am Tag Änderungen passieren usw.

Das kommt hier ganz auf den Benutzer an. Manche Benutzer werden da so gut wie täglich etwas eintragen. Andere Benutzer werden da nur wöchentlich was eintragen.


Grüße, Naryxus
 

Dukel

Top Contributor
Die Frage ist, wie sind die Anforderungen?
Muss die Nachvollziehbarkeit nur mitprotokolliert sein oder muss diese auch angezeigt werden?
Ich würde evtl. nur den Kontostand erhöhen / verringern und die Transaktionen, z.B. per Trigger, in einer weiteren Tabelle mitprotokollieren.
 

Ähnliche Java Themen

Neue Themen


Oben