一咽白、問題
1)分戶賬與熱點賬戶區(qū)別啤握?
2)什么是“日切”?
3)系統(tǒng)日切之后晶框,有哪幾個方面需要重點關(guān)注排抬?
4)如果發(fā)生人工錯誤,如何進行錯賬處理授段?
二蹲蒲、分戶賬與熱點賬戶
2.1 分戶賬
分戶賬分為基本戶和一般戶,基本戶:只能在一家銀行開侵贵,開了基本戶之后届搁,需要向人民銀行備案;一般戶:可以在多家銀行開窍育,只有開了基本戶之后卡睦,才能開一般戶,一般戶不能取現(xiàn)漱抓,可以轉(zhuǎn)賬表锻。
2.2 分戶賬場景舉例
分戶賬的概念,比如張三有個活期存款賬戶乞娄,昨日余額是100.00元瞬逊,今天上午存了100.00元显歧,今天下午取了50.00元,那么今日余額就是150.00元确镊。
- 昨日余額分錄:
借:現(xiàn)金? ?100.00元
? ? ? ? 貸:存款? ?100.00元
- 今日存款分錄:
借:現(xiàn)金? ?100.00元
? ? ? ? 貸:存款? ?100.00元
*今日取款分錄:
借:現(xiàn)金? ?50.00元
? ? ? ? 貸:取款? ?50.00元
- 今日余額分錄:
借:現(xiàn)金? ?150.00元
? ? ? ? 貸:存款? ?150.00元
匯總這個帳的記錄過程(昨日負債余額+負債貸方發(fā)生額-負債借方發(fā)生額=今日負債余額)士骤,稱之為分戶賬。在記錄張三存取款過程中骚腥,分戶帳一方面需要記錄每一筆明細敦间,另一方面有需要更新賬戶余額,由此又衍生出兩張表:明細表和余額表束铭。
2.2.1 明細表:
明細表是用來記錄每一筆明細交易廓块,明細表一般設(shè)計的字段有“賬戶,工作日期契沫,發(fā)生額带猴,借貸標志,對方賬戶”具體到數(shù)據(jù)庫懈万,主要是進行插入(insert)操作拴清。
2.2.2 余額表:
余額表是用來記錄賬戶最新的余額,一般設(shè)計的字段有“賬戶会通,工作日期口予,昨日余額,當期余額”涕侈。其中“當期余額”到了當晚就會變成“今日余額”沪停,到了第二天早上就變成了“昨日余額”,具體的數(shù)據(jù)庫裳涛,主要是行更新(update)操作木张。
每發(fā)生一筆交易,根據(jù)發(fā)生額端三,一方面插入“明細表”中舷礼,另一方面更新到“余額表”的當期余額,到第二天就會變成今日余額郊闯。
其中妻献,對于一天當中發(fā)生多筆交易,則明細表中那天該ID有多條記錄团赁,而在余額表那天該ID只有一條記錄育拨。
2.3 熱點賬戶
熱點賬戶就是在交易過程中,出現(xiàn)頻次特別高的賬戶然痊,交易頻次指的賬戶在某個時間段的交易一直保持比較高的次數(shù),由于次數(shù)較多屉符,所以銀行系統(tǒng)在交易的時候會產(chǎn)生大量并發(fā)剧浸,并發(fā)會引起資源的競爭锹引,從而導(dǎo)致交易超時等問題。財務(wù)性能問題主要關(guān)注一下幾個方面:
2.3.1 死鎖
轉(zhuǎn)賬是兩個賬戶之間的事務(wù)唆香,假設(shè)在并發(fā)的情況下嫌变。
事務(wù)1:A賬戶向B賬戶轉(zhuǎn)賬。
事務(wù)2:B賬戶同時向A賬戶轉(zhuǎn)賬躬它。
這種情況可能導(dǎo)致事務(wù)1與事務(wù)2發(fā)生互相等待死鎖腾啥,在技術(shù)上通常的處理方法是借用交通規(guī)則,開一個單行道冯吓,避免互相鎖死倘待。
2.3.2 熱點字段
在并發(fā)交易中,部分字段使用的頻率很高组贺,比如序號凸舵、流水號、余額失尖、發(fā)生額等字段稱之為熱點字段啊奄。
2.3.3 熱點事件
導(dǎo)致熱點字段的交易稱之為熱點事件。比如淘寶雙11掀潮。
2.3.4 熱點賬戶應(yīng)用場景:淘寶購物
淘寶購物分為兩個步驟:一是賣家付錢給淘寶代理中間賬戶菇夸;二是淘寶代理中間賬戶再把錢給賣家,如圖所示:
其中買家付錢是聯(lián)機交易仪吧,在雙11的時候庄新,大量買家付錢將成為熱點事件,而熱點事件將進一步導(dǎo)致熱點賬戶的形成(淘寶賬戶入賬)邑商。
另外摄咆,賣家收錢一般都是批量的作業(yè),可以在空暇時間做人断,所以不是熱點事件吭从。
對于熱點字段,如商家代理中間賬戶余額恶迈,不同事務(wù)會并行更新余額涩金,通常的做法如下:
1) 事務(wù)等待:其中一個事務(wù)在更新,就會進行加鎖處理暇仲,其他事務(wù)要等待步做。
2) SQL操作:只進行更新處理。
如圖所示奈附,更新需要上鎖全度,并發(fā)需要等待,不同的事務(wù)之間會等待加鎖斥滤,故不能有效的應(yīng)對高并發(fā)的事務(wù)将鸵。所以在銀行系統(tǒng)中勉盅,針對次傳統(tǒng)方法進行了優(yōu)化。
1) 事務(wù)松耦合:將事務(wù)解耦顶掉,通過一個臨時的“登記簿”緩沖草娜,進行異步處理。
2) SQL操作:先插入痒筒,進行匯總后再批量更新宰闰。原本更新10次合并后只更新一次。
其中批量更新是熱點期間啟動的一個后臺進程簿透,它按一定時間間隔喚醒移袍、工作完休眠、再喚醒萎战,不斷循環(huán)咐容。
工作流程:
登記簿設(shè)置標志位,后臺進程掃描登記簿蚂维,將它看到的一批未入賬記錄鎖起來戳粒,然后求和,再批量更新虫啥,最后將這批記錄改為已入賬并釋放鎖蔚约。
三、日期涂籽、總分核對苹祟、試算平衡、積數(shù)計算以及計算天數(shù)
3.1 日期
3.1.1工作日期
銀行有一個“日切”的概念评雌,就是指:系統(tǒng)工作日期的切換树枫,工作日期與自然日期不一致,自然日期過了24點就會切換到第二天景东,但是銀行可能是凌晨1點才切換砂轻。
系統(tǒng)在日切之后需要關(guān)注:
1、 初始化:
主要是全局時鐘變量初始化斤吐,同時雙日志也需要進行切換搔涝。
2、 簽到:
網(wǎng)點簽到:主要是環(huán)境初始化和措,下載最新的數(shù)據(jù)庄呈。
柜員簽到:進行柜員指紋認證,交易序號的初始化等派阱。
3诬留、 初筆:
對客戶的賬戶進行日初始化,增加一條記錄,因為不是所有的賬戶都有交易文兑,所以采用了最小的初始化:只對當天動賬的賬戶進行初始化傀广,即客戶在當天第一筆交易進行初始化(初筆處理)。
3.1.2 聯(lián)機與批量
聯(lián)機業(yè)務(wù)與批量業(yè)務(wù)
聯(lián)機業(yè)務(wù):去銀行網(wǎng)點去存取款彩届、通過手機銀行轉(zhuǎn)賬、在ATM機上取款等誓酒,都是聯(lián)機業(yè)務(wù)樟蠕,即通過各類終端連接到銀行后系統(tǒng)直接開展的交易。
批量業(yè)務(wù):如代發(fā)工資靠柑,批量的數(shù)據(jù)源不像聯(lián)機那樣有客戶輸入寨辩,而是通過事先準備好的文件導(dǎo)入,批量效率高歼冰,客戶不是主動而是被動感知的靡狞。
業(yè)務(wù)事務(wù)與數(shù)據(jù)庫事務(wù)
事務(wù):是指涉及到一系列操作要么同時成功要么同時失敗,即事物具有原子性隔嫡、一致性甸怕。“業(yè)務(wù)事務(wù)”要求該業(yè)務(wù)涉及的分錄有事務(wù)性腮恩,從會計角度來說梢杭,每一筆交易都要做會計分錄,即一筆交易的會計分錄是一個“業(yè)務(wù)事務(wù)”秸滴。
數(shù)據(jù)庫事務(wù):從技術(shù)角度來看武契,數(shù)據(jù)通常都是存放在數(shù)據(jù)庫中,數(shù)據(jù)庫作為一種工具荡含,提供了“數(shù)據(jù)庫事務(wù)”操作咒唆,即程序員把一串數(shù)據(jù)庫操作存放到數(shù)據(jù)庫事務(wù)中。
業(yè)務(wù)事務(wù)與數(shù)據(jù)庫事務(wù)不在一個層面(前者是業(yè)務(wù)層面释液,后者是技術(shù)層面)全释,我們的目標是用已有的數(shù)據(jù)庫事務(wù)處理機制來滿足業(yè)務(wù)事務(wù)的要求。
以轄區(qū)內(nèi)轉(zhuǎn)賬為例來說明業(yè)務(wù)事務(wù)與數(shù)據(jù)庫事務(wù)的關(guān)系均澳。
為了方便敘述恨溜,在會計分錄中加上了標號。
① 借:存款-客戶A
②? ? ? ? 貸:轄區(qū)內(nèi)往來-轉(zhuǎn)出網(wǎng)點
③ 借:轄區(qū)內(nèi)往來-轉(zhuǎn)入網(wǎng)點
④? ? ? ? 貸:存款-客戶B
操作串①②③④是“業(yè)務(wù)事務(wù)”找前,假設(shè)涉及的數(shù)據(jù)在一個數(shù)據(jù)庫中糟袁,則可以將它們存放在一個數(shù)據(jù)庫事務(wù)中,這時候業(yè)務(wù)事務(wù)等同于數(shù)據(jù)庫事務(wù)躺盛。
銀行系統(tǒng)是一個大量用戶的并發(fā)系統(tǒng)项戴,為了提高效率,通常將與客戶相關(guān)①④聯(lián)機處理槽惫,將其作為一個數(shù)據(jù)庫事務(wù)周叮。同時將于客戶無關(guān)的②③放到批量中辩撑,與其他操作放在一起,整合成一個“大”的數(shù)據(jù)庫事務(wù)仿耽,放到系統(tǒng)不繁忙的時候處理合冀,稱之為批量補賬。
再假設(shè)在分布式系統(tǒng)中项贺,①與④不在一個數(shù)據(jù)庫中君躺,則當作不了一個數(shù)據(jù)庫事務(wù)。那么則需要在應(yīng)用層按“先借后貸”的原則开缎,通過編程來保證業(yè)務(wù)的事務(wù)性棕叫;
1、若①失敗奕删,則④不做俺泣,向客戶反饋交易失敗。
2完残、若①成功伏钠,則做④:
? ? ? ?1) 若④成功,則向客戶反饋成功谨设;
? ? ? ?2) 若④失敗贝润,則退回①,向客戶反饋失斅料打掘;
日間批量與日終批量
為了應(yīng)對24小時的聯(lián)機業(yè)務(wù),設(shè)計上需將連續(xù)的時間通過日切分為“天”鹏秋。日切后系統(tǒng)會產(chǎn)生:一是聯(lián)機業(yè)務(wù)在新的環(huán)境下開展新一天的業(yè)務(wù)尊蚁;二是批量完成“昨日”的財務(wù)掃尾工作:
(1) 按協(xié)議進行的自動賬務(wù)處理,如信用卡自動還款侣夷、代收代付等横朋;
(2) 特殊日處理,如結(jié)息百拓;
(3) 批量補賬琴锭;
(4) 進行總分核對,輸出對賬信息等衙传;
(5) 導(dǎo)出業(yè)務(wù)數(shù)據(jù)給數(shù)據(jù)庫及大數(shù)據(jù)環(huán)境等决帖。
昨日的賬務(wù)掃尾工作是批量完成的,稱之為日終批量蓖捶。
與日終批量相對的是日間批量地回,日間批量不一定是白天的批量,也可以是晚上。
3.1.3 積數(shù)與利率
銀行計算利息的公式如圖所示:
利息:季末20日計息刻像,計息日之后畅买,如果沒有取出來,就轉(zhuǎn)入本金细睡。
本金:到元谷羞,分以下不計算。
存期:按日溜徙。
利率:日利率
央行公布的利率是年利率洒宝,日利率等于年利率除以360,因此利息計算公式可以進一步演變?yōu)椋?br>
本金乘以天數(shù)萌京,稱之為積數(shù),單位:元/天宏浩。積數(shù)除以360就稱之為息余知残。
關(guān)于利息計算的關(guān)鍵日期:
結(jié)息日
在結(jié)息日的時候,通過積數(shù)算出利息比庄,如果利息取不出來就繼續(xù)存放在本金里求妹。
利息加本金之后,對應(yīng)到余額表里面佳窑,積數(shù)要清零制恍。
利率調(diào)整日:
把當前積數(shù)用調(diào)整前的利率計算利息,然后把積數(shù)重新清零計算神凑。
需要在余額表里面在新增加一個字段净神,用于存儲利率調(diào)整以前的利息,一般為“應(yīng)付利息”溉委。
在結(jié)息日的時候鹃唯,除了正常計算的利息,還要加上應(yīng)付利息瓣喊。
客戶銷戶日:
除了本金坡慌,積數(shù)也要清零:計算上一個結(jié)息日到今天的利息。
3.2 總分核對
余額表的匯總值應(yīng)該等于總賬藻三,稱之為“總分核對”洪橘,如果對不上就是“總分不平”。在銀行進行聯(lián)機交易的時候棵帽,系統(tǒng)會做兩部分工作:
做日志:記錄每一筆交易的明細熄求,比如活期轉(zhuǎn)賬:轉(zhuǎn)入方賬戶、轉(zhuǎn)出方賬戶逗概、柜員號等抡四。
記分戶帳:前面說明了分戶賬中有個余額表,會記錄張三余額多少錢,李四余額有多少錢指巡。
從日志中計算總帳的操作淑履,被稱之為“日終批量”,但是“日終批量”需要耗時藻雪,而銀行系統(tǒng)都是24小時工作的秘噪,為了不影響業(yè)務(wù),做了雙日志處理勉耀,A日志與B日志來回切換指煎,互不影響。如圖所示:
雙日志的框一個是實線一個是虛線便斥,實線代表了當前使用的日志至壤,聯(lián)機交易不斷記錄;虛線的是不活動的日志枢纠,只批量做讀取操作像街,批量完成后備份,最后刪除信息晋渺。兩日志切換時實現(xiàn)變虛線镰绎,虛線變實線。這種設(shè)計保證了聯(lián)機能24小時工作木西。
在分戶賬的余額表里面畴栖,張三有余額,李四有余額八千,余額表加起來有一個余額匯總值吗讶,那么余額表的匯總值等于總帳,這就叫做“總分核對”恋捆。如果對不上就是“總分不平”关翎。
3.3 試算平衡與錯賬處理
資產(chǎn)負債表是用來強調(diào)平衡的,如果不平衡說明有問題鸠信,所以有一個概念:試算平衡纵寝。也就是判斷左邊是否等于右邊。
試算平衡表是在還未對相關(guān)賬戶調(diào)整前出的資產(chǎn)負債表星立,除了在業(yè)務(wù)上可以通過該表了解調(diào)整情況爽茴,它還具有差錯的作用。
一般發(fā)生錯誤都是左邊不等于右邊绰垂。
假設(shè)發(fā)現(xiàn)左邊小于右邊室奏,差額是100元,那么首先需要臨時找一個科目把100元補起來劲装,這個科目稱為掛帳科目(也稱其他應(yīng)收)胧沫。然后具體再查發(fā)生了錯誤昌简,查到后,再從掛帳科目結(jié)轉(zhuǎn)到錯誤科目绒怨。
如果是右邊小纯赎,那么對于掛帳科目就是“其他應(yīng)付”。
如果試算平衡發(fā)生錯誤南蹂,就要進行處理犬金,稱為錯賬處理。錯誤類型一般分為:機器錯誤與人工錯誤六剥。
機器錯誤:一般就是系統(tǒng)程序錯誤晚顷,需要發(fā)補丁解決。
人工錯誤:比如柜員操作失誤發(fā)生匯錯款疗疟、漏匯款等该默,人工錯誤需要用三要素核對:物、票策彤、帳栓袖。
發(fā)生人工錯誤一般分為兩種情況進行解決:
(1) 抹賬:也就是反交易,一般都是在當天進行反交易锅锨,反交易需要找到原交易,在日志里面把標志置為作廢恋沃,然后在明細中減掉相關(guān)明細交易記錄必搞。
(2) 沖賬:沖賬不作廢歷史交易,其實就是一筆新交易囊咏。以下情況使用沖賬:重復(fù)入賬恕洲、遺漏入賬和匯錯收款人。
3.4積數(shù)計算
假設(shè):
客戶當前余額為“余額0”.
經(jīng)過n1天后梅割,余額增加了霜第,變成了“余額1”。
再經(jīng)過n2天后户辞,余額減少了泌类,變成“余額2”。
再經(jīng)過n3天底燎,到了結(jié)息日刃榨。
積數(shù)計算方法有些不同,主要分為一下幾種方法:
1双仍、加法
最簡單的方法:積數(shù):=積數(shù)+余額枢希,加法需要每天日終批量都進行累加計算。
2朱沃、乘法
積數(shù):=積數(shù)×余額0×n1+余額1×n2+余額2×n3
3苞轿、可能積數(shù)法
(1)假設(shè)客戶存了一筆錢茅诱,銀行默認這筆錢的狀態(tài)會一直維持到結(jié)息日,積數(shù)即加上用當前的發(fā)生額×當前日期到結(jié)息日的天數(shù)搬卒。
(2)假設(shè)客戶取了一筆錢瑟俭,銀行默認這筆錢的狀態(tài)會一直維持到結(jié)息日,積數(shù)即減去用當前的發(fā)生額×當前日期到結(jié)息日的天數(shù)秀睛。
公式:
積數(shù):=積數(shù)+存錢發(fā)生額×當前日期到結(jié)息日的天數(shù)
-取錢發(fā)生額×當前日期到結(jié)息日的天數(shù)
此方法即每筆動賬的時候都要算尔当,這種方法稱之為可能積數(shù)法。
3.5 計算天數(shù)
計算天數(shù)是會計系統(tǒng)中經(jīng)常要調(diào)用的程序蹂安,因此其性能很重要椭迎。
首先了解一下陽歷的基本規(guī)則:
(1) 大月31天:一月、三月田盈、五月畜号、七月、八月允瞧、十月简软、十二月。
(2) 小月30天:四月述暂、六月痹升、九月、十一月畦韭。
(3) 二月:平年28天疼蛾,閏年29天。
(4) 閏年與平年:能被4整除的為閏年察郁,其余為平年。
接下來計算從起始日期到終止日期的相隔天數(shù)麦轰,可以將天數(shù)分為三個部分進行求和計算镶苞。
(1) 起始日期到當年年底的天數(shù)壕鹉;
(2) 兩日期間整年的天數(shù)负乡;
(3) 終止日期到當年年初的天數(shù)。
其中第1點和第3點計算方法相類似切省,比如:假設(shè)起始日期是閏年2月15日懒豹,則第一點天數(shù)為:2月15日到2月29日共15天儒老,再加上3月到12月共306天剥扣,共計15+306=321天曙聂;
而對于第2點断国,可以進行逐年相加計算坐漏。
四砰碴、 總結(jié)
首先對分戶帳猖辫、熱點賬戶進行介紹說明乃正,并且使用案例進行規(guī)則說明住册。最后對日期、總分核對瓮具、試算平衡荧飞、積數(shù)計算與天數(shù)計算進行了簡單介紹并舉例說明相關(guān)業(yè)務(wù)。