2016-04-08 3 views
1

私はトランザクションレベルのデータを保持するデータベースを設計しています。それは銀行口座と同じように動作します - 口座番号への借方/クレジット。トランザクションアグリゲーションのベストプラクティスデータベース設計とは何ですか?

これらのトランザクションの集約を取得する最も効率的な方法は何ですか。

サマリーテーブルを使って今日の取引のリストに追加して、各アカウントの残高(つまり残高)を導き出すことを考えました。それは希望の口座番号を持つすべての借方/クレジットの仲間を見つける必要がありますよう

私はこれが(すなわち10億のトランザクション)スケーラブルになりたいので、データベースを実行する必要がありますする必要はありませんが、メインファクトテーブルにヒット潜在的に10億行をスキャンします。

ありがとうございました。ご協力いただきありがとうございます。

答えて

3

(銀行ではほぼ10年間働いていますが、これは実際にどのように行われたかです)

TLDR:あなたの考えは良いです。

いつでもどこか他の天びんを保管しています(「キャリー・フォワード・バランス」)。例えば。毎月(または一定数の取引を避ける)。実際の残高(または過去の残高)を計算するには、追加する必要がある最新の残高(「繰越残高」)まで、すべての関連する取引を累積します。

「現在の」残高はどこにも保持されません。このバランスを常に更新しておけば、ロックの問題だけが起こります。 (実際の銀行では、ほとんどすべての取引で銀行内部のアカウントにヒットすることがあります。法律で要求される数値を得るための銀行口座がたくさんあります。これらのアカウントは頻繁にヒットし、すべてのトランザクションを挿入するだけで、キャリー・フォワード・バランスは単なる挿入にすぎません)。任意の時間のために異なる日付に基づいて残高を取得することができること( - いつでも戻って日付の残高を取得することができること

  • はまた、実際の銀行にあなたは、このアプローチは、より有利にする多くのユースケースを持っています例えば、日付の日付と取引日の日付)。

  • 逆転/取り消しは、それ自身の面白いことです。 2週間前からトランザクションを元に戻して、上記のすべてを引き続き行うことを想像してください。

これは長い話です。しかし、あなたの質問に対する答えは:はい、ますます増え続ける取引を累積することができないので、必要に応じて累積する数を制限するために中間残高を維持する必要があります。限られた数の行のためにメインテーブルを叩くことは問題ではありません。

メインクエリでIndex-Only Scanが使用されていることを確認してください。

+0

答えをありがとう。あなたの答えはたくさんの意味を持ち、同様のプロセスがあると思いました。「キャリー・フォワード・バランス」の表と最近の取引のリストからバランスを取るという点では、個人のバランスを取るために組合に集計を適用するよりも、組合をまとめて使用するだけでしょうか。ご協力いただきありがとうございます – Jimmyn

-3

オブジェクト指向設計を実行する、オブジェクトのテーブルを作成する例、アカウント、取引など参考になると便利なwebsiteです。しかし、OODBMSについて議論しているWebにはもっと多くのことがあります。私が与えたリファレンスは、私がOODBMSをやり始めたときの私の基礎にすぎません。

関連する問題