- 论坛徽章:
- 0
|
而目前我们银行的做法是:
1. 首先帐户表中的余额字段应保存上日余额和当前余额。
2. 有流水表负责记录当日发生的交易和金额,以及当前的系统状态(日始OR日终(PAUSE)OR日切(CHANGE))。
3. 系统状态表,记录系统时间,
那么在记帐处理的时候,就要分情况来处理:
A. 2005.1.1日始情况(正常情况下),交易发生是,先读取系统表,发现是日始状态,那么按照正常日程处理,先扣帐,写交易流水和传票。
B. 当日终发生时,要从2005.1.1日切换为2005.1.2日,首先先切换系统状态为日终(PAUSE)状态。那么再介绍同时并行的批量和联机交易如何处理:
批量: 批量交易,将会把该表A备份到另一张表B(日终帐户表)中,进行处理,此时,帐户表A是不被更改的。
当批量处理的时候,更新的帐户表为日终帐户表B,该表B只给批量的程序使用(读取和更新)。
当批量处理完成后,即帐户表B 的上日余额2005.1.1日将与当日余额(2005.1.2)的一致。而帐户表A中的上日余额2004.12.31,
当日余额为2005.1.1日。
联机:联机交易发生时,读取系统状态,发现是PAUSE,那么,交易将读取帐户表A,读取当日的帐户日终余额2005.1.1日的
BAL(current),再读取交易发生额amt1(在PAUSE 状态下,帐户余额不被更改,只写交易发生额在流水文件中),因此,该帐户
在2005.1.2的PAUSE 状态下的交易发生额=SUM(流水表中,根据交易时间2005.1.2日,帐户和系统状态为PAUSE的交易记录
的发生额的汇总)。这样,可以计算出当前该帐户的余额,即通过BAL(CURRENT)- AMT1 获得。
然后判断当前余额(2005.1.2日)是否足够。如果足够,则写流水表。写入的流水表中,记录的交易日期为2005.1.2日,系统状态
为(PAUSE)状态。
C. 当日切开始时,系统状态将为CHANGE。那么再介绍同时并行的批量和联机交易如何处理:
批量:批量交易负责读取当前帐户表B中的数据,回写入帐户表A中,而写的时候,需要检查该帐户在2005.1.2日的流水表中,是否有发生
交易。 如果有,则需要对当前余额进行扣减。规则同上。不同点是,增加将读取过的交易发生额置为已处理状态。表的修改顺序是
先修改帐户表A,再修改流水表。
当批量处理完毕后,将修改系统状态为日始状态。
联机:联机交易发生时,读取系统状态,发现是CHANGE时,那么交易将读取流水表,判断是否有2005.1.2日,PAUSE状态下的发生额,
如果没有,那么处理简单,同A的情况一致。如果有,则同C中批量的方法基本一致,先修改
帐户当前余额=2005.1.1日的余额-2005.1.2PAUSE点的交易发生额-当前发生额,然后再修改流水表中的交易记录为已处理
状态,再添加1条记录进入流水表。
这种方法是纯粹通过应用的方法保证24小时,虽然比较复杂,但是确实是一种有效的方法。
[ 本帖最后由 liuzxcvb 于 2007-3-4 15:26 编辑 ] |
|