韓海花,王孝廣,劉佩賢,趙 燕
(1. 北京化工大學 北方學院,廊坊 065201;2. 北京中交通信科技有限公司,北京 100011)
海量數(shù)據(jù)批量寫庫方法的研究與實現(xiàn)
韓?;?,王孝廣2,劉佩賢1,趙 燕1
(1. 北京化工大學 北方學院,廊坊 065201;2. 北京中交通信科技有限公司,北京 100011)
目前,大多數(shù)應用系統(tǒng)的并發(fā)數(shù)據(jù)量較少,對數(shù)據(jù)庫寫庫性能要求不高,即在小數(shù)據(jù)量并發(fā)的情況下,數(shù)據(jù)庫以接收一條,分析一條,寫入一條的方式入庫,基本可以滿足系統(tǒng)應用要求。但在大數(shù)據(jù)量并發(fā)情況下,由于數(shù)據(jù)庫寫庫瓶頸的存在,寫庫效率大大降低。本方法將應用系統(tǒng)中的應用數(shù)據(jù)進行預處理和數(shù)據(jù)寫入數(shù)據(jù)庫的過程并行,即數(shù)據(jù)經過預處理后存入緩存,當緩存中的數(shù)據(jù)達到預設數(shù)據(jù)量時,將該數(shù)據(jù)一次性寫入數(shù)據(jù)庫,并將該數(shù)據(jù)從緩存中刪除。此方法的數(shù)據(jù)處理速度和寫入速度較快,尤其適用于海量數(shù)據(jù)并發(fā)的應用系統(tǒng)。
該方案設計的批量寫庫方法采用已成熟的TCP/IP協(xié)議及數(shù)據(jù)庫存儲方面的知識,主要服務于應用系統(tǒng)相關運行模塊,為應用系統(tǒng)產生的海量數(shù)據(jù)提供獨立的數(shù)據(jù)預處理、寫庫服務的功能。
主要由TCP通訊組件、協(xié)議分析組件、寫庫管理組件、寫庫組件等模塊構成。對外主要通過入庫接口的收取應用數(shù)據(jù),通過批量寫庫組件將數(shù)據(jù)實時入庫。
本方法降低了應用系統(tǒng)與數(shù)據(jù)庫之間的耦合關系;同時也為入庫的操作提供數(shù)據(jù)緩沖,通過緩沖數(shù)據(jù)結構降低對數(shù)據(jù)庫的海量沖擊,從而提升數(shù)據(jù)庫的整體運行性能。
圖1 系統(tǒng)架構
該組件接采用TCP協(xié)議接收來自應用系統(tǒng)的不同協(xié)議數(shù)據(jù)包,即將拆分為很多IP數(shù)據(jù)包的車輛GPS定位信息,按照封包序號將IP數(shù)據(jù)包重新順序排列,并一層層剝離PDU的包頭數(shù)據(jù),提取出里面的應用數(shù)據(jù),重構定位數(shù)據(jù)。然后采用哈希模式來實現(xiàn)不同包的動態(tài)分配,且哈希函數(shù)采用數(shù)字分析法來構建,即當分析一組數(shù)據(jù),平臺在較短時間內接收到的車輛GPS定位數(shù)據(jù)時,平臺接收的定位點中的年、月、日、小時的這幾位數(shù)據(jù)大體相同,這樣的話,出現(xiàn)沖突的幾率就會很大。但是年、月、日、小時的后幾位表示分鐘和秒的數(shù)據(jù)差別較大,如果用后面的數(shù)據(jù)來構成散列地址,則沖突的幾率就會降低。因此采用數(shù)字分析法找出數(shù)字的規(guī)律,盡可能利用這些數(shù)據(jù)來構造沖突幾率較低的散列地址。
圖2 TCP通訊組件結構
本組件主要與應用系統(tǒng)進行數(shù)據(jù)對接,主要實現(xiàn)應用程序與本方法之間按照自定協(xié)議的方式,實現(xiàn)數(shù)據(jù)的正常通信。
本組件主要完成對接收的不同協(xié)議數(shù)據(jù)包根據(jù)不同的業(yè)務類型調用不同的業(yè)務類完成業(yè)務數(shù)據(jù)包的拆解。主要算法如下:依據(jù)字節(jié)流模式,通過字節(jié)流的解析,完成對數(shù)據(jù)包的解析。
主要分析流程過程如圖3所示。
圖3 協(xié)議分析組件數(shù)據(jù)分析流程
從消息流中可以看出,收到消息包后,進行消息包的header進行解析,然后,根據(jù)解析的情況進行分解業(yè)務細節(jié)。
本組件主要完成將分解后的數(shù)據(jù)包,調用不同的存儲過程,實現(xiàn)數(shù)據(jù)的入庫動作。本組件主要通過獨立的線程,完成數(shù)據(jù)的獨立入庫過程,每個寫庫任務對象(CWriteDataTask)對應一個獨立的會話對象。寫庫任務對象將解析后的數(shù)據(jù)完成數(shù)據(jù)的批量入庫。
批量寫庫類定義如下:
本組件算法主要實現(xiàn)將數(shù)據(jù)包寫入緩沖,當緩沖滿了后,則進行入庫,入庫的過程就是調用在數(shù)據(jù)庫中已經建立好的數(shù)據(jù)庫存儲過程對象實現(xiàn)。主要過程如下:組件收到數(shù)據(jù)后,將數(shù)據(jù)依次提交到隊列中,不同的業(yè)務字段提交到不同的字段隊列中,然后針對不同的字段隊列調用不同的業(yè)務存儲過程,實現(xiàn)數(shù)據(jù)的批量入庫。
圖4 批量寫庫組件的寫庫流程
系統(tǒng)測試采用20000個并發(fā)業(yè)務數(shù)據(jù)包,每個協(xié)議包由30個字節(jié)組成,按照自定義協(xié)議格式,往數(shù)據(jù)庫入庫接口同時發(fā)送。
方案一:insert循環(huán)插入
采用foreach循環(huán)函數(shù),將20000條數(shù)據(jù)經解包后,采用insert into的方式,循環(huán)插入數(shù)據(jù)庫中,共耗時00:00:29.7336000。
方案二:批量入庫方式
采用本方案,將20000條數(shù)據(jù),解包、處理寫入緩存后,調用業(yè)務存儲過程,批量插入數(shù)據(jù)庫中,共耗時00:00:00.3276000。
根據(jù)上述比對結果,批量寫庫的方案與循環(huán)插入的方式相比,寫庫時間大大縮短、寫庫效率明顯提高。
本文所討論的方法是項目實施過程中總結出的一種有效的大批數(shù)據(jù)錄入的方法。我們在公司GPS車輛監(jiān)管項目(系統(tǒng)設計的并發(fā)GPS數(shù)據(jù)為15000條/S)中利用此方法成功實施了大批量GPS數(shù)據(jù)的入庫。實踐證明在大批量數(shù)據(jù)錄入時,采用本文提出批量數(shù)據(jù)插入的方法,可以大大提高數(shù)據(jù)錄入效率,提高系統(tǒng)運行效率。
[1]湯庸,毛承潔.信息系統(tǒng)批量數(shù)據(jù)錄入的工程方法[J].微機發(fā)展,1996,6.
[2]湯庸.教據(jù)庫應用系統(tǒng)開發(fā)指南[M].人民郵電出版社,1996.
[3]A.Segev,J.L.Zhao. Data management for large ruleSystems.In:Proceed-ings of 17th International Conference on Very Large Data Bases.1991.
[4]Simson W.The Point-to-Point Protocol(PPP),RFC1661,July 1994.
The research of batch writing massive amounts of data and implementation of database method
HAN Hai-hua1, WANG Xiao-guang2, LIU Pei-xian1, ZHAO Yan1
本文研究了一種將海量數(shù)據(jù)寫入數(shù)據(jù)庫的方法,提出了一種數(shù)據(jù)處理及數(shù)據(jù)入庫并行的方法,解決了海量數(shù)據(jù)寫庫效率較低的問題,提高了應用系統(tǒng)中海量數(shù)據(jù)的數(shù)據(jù)處理速度和寫庫速度,大幅度提高了系統(tǒng)的運行效率。
海量數(shù)據(jù);寫庫;批量存儲
韓?;ǎ?982 -),女,山東人,助教,碩士研究生,研究方向為智能控制。
TP391
A
1009-0134(2011)5(上)-0029-03
10.3969/j.issn.1009-0134.2011.5(上).11
2010-11-01