于興平 李洪建 于騰飛 畢衛(wèi)紅
摘 要:隨著科學(xué)技術(shù)的發(fā)展,計(jì)算機(jī)分布式系統(tǒng)在維持?jǐn)?shù)據(jù)庫(kù)的一致性的問題上廣泛應(yīng)用。在商用系統(tǒng)中,通常在數(shù)據(jù)中大量的數(shù)據(jù)需要經(jīng)常更新,并且現(xiàn)在流行不間斷服務(wù),有必要為用戶提供在線交易并行一次性更新服務(wù)。針對(duì)當(dāng)前對(duì)大量數(shù)據(jù)更新效率不高的問題,提出了一種分布式系統(tǒng)中大批量數(shù)據(jù)時(shí)序更新方法,通過時(shí)序更新的方法避免一次性更新和在線事務(wù)之間的沖突,先在本地交易執(zhí)行,然后一次提交聯(lián)合數(shù)據(jù)庫(kù),減少了交易時(shí)間的占用,有著更高的處理效率。實(shí)驗(yàn)證明這種在分布式系統(tǒng)中更新數(shù)據(jù)方法與分批處理方法相比,數(shù)據(jù)更新執(zhí)行時(shí)間,在每1000次更新執(zhí)行時(shí)間會(huì)減少為原來的1/80,有很高的應(yīng)用價(jià)值。
關(guān)鍵詞:數(shù)據(jù)庫(kù);分布式系統(tǒng);批量處理;分布式事務(wù)
中圖分類號(hào):TP399 文獻(xiàn)標(biāo)識(shí)碼:A
Abstract:With the development of science and technology,distributed systems are extensively applied in maintaining database consistency.In business systems,mass data need to be updated frequently.Since non-stop service is growing in popularity,it is quite necessary to provide online transaction service with once-and-for-all update to users.To deal with the low update efficiency of mass data,the paper proposes a time-sequence update method of mass data in distributed systems,which can effectively avoid the conflict between the once-and-for-all update and the online transactions.The transactions will be firstly conducted locally before submitting the joint database,which reduces the occupation time of transactions and brings higher processing efficiency.Experiments show that,through the method of updating data in distributed systems(compared with the batch processing method),the execution time can be reduced by 1/80 in every 1000 updates.
Keywords:database;distributed systems;batch processing;distributed transaction
1 引言(Introduction)
隨著計(jì)算機(jī)網(wǎng)絡(luò)的日益發(fā)展和商業(yè)系統(tǒng)的跨地域分布使得數(shù)據(jù)存儲(chǔ)和應(yīng)用變得愈加分布化,分布式數(shù)據(jù)庫(kù)技術(shù)對(duì)比傳統(tǒng)的集中式數(shù)據(jù)庫(kù)技術(shù)在可靠性、可用性和時(shí)間響應(yīng)方面有著更多的優(yōu)越性,因此在實(shí)際中得到了廣泛應(yīng)用[1]。國(guó)內(nèi)外專家和學(xué)者一直致力于基于分布式數(shù)據(jù)庫(kù)的數(shù)據(jù)更新問題的研究,如增量式更新算法[2],其原理是在原有規(guī)則的基礎(chǔ)上,去除那些不滿足條件的舊規(guī)則,發(fā)現(xiàn)滿足條件的新規(guī)則,目的是盡量減少計(jì)算量[3];基于并行分層式鏈路分布式數(shù)據(jù)更新方法[4],其原理是通過建立了并行分層式鏈路,具有鏈路分層的同時(shí)又有補(bǔ)償?shù)牟⑿墟溌?,采用投票法“一票多次性否決”規(guī)則,解決在訪問分布式數(shù)據(jù)庫(kù)情況下網(wǎng)絡(luò)開銷過大、數(shù)據(jù)庫(kù)互聯(lián)復(fù)雜、數(shù)據(jù)更新時(shí)保證一致性困難等問題[5]。但是由于上述算法的復(fù)雜性,因此本文提出了時(shí)序更新大批量數(shù)據(jù)的方法。此方法使用擴(kuò)展的交易時(shí)間數(shù)據(jù)庫(kù)來避免一次性更新數(shù)據(jù)的進(jìn)程和用戶在線事務(wù)之間的沖突。
2 分布式系統(tǒng)更新方法及其相關(guān)研究(Distributed system update method and its related research)
2.1 在分布式系統(tǒng)中傳統(tǒng)的更新方法
通過分布式事務(wù)更新處理分支機(jī)構(gòu)的多個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù),這種交易系統(tǒng)一般具有兩階段提交的功能[6],即準(zhǔn)備階段和提交階段[7],對(duì)比一階段提交,即從應(yīng)用程序向數(shù)據(jù)庫(kù)發(fā)出提交請(qǐng)求到數(shù)據(jù)庫(kù)完成提交后直接將結(jié)果返回給應(yīng)用程序,兩階段提交雖然在執(zhí)行同樣的事務(wù)時(shí)會(huì)消耗更多時(shí)間[8],但是這種操作在一個(gè)分布式系統(tǒng)中的穩(wěn)定性比較高,這對(duì)于分布式系統(tǒng)是十分重要的。
典型的分布式交易系統(tǒng)如圖1所示,數(shù)據(jù)庫(kù)的每一個(gè)分支機(jī)構(gòu)儲(chǔ)存當(dāng)前分支機(jī)構(gòu)的數(shù)據(jù),用戶通過分布式網(wǎng)絡(luò)更新當(dāng)前機(jī)構(gòu)和其他機(jī)構(gòu)的數(shù)據(jù),將獨(dú)立數(shù)據(jù)庫(kù)更新交易定義為本地交易[9]。分布式系統(tǒng)下的數(shù)據(jù)庫(kù)管理系統(tǒng)中,當(dāng)有一個(gè)進(jìn)程從一個(gè)機(jī)構(gòu)移動(dòng)一個(gè)數(shù)據(jù)塊到另外的機(jī)構(gòu),這個(gè)數(shù)據(jù)塊的分布式事務(wù)的操作同時(shí)執(zhí)行,當(dāng)一個(gè)數(shù)據(jù)庫(kù)中數(shù)據(jù)減少時(shí),另外一些機(jī)構(gòu)數(shù)據(jù)庫(kù)中會(huì)相應(yīng)的增加了相應(yīng)的數(shù)據(jù),整個(gè)系統(tǒng)保持?jǐn)?shù)據(jù)量的完整性[10]。
2.2 數(shù)據(jù)更新研究
本文提出的通過分時(shí)更新的方法實(shí)現(xiàn)大量分布式數(shù)據(jù)的更新,其更新列表和交易處理時(shí)間數(shù)據(jù)庫(kù)表關(guān)系Rt如式(1)所示。
式(1)中Ta表示數(shù)據(jù)庫(kù)中的數(shù)據(jù)添加時(shí)間;Td表示數(shù)據(jù)庫(kù)中的數(shù)據(jù)刪除時(shí)間;K表示主鍵;A顯示的其他屬性。
當(dāng)數(shù)據(jù)刪除時(shí),通過設(shè)置數(shù)據(jù)邏輯刪除,刪除時(shí)從左開始記錄。在事務(wù)處理時(shí),在時(shí)間t設(shè)置的數(shù)據(jù)用Q(t)表示,如式(2)所示。
式(2)中,屬性q[Ta]表示q數(shù)據(jù)庫(kù)數(shù)據(jù)增加的時(shí)間,屬性q[Td]表示q數(shù)據(jù)庫(kù)數(shù)據(jù)刪除的時(shí)間,隨著時(shí)間的改變而改變,Q(t)如式(2)所示,為兩條件的交集。
分時(shí)更新大量數(shù)據(jù)方法原理圖如圖2所示,按時(shí)間序列數(shù)據(jù)庫(kù)更新后的數(shù)據(jù)的變化如下:首先,批量數(shù)據(jù)更新查詢過去更新時(shí)間tq的數(shù)據(jù),并且存儲(chǔ)它更新后的結(jié)果到未來時(shí)間tu。其次,在線登記與批量數(shù)據(jù)更新同時(shí)執(zhí)行,更新當(dāng)前時(shí)間的數(shù)據(jù)。由于時(shí)間不同,批量數(shù)據(jù)更新和在線事務(wù)處理之間沒有沖突,本文方法進(jìn)行一次性更新,既使用了批處理更新又使用了OB更新。本文的目標(biāo)表的關(guān)系Rt擴(kuò)展為Re表示,如式(3)所示。
添加的Re的屬性如下所示。
(1)Tp:更新數(shù)據(jù)的處理順序的時(shí)間。
(2)P:過程類。這表明更新數(shù)據(jù)的過程,包括OB更新、在線登記和批處理更新。
(3)D:刪除標(biāo)志,表示查詢的數(shù)據(jù)是否是刪除的對(duì)象,它的邏輯值集為{真,假}。
3 分布式系統(tǒng)中數(shù)據(jù)更新(Update the data in the distributed system)
當(dāng)使用在線批量更新時(shí),如果執(zhí)行完全成功,更新有效,如果執(zhí)行失敗,則會(huì)恢復(fù)更新前的狀態(tài)。對(duì)于此項(xiàng)操作,本文添加了下面的批處理更新管理表。如圖3所示,在每個(gè)分之機(jī)構(gòu)的數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)管理表是業(yè)務(wù)和Re的關(guān)系表,表的右側(cè)是相應(yīng)的Re的屬性。
(1)提交時(shí)間表(d0t_commit):它儲(chǔ)存時(shí)間b的更新,當(dāng)批處理更新和OB更新使得每個(gè)目標(biāo)表開始有效的時(shí)候。它儲(chǔ)存了圖2中的時(shí)間tu,當(dāng)批處理更新完成的時(shí)候設(shè)置tu,如果失敗,則不會(huì)設(shè)置時(shí)間tu,而且這些更新結(jié)果在批處理更新估計(jì)完成時(shí)間內(nèi)不會(huì)被查詢。
(2)批處理管理表(d0t_batch):它儲(chǔ)存三種時(shí)間類型去控制為每個(gè)目標(biāo)的批處理更新,包括批處理進(jìn)程的開始時(shí)間q、查詢時(shí)間tq和更新時(shí)間b,更新時(shí)間與目標(biāo)委托時(shí)間表同時(shí)更新,當(dāng)暫時(shí)更新開始時(shí),在處理進(jìn)程之前建立更新時(shí)間。
(3)掩碼數(shù)據(jù)表(d0t_mask):批處理更新時(shí),向批處理更新的目標(biāo)數(shù)據(jù)表存儲(chǔ)在線輸入的主鍵t,與Rt中的K進(jìn)行通信,管理在線輸入的狀態(tài)。
4 實(shí)驗(yàn)及評(píng)估(The experiment and evaluation)
為了評(píng)估在分布式系統(tǒng)中測(cè)試更新的效率,本文通過實(shí)驗(yàn)建立的分支機(jī)構(gòu)的數(shù)據(jù)庫(kù)聯(lián)動(dòng)數(shù)據(jù),在分布式環(huán)境中通過兩臺(tái)服務(wù)器建立一個(gè)本地服務(wù)器和一個(gè)遠(yuǎn)程服務(wù)器,采用兩臺(tái)服務(wù)器來模擬兩個(gè)數(shù)據(jù)中心,構(gòu)建測(cè)試所需的網(wǎng)絡(luò)分布式環(huán)境。
使用MySQL創(chuàng)建數(shù)據(jù)庫(kù),InnoDB作為存儲(chǔ)引擎,使用JDBC來訪問MySQL。創(chuàng)建虛擬的大批量股票數(shù)據(jù)為分析對(duì)象,每只股票的數(shù)據(jù)量為5萬(wàn)條數(shù)據(jù),如表2所示,在實(shí)驗(yàn)中在數(shù)據(jù)庫(kù)管理列表中移動(dòng)了2 000只股票一年的交易信息的數(shù)據(jù)庫(kù)數(shù)據(jù),遠(yuǎn)程服務(wù)器開始時(shí)存儲(chǔ)10 000只的數(shù)據(jù)庫(kù),如圖5所示的時(shí)序進(jìn)行數(shù)據(jù)處理,并對(duì)本文方法與小批量數(shù)據(jù)更新方法進(jìn)行對(duì)比分析。
5 實(shí)驗(yàn)驗(yàn)證(Experimental verification)
利用時(shí)序更新方法的數(shù)據(jù)更新試驗(yàn)中,每增加200只股票的數(shù)據(jù)進(jìn)行一次實(shí)驗(yàn),得到如圖4(a)所示的實(shí)驗(yàn)結(jié)果,同樣小批量更新,每增加200只股票的數(shù)據(jù)進(jìn)行一次實(shí)驗(yàn),得到如圖4(b)所示的實(shí)驗(yàn)結(jié)果,對(duì)于時(shí)序更新方法,更新消耗的時(shí)間會(huì)隨著每次更新登記數(shù)量的改變而變化,如圖6所示,在時(shí)序更新中登記提交1 000只股票的數(shù)據(jù)量的更新的效率超過小批量更新的80倍。
如圖5所示,本文提出的時(shí)序更新方法僅在后處理過程中需要使用分發(fā)式事務(wù),這個(gè)批處理更新的過程可以被靈活的完成,在更新效率方面是高效的,在系統(tǒng)方面是的高效的和安全的。
6 結(jié)論(Conclusion)
隨著互聯(lián)網(wǎng)和分布式處理技術(shù)的發(fā)展,商業(yè)系統(tǒng)中的分布式和一站式服務(wù)得到廣泛的應(yīng)用,大型商業(yè)系統(tǒng)中經(jīng)常需要進(jìn)行大批量數(shù)據(jù)更新。本文在分布式系統(tǒng)中運(yùn)用了時(shí)序更新的方法,在建立更新表前進(jìn)行預(yù)處理,插入一個(gè)記錄到每一個(gè)批處理管理表,通過記錄時(shí)間序列來避免一次性更新和在線服務(wù)之間的沖突,實(shí)驗(yàn)證明這種在分布式系統(tǒng)中更新數(shù)據(jù)方法與分批處理方法相比,數(shù)據(jù)更新執(zhí)行時(shí)間,在每1 000次更新執(zhí)行時(shí)間會(huì)減少為原來的1/80,與傳統(tǒng)的小批量更新方法相比,本文的方法具有更高的效率,安全可靠性也得到一定增強(qiáng)。
參考文獻(xiàn)(References)
[1] 王習(xí)特,等.BOD:一種高效的分布式離群點(diǎn)檢測(cè)算法[J].計(jì)算機(jī)學(xué)報(bào),2016,39(1):36-51.
[2] 秦秀磊,張文博,魏峻.云計(jì)算環(huán)境下分布式緩存技術(shù)的現(xiàn)狀與挑戰(zhàn)[J].軟件學(xué)報(bào),2013,24(1):50-66.
[3] Qingliang,et al.A complete coalition logic of temporal knowledge for multi-agent systems[J].Frontiers of Computer Science,2015,9(1):75-86.
[4] 于彥偉,等.時(shí)空軌跡大數(shù)據(jù)分布式蜂群模式挖掘算法[J].計(jì)算機(jī)工程與科學(xué),2016,38(2):255-262.
[5] 郭昆,等.NoSQL數(shù)據(jù)庫(kù)間數(shù)據(jù)交換代價(jià)研究[J].計(jì)算機(jī)工程與科學(xué),2016,38(1):33-40.
[6] 朱保鋒,蘇小玲.大型網(wǎng)絡(luò)異常數(shù)據(jù)庫(kù)的快速數(shù)據(jù)定位模型仿真[J].微電子學(xué)與計(jì)算機(jī),2016(2):140-143.
[7] 錢曉軍,范冬萍,吉根林.物聯(lián)網(wǎng)差異數(shù)據(jù)庫(kù)中的故障數(shù)據(jù)快速挖掘仿真[J].計(jì)算機(jī)仿真,2016(1):301-304.
[8] 朱明,李躍新.流數(shù)據(jù)環(huán)境下基于k集合覆蓋的分布式標(biāo)簽共現(xiàn)算法[J].計(jì)算機(jī)應(yīng)用研究,2016(2):428-430.
[9] 張曉琳,等.一種分層自適應(yīng)快速K-means算法[J].計(jì)算機(jī)應(yīng)用研究,2016(2):421-423.
作者簡(jiǎn)介:
于興平(1982-),女,本科,講師.研究領(lǐng)域:分布式系統(tǒng),分布智能.
李洪建(1979-),男,本科,講師.研究領(lǐng)域:計(jì)算機(jī)教育教學(xué),分布式系統(tǒng).
于騰飛(1987-),男,碩士生.研究領(lǐng)域:分布式系統(tǒng),大數(shù)據(jù).
畢衛(wèi)紅(1960-),女,博士,教授.研究領(lǐng)域:分布式系統(tǒng),數(shù)融合.