1UnitedPower: Rangpunkte in DB eintragen oder bei Ausgabe berechnen?

Beitrag lesen

Meine Herren!

Die Rangpunkte werden aus den Punkte-Spalten abgeleitet. Wenn du diesen abgeleiteten Wert wiederum in der Datenbank speicherst, dann liegt diese Information also redundant vor. Das Porblem von Redundanz ist, dass man besondere Rücksicht auf die Konsistenz der Daten nehmen muss. Deshalb sollte man sie vermeiden.

Was deine Performanz-Bedenken angeht, die schmeiß erstmal über Board. Ich halte es für höchst unwahrscheinlich, dass das zu deinem Flaschenhals werden könnte. Sowieso ist es höchst ineffektiv Leistungs-Optmierung auf Verdacht zu betreiben. Meiner Erfahrung nacht tut man besser daran, Software zunächst nur unter architektonischen Gesichtspunkten zu entwickeln. Wenn sich daraus ein Problem mit der Performanz ergibt, dann sollte man die Schwachstellen analysieren und da nachbessern, wo Bedarf besteht.

Und falls dein Flaschenhals doch genau an dieser Stelle liegen sollte, dann würde ich keine Zeit daran verschwenden, zu versuchen die Werte auf eigene Faust zwischenzuspeichern. Ich würde dann eher auf eine bewehrte Caching-Strategie setzen, zum Beispiel den mysql-Anfragecache. Das kann dir viel Arbeit ersparen, zum Beispiel wenn es darum geht herauszufinden, wann der Cache invalidiert werden muss. Ein Problemfall hast du ja schon richtig erkannt: Wenn sich die Punkte eines Schülers ändern. Ein anderer Fall wäre zum Beispiel, wenn sich die Formel zum Berechnen der Rangpunkte ändert. Es ist sehr schwierig sich alle Problemfälle vor Augen zu führen, insbesondere auch, wenn verschiedene Entwickler am Werk sind, oder wenn die Entwicklung sich über einen längeren Zeitraum erstreckt. Besser man lässt solche Arbeit automatisert von einem Caching-Framework erledigen.

--
“All right, then, I'll go to hell.” – Huck Finn