Идеальная целостность данных возможна с транзакциями базы данных, которые соответствуют событиям реального мира? - PullRequest
1 голос
/ 05 июля 2011

Я разговаривал с парнем, который использовал банкомат в случае его сбоя (очевидно, он работал под управлением Windows XP) и забрал его деньги.

Транзакционная база данных с журналированием с опережением записи может гарантировать, что ваша база данныхостается в согласованном состоянии, даже если банкомат выходит из строя (т.е. вы всегда будете знать, сколько денег должно быть в банкомате и на счете клиента).Однако выдача наличных - это не просто транзакция в БД и не мгновенная операция, поэтому следует ли совершать транзакцию до или после выдачи наличных?В обоих случаях банк или клиент могут потерять деньги, если банкомат выйдет из строя в нужное время.

Существуют ли идеальные (или хотя бы достаточно совершенные) решения этой проблемы?

Один из способов, который я могу себе представить, заключается в том, если бы банкомат имел возможность подсчитывать количество денег в нем.Если банкомат сначала совершил транзакцию, а затем выдал наличные деньги, то после восстановления после сбоя банкомат мог немедленно выдать любые дополнительные деньги сверх того, что он должен содержать, в соответствии с гарантированной согласованной базой данных.

Но из аппаратного обеспеченияточка зрения, я не знаю, будет ли это реально осуществимо.

Что ты думаешь?Есть ли другие способы решения этой проблемы?

1 Ответ

1 голос
/ 05 июля 2011

Если в транзакции есть активность вне системы базы данных, использование столбца «status» для построения «транзакции вручную» является решением для такой ситуации.

например: Состояние кэша выдачи:

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 ...

Вы можете создать больше статуса, чтобы описать сложную аварийную ситуацию.

...