摘 要隨著電子設(shè)備在各個地交通領(lǐng)域內(nèi)普及,交通安全分析系統(tǒng)里的數(shù)據(jù)正在以前所未有的速度增長。這給傳統(tǒng)關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)查詢也帶來了前所未有的壓力。本文采用列存儲數(shù)據(jù)格式并結(jié)合分布式SQL查詢引擎Drill工具的使用,將該安全分析系統(tǒng)的數(shù)據(jù)查詢速度提升12倍-74倍。
【關(guān)鍵詞】大數(shù)據(jù) 查詢優(yōu)化列 存儲分布式技術(shù) Drill
我們生活的二十一世紀(jì)是一個信息時代,也是一個數(shù)據(jù)大爆炸的時代。隨著“電子警察”等多種裝備在各個省市普及,交通安全分析應(yīng)用系統(tǒng)里的數(shù)據(jù)正在以前所未有的速度增長。據(jù)悉,某個用于城市交通安全研究的交通安全分析系統(tǒng)中,以城市為單位的數(shù)據(jù)表,每年數(shù)據(jù)增長量超過5000萬條,一個城市的歷史交通信息更是難以計數(shù)。交通安全分析正是一門基于交通歷史數(shù)據(jù)的全樣本數(shù)據(jù)進(jìn)行分析的科學(xué),數(shù)據(jù)的完整性、全面性對交通安全分析有著至關(guān)重要的意義。
1 關(guān)系型數(shù)據(jù)庫面臨的挑戰(zhàn)
在傳統(tǒng)關(guān)系型數(shù)據(jù)庫中,數(shù)據(jù)表是按照行優(yōu)先存儲的,對于一個有很多列的數(shù)據(jù)表,系統(tǒng)先集中存儲完表的一行,再去存儲下一行。在訪問數(shù)據(jù)庫的時候,為了查找某一行某個字段的值,則必須將這一行所在的數(shù)據(jù)塊從磁盤上完整地讀到內(nèi)存,再去判斷這一行的某個字段的值的屬性。當(dāng)某個數(shù)據(jù)庫表有很多列的時候,這種行存儲的實現(xiàn)方式就有一個很明顯的不足,就是為了讀取數(shù)據(jù)庫表的某一列,必須將其余的列也全部讀取。要完整地讀取該表所有行的某個字段的值,需要將整張表分前后順序加載到內(nèi)存。
交通歷史數(shù)據(jù)信息十分豐富,包含多種字符串信息,比如用來記錄違法行為的數(shù)據(jù)表包含違法編號、違法時間、警隊編號、違法類型、車輛類型、車牌號、執(zhí)法類型、違法地點、電子坐標(biāo)等52個數(shù)據(jù)列,一條數(shù)據(jù)最大長度可達(dá)到5670字節(jié)。大約5000萬條數(shù)據(jù),該表單表數(shù)據(jù)量將會達(dá)到264GB。使用傳統(tǒng)基于行存儲的關(guān)系型數(shù)據(jù)庫Oracle存儲這些數(shù)據(jù),在此基礎(chǔ)上執(zhí)行簡單的交通安全分析業(yè)務(wù)的響應(yīng)時間平均在25分鐘左右,當(dāng)數(shù)據(jù)量超過1億條,Oracle的響應(yīng)時間需要一個半小時左右。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫根本難以支持一個城市歷年歷史數(shù)據(jù)的查詢,更深層次的交通安全分析業(yè)務(wù)因此受阻。
2 分布式計算與“數(shù)據(jù)相關(guān)”
分布式計算是一種計算方式,它是一門計算機科學(xué),它研究如何將一個需要很多計算機資源或者需要很多時間的計算分割成許多“小部分”,然后將這些部分的計算分配給許許多多不同的機器節(jié)點,利用這些分散的機器節(jié)點的計算能力完成這些被分割成的“小部分”計算。分布式集群中的并行計算不僅要求計算任務(wù)是分散在集群中的不同節(jié)點之上的,還要求盡可能地去發(fā)掘這個計算中可以并行處理的部分,從而縮短整個計算過程的時間。利用分布式技術(shù)進(jìn)行查詢優(yōu)化就是基于這樣一個基本思想,就是將相互之間“不相關(guān)”的數(shù)據(jù)分割,分別存儲在不同的機器上,然后由這些不同的機器“同時”在被分割的數(shù)據(jù)集上去查找符合某個條件的數(shù)據(jù),最后向用戶返回結(jié)果,利用分布式計算空間上的分布性和時間上的并行性,縮短總的查詢時間,從而達(dá)到優(yōu)化查詢的目的。
數(shù)據(jù)相關(guān)的概念最先來自于現(xiàn)代CPU指令流水線技術(shù),它是指在一個程序中,存在必須等前一條指令執(zhí)行完才能執(zhí)行后一條指令的情況。如果把一個分布式集群看成一臺超大規(guī)模的計算機,集群中的每一臺機器都是這臺計算機中的某個部件,不同部件分別承擔(dān)著不同的計算任務(wù),那么在這個分布式計算框架里,也存在著數(shù)據(jù)相關(guān)問題。
根據(jù)某一次計算中,處理數(shù)據(jù)的函數(shù)與函數(shù)之間的關(guān)系,數(shù)據(jù)之間的相關(guān)性大致可以分為如圖1中展示的三種拓?fù)浣Y(jié)構(gòu)。每種數(shù)據(jù)計算(查詢)活動都可以被分割成如圖1中所示的n個子活動?;顒?最先執(zhí)行,它作為整個計算的開始,可以是數(shù)據(jù)加載,初始化之類的工作。根據(jù)拓?fù)渑判蛩惴ǖ脑?,所有入度?的活動都可以并行執(zhí)行,因此,圖1中所示的三種拓?fù)鋱D中,拓?fù)洌?)屬于迭代計算,并行度最差,拓?fù)洌?)中,在活動1完成之后,活動2和活動4可以并行執(zhí)行。在拓?fù)?中,活動1執(zhí)行之后,活動2到活動m,它們的入度為0,可以通過增加參與計算的機器節(jié)點,降低總的活動處理時間。
交通安全分析系統(tǒng)里的數(shù)據(jù)處理過程,就屬于拓?fù)?結(jié)構(gòu),2002年違法數(shù)據(jù)對2003年的違法數(shù)據(jù)沒有影響,對它們之間的處理也不存在前后依賴的關(guān)系,數(shù)據(jù)的分割不破壞數(shù)據(jù)處理算法的完整性,處理一年的數(shù)據(jù)是一個算法,數(shù)理N年的數(shù)據(jù)還是同一個算法,這樣的拓?fù)淠P蛿?shù)據(jù)之間弱相關(guān),可以通過增加機器節(jié)點并行處理,加大整個過程中的數(shù)據(jù)處理速度。這是本文里利用分布式技術(shù)并行處理數(shù)據(jù),提高數(shù)據(jù)查詢速度的理論基礎(chǔ)。
3 使用Drill和Parquet文件優(yōu)化查詢
Parquet格式文件是一種按列存儲的數(shù)據(jù)文件,專為數(shù)據(jù)的高效查詢而設(shè)計的數(shù)據(jù)格式。它可以將用戶的數(shù)據(jù)按照相同的數(shù)據(jù)列壓縮存儲,用戶查詢數(shù)據(jù)時,計算機只需要加載需要讀取的數(shù)據(jù)列,而不必將整行數(shù)據(jù)全部加載到內(nèi)存,降低磁盤IO次數(shù),優(yōu)化查詢時間??梢岳肏adoop分布式文件系統(tǒng),將數(shù)據(jù)文件分布式地存儲在Hadoop集群上。Drill是一種分布式大數(shù)據(jù)SQL引擎,可以將用戶的SQL語句分割成無數(shù)個子查詢,然后分發(fā)給不同的機器節(jié)點,同時查詢,最后將各個機器節(jié)點上的查詢結(jié)果匯總,返回給用戶。比如,某用戶需要查詢的數(shù)據(jù)有1000萬條,記為datasetALL,其中300萬條存儲在集群的A機器節(jié)點上,記為datasetA,500萬條數(shù)據(jù)存儲在集群的B機器節(jié)點上, 記為datasetB,200萬條存儲在集群機器的C機器節(jié)點上,記為datasetAC,Drill會把用戶selectcolumnA from datasetALL,轉(zhuǎn)換成selectcolumnA from datasetA、selectcolumnA from datasetB和selectcolumnA from datasetC三個子任務(wù),分別分發(fā)給集群中的機器A、B、C三個節(jié)點,分別由機器A、B、C執(zhí)行完相應(yīng)的子查詢后,將結(jié)果匯總,再返回給用戶。
4 實驗過程與結(jié)果
使用Sqoop工具將數(shù)據(jù)從Oracle遷移到Hadoop中,以Parquet文件格式存儲,使用Drill工具進(jìn)行查詢。表1中的Test1和Test2是Oracle和Drill工具執(zhí)行單表查詢和多表聯(lián)合查詢的時間對比。通過數(shù)據(jù)可以看到,在執(zhí)行單表查詢是,Drill的速度是Oracle的25倍-74倍,在執(zhí)行多表聯(lián)合查詢時,Drill的速度是Oracle的12倍-43倍。
5 結(jié)論
綜上所述,分布式SQL查詢引擎Drill和基于列存儲的Parquet格式文件能通過降低一次查詢中讀取的數(shù)據(jù)量和SQL語句分布式查詢這兩種方式,有效地降低傳統(tǒng)關(guān)系型數(shù)據(jù)庫的查詢時延。可以將該查詢優(yōu)化方式應(yīng)用在交通安全領(lǐng)域及其它領(lǐng)域,充分發(fā)揮計算機的計算能力,讓數(shù)據(jù)分析師們能夠更加便捷地進(jìn)行數(shù)據(jù)分析,充分發(fā)揮大數(shù)據(jù)時代下數(shù)據(jù)的價值。
參考文獻(xiàn)
[1]董西成.Hadoop技術(shù)內(nèi)幕[M].背景:機械工業(yè)出版社,2013.
[2](美)懷特(White, T.),周敏奇,等. Hadoop權(quán)威指南:第2版[M].清華大學(xué)出版社,2011.
[3]劉云飛.基于Hadoop的數(shù)據(jù)遷移與存儲的研究[D].北京郵電大學(xué),2015.
[4]http://drill.apache.org/docs/
[5]Melnik S,Gubarev A,Long J J, et al. Dremel: Interactive Analysis of Web-Scale Datasets[J].Communications of the Acm,2010,3(12):114-123.
作者簡介
鄒小彤(1989-),男,河南省信陽市人。碩士學(xué)歷,畢業(yè)于同濟大學(xué)。研究方向為軟件工程。
作者單位
同濟大學(xué)軟件學(xué)院 上海市 201800