与现实世界事件对应的数据库事务可以实现完美的数据完整性?

时间:2011-07-04 22:15:36

标签: sql database transactions acid

我正在和一个在崩溃时使用自动柜员机的人交谈(显然是在运行Windows XP)并拿走了他的钱。

具有预写日志记录的事务数据库可以确保您的数据库保持一致状态,即使ATM崩溃(即,您将始终知道应该在ATM中的多少钱客户的帐户)。然而,分配现金不仅仅是数据库交易而且不是即时操作,那么您是否应该在分配现金之前或之后进行交易?在这两种情况下,如果ATM在正确的时间崩溃,银行或客户可能会赔钱。

这个问题有没有完美的(或至少是相当完美的)解决方案?

我能想到的一种方法是,ATM是否有能力计算其中的金额。如果ATM首先提交交易然后分发现金,那么在从崩溃中恢复后,ATM可以根据保证的一致数据库立即分配超出其应包含的任何额外资金。

但从硬件的角度来看,我不知道这是否真的可行。

你怎么看?有没有其他方法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果事务中数据库系统外部存在活动,则使用“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 ...

您可以设计更多状态来描述困难的碰撞情况。