ATM がクラッシュしたとき (どうやら Windows XP を実行していたようです)、ATM を使用していた男と話していて、お金を奪われました。
先行書き込みロギングを備えたトランザクション データベースは、ATM がクラッシュした場合でも、データベースを一貫した状態に保つことができます (つまり、ATM と顧客の口座にいくらのお金があるべきかを常に知ることができます)。ただし、現金の支払いは単なる DB トランザクションではなく、即時の操作ではないため、現金の支払いの前または後にトランザクションをコミットする必要がありますか? どちらの場合も、ATM が適切なタイミングでクラッシュすると、銀行または顧客のどちらかがお金を失う可能性があります。
この問題に対する完璧な (または少なくとも合理的に完璧な) 解決策はありますか?
私が考えることができる 1 つの方法は、ATM に金額をカウントする機能があった場合です。ATM が最初にトランザクションをコミットしてから現金を払い出した場合、クラッシュから回復すると、ATM は保証された一貫性のあるデータベースに従って、含まれているはずの額を超える追加のお金をすぐに払い出すことができます。
しかし、ハードウェアの観点からは、それが本当に実現可能かどうかはわかりません。
どう思いますか?この問題に対処する他の方法はありますか?