Rechnen mit vielen Datensätzen

ff313

Benutzer
Beiträge
5
Moin,

ich habe eine allgemeine Frage zur richtigen Vorgehensweise.

Worum geht es?

Ich habe eine Seite, bei der User Einzahlungen vornehmen können. Es geht dabei um kleinere Beträge zwischen 5 und 100 Euro. Jede Einzahlung wird mit einem Datensatz in die DB (MySQL) geschrieben. Enthalten sind sieben Spalten. Alle mit kleinen Daten. Also Datum, Betrag in Fiat, Betrag in Crypto, Wallet, ID usw.

Jede Dienstleistung kostet 5-10 Euro. Die Anzahl der User, der Einzahlungen und der Verbrauch lassen sich noch nicht absehen. Es werden aber sicher einige hundert User werden, die regelmäßig einzahlen und Dienste nutzen.

Jetzt muss ich ja irgendwie das aktuelle Guthaben berechnen. Dazu habe ich jetzt drei Optionen:

Alle Einzahlungen werden mit je einem Datensatz in die Tabelle geschrieben. Das passiert eh. Das können dann schnell zig tausend werden und es werden natürlich immer mehr.

Option 1: Ich schreibe auch jede Abbuchung für Dienstleistungen in diese Tabelle und berechne das Guthaben direkt mit MySQL und lasse es dann (übrigens via PHP und JS) ausgeben.

Option 2: Ich lege für die Abbuchungen eine eigene kleine Tabelle an und verrechne zwischen den Tabellen oder mit PHP.

Option 3: Ich lege eine extra Tabelle an, in der ich je User einen Datensatz anlege und nur immer das aktuell berechnete Guthaben aktualisiere.

Am einfachsten wäre für mich die Option 1. Dort kommen dann aber wohl auch die meisten Datensätze zusammen und da ich kein Experte bin, kann ich nicht einschätzen, bis zu wie vielen Datensätzen es vernünftig ist, direkt solche Mengen in der DB zu verarbeiten/berechnen. Option 2 wäre ähnlich, nur mit einer weiteren Tabelle. Und Option 3 wäre wohl die schlankste. Allerdings lassen sich die jeweiligen Abbuchen nicht mehr im Einzelfall nachvollziehen. Und wenn was daneben geht, kann nichts mehr rekonstruiert werden.

Welche Variante ist für mein Anliegen die sinnvollste?

Vielen Dank für die Hilfe.
 
Werbung:
viele Wege führen nach Rom.

Eine Aggregation von einigen hundert oder tausend Datensätzen geht flott. Verrechnen zwischen Tabellen via PHP ist die grottigste Lösung. Manchmal kann ein Bruch der Normalisierung, hier mit einem TRIGGER, der in der User-Stammdatentabelle den aktuellen Saldo führt, eine gute Lösung sein.
 
Ich sollte noch erwähnen, dass das Guthaben an verschiedenen Stellen gebraucht wird. Einmal in der Kopfzeile. Dort wird es also quasi bei jedem Seitenaufruf berechnet/ausgelesen. Dann wird natürlich vor der Inanspruchnahme der Dienstleistung geprüft, ob das Guthaben ausreicht.

viele Wege führen nach Rom.

Eine Aggregation von einigen hundert oder tausend Datensätzen geht flott. Verrechnen zwischen Tabellen via PHP ist die grottigste Lösung. Manchmal kann ein Bruch der Normalisierung, hier mit einem TRIGGER, der in der User-Stammdatentabelle den aktuellen Saldo führt, eine gute Lösung sein.

Ich habe das reine Guthaben bisher einfach mit "SUM(XYZ) as XY" ausgeben lassen. Jetzt kommt halt der Teil, bei dem ich es mit den Ausgaben irgendwie verrechnen muss. Ich weiß, nicht die pfiffigste Idee, sich das jetzt erst zu überlegen. Aber ich wachse an der Aufgabe.
 
Ich sollte noch erwähnen, dass das Guthaben an verschiedenen Stellen gebraucht wird. Einmal in der Kopfzeile. Dort wird es also quasi bei jedem Seitenaufruf berechnet/ausgelesen. Dann wird natürlich vor der Inanspruchnahme der Dienstleistung geprüft, ob das Guthaben ausreicht.
Applikationsproblem, hier irrelevant.

Ich habe das reine Guthaben bisher einfach mit "SUM(XYZ) as XY" ausgeben lassen. Jetzt kommt halt der Teil, bei dem ich es mit den Ausgaben irgendwie verrechnen muss. Ich weiß, nicht die pfiffigste Idee, sich das jetzt erst zu überlegen. Aber ich wachse an der Aufgabe.

Ausgaben negativ speichern, schon klappts wieder mit sum().

Wenn das wachsen soll und Du eines Tages vielleicht rollende Summen darstellen willst oder andere Dinge, dann würde ich die Wahl der DB nochmals prüfen.
 
Ausgaben negativ speichern, schon klappts wieder mit sum().

Wenn das wachsen soll und Du eines Tages vielleicht rollende Summen darstellen willst oder andere Dinge, dann würde ich die Wahl der DB nochmals prüfen.

Also alles in eine Tabelle packen und dann einfach via SUM() ausgeben lassen. Ist für mich auch das einfachste. Die konkrete Frage ist, ob das bei ein paar hundert Usern und einigen tausend Datensätzen performancemäßig in Ordnung ist. Im Vergleich zu anderen Online-Projekten sind meine Datenmengen ja eher bescheiden. Ich habe mir halt trotzdem Gedanken über den schlanksten Weg gemacht. Eine andere DB müsste ich erst lernen. Ist mir für die Anfangszeit ehrlich gesagt zu anstrengend. Sollte das gut laufen, sieht eh alles anders aus.
 
Da ist jetzt halt schon alles andere auch mit MySQL gemacht. Ich bin quasi nur Hobbybastler in dem Bereich. Welche DB wäre denn da besser geeignet, die mit PHP leicht funktioniert? Die DB muss ja nicht viel können. Die zu bewältigenden Aufgaben sich nicht sonderlich komplex. Es sind nur u.U. viele Datensätze.
 
Werbung:
Zurück
Oben