摘要:隨著物聯(lián)網(wǎng)及云計(jì)算技術(shù)的興起,以及移動(dòng)互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,以社交網(wǎng)絡(luò)、電商等為代表的新型應(yīng)用在日常生活中使用越來(lái)越廣,與此同時(shí)它們的數(shù)據(jù)規(guī)模也急劇增加。列存儲(chǔ)數(shù)據(jù)庫(kù)在管理海量數(shù)據(jù)、從規(guī)模龐大的數(shù)據(jù)中獲取有用信息方面有突出的優(yōu)勢(shì)。在處理海量數(shù)據(jù)時(shí)列存儲(chǔ)數(shù)據(jù)庫(kù)的性能要明顯優(yōu)于傳統(tǒng)的行存儲(chǔ)數(shù)據(jù)庫(kù),因此研究基于大數(shù)據(jù)的列存儲(chǔ)數(shù)據(jù)庫(kù)技術(shù)有重要意義。
關(guān)鍵詞:列存儲(chǔ),大數(shù)據(jù),數(shù)據(jù)庫(kù),并行查詢
中圖分類號(hào):TP311.13?????????文獻(xiàn)標(biāo)識(shí)碼:A
收稿日期:2020-04-29
作者簡(jiǎn)介:邱宏(1979-)男,講師,碩士,研究方向:網(wǎng)絡(luò)安全與執(zhí)法。
1 前言
隨著移動(dòng)互聯(lián)網(wǎng)技術(shù)及計(jì)算機(jī)技術(shù)的發(fā)展,對(duì)海量數(shù)據(jù)進(jìn)行處理的場(chǎng)景變得越來(lái)越常見(jiàn)。傳統(tǒng)的數(shù)據(jù)庫(kù)是行存儲(chǔ)的,在處理海量數(shù)據(jù)時(shí)存在先天性不足。為了解決大數(shù)據(jù)時(shí)代面臨的海量數(shù)據(jù)處理挑戰(zhàn),列存儲(chǔ)數(shù)據(jù)庫(kù)技術(shù)應(yīng)運(yùn)而生。
和傳統(tǒng)的行存儲(chǔ)數(shù)據(jù)庫(kù)相比,列存儲(chǔ)數(shù)據(jù)庫(kù)處理海量數(shù)據(jù)時(shí)的優(yōu)勢(shì)主要包括[1]:(1)存儲(chǔ)數(shù)據(jù)前采用壓縮算法先壓縮數(shù)據(jù),對(duì)于存在大量重復(fù)的數(shù)據(jù)可以有效提升存儲(chǔ)利用率。(2)可以直接訪問(wèn)壓縮數(shù)據(jù),提高了數(shù)據(jù)查詢性能。(3)查詢時(shí)可以只讀取查詢相關(guān)列,節(jié)省數(shù)據(jù)緩存的同時(shí)能夠提升查詢性能。
2 大數(shù)據(jù)理論基礎(chǔ)
Hadoop生態(tài)的MapReduce并行編程技術(shù)是大數(shù)據(jù)的基礎(chǔ),主要目的是解決在分布式集群環(huán)境下的海量數(shù)據(jù)處理問(wèn)題。和傳統(tǒng)的并行編程技術(shù)相比,MapReduce并行編程模型能夠隔離上層應(yīng)用程序和底層通信,在面向數(shù)據(jù)挖掘、云計(jì)算等大數(shù)據(jù)應(yīng)用時(shí)應(yīng)用更加廣泛。
MapReduce在處理海量數(shù)據(jù)任務(wù)時(shí),將大數(shù)據(jù)集分成多個(gè)獨(dú)立的子任務(wù),并且并行執(zhí)行這些子任務(wù),每個(gè)并行執(zhí)行的獨(dú)立任務(wù)稱為Map任務(wù)。實(shí)際執(zhí)行時(shí),Map任務(wù)是分配到不同的機(jī)器上并行執(zhí)行的,執(zhí)行完成后會(huì)調(diào)用Reduce任務(wù)對(duì)各機(jī)器執(zhí)行的Map任務(wù)的中間結(jié)果進(jìn)行匯總。
需要注意的是,MapReduce是一種并行計(jì)算模型,Map任務(wù)及Reduce任務(wù)并不是固定不變的,而是用戶根據(jù)自己的需要自行實(shí)現(xiàn)的,只要按照固定的輸入、輸出格式實(shí)現(xiàn)即可。Map任務(wù)及Reduce任務(wù)的輸入及輸出格式如表1所示:
在采用MapReduce并行計(jì)算模型時(shí),分布式集群的Master節(jié)點(diǎn)將數(shù)據(jù)劃分成多個(gè)子集,并把整個(gè)計(jì)算任務(wù)分為Map任務(wù)和Reduce任務(wù),然后把各個(gè)任務(wù)分配到集群中空閑的worker節(jié)點(diǎn)。典型的MapReduce任務(wù)過(guò)程過(guò)程包括[2]:(1)劃分?jǐn)?shù)據(jù)集。用戶提交作業(yè)請(qǐng)求,Master節(jié)點(diǎn)將輸入數(shù)據(jù)分成多個(gè)子數(shù)據(jù)塊,并轉(zhuǎn)化為
集群所以節(jié)點(diǎn)計(jì)算任務(wù)得到的鍵值對(duì)可能有不同的鍵值,為了提高計(jì)算消息,可以將相同鍵的數(shù)據(jù)交給同一個(gè)Reduc處理,這樣就需要對(duì)Map 階段產(chǎn)生的所有鍵值對(duì)進(jìn)行交換和排序,以便將相同key的鍵值對(duì)存放在同一數(shù)據(jù)塊中。(4)Reduce階段。調(diào)用Reduce函數(shù)對(duì)Map階段得到的所有中間數(shù)據(jù)進(jìn)行處理。(5)輸出階段。將輸出結(jié)果輸出到指定位置。
MapReduce模型的處理流程如圖1所示:
3 列存儲(chǔ)數(shù)據(jù)庫(kù)的自適應(yīng)索引技術(shù)
索引的合理使用可以有效降低查詢讀取的數(shù)據(jù)量,從而能夠顯著提升數(shù)據(jù)庫(kù)的查詢性能。影響索引性能的重要指標(biāo)包括初始化成本、查詢執(zhí)行時(shí)間以及收斂速度。初始化成本指的是第一個(gè)查詢語(yǔ)句需要的時(shí)間;收斂速度說(shuō)明經(jīng)過(guò)多少查詢語(yǔ)句后索引的性能趨于穩(wěn)定;查詢語(yǔ)句的執(zhí)行時(shí)間包括單個(gè)查詢語(yǔ)句的執(zhí)行時(shí)間和累積執(zhí)行時(shí)間。
數(shù)據(jù)分割索引算法對(duì)數(shù)據(jù)庫(kù)的列進(jìn)行索引時(shí)使用的是快速排序算法,并用查詢語(yǔ)句的邊界值充當(dāng)列的劃分點(diǎn)。在數(shù)據(jù)庫(kù)的列第一次被查詢的時(shí)候,數(shù)據(jù)分割索引算法會(huì)構(gòu)造此列對(duì)應(yīng)的索引列,然后據(jù)此查詢數(shù)據(jù)的邊界值,以對(duì)索引列中的數(shù)據(jù)進(jìn)行重組。在第一個(gè)查詢語(yǔ)句執(zhí)行完畢后,索引列會(huì)被劃分成多個(gè)子集,子集間整體上是有序排列的,但各個(gè)子集內(nèi)部局部是無(wú)序的。后續(xù)有查詢需求時(shí),只需要根據(jù)數(shù)據(jù)的邊界范圍即可訪問(wèn)索引的不同部分,而不需要訪問(wèn)整個(gè)索引列,這樣可以大大降低查詢數(shù)據(jù)的數(shù)據(jù)量,提高查詢性能。
自適應(yīng)合并索引算法對(duì)數(shù)據(jù)庫(kù)的列進(jìn)行索引時(shí)使用的是合并排序算法。第一個(gè)查詢語(yǔ)句執(zhí)行后會(huì)將數(shù)據(jù)列劃分成若干數(shù)據(jù)塊,在對(duì)數(shù)據(jù)塊排序后再?gòu)臄?shù)據(jù)塊中查找數(shù)據(jù),每個(gè)數(shù)據(jù)塊自身是排好序的,因此查找數(shù)據(jù)時(shí)采用二分法。后續(xù)的查詢語(yǔ)句會(huì)將滿足需求的數(shù)據(jù)合并后轉(zhuǎn)移到結(jié)果集,然后對(duì)結(jié)果集進(jìn)行排序;等數(shù)據(jù)塊中的所有數(shù)據(jù)都被轉(zhuǎn)移到結(jié)果集后,索引就建立成功。
數(shù)據(jù)分割索引算法和自適應(yīng)合并索引算法在執(zhí)行第一個(gè)查詢語(yǔ)句時(shí)構(gòu)建索引列的過(guò)程是不同的[3]:數(shù)據(jù)分割索引算法構(gòu)建索引列是通過(guò)復(fù)制完成的,而在后續(xù)的查詢語(yǔ)句中重組數(shù)據(jù)塊借助的是兩個(gè)邊界值;自適應(yīng)合并索引算法在執(zhí)行第一個(gè)查詢語(yǔ)句時(shí)是把數(shù)據(jù)列分成了多個(gè)數(shù)據(jù)塊,并對(duì)每個(gè)數(shù)據(jù)塊進(jìn)行排序,后續(xù)的查詢語(yǔ)句是借助二分法。
4 列存儲(chǔ)數(shù)據(jù)庫(kù)的并行查詢技術(shù)
從海量數(shù)據(jù)中查詢數(shù)據(jù)時(shí),由于數(shù)據(jù)量非常大的原因,如果查詢過(guò)程采用傳統(tǒng)的串行化操作,那么勢(shì)必會(huì)影響查詢的效率,并行化查詢是提高數(shù)據(jù)庫(kù)查詢性能的重要手段。
并行數(shù)據(jù)庫(kù)查詢的實(shí)現(xiàn)方式主要包括[4]:(1)并行查詢操作。將原來(lái)的一個(gè)查詢語(yǔ)句并行化為多個(gè)并行查詢。(2)多查詢間的并行。對(duì)于相互間不影響的查詢操作,盡量一起操作,進(jìn)行并行查詢。(3)用戶間的并行。不同用戶間的查詢操作,允許同時(shí)進(jìn)行。
作為查詢語(yǔ)句的基本組成部分,查詢操作自身的并行對(duì)提高查詢效率的影響很明顯,選擇、連接以及聚集等查詢操作都可以并行。對(duì)于基于掃描的查詢操作,在掃描數(shù)據(jù)文件時(shí)就并行操作;對(duì)于基于排序的查詢操作,先對(duì)數(shù)據(jù)進(jìn)行排序,然后選擇和查詢操作相關(guān)的并行處理方式;對(duì)于基于索引的查詢操作,想建立索引,然后通過(guò)索引并行執(zhí)行相關(guān)操作。
查詢語(yǔ)句的并行執(zhí)行具體實(shí)現(xiàn)方式是根據(jù)操作間的并行程度實(shí)現(xiàn)的,根據(jù)查詢操作間的依賴關(guān)系,可以把查詢語(yǔ)句的并行執(zhí)行方式分為查詢操作間的獨(dú)立并行執(zhí)行及查詢操作間的流水線并行執(zhí)行。查詢操作間的獨(dú)立并行執(zhí)行指的是查詢操作時(shí)完全相互獨(dú)立的,各個(gè)查詢操作間沒(méi)有任何關(guān)系,也不存在先后順序;這樣的查詢操作可以分別分配一定數(shù)目的處理單元,實(shí)現(xiàn)完全并行。查詢操作間的流水線并行執(zhí)行指的是各個(gè)查詢操作間存在某種先后順序關(guān)系,這樣的話可以為存在先后關(guān)系的查詢操作分配同樣的處理單元,在前序查詢操作執(zhí)行一部分后,即可將前序操作的結(jié)果傳遞給后序查詢操作處理,而不用等前序查詢操作完全執(zhí)行完畢。
采取MapReduce模型實(shí)現(xiàn)列存儲(chǔ)數(shù)據(jù)庫(kù)中并行查詢操作的流程如圖2所示:
其中Map階段Amap函數(shù)會(huì)對(duì)各個(gè)數(shù)據(jù)塊進(jìn)行處理,處理結(jié)果會(huì)在Reduce階段被Areduce函數(shù)使用,對(duì)應(yīng)的結(jié)果子集在匯總后被輸出為最終的結(jié)果集。
5總結(jié)
本文對(duì)基于大數(shù)據(jù)的列存儲(chǔ)數(shù)據(jù)庫(kù)技術(shù)進(jìn)行研究。首先,介紹了列存儲(chǔ)數(shù)據(jù)庫(kù)技術(shù)的理論基礎(chǔ)——MapReduce并行計(jì)算模型;然后在此基礎(chǔ)上分析了列存儲(chǔ)數(shù)據(jù)庫(kù)的自適應(yīng)索引技術(shù)和并行查詢技術(shù)。最終采取MapReduce模型實(shí)現(xiàn)了列存儲(chǔ)數(shù)據(jù)庫(kù)的并行查詢操作。
參考文獻(xiàn):
[1]王振璽,樂(lè)嘉錦,王梅,等.列存儲(chǔ)數(shù)據(jù)區(qū)級(jí)壓縮模式與壓縮策略選擇方法[J].計(jì)算機(jī)學(xué)報(bào),2019(8):1524-1530.
[2]王梅,楊思簫,樂(lè)嘉錦.列存儲(chǔ)數(shù)據(jù)庫(kù)中壓縮位圖索引技術(shù)[J].計(jì)算機(jī)工程,2018(10):26-29.
[3]鄧亞丹.面向共享Cache多核處理器的數(shù)據(jù)庫(kù)查詢執(zhí)行優(yōu)化技術(shù)研究[D].長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué),2019.
[4]鄭黎輝.數(shù)據(jù)庫(kù)并行查詢優(yōu)化的設(shè)計(jì)與實(shí)現(xiàn)[J].長(zhǎng)春:吉林大學(xué),2018.
Abstract:?With the rise of Internet of things and cloud computing technology, as well as the continuous development of mobile Internet technology, new applications such as social networks, e-commerce, etc. are used more and more widely in?daily life, at the same time, their data scale has increased dramatically. Column storage database has outstanding advantages in managing massive data and obtaining useful information from large-scale data. When dealing with massive data, the performance of column storage database is obviously better than that of traditional row storage database, so it is of great significance to study the technology of column storage database based on big data.
Key words:?Column storage, Big data, Database, Parallel query