2011-07-04 3 views
1

私は、クラッシュしたときにATMを使用していた人と話していました(明らかにWindows XPを実行していました)。現実世界のイベントに対応するデータベーストランザクションで、完全なデータ整合性が可能ですか?

ライト・アヘッド・ロギングを使用するトランザクション・データベースでは、ATMがクラッシュした場合でもデータベースが一貫性のある状態を保つことが保証されます。つまり、がATMと顧客のアカウントにどれくらいの金額。ただし、現金をディスペンシングするのは単なるDB取引ではなく、インスタント操作ではないため、現金が出金される前または後に取引をコミットする必要がありますか?いずれの場合も、適切な時期にATMがクラッシュした場合、銀行または顧客の両方がお金を失う可能性があります。

この問題を解決する完璧な(または少なくとも合理的に完璧な)ソリューションはありますか?

私が考えることの1つは、ATMにその中の金額を数える能力があるかどうかということです。 ATMがトランザクションを最初にコミットしてから現金を出すと、クラッシュから回復すると、ATMは保証された一貫性のあるデータベースに従って、それが含むべき金額を直ちに追加配当することができます。

しかし、ハードウェアの観点からは、それが本当に実現可能かどうかはわかりません。

あなたはどう思いますか?この問題に対処する他の方法はありますか?

+0

大型オレンジ色のスーパーマーケットの外にある現金自動預け払い機で現金を払うのを忘れてしまった。数秒後(30?)、取られていない調剤済みの現金は引き込まれ、機械内に保管されますが、調剤されることを待っている現金は分かれています。私は銀行から、店に連絡して、現金が請求されるのを待っているマシンにぶら下がっているかどうかを確認するように言われました。言うまでもありませんが、私は40 GBPを紛失しました(ああ!) – onedaywhen

答えて

1

トランザクション内にデータベースシステム外のアクティビティがある場合、「ステータス」列を使用して「手動トランザクション」を構築することは、そのような状況の解決策です。例えば

: スペンスキャッシュのステータス:

0 - Check the account of user 
1 - Check passed, dispensing cache 
2 - Dispense cache sucessfully 
-1 - Updated status after reboot the ATM from crash if the status is 1 
-2 - Updated status after reboot the ATM for other erratic situations ... 

あなたは困難なクラッシュの状況を説明するために多くの状態を設計することができます。

関連する問題