国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種并發(fā)事務(wù)的處理方法和裝置制造方法

      文檔序號:6488641閱讀:176來源:國知局
      一種并發(fā)事務(wù)的處理方法和裝置制造方法
      【專利摘要】本申請?zhí)峁┝艘环N并發(fā)事務(wù)的處理方法和裝置。所述方法包括:接收客戶端提交的多個事務(wù);將每個事務(wù),拆分為多個針對單個賬戶的數(shù)據(jù)處理子操作,并構(gòu)成一個數(shù)據(jù)處理組;并發(fā)執(zhí)行各個數(shù)據(jù)處理組,其中,同一組的數(shù)據(jù)處理子操作逐個執(zhí)行,不同組的數(shù)據(jù)處理子操作同時執(zhí)行。本申請可以提高并發(fā)事務(wù)的處理效率。
      【專利說明】一種并發(fā)事務(wù)的處理方法和裝置
      【技術(shù)領(lǐng)域】
      [0001]本申請涉及數(shù)據(jù)處理領(lǐng)域,特別是涉及一種并發(fā)事務(wù)的方法和裝置。
      【背景技術(shù)】
      [0002]網(wǎng)絡(luò)熱點(diǎn)數(shù)據(jù)是指在在當(dāng)前業(yè)務(wù)系統(tǒng)中,一定的時間內(nèi)訪問頻率較高的數(shù)據(jù)。例如,在支付賬戶中,所有賬戶會員的賬戶余額值中,大商戶中的賬戶余額由于經(jīng)常被訪問成為熱點(diǎn)數(shù)據(jù);積分賬戶中的當(dāng)前剩余額度數(shù)據(jù)也是熱點(diǎn)數(shù)據(jù)。
      [0003]業(yè)務(wù)系統(tǒng)中,常常出現(xiàn)多個事務(wù)需要同時操作數(shù)據(jù)庫內(nèi)同一條熱點(diǎn)數(shù)據(jù)的情況,例如:對同一個賣家同時有多筆帳務(wù)的寫操作。當(dāng)同一條熱點(diǎn)數(shù)據(jù)被多個并發(fā)事務(wù)請求操作時,當(dāng)某些操作需要撤銷或是回滾時,只能通過修改數(shù)據(jù)的方式進(jìn)行,當(dāng)多個操作對同一個數(shù)據(jù)進(jìn)行修改時,容易造成數(shù)據(jù)在事務(wù)之間被覆蓋,即臟寫。因此,必須在多個事務(wù)之間存在一種協(xié)調(diào)機(jī)制,防止事務(wù)之間的沖突,保證數(shù)據(jù)一致性及完整性。
      [0004]現(xiàn)有技術(shù)中,針對熱點(diǎn)數(shù)據(jù)的高并發(fā)事務(wù),可以通過讀寫鎖的方式來解決。
      [0005]讀寫鎖機(jī)制是通過讀寫鎖控制多個事務(wù)按順序執(zhí)行,多個并發(fā)事務(wù)在數(shù)據(jù)庫內(nèi)搶鎖,獲得讀寫鎖的事務(wù)將賬戶鎖定,余額數(shù)據(jù)只受當(dāng)前正在處理的事務(wù)的影響,該事務(wù)處理完成后,釋放讀寫鎖,搶到鎖的事務(wù)再對該賬戶進(jìn)行處理,因此,可以嚴(yán)格保證數(shù)據(jù)的一致性和完整性。
      [0006]以上現(xiàn)有技術(shù)中存在的問題是:讀寫鎖方式中,由于一個事務(wù),從讀取數(shù)據(jù),業(yè)務(wù)演算,更新數(shù)據(jù),整個環(huán)節(jié)可能耗時很長,在復(fù)雜的業(yè)務(wù)場景,單個事務(wù)處理甚至達(dá)到秒級的時間量。順序執(zhí)行使得業(yè)務(wù)處理吞吐量受到嚴(yán)重制約,在大并發(fā)量情況下,處理事務(wù)的性能存在嚴(yán)重瓶頸,無法滿足日常處理需求。
      [0007]因此,目前需要本領(lǐng)域技術(shù)人員解決的一個技術(shù)問題就是,提供一種并發(fā)事務(wù)的處理機(jī)制,以提高并發(fā)事務(wù)的處理效率。

      【發(fā)明內(nèi)容】

      [0008]本申請所要解決的技術(shù)問題是提供一種并發(fā)事務(wù)的處理方法,以提高并發(fā)事務(wù)的
      處理效率。
      [0009]本申請還提供了一種并發(fā)事務(wù)的處理裝置,用以保證上述方法在實(shí)際中的應(yīng)用及實(shí)現(xiàn)。
      [0010]為了解決上述問題,本申請公開了一種并發(fā)事務(wù)的處理方法,包括:
      [0011]接收客戶端提交的多個事務(wù);
      [0012]將每個事務(wù),拆分為多個針對單個賬戶的數(shù)據(jù)處理子操作,并構(gòu)成一個數(shù)據(jù)處理組;
      [0013]并發(fā)執(zhí)行各個數(shù)據(jù)處理組,其中,同一組的數(shù)據(jù)處理子操作逐個執(zhí)行,不同組的數(shù)據(jù)處理子操作同時執(zhí)行。
      [0014]優(yōu)選的,針對各個事務(wù),所述將每個事務(wù),拆分為多個針對單個賬戶的數(shù)據(jù)處理子操作的步驟并發(fā)執(zhí)行。
      [0015]優(yōu)選的,各個數(shù)據(jù)處理組的回滾操作與不同數(shù)據(jù)處理組的數(shù)據(jù)處理子操作或回滾操作并發(fā)執(zhí)行。
      [0016]優(yōu)選的,所述方法還包括:
      [0017]在各個數(shù)據(jù)處理組執(zhí)行完畢后,判斷返回的執(zhí)行結(jié)果是否符合預(yù)設(shè)條件;
      [0018]若不符合,則執(zhí)行所述數(shù)據(jù)處理組中各個數(shù)據(jù)處理子操作的回滾操作。
      [0019]優(yōu)選的,所述判斷返回的執(zhí)行結(jié)果是否符合預(yù)設(shè)條件的步驟為:
      [0020]判斷返回的執(zhí)行結(jié)果是否為負(fù)值或者小于預(yù)設(shè)值;
      [0021]若是,則符合預(yù)設(shè)條件。
      [0022]優(yōu)選的,所述方法還包括:
      [0023]判斷所述回滾操作是否執(zhí)行成功;
      [0024]若否,則依據(jù)所述執(zhí)行結(jié)果生成報警提示信息。
      [0025]優(yōu)選的,所述數(shù)據(jù)處理子操作為對數(shù)據(jù)進(jìn)行增加數(shù)值或減少數(shù)值的操作。
      [0026]優(yōu)選的,所述方法還包括:
      [0027]將所述數(shù)據(jù)處理組添加到預(yù)置的數(shù)據(jù)處理隊列中。
      [0028]本申請還提供了一種并發(fā)事務(wù)的處理裝置,包括:
      [0029]事務(wù)接收模塊,用于接收客戶端提交的多個事務(wù);
      [0030]拆分模塊,用于將每個事務(wù),拆分為多個針對單個賬戶的數(shù)據(jù)處理子操作,并構(gòu)成一個數(shù)據(jù)處理組;
      [0031]并發(fā)模塊,用于并發(fā)執(zhí)行各個數(shù)據(jù)處理組,其中,同一組的數(shù)據(jù)處理子操作逐個執(zhí)行,不同組的數(shù)據(jù)處理子操作同時執(zhí)行。
      [0032]優(yōu)選的,所述拆分模塊包括針對各個事務(wù)的拆分子模塊,各個拆分子模塊并發(fā)執(zhí)行。
      [0033]優(yōu)選的,所述裝置還包括:
      [0034]執(zhí)行結(jié)果判斷模塊,用于在各個數(shù)據(jù)處理組執(zhí)行完畢后,判斷返回的執(zhí)行結(jié)果是否符合預(yù)設(shè)條件,若否,則執(zhí)行回滾模塊;
      [0035]回滾模塊,用于執(zhí)行所述數(shù)據(jù)處理組中各個數(shù)據(jù)處理子操作的回滾操作。
      [0036]優(yōu)選的,所述裝置還包括:
      [0037]回滾操作判斷模塊,用于判斷所述回滾操作是否執(zhí)行成功,若否,則依據(jù)所述執(zhí)行結(jié)果生成報警提示信息。
      [0038]與現(xiàn)有技術(shù)相比,本申請具有以下優(yōu)點(diǎn):
      [0039]本申請針對提交的多個并發(fā)事務(wù),逐個拆分為針對單個賬戶的子操作,然后并發(fā)執(zhí)行各事務(wù)對應(yīng)的各組子操作,其中,同一組的數(shù)據(jù)處理子操作逐個執(zhí)行,不同組的數(shù)據(jù)處理子操作同時執(zhí)行。由于子操作執(zhí)行的結(jié)果直接生效,因此,不同組的子操作同時執(zhí)行時,不會出現(xiàn)臟讀臟寫的問題,保證了數(shù)據(jù)的完整性和一致性;并且,由于不同組的子操作同時執(zhí)行,相比于讀寫鎖機(jī)制,大大提高了并發(fā)事務(wù)的處理效率。
      [0040]由于本申請在每組子操作處理完成后,對于執(zhí)行結(jié)果不符合業(yè)務(wù)邏輯的情況還可以執(zhí)行各組子操作的回滾操作,保證了數(shù)據(jù)處理結(jié)果的準(zhǔn)確性,并且,同時執(zhí)行一組子操作的回滾操作保證了這組子操作中所有業(yè)務(wù)同時撤銷,保證了事務(wù)處理的完整性和賬戶余額的一致性,避免了資金風(fēng)險以及凍結(jié)資金所增加事務(wù)處理系統(tǒng)復(fù)雜度。
      [0041]本申請中,針對不同事務(wù)的拆分操作可以同時執(zhí)行,一個子操作組的執(zhí)行和另一個子操作組的回滾之間也可以同時執(zhí)行,從而可以進(jìn)一步提高并發(fā)事務(wù)的處理效率。
      [0042]當(dāng)然,實(shí)施本申請的任一產(chǎn)品不一定需要同時達(dá)到以上所述的所有優(yōu)點(diǎn)。
      【專利附圖】

      【附圖說明】
      [0043]圖1是本申請的一種并發(fā)事務(wù)的處理方法實(shí)施例1的流程圖;
      [0044]圖2是本申請的一種并發(fā)事務(wù)的處理方法實(shí)施例2的流程圖;
      [0045]圖3是本申請的一種并發(fā)事務(wù)的處理裝置實(shí)施例1的結(jié)構(gòu)框圖;
      [0046]圖4是本申請的一種并發(fā)事務(wù)的處理裝置實(shí)施例2的結(jié)構(gòu)框圖。
      【具體實(shí)施方式】
      [0047]為使本申請的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和【具體實(shí)施方式】對本申請作進(jìn)一步詳細(xì)的說明。
      [0048]業(yè)務(wù)系統(tǒng)中,常常出現(xiàn)多個事務(wù)同時訪問同一條熱點(diǎn)數(shù)據(jù)的情況,多個事務(wù)同時對一個數(shù)據(jù)進(jìn)行修改時,會出現(xiàn)臟寫的問題。以買家A,買家B同時向賣家C購買30元商品為例,買家A創(chuàng)建事務(wù)Tl,買家B創(chuàng)建事務(wù)T2。
      [0049]Tl事務(wù)包括以下幾個步驟:
      [0050]1、先取得買家A的賬戶余額為100元;
      [0051]2、取得賣家C的賬戶余額為200元;
      [0052]3、買家A的賬戶更新為70元(扣款操作);
      [0053]4、賣家賬戶C更新為230元(充值操作);
      [0054]5、其它業(yè)務(wù)處理;
      [0055]6、提交事務(wù)或回滾。
      [0056]T2事務(wù)包括以下幾個步驟:
      [0057]1、先取得買家B的賬戶余額為100元
      [0058]2、取得賣家C的賬戶余額為200元(所以)
      [0059]3、買家B的賬戶更新為70元(扣款操作)
      [0060]4、賣家賬戶C更新為230元(充值操作)
      [0061]5、其它業(yè)務(wù)處理。
      [0062]6、提交事務(wù)或回滾。
      [0063]由于事務(wù)提交有先后順序,數(shù)據(jù)庫對事務(wù)的處理結(jié)果是在事務(wù)沒提交前不會更改原來的賬戶余額,也就是說數(shù)據(jù)庫只有當(dāng)Tl中的1、2、3、4步驟全部完成后,才會更改上述帳戶余額。因此,在T2事務(wù)中的第2步讀取時,可能Tl的步驟并沒有全部完成,帳戶余額并沒有更新,讀到還是Tl事務(wù)進(jìn)行前賣家C的值,已經(jīng)產(chǎn)生臟讀現(xiàn)象;同樣,在事務(wù)T2中的第4步產(chǎn)生了臟寫現(xiàn)象。最后的結(jié)果體現(xiàn)為,賣家C買了兩件商品但是只收到一筆錢。
      [0064]現(xiàn)有技術(shù)中多通過讀寫鎖機(jī)制解決上述問題,此處以賬戶系統(tǒng)余額的并發(fā)操作為例,某大商戶賬戶的余額,可能由于大量交易,產(chǎn)生大量對余額的并發(fā)事務(wù)。
      [0065]讀寫鎖機(jī)制的步驟如下:[0066]a、針對每一筆交易發(fā)起一個事務(wù),相繼產(chǎn)生多個事務(wù);
      [0067]b、多個事務(wù)在數(shù)據(jù)庫內(nèi)通過搶鎖,使得某一個事務(wù)T0,成功搶到本商戶帳戶余額記錄的讀寫鎖LO ;
      [0068]C、其他事務(wù)試圖對余額記錄進(jìn)行加鎖,發(fā)現(xiàn)記錄已被鎖定,進(jìn)入等待裝態(tài),等待當(dāng)前事務(wù)T0,直到TO釋放讀寫鎖L0,再回到步驟b ;
      [0069]d、當(dāng)前事務(wù)T0,讀取當(dāng)前賬戶余額,并在此基礎(chǔ)上根據(jù)交易做余額演算;
      [0070]e、當(dāng)前事務(wù)TC,將演算結(jié)果寫入數(shù)據(jù)庫,更新本商戶帳務(wù)余額記錄;
      [0071]f、當(dāng)前事務(wù)T0,完成本次操作,釋放當(dāng)前記錄讀寫鎖L0,回到步驟b。
      [0072]讀寫鎖是一個全局的排它鎖,它有如下兩方面特性:1、加鎖后其它事務(wù)中不能在讀到記錄值;2、加鎖后其它事務(wù)中不能對該記錄的值做變更。典型的sql語義是selectfor update。讀寫鎖機(jī)制將寫操作串行化,逐一進(jìn)行處理,從而保證數(shù)據(jù)的一致性和完整性;但由于是順序執(zhí)行事務(wù),在大并發(fā)量情況下,處理效率很低,業(yè)務(wù)處理系統(tǒng)性能存在嚴(yán)重瓶頸。
      [0073]現(xiàn)有技術(shù)中,還可以通過緩存記賬機(jī)制解決并發(fā)事務(wù)臟讀臟寫的問題,具體步驟如下:
      [0074]a、除了本商戶帳戶余額記錄之外,另外建一張緩沖記賬記錄表;
      [0075]b、多個并發(fā)交易事務(wù),將本交易需要打款或扣款的金額數(shù)量插入到緩沖記賬記錄表中;
      [0076]C、定期將緩沖記賬中的記錄做合并處理,并將匯總結(jié)果金額回寫入本商戶帳戶余額記錄中。
      [0077]緩存記賬機(jī)制對于多個事務(wù),采取批處理方式,可以提高事務(wù)處理的效率,解決了按順序處理的性能瓶頸。依據(jù)緩沖記賬的方式,在記錄進(jìn)行合并后,多個事務(wù)已經(jīng)執(zhí)行完成,若發(fā)現(xiàn)賬戶余額不符合邏輯(例如,執(zhí)行多個扣除金額的事務(wù)后,賬戶余額為負(fù))則無法進(jìn)行回滾,無法保證數(shù)據(jù)處理結(jié)果的準(zhǔn)確性;同時,為了防止超額扣款引發(fā)的資金損失,需要在業(yè)務(wù)層面做額外保證,一般是通過向用戶繳納一定保證金的方式來解決的。
      [0078]另一種是需要撤銷的事務(wù)是非法操作,一個事務(wù)執(zhí)行完畢后發(fā)現(xiàn)是非法操作想要取消交易時,由于緩沖記賬的記錄沒有完全合并而不能立即取消,只能先將資金凍結(jié)住,然后走沖賬模式進(jìn)行處理。
      [0079]由此,緩沖記賬的方式嚴(yán)重影響了用戶的使用,提高了業(yè)務(wù)系統(tǒng)的運(yùn)營成本和風(fēng)險,增加了業(yè)務(wù)系統(tǒng)的整體復(fù)雜度。
      [0080]參考圖1,示出了本申請的一種并發(fā)事務(wù)的處理方法實(shí)施例1的流程圖,具體可以包括以下步驟:
      [0081]步驟101、接收客戶端提交的多個事務(wù)。
      [0082]業(yè)務(wù)系統(tǒng)的客戶端在接收到事務(wù)請求時,會依據(jù)數(shù)據(jù)處理請求,對相應(yīng)的數(shù)據(jù)進(jìn)行處理,例如,在交易系統(tǒng)客戶端買家A向賣家B購買30元的商品,這時,相應(yīng)的事務(wù)為,對賬戶A的賬戶余額減少30元,對賬戶B的賬戶余額增加30元。
      [0083]在數(shù)據(jù)庫系統(tǒng)中,事務(wù)是一個操作序列,例如,銀行轉(zhuǎn)帳工作從一個帳號扣款并使另一個帳號增款,包含了扣款和增款這兩個操作。
      [0084]步驟102、將每個事務(wù),拆分為多個針對單個賬戶的數(shù)據(jù)處理子操作,并構(gòu)成一個數(shù)據(jù)處理組。
      [0085]本申請中,事務(wù)包括對不同的操作對象的處理,按照針對的賬戶的不同,可以拆分為多個針對單個賬戶的數(shù)據(jù)處理子操作。
      [0086]例如,買家A和買家B同時向賣家C購買30元的商品,生成事務(wù)Tl和T2,Tl包括對買家A的賬戶減少30元和對賣家C的賬戶增加30元的操作,T2包括對買家B的賬戶減少30元和對賣家C的賬戶增加30元的操作。按照操作對象的不同,事務(wù)Tl可以拆分為對買家A的賬戶減少30元(Tll)和對賣家C的賬戶增加30元(T12)的這兩個子操作,并組成一個數(shù)據(jù)處理組,事務(wù)T2可以拆分為對買家B的賬戶減少30元(T21)和對賣家C的賬戶增加30元(T22)的這兩個子操作,并組成一個數(shù)據(jù)處理組。
      [0087]優(yōu)選的,針對各個事務(wù),所述將每個事務(wù),可以拆分為多個針對單個賬戶的數(shù)據(jù)處理子操作的步驟并發(fā)執(zhí)行,從而可以進(jìn)一步加快并發(fā)事務(wù)的處理效率。
      [0088]步驟103、并發(fā)執(zhí)行各個數(shù)據(jù)處理組,其中,同一組的數(shù)據(jù)處理子操作逐個執(zhí)行,不同組的數(shù)據(jù)處理子操作同時執(zhí)行。
      [0089]將各個事務(wù)拆分完后,并發(fā)執(zhí)行對應(yīng)的數(shù)據(jù)處理組,其中,同一組的數(shù)據(jù)處理子操作逐個執(zhí)行,不同組的數(shù)據(jù)處理子操作同時執(zhí)行。如上例,事務(wù)Tl中Tll和T12逐個執(zhí)行,事務(wù)T2中T21和T22也是逐個執(zhí)行,例如,Tl中先執(zhí)行T12,T2中先執(zhí)行T22,T12和T22可以同時執(zhí)行,即同時執(zhí)行對賬戶C增加30元的兩個操作,然后在同時執(zhí)行Tll和T21兩個操作。
      [0090]在單處理器系統(tǒng)(Uni Processor)中,能夠在單條指令(一條指令同時完成讀和寫的操作)中完成的操作都可以認(rèn)為是原子操作,原子級操作是不可分割的,在執(zhí)行完畢前不會被任何其它任務(wù)或事件中斷。本申請中,針對單個賬戶的數(shù)據(jù)處理子操作就是原子級操作。
      [0091]現(xiàn)有技術(shù)中,由于一個事務(wù)包括多個針對多個賬戶的多個操作,事務(wù)的處理結(jié)果需等待多個操作逐個執(zhí)行完成后,才會提交事務(wù)處理結(jié)果,更新原數(shù)據(jù)。以事務(wù)Tl為例,先執(zhí)行T12,再執(zhí)行T11,T12的執(zhí)行結(jié)果要等待Tll執(zhí)行完畢后一同提交,相當(dāng)于Τ12提交結(jié)果的操作被Tll中斷。在事務(wù)Tl提交處理結(jié)果之前,其他事務(wù)取到的數(shù)據(jù)是事務(wù)Tl處理前的原數(shù)據(jù),因此會出現(xiàn)臟讀和臟寫的問題。
      [0092]本申請對事務(wù)拆分后得到的是針對一個賬戶執(zhí)行的原子級操作,原子級的操作執(zhí)行完畢不需要等待其他操作處理,因此不需要提交處理結(jié)果的步驟,執(zhí)行完畢后處理結(jié)果直接生效,以事務(wù)Tl為例,Τ12執(zhí)行完畢后即時提交,然后執(zhí)行Τ11,執(zhí)行完畢也是即時提交;同時由于在數(shù)據(jù)庫系統(tǒng)中的數(shù)值型數(shù)據(jù)具有天然的原子性(即數(shù)值類型數(shù)據(jù)做變更時不存在中間狀態(tài)),因此,不同組的數(shù)據(jù)處理子操作同時執(zhí)行時,不會出現(xiàn)臟讀和臟寫的問題。
      [0093]另外,針對數(shù)值型數(shù)據(jù)只有更新(update)—種操作,數(shù)值型數(shù)據(jù)的update動作可以描述成增加數(shù)值或減少數(shù)值這兩種動作,這樣事務(wù)對多數(shù)據(jù)的更新,實(shí)際上就被分解成了若干原子級的加減動作。
      [0094]本申請的方法在多CPU的服務(wù)器上執(zhí)行,與傳統(tǒng)單CPU不同的是,在現(xiàn)有的多CPU服務(wù)器中,對同一賬戶數(shù)值中加減操作是多個加法運(yùn)算器并發(fā)的執(zhí)行的,如上例,TI中先執(zhí)行T12,T2中先執(zhí)行T22,T12和T22可以同時執(zhí)行,Tll和T21也可以同時執(zhí)行。[0095]加法運(yùn)算器并發(fā)執(zhí)行對同一數(shù)據(jù)的多個動作時,首先記錄下各個動作的變更數(shù)據(jù),并即時返回依據(jù)原數(shù)據(jù)計算出的執(zhí)行結(jié)果,然后依據(jù)原數(shù)據(jù)和所有的變更數(shù)據(jù)計算出一個最終結(jié)果,從而可以保證數(shù)據(jù)數(shù)據(jù)處理結(jié)果的準(zhǔn)確性。例如,賣家C賬戶的余額為200,T12和T22均是對賣家C賬戶增加30的操作,并發(fā)執(zhí)行T12和T22時,先記錄下兩個加30的變更數(shù)據(jù);然后即時返回T12對200加30的執(zhí)行結(jié)果為230,T22對200加30的執(zhí)行結(jié)果為230 ;兩個返回的執(zhí)行結(jié)果與最終結(jié)果無關(guān),最后依據(jù)兩個加30變更數(shù)據(jù)和原數(shù)據(jù)200,計算出最終結(jié)果為260。
      [0096]同時,由于使用多CPU并發(fā)執(zhí)行多個原子級操作和執(zhí)行一個原子級操作的時間是一樣的,因此本申請可以大大提高并發(fā)事務(wù)的處理效率,例如,原始值是0,一個對原始值加I的操作被執(zhí)行的時間是I個單位,那么50個加I操作同時被執(zhí)行,執(zhí)行的時間也是I個單位。
      [0097]以買家A (賬戶余額100),買家B (賬戶余額100)同時向賣家C (賬戶余額200)購買30元商品為例,買家A創(chuàng)建事務(wù)Tl,買家B創(chuàng)建事務(wù)T2,按照讀寫鎖的機(jī)制,各事務(wù)執(zhí)行順序舉例如下:
      [0098]事務(wù)Tl:
      [0099]I鎖掉買家A的賬戶取得余額為100元
      [0100]2鎖掉買家C的賬戶取得余額為200元
      [0101]3買家A的賬戶更新為70元(充值操作)
      [0102]4賣家賬戶更新為230元(扣款操作)
      [0103]5其它業(yè)務(wù)處理
      [0104]6提交事務(wù)或回滾
      [0105]7釋放買家A事務(wù)鎖
      [0106]8釋放賣家C事務(wù)鎖
      [0107]事務(wù)T2:
      [0108]I鎖掉買家B的賬戶取得余額為100元
      [0109]2鎖掉買家C的賬戶取得余額為230元
      [0110]3買家A的賬戶更新為70元(充值操作)
      [0111]4賣家賬戶更新為260元(扣款操作)
      [0112]5其它業(yè)務(wù)處理(例如在購買商品時同時贈與積分或紅包,在購買彩票付錢同時的投注行為)
      [0113]6提交事務(wù)或回滾
      [0114]7釋放買家B事務(wù)鎖
      [0115]8釋放賣家C事務(wù)鎖
      [0116]按照現(xiàn)有技術(shù)中讀寫鎖的方式,將每個動作執(zhí)行的時間記為1,2個事務(wù)執(zhí)行完畢所耗費(fèi)的時間為16個單位,隨著并發(fā)事務(wù)量的增加,時間復(fù)雜度是O (n),n為事務(wù)的個數(shù)。
      [0117]按照本申請的方法執(zhí)行事務(wù)Tl和T2,舉例如下:
      [0118]事務(wù)Tl:
      [0119]I買家A的賬戶執(zhí)行減30元,即時返回執(zhí)行結(jié)果為70元(扣款操作)
      [0120]2賣家C賬戶增加30元即時返回執(zhí)行結(jié)果為230元(充值操作)[0121]3其它業(yè)務(wù)處理
      [0122]4是否執(zhí)行反函數(shù)回滾
      [0123]事務(wù)T2:
      [0124]I買家B的賬戶執(zhí)行減30元,即時返回執(zhí)行結(jié)果為70元(扣款操作)
      [0125]2賣家C賬戶增加30元即時返回執(zhí)行結(jié)果為230元(充值操作)
      [0126]3其它業(yè)務(wù)處理
      [0127]4是否執(zhí)行反函數(shù)回滾
      [0128]加法計數(shù)器依據(jù)兩個加30變更數(shù)據(jù)和原數(shù)據(jù)200,計算出賣家C賬戶的余額為260。
      [0129]按照本申請的方法,2個事務(wù)執(zhí)行完畢所耗費(fèi)的時間為8個單位,隨著并發(fā)事務(wù)量的增加,時間復(fù)雜度是0,即處理時間不隨著事務(wù)個數(shù)的增加而增加。
      [0130]參考圖2,示出了本申請的一種并發(fā)事務(wù)的處理方法實(shí)施例2的流程圖,具體可以包括以下步驟:
      [0131]步驟201、接收客戶端提交的多個事務(wù);
      [0132]步驟202、將每個事務(wù),拆分為多個針對單個賬戶的數(shù)據(jù)處理子操作,并構(gòu)成一個數(shù)據(jù)處理組;
      [0133]在本實(shí)施例中,還可以將拆分得到的各個數(shù)據(jù)處理組添加到數(shù)據(jù)處理隊列中,如圖2所示,所述方法還可以包括:
      [0134]步驟203、將所述數(shù)據(jù)處理組添加到預(yù)置的數(shù)據(jù)處理隊列中;
      [0135]步驟204、并發(fā)執(zhí)行各個數(shù)據(jù)處理組,其中,同一組的數(shù)據(jù)處理子操作逐個執(zhí)行,不同組的數(shù)據(jù)處理子操作同時執(zhí)行。
      [0136]在本實(shí)施例中,可以依據(jù)各個數(shù)據(jù)處理組的執(zhí)行結(jié)果判斷是否需要進(jìn)行回滾,如圖2所示,所述方法還可以包括:
      [0137]步驟205、在各個數(shù)據(jù)處理組執(zhí)行完畢后,判斷返回的執(zhí)行結(jié)果是否符合預(yù)設(shè)條件,若否,則執(zhí)行步驟206 ;
      [0138]所述步驟205可以包括:
      [0139]子步驟S11、判斷返回的執(zhí)行結(jié)果是否為負(fù)值或者小于預(yù)設(shè)值,若是,則符合預(yù)設(shè)條件。
      [0140]步驟206、執(zhí)行所述數(shù)據(jù)處理組中各個數(shù)據(jù)處理子操作的回滾操作。
      [0141]數(shù)據(jù)處理組的每個操作執(zhí)行完成后,會返回多個執(zhí)行結(jié)果,為了確保數(shù)據(jù)處理結(jié)果符合邏輯,需要對每個執(zhí)行結(jié)果進(jìn)行判斷,若執(zhí)行結(jié)果為負(fù)值或小于預(yù)設(shè)的某個值,例如,事務(wù)Tl對賬戶A和B的操作執(zhí)行完畢后,返回的結(jié)果為賬戶A余額為-30元,賬戶B余額為40元,則賬戶A的余額不符合邏輯,這個數(shù)據(jù)處理組需要進(jìn)行回滾。
      [0142]在具體的實(shí)現(xiàn)中,除了數(shù)據(jù)處理結(jié)果不合邏輯的情況,還可以判斷事務(wù)是否是非法操作。具體而言,可以借助于第三方系統(tǒng)(例如風(fēng)險控制系統(tǒng)CTU),依據(jù)執(zhí)行結(jié)果和用戶行為,進(jìn)行數(shù)據(jù)挖掘分析,判斷事務(wù)是否是非法操作,例如該賬戶是否被盜用,是否為虛假交易,是否有洗錢,是否有非法提現(xiàn)。這種非法操作的判斷返回判斷結(jié)果需要一定的時間間隔。
      [0143]回滾操作是原操作的逆操作,例如,Tll為對賬戶A減少30元,對應(yīng)的逆操作為對賬戶A增加30元。
      [0144]交易系統(tǒng)數(shù)據(jù)庫具備完整性,即一個事務(wù)必然包括對兩個不同對象的操作,一個數(shù)據(jù)變化的同時,另一個數(shù)據(jù)也會發(fā)生相應(yīng)的變化,數(shù)據(jù)總量保持不變。對于執(zhí)行結(jié)果不符合業(yè)務(wù)邏輯的情況執(zhí)行各組子操作的回滾操作,不僅保證了數(shù)據(jù)處理結(jié)果的準(zhǔn)確性,由于同時執(zhí)行一組子操作的回滾操作保證了這組子操作中所有業(yè)務(wù)同時撤銷,保證了事務(wù)處理的完整性和賬戶余額的一致性;并且,與現(xiàn)有技術(shù)中緩存賬戶的方式相比,避免了資金風(fēng)險以及凍結(jié)資金所增加事務(wù)處理系統(tǒng)復(fù)雜度。
      [0145]在本申請的一種優(yōu)選實(shí)施例中,各個數(shù)據(jù)處理組的回滾操作與不同數(shù)據(jù)處理組的數(shù)據(jù)處理子操作或回滾操作可以并發(fā)執(zhí)行,其它事務(wù)的回滾操作不影響當(dāng)前事務(wù)的操作。,從而可以進(jìn)步一提聞并發(fā)事務(wù)的處理效率。
      [0146]在本實(shí)施例中,在執(zhí)行回滾操作后,還可以進(jìn)一步判斷回滾操作是否執(zhí)行成功,如圖2所示,所述方法還可以包括:
      [0147]步驟207、判斷所述回滾操作是否執(zhí)行成功,若否,則執(zhí)行步驟208.[0148]步驟208、依據(jù)所述執(zhí)行結(jié)果生成報警提示信息。
      [0149]回滾操作執(zhí)行成功后會返回一個成功的信息,若未收到該信息則表明回滾操作執(zhí)行失敗,可以依據(jù)回滾失敗的事務(wù)對應(yīng)的執(zhí)行結(jié)果生成報警信息,例如,事務(wù)Tl處理結(jié)果為買家A賬戶余額-30,賣家賬戶B余額為30,將報警信息展示在交易系統(tǒng)的客戶端,以供技術(shù)人員或是用戶進(jìn)行處理。
      [0150]綜上所述,本申請針對提交的多個并發(fā)事務(wù),逐個拆分為針對單個賬戶的子操作,然后并發(fā)執(zhí)行各事務(wù)對應(yīng)的各組子操作,其中,同一組的數(shù)據(jù)處理子操作逐個執(zhí)行,不同組的數(shù)據(jù)處理子操作同時執(zhí)行。由于子操作執(zhí)行的結(jié)果直接生效,因此,不同組的子操作同時執(zhí)行時,不會出現(xiàn)臟讀臟寫的問題,保證了數(shù)據(jù)的完整性和一致性;并且,由于不同組的子操作同時執(zhí)行,相比于讀寫鎖機(jī)制,大大提高了并發(fā)事務(wù)的處理效率。
      [0151]由于本申請在每組子操作處理完成后,對于執(zhí)行結(jié)果不符合業(yè)務(wù)邏輯的情況還可以執(zhí)行各組子操作的回滾操作,保證了數(shù)據(jù)處理結(jié)果的準(zhǔn)確性,并且,同時執(zhí)行一組子操作的回滾操作保證了這組子操作中所有業(yè)務(wù)同時撤銷,保證了事務(wù)處理的完整性和賬戶余額的一致性,避免了資金風(fēng)險以及凍結(jié)資金所增加事務(wù)處理系統(tǒng)復(fù)雜度。
      [0152]本申請中,針對不同事務(wù)的拆分操作可以同時執(zhí)行,一個子操作組的執(zhí)行和另一個子操作組的回滾之間也可以同時執(zhí)行,從而可以進(jìn)一步提高并發(fā)事務(wù)的處理效率。
      [0153]當(dāng)然,實(shí)施本申請的任一產(chǎn)品不一定需要同時達(dá)到以上所述的所有優(yōu)點(diǎn)。
      [0154]對于方法實(shí)施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請并不受所描述的動作順序的限制,因?yàn)橐罁?jù)本申請,某些步驟可以采用其他順序或者同時進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動作和模塊并不一定是本申請所必須的。
      [0155]參考圖3,示出了本申請的一種并發(fā)事務(wù)的處理裝置實(shí)施例1的結(jié)構(gòu)框圖,具體可以包括以下模塊:
      [0156]事務(wù)接收模塊301,用于接收客戶端提交的多個事務(wù);
      [0157]拆分模塊302, 用于將每個事務(wù),拆分為多個針對單個賬戶的數(shù)據(jù)處理子操作,并構(gòu)成一個數(shù)據(jù)處理組;[0158]并發(fā)模塊303,用于并發(fā)執(zhí)行各個數(shù)據(jù)處理組,其中,同一組的數(shù)據(jù)處理子操作逐個執(zhí)行,不同組的數(shù)據(jù)處理子操作同時執(zhí)行。
      [0159]在本申請的一種優(yōu)選實(shí)施例中,所述拆分模塊可以包括針對各個事務(wù)的拆分子模塊,各個拆分子模塊可以并發(fā)執(zhí)行。
      [0160]在本申請的一種優(yōu)選實(shí)施例中,所述數(shù)據(jù)處理子操作可以為對數(shù)據(jù)進(jìn)行增加數(shù)值或減少數(shù)值的操作。
      [0161]參考圖4,示出了本申請的一種并發(fā)事務(wù)的處理裝置實(shí)施例2的結(jié)構(gòu)框圖,具體可以包括以下模塊:
      [0162]事務(wù)接收模塊401,用于接收客戶端提交的多個事務(wù);
      [0163]拆分模塊402,用于將每個事務(wù),拆分為多個針對單個賬戶的數(shù)據(jù)處理子操作,并構(gòu)成一個數(shù)據(jù)處理組;
      [0164]在本實(shí)施例中,還可以將拆分得到的各個數(shù)據(jù)處理組添加到數(shù)據(jù)處理隊列中,如圖4所示,所述裝置還可以包括:
      [0165]數(shù)據(jù)處理隊列添加模塊403,用于將所述數(shù)據(jù)處理組添加到預(yù)置的數(shù)據(jù)處理隊列中。
      [0166]并發(fā)模塊404,用于并發(fā)執(zhí)行各個數(shù)據(jù)處理組,其中,同一組的數(shù)據(jù)處理子操作逐個執(zhí)行,不同組的數(shù)據(jù)處理子操作同時執(zhí)行;
      [0167]在本實(shí)施例中,可以依據(jù)各個數(shù)據(jù)處理組的執(zhí)行結(jié)果判斷是否需要進(jìn)行回滾,如圖4所示,所述裝置還可以包括:
      [0168]執(zhí)行結(jié)果判斷模塊405,用于在各個數(shù)據(jù)處理組執(zhí)行完畢后,判斷返回的執(zhí)行結(jié)果是否符合預(yù)設(shè)條件,若否,則執(zhí)行回滾模塊;
      [0169]回滾模塊406,用于執(zhí)行所述數(shù)據(jù)處理組中各個數(shù)據(jù)處理子操作的回滾操作。
      [0170]在本申請的一種優(yōu)選實(shí)施例中,所述并發(fā)模塊可以和所述回滾模塊并發(fā)執(zhí)行。
      [0171]在本申請的一種優(yōu)選實(shí)施例中,所述執(zhí)行結(jié)果判斷模塊405可以包括:
      [0172]數(shù)值判斷子模塊,用于判斷返回的執(zhí)行結(jié)果是否為負(fù)值或者小于預(yù)設(shè)值,若是,則符合預(yù)設(shè)條件。
      [0173]在本實(shí)施例中,在執(zhí)行回滾操作后,還可以進(jìn)一步判斷回滾操作是否執(zhí)行成功,如圖4所示,所述裝置還可以包括:
      [0174]回滾操作判斷模塊407,用于判斷所述回滾操作是否執(zhí)行成功,若否,則執(zhí)行報警提不1旲塊;
      [0175]報警提示模塊408,用于依據(jù)所述執(zhí)行結(jié)果生成報警提示信息。
      [0176]由于所述裝置實(shí)施例基本相應(yīng)于前述圖1和圖2所示的方法實(shí)施例,故本實(shí)施例的描述中未詳盡之處,可以參見前述實(shí)施例中的相關(guān)說明,在此就不贅述了。
      [0177]本申請可用于眾多通用或?qū)S玫挠嬎阆到y(tǒng)環(huán)境或配置中。例如:個人計算機(jī)、服務(wù)器計算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機(jī)、大型計算機(jī)、包括以上任何系統(tǒng)或設(shè)備的分布式計算環(huán)境等等。
      [0178]本申請可以在由計算機(jī)執(zhí)行的計算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實(shí)踐本申請,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設(shè)備在內(nèi)的本地和遠(yuǎn)程計算機(jī)存儲介質(zhì)中。[0179]在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
      [0180]以上對本申請所提供的一種并發(fā)事務(wù)的處理方法,以及,一種并發(fā)事務(wù)的處理裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個例對本申請的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本申請的限制。
      【權(quán)利要求】
      1.一種并發(fā)事務(wù)的處理方法,其特征在于,包括: 接收客戶端提交的多個事務(wù); 將每個事務(wù),拆分為多個針對單個賬戶的數(shù)據(jù)處理子操作,并構(gòu)成一個數(shù)據(jù)處理組;并發(fā)執(zhí)行各個數(shù)據(jù)處理組,其中,同一組的數(shù)據(jù)處理子操作逐個執(zhí)行,不同組的數(shù)據(jù)處理子操作同時執(zhí)行。
      2.如權(quán)利要求1所述的方法,其特征在于,針對各個事務(wù),所述將每個事務(wù),拆分為多個針對單個賬戶的數(shù)據(jù)處理子操作的步驟并發(fā)執(zhí)行。
      3.如權(quán)利要求1所述的方法,其特征在于,各個數(shù)據(jù)處理組的回滾操作與不同數(shù)據(jù)處理組的數(shù)據(jù)處理子操作或回滾操作并發(fā)執(zhí)行。
      4.如權(quán)利要求1所述的方法,其特征在于,還包括: 在各個數(shù)據(jù)處理組執(zhí)行完畢后,判斷返回的執(zhí)行結(jié)果是否符合預(yù)設(shè)條件; 若不符合,則執(zhí)行所述數(shù)據(jù)處理組中各個數(shù)據(jù)處理子操作的回滾操作。
      5.如權(quán)利要求4所述的方法,其特征在于,所述判斷返回的執(zhí)行結(jié)果是否符合預(yù)設(shè)條件的步驟為: 判斷返回的執(zhí)行結(jié)果是否為負(fù)值或者小于預(yù)設(shè)值; 若是,則符合預(yù)設(shè)條件。
      6.如權(quán)利要求4所述的方法,其特征在于,還包括: 判斷所述回滾操作是否執(zhí)行成功; 若否,則依據(jù)所述執(zhí)行結(jié)果生成報警提示信息。
      7.如權(quán)利要求1所述的方法,其特征在于,所述數(shù)據(jù)處理子操作為對數(shù)據(jù)進(jìn)行增加數(shù)值或減少數(shù)值的操作。
      8.如權(quán)利要求1所述的方法,其特征在于,還包括: 將所述數(shù)據(jù)處理組添加到預(yù)置的數(shù)據(jù)處理隊列中。
      9.一種并發(fā)事務(wù)的處理裝置,其特征在于,包括: 事務(wù)接收模塊,用于接收客戶端提交的多個事務(wù); 拆分模塊,用于將每個事務(wù),拆分為多個針對單個賬戶的數(shù)據(jù)處理子操作,并構(gòu)成一個數(shù)據(jù)處理組; 并發(fā)模塊,用于并發(fā)執(zhí)行各個數(shù)據(jù)處理組,其中,同一組的數(shù)據(jù)處理子操作逐個執(zhí)行,不同組的數(shù)據(jù)處理子操作同時執(zhí)行。
      10.如權(quán)利要求9所述的裝置,其特征在于,所述拆分模塊包括針對各個事務(wù)的拆分子模塊,各個拆分子模塊并發(fā)執(zhí)行。
      11.如權(quán)利要求9所述的裝置,其特征在于,還包括: 執(zhí)行結(jié)果判斷模塊,用于在各個數(shù)據(jù)處理組執(zhí)行完畢后,判斷返回的執(zhí)行結(jié)果是否符合預(yù)設(shè)條件,若否,則執(zhí)行回滾模塊; 回滾模塊,用于執(zhí)行所述數(shù)據(jù)處理組中各個數(shù)據(jù)處理子操作的回滾操作。
      12.如權(quán)利要求11所述的裝置,其特征在于,還包括: 回滾操作判斷模塊,用于判斷所述回滾操作是否執(zhí)行成功,若否,則依據(jù)所述執(zhí)行結(jié)果生成報警提示信息。
      【文檔編號】G06F9/44GK103677771SQ201210328626
      【公開日】2014年3月26日 申請日期:2012年9月6日 優(yōu)先權(quán)日:2012年9月6日
      【發(fā)明者】龐舉, 錢進(jìn) 申請人:阿里巴巴集團(tuán)控股有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1