夜間批處理,如生成會計流水文件、總分對賬文件、日終充值文件等,按賬戶當日日終餘額或當日交易流水進行統計彙總,需要保持數據的一定靜止,而夜間聯機交易會更新賬戶餘額,賬戶餘額爲動態。一般批量處理與聯機處理的衝突區主要在賬戶餘額,解決批量用賬戶日終餘額與聯機用賬戶實時餘額的存儲與使用問題,可很大程度實現7×24業務服務。也即解決總分賬、會計賬一致問題。
實現7x24服務,最關鍵的要點在於保證兩份數據的準確並存:
- 動態實時數據(實時餘額):主要是動賬及日間查詢交易使用
- 日切點的靜態數據(上日餘額):主要用於批處理:比如總分覈對、財務供數等
目前各廠商主要使用的方案有以下幾種:
- 單表雙餘額
- 雙表(雙表又分兩種:臨時表爲分戶臨時表或是流水臨時表)
工商銀行模式雙主檔、單餘額、雙流水, 中國銀行模式雙主檔、單餘額、單流水, 建設銀行模式單主檔、雙餘額、雙流水, 民生銀行模式單主檔、單餘額、雙流水
參考建行方案,結合雙日期、雙餘額的分戶帳設計,制定如下方案:
雙餘額每日更新方案
分戶賬上設置當前餘額、上日餘額、最後交易日期。根據以上字段來實現當前餘額、上日餘額的讀取和更新,系統每天將當前餘額更新到上日餘額,當前交易日期更新到最後交易日期。 其中當前交易日期也稱會計日,存放在銀行日期表
1. 日終批量刷新上日餘額
日終切日後一開始直接批量刷新上日餘額,便於後續讀取及供數。爲避免長時間鎖表,該批量任務逐筆處理。
- 對於一筆分戶賬,
- IF 最後交易日期 < 當前交易日期
- UPDATE 分戶賬 SET 上日餘額=當前餘額,最後交易日期=當前交易日期
2. 動賬處理
切日後,日終批量刷新需要一段時間,爲確保在此期間的聯機交易正常對外服務,動賬時當日第一筆交易更新上日餘額、最後交易日期。
首先檢查帳戶的‘最後交易日期’與‘當前交易日期’是否相同,如果不同,說明該帳戶第一次更變餘額,此時要將‘當前餘額’放入‘上日餘額’,‘最後交易日期’更改爲此‘當前交易日期’,並記錄交易流水,該交易流水的日期爲日切後當前交易日期。 換日後的第二筆及更多交易,只更新當前餘額,並記錄交易流水。
聯機交易與日終批量更新上日餘額有極小的可能會出現衝突(同時更新同一賬戶)。如果發生,解決如下:(1) 如果批量鎖表,聯機失敗,交易重做將成功。 (2)如果聯機鎖表,批量失敗,批量重新從斷點重跑。
3. 獲取上日餘額處理
取上日餘額的情景均在日終刷新上日餘額之後,直接取分戶賬中的上日餘額即可。
參考鏈接
https://www.jianshu.com/p/c0c20144027b
https://zhuanlan.zhihu.com/p/20894306
上述兩個鏈接的方案合併閱讀,可得方案。