2016-04-08 10 views
1

Ich entwerfe eine Datenbank, die Daten auf Transaktionsebene enthält. Es funktioniert genauso wie ein Bankkonto - Abbuchungen/Gutschriften auf eine Kontonummer.Was ist der Best Practice-Datenbankentwurf für die Transaktionsaggregation?

Was ist der beste/effizienteste Weg, die Aggregation dieser Transaktionen zu erhalten.

Ich überlegte, eine zusammenfassende Tabelle zu verwenden und diese dann zu einer Liste der heutigen Transaktionen hinzuzufügen, um daraus abzuleiten, wie viel jedes Konto hat (d. H. Da Gleichgewicht).

Ich möchte, dass dies skalierbar ist (dh 1 Milliarde Transaktionen), also möchte nicht Datenbank-Treffer auf die Haupt-Faktentabelle durchführen müssen, da es alle Abbuchungen/Kredite finden muss, die mit einer gewünschten Kontonummer verbunden sind scannen möglicherweise eine Milliarde Zeilen.

Danke, jede Hilfe oder Ressourcen wäre genial.

Antwort

3

(Seit fast 10 Jahren in Banken gearbeitet. Hier ist, wie es tatsächlich getan wird).

TLDR: Ihre Idee ist gut.

Hin und wieder speichern Sie die Waage woanders ("Saldo übertragen"). Z.B. jeden Monat oder so (oder für eine bestimmte Anzahl von Transaktionen). Um den tatsächlichen Saldo (oder einen beliebigen Saldo in der Vergangenheit) zu berechnen, sammeln Sie alle relevanten Transaktionen in der Zeit bis zum letzten Saldo, den Sie behalten ("Saldovortrag"), den Sie natürlich hinzufügen müssen.

Der "aktuelle" Kontostand wird nicht beibehalten. Alleine für die Locking-Probleme, die Sie haben würden, wenn Sie dieses Gleichgewicht die ganze Zeit aktualisieren würden. (In echten Banken werden Sie mit fast jeder einzelnen Transaktion bankinterne Konten erreichen. Es gibt viele bankinterne Konten, um die gesetzlich vorgeschriebenen Zahlen zu erhalten. Diese Konten werden sehr oft geknackt und würden bei Ihnen Sperrprobleme verursachen Ich möchte sie mit jeder Transaktion aktualisieren, stattdessen werden alle Transaktionen nur eingefügt - selbst die Saldovorträge sind nur Einsätze.

auch in realen Bänken haben Sie viele Anwendungsfälle, die diesen Ansatz günstiger machen:

  • Lage zu sein, jederzeit vom Guthaben zurück zu bekommen - in der Lage sein Guthaben zu erhalten, basierend auf unterschiedliche Terminen für jede Zeit (zB Valuta vs. Transaktionsdatum).
  • Stornierungen/Stornierungen sind ein Spaß für sich. Stellen Sie sich vor, eine Transaktion von vor zwei Wochen rückgängig zu machen und trotzdem alle oben genannten Vorgänge beizubehalten.

Sie sehen, das ist eine lange Geschichte. Die Antwort auf Ihre Frage lautet jedoch: Ja, Sie können keine immer größere Anzahl von Transaktionen akkumulieren, Sie müssen Zwischenbilanzen behalten, um die Anzahl zu begrenzen, wenn Sie sie benötigen. Die Haupttabelle für eine begrenzte Anzahl von Zeilen zu treffen, sollte kein Problem sein.

Stellen Sie sicher, dass Ihre Hauptabfrage eine Index-Only Scan verwendet.

+0

Danke für die Antwort. Ihre Antwort macht viel Sinn und ich dachte, es gäbe einen ähnlichen Prozess.Um den Saldo aus der Tabelle "Saldovortrag" und der Liste der letzten Transaktionen zu erhalten, würden Sie nur eine Vereinigung verwenden, um sie zusammenzufassen, als die Aggregation auf den kombinierten Satz anzuwenden, um das Gleichgewicht der Personen zu erhalten. Danke für Ihre Hilfe – Jimmyn

-3

Machen Sie ein objektorientiertes Design, erstellen Sie Tabelle für Objekte Beispiel Konto, Transaktion usw. Hier ist eine gute website für Ihre Referenz. Aber es gibt viel mehr im Internet über OODBMS zu diskutieren. Die Referenz, die ich gab, ist nur meine Basis, als ich anfing, ein OODBMS zu machen.

Verwandte Themen