


摘要:隨著物聯網及云計算技術的興起,以及移動互聯網技術的不斷發展,以社交網絡、電商等為代表的新型應用在日常生活中使用越來越廣,與此同時它們的數據規模也急劇增加。列存儲數據庫在管理海量數據、從規模龐大的數據中獲取有用信息方面有突出的優勢。在處理海量數據時列存儲數據庫的性能要明顯優于傳統的行存儲數據庫,因此研究基于大數據的列存儲數據庫技術有重要意義。
關鍵詞:列存儲,大數據,數據庫,并行查詢
中圖分類號:TP311.13?????????文獻標識碼:A
收稿日期:2020-04-29
作者簡介:邱宏(1979-)男,講師,碩士,研究方向:網絡安全與執法。
1 前言
隨著移動互聯網技術及計算機技術的發展,對海量數據進行處理的場景變得越來越常見。傳統的數據庫是行存儲的,在處理海量數據時存在先天性不足。為了解決大數據時代面臨的海量數據處理挑戰,列存儲數據庫技術應運而生。
和傳統的行存儲數據庫相比,列存儲數據庫處理海量數據時的優勢主要包括[1]:(1)存儲數據前采用壓縮算法先壓縮數據,對于存在大量重復的數據可以有效提升存儲利用率。(2)可以直接訪問壓縮數據,提高了數據查詢性能。(3)查詢時可以只讀取查詢相關列,節省數據緩存的同時能夠提升查詢性能。
2 大數據理論基礎
Hadoop生態的MapReduce并行編程技術是大數據的基礎,主要目的是解決在分布式集群環境下的海量數據處理問題。和傳統的并行編程技術相比,MapReduce并行編程模型能夠隔離上層應用程序和底層通信,在面向數據挖掘、云計算等大數據應用時應用更加廣泛。
MapReduce在處理海量數據任務時,將大數據集分成多個獨立的子任務,并且并行執行這些子任務,每個并行執行的獨立任務稱為Map任務。實際執行時,Map任務是分配到不同的機器上并行執行的,執行完成后會調用Reduce任務對各機器執行的Map任務的中間結果進行匯總。
需要注意的是,MapReduce是一種并行計算模型,Map任務及Reduce任務并不是固定不變的,而是用戶根據自己的需要自行實現的,只要按照固定的輸入、輸出格式實現即可。Map任務及Reduce任務的輸入及輸出格式如表1所示:
在采用MapReduce并行計算模型時,分布式集群的Master節點將數據劃分成多個子集,并把整個計算任務分為Map任務和Reduce任務,然后把各個任務分配到集群中空閑的worker節點。典型的MapReduce任務過程過程包括[2]:(1)劃分數據集。用戶提交作業請求,Master節點將輸入數據分成多個子數據塊,并轉化為
集群所以節點計算任務得到的鍵值對可能有不同的鍵值,為了提高計算消息,可以將相同鍵的數據交給同一個Reduc處理,這樣就需要對Map 階段產生的所有鍵值對進行交換和排序,以便將相同key的鍵值對存放在同一數據塊中。(4)Reduce階段。調用Reduce函數對Map階段得到的所有中間數據進行處理。(5)輸出階段。將輸出結果輸出到指定位置。
MapReduce模型的處理流程如圖1所示:
3 列存儲數據庫的自適應索引技術
索引的合理使用可以有效降低查詢讀取的數據量,從而能夠顯著提升數據庫的查詢性能。影響索引性能的重要指標包括初始化成本、查詢執行時間以及收斂速度。初始化成本指的是第一個查詢語句需要的時間;收斂速度說明經過多少查詢語句后索引的性能趨于穩定;查詢語句的執行時間包括單個查詢語句的執行時間和累積執行時間。
數據分割索引算法對數據庫的列進行索引時使用的是快速排序算法,并用查詢語句的邊界值充當列的劃分點。在數據庫的列第一次被查詢的時候,數據分割索引算法會構造此列對應的索引列,然后據此查詢數據的邊界值,以對索引列中的數據進行重組。在第一個查詢語句執行完畢后,索引列會被劃分成多個子集,子集間整體上是有序排列的,但各個子集內部局部是無序的。后續有查詢需求時,只需要根據數據的邊界范圍即可訪問索引的不同部分,而不需要訪問整個索引列,這樣可以大大降低查詢數據的數據量,提高查詢性能。
自適應合并索引算法對數據庫的列進行索引時使用的是合并排序算法。第一個查詢語句執行后會將數據列劃分成若干數據塊,在對數據塊排序后再從數據塊中查找數據,每個數據塊自身是排好序的,因此查找數據時采用二分法。后續的查詢語句會將滿足需求的數據合并后轉移到結果集,然后對結果集進行排序;等數據塊中的所有數據都被轉移到結果集后,索引就建立成功。
數據分割索引算法和自適應合并索引算法在執行第一個查詢語句時構建索引列的過程是不同的[3]:數據分割索引算法構建索引列是通過復制完成的,而在后續的查詢語句中重組數據塊借助的是兩個邊界值;自適應合并索引算法在執行第一個查詢語句時是把數據列分成了多個數據塊,并對每個數據塊進行排序,后續的查詢語句是借助二分法。
4 列存儲數據庫的并行查詢技術
從海量數據中查詢數據時,由于數據量非常大的原因,如果查詢過程采用傳統的串行化操作,那么勢必會影響查詢的效率,并行化查詢是提高數據庫查詢性能的重要手段。
并行數據庫查詢的實現方式主要包括[4]:(1)并行查詢操作。將原來的一個查詢語句并行化為多個并行查詢。(2)多查詢間的并行。對于相互間不影響的查詢操作,盡量一起操作,進行并行查詢。(3)用戶間的并行。不同用戶間的查詢操作,允許同時進行。
作為查詢語句的基本組成部分,查詢操作自身的并行對提高查詢效率的影響很明顯,選擇、連接以及聚集等查詢操作都可以并行。對于基于掃描的查詢操作,在掃描數據文件時就并行操作;對于基于排序的查詢操作,先對數據進行排序,然后選擇和查詢操作相關的并行處理方式;對于基于索引的查詢操作,想建立索引,然后通過索引并行執行相關操作。
查詢語句的并行執行具體實現方式是根據操作間的并行程度實現的,根據查詢操作間的依賴關系,可以把查詢語句的并行執行方式分為查詢操作間的獨立并行執行及查詢操作間的流水線并行執行。查詢操作間的獨立并行執行指的是查詢操作時完全相互獨立的,各個查詢操作間沒有任何關系,也不存在先后順序;這樣的查詢操作可以分別分配一定數目的處理單元,實現完全并行。查詢操作間的流水線并行執行指的是各個查詢操作間存在某種先后順序關系,這樣的話可以為存在先后關系的查詢操作分配同樣的處理單元,在前序查詢操作執行一部分后,即可將前序操作的結果傳遞給后序查詢操作處理,而不用等前序查詢操作完全執行完畢。
采取MapReduce模型實現列存儲數據庫中并行查詢操作的流程如圖2所示:
其中Map階段Amap函數會對各個數據塊進行處理,處理結果會在Reduce階段被Areduce函數使用,對應的結果子集在匯總后被輸出為最終的結果集。
5總結
本文對基于大數據的列存儲數據庫技術進行研究。首先,介紹了列存儲數據庫技術的理論基礎——MapReduce并行計算模型;然后在此基礎上分析了列存儲數據庫的自適應索引技術和并行查詢技術。最終采取MapReduce模型實現了列存儲數據庫的并行查詢操作。
參考文獻:
[1]王振璽,樂嘉錦,王梅,等.列存儲數據區級壓縮模式與壓縮策略選擇方法[J].計算機學報,2019(8):1524-1530.
[2]王梅,楊思簫,樂嘉錦.列存儲數據庫中壓縮位圖索引技術[J].計算機工程,2018(10):26-29.
[3]鄧亞丹.面向共享Cache多核處理器的數據庫查詢執行優化技術研究[D].長沙:國防科學技術大學,2019.
[4]鄭黎輝.數據庫并行查詢優化的設計與實現[J].長春:吉林大學,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