0


0

私は数千人の従業員を抱える私の会社のためのプロトタイプサイトを構築しています、そして私は特定の要件の実行に関して壁に突き当たります。

例を挙げて簡単に説明すると、各ユーザーが興味のある銀行口座を持っているとしましょう。 5分ごとに(変動する可能性があります)利息が支払われます。 ユーザーがサイトにアクセスすると、関心が支払われるはずの時間までカウントダウンされるタイマーが表示されます。

私が遭遇している壁は、「払い出し」そしてそれに応じて行動を起こす必要があるアカウントを探してWindowsサービス(あるいは何でも)がデータベースを絶えず打っているのはただ気分が悪いということです。

これが私の頭の中で唯一の解決策であるように思われます、しかし、私は「支払われる」必要がある勘定科目のソートされた結果セットを検索するために質問を走らせるサービスがそれを切らないということはかなり確実です。

とアイデアや提案を事前にありがとうございました!

3 Answer


1


レコードを更新するのではなく、発生した利息をその場で計算します。

この種の数学は非常に簡単で、計算は連続的な更新よりも桁違いに速いでしょう。

次のようなものがあります。

WITH depositwithperiods AS(発生主義としてSELECT accountid、depositamount、FLOOR(DATEDIFF(n、deposit_timestamp、GETDATE())/ 5、FROM預金から)

残高としてSELECT accountid、sum(depositamount)をTotalDepositsとして、sum(POWER(depositamount *(1 interestrate)、accrualperiods))を選択する。

私は上記の複利を想定していましたが、引き出しはしませんでした。

引き出しを追加するには、期間ごとに預金のグループを作成し、それらの合計を取得して各期間の正味預金を取得し、その後これらのグループの利子を計算する必要があります。


0


あなたの実際のユースケースに興味の類推が成り立つかどうか私は知りません。 データベースをすべてのユーザーに対して常に最新の状態に保つ必要がない場合は、最新の値が必要なときにAddInterest操作を一度に複数回適用することができます。 つまり、値が表示されるとき、または口座残高が変化しようとしているときです。

あなたはすべてのアカウントのために一晩の更新を行うことができます。


0


この種のことをするときに考えるべきよいことはDateTimeです。

1分間に10ペンスの通話料が課金される場合、そこに座って1分ごとにカウントして数分で解決するコンピュータはありません。 開始時の日時と終了時の日時を記録するだけです。

他の人が示唆しているように、ユーザーが表示しようとしたときに計算するだけです。