jSnax7 hat geschrieben: ↑9. Okt 2022, 19:07
Zuallererst mal - das unterscheidet sich in der Komplexität 0 von dem, was ich vorher geschrieben habe.
Doch. Du wolltest, wenn ich es richtig verstanden habe, an mehreren Stellen jeweils die Schließfachgebühren berechnen und diese in die Datenbank schreiben.
Ich wollte lediglich die aktuelle Anzahl SF-Items in die Datenbank schreiben, wenn diese vorm Herausnehmen von Items größer als der bisher gespeicherte Wert war oder für den Tag bislang kein Wert gespeichert war.
Meine Variante spart sich die mehrfache Berechnung der Schließfachgebühren und funktioniert auch richtig, wenn der Spieler an dem Tag ne Stufe Bankwesen gelernt hat.
Wieso ich null als default nehmen würde?
Ich sehe grundsätzlich 2 sinnvolle Varianten, wenn man die maximale Item-Anzahl in die Datenbank schreibt.
Variante 1 (Wert für jeden Spieler vorhanden):
Code: Alles auswählen
Initiale Berechnung für alle Spieler nötig
Update beim Einlagern if(countItems > dbValue)
Berechnung mit max(dbValue, countItems)
Nächtlicher Reset auf countItems (soll ja nur die maximale Itemanzahl an dem jeweiligen Tag beachtet werden)
Variante 2 (default null):
Code: Alles auswählen
Keine initiale Berechnung nötig
Update vorm Herausholen if(dbValue == null || dbValue < countItems)
Berechnung mit max(dbValue ?? countItems, countItems)
Nächtlicher Reset auf null
- Die Anzahl der Datenbank Schreib-/Lesevorgänge bei der Berechnung (also auch bei der Anzeige an der Bank) und beim Einlagern/Auslagern (ausgehend davon, dass beides gleich häufig passiert) sind bei beiden Varianten gleich.
- Variante 2 hat bei Herausholen und Berechnung einen zusätzlichen Null-Vergleich auf die Variable mit dem dbValue.
- Variante 2 muss beim nächtlichen Reset nicht für alle Spieler die Werte aktualisieren, sondern nur alle not null Werte auf null setzen.
- Variante 2 braucht keine initiale Berechnung
Der zusätzliche Null-Vergleich dürfte für die Performance keine relevanten Auswirkungen haben. Da der Reset mit null aber deutlich performanter ist, würde ich diese Variante nutzen.