一種面向結構化列式數據的分布式并行數據導入方法
【技術領域】
[0001]本發明涉及計算機軟件領域,尤其涉及一種面向結構化列式數據的分布式并行數據導入方法。
【背景技術】
[0002]我們平常用到的商業關系數據庫系統,其主要目標是保證數據存取的ACID特征,為各類商務及事務應用提供強大的數據管理與存取服務。但它們的數據服務的實時性難以得到保障,其根本原因在于:
傳統數據庫都是磁盤數據庫,數據的主拷貝在硬盤上,用戶需要訪問數據時,DBMS將數據裝入主存,即對數據的管理是“基于磁盤的緩存技術”。而磁盤相對于主存是極其低速的存儲介質,且磁盤存取速度還和存取數據的物理位置和當前磁盤磁頭位置有關。另外,管理緩存(cache)或緩沖(buffer),無論是在操作系統層還是DBMS層,都需要付出較大的代價。即使將磁盤數據全部緩存到內存,其管理代價依然很大,無法滿足大多數應用場景實時性的要求。
[0003]在內存數據庫中,數據庫的全部或活動事務存取的數據放于內存中,這樣事務對盤的訪問完全取消了。由于整個數據庫放于內存,數據庫則不再作為大量存儲文件看待而作為內存中可尋址的大量數據,不同于磁盤數據庫中的緩存或緩沖區方式,它完全打破了傳統磁盤數據庫系統的設計宗旨,帶來了其自身新的設計問題。如:傳統磁盤數據庫系統的數據組織、訪問方法、查詢處理算法的設計都針對減少磁盤訪問次數與有效利用盤存儲空間,甚至犧牲CPU時間來減少I/O次數(如查詢處理有大量中間數據),而內存數據庫的設計則主要考慮如何有效地利用CPU的時間和內存空間。對傳統磁盤數據庫系統相當有效的數據組織、訪問方法、查詢處理算法,對于內存數據庫系統可能并不有效,相反,一些認為對傳統磁盤數據庫系統無用的辦法,反而成為可行的。
[0004]分布式內存數據庫,就是將數據分散存儲在多個獨立的數據節點上,并且以內存作為存儲數據的主要介質,使用戶能夠實現高性能,高并發,高可伸縮及海量數據查詢而提供的新型數據庫的解決方案。內存數據庫在最近幾年迅速發展,并在應用中得到越來越廣泛的實踐。
[0005]分布式內存數據庫相對于原有的傳統磁盤型數據庫,由于不使用硬盤作為存儲數據的第一介質,因此減少了磁盤1/0,利用內存的高速訪問性實現了數據的高速訪問。但是,由于內存是很寶貴的資源,分布式內存數據庫在生產業務中主要扮演的是計算平臺的角色,并不作為存儲數據的主數據庫,其數據主要還是存儲在傳統磁盤數據庫中。如何將存儲在傳統磁盤數據庫中的海量結構化數據快速導入到內存中是分布式內存數據庫首先要解決的問題。
[0006]傳統磁盤型數據庫多采用行式存儲的方式,行式存儲是將各行放入連續的物理位置,這很像傳統的記錄和文件系統。然后由數據庫引擎根據每個查詢提取需要的列。行式存儲將數據組織成許多行,這樣就能在一個操作中找到所有的列。這種做法的缺點是必須每次處理一整行,而不是只處理自己需要的列。這種存儲方式比較適合OLTP (OnlineTransact1n Processing,聯機事務處理系統,即以數據讀寫為主)場景,而不適合OLAP(Online Analytical Processing,聯機分析處理,即以數據分析為主)場景。OLAP的特點是多讀少寫,往往讀的數據量比較大,并且讀某個具體字段的幾率會遠遠大于讀整行數據的幾率。所以按行存儲不適合這種應用場景。而列式存儲是結構化數據中的每列按單列數據形式組織,并在建立各列之間的關系后存儲在介質上。優點是針對某個列中的值進行簡單查詢只需要獲得對應列的數據,不必讀入同一個記錄相關列的所有數據,其讀入速度快,需要的內部存儲資源相對少。這表示對某個列中特定值的搜索可以直接進入該列的存儲區,而不需要掃描整行的數據。這樣也使得數據壓縮變得更容易,因為一個列中的數據通常具有相同的數據類型。所以列式存儲模型比較適合內存數據庫的需求。
[0007]由于基于列的訪問存在的缺點是載入速度通常比較慢,因為源數據在外部數據源中是以行或者記錄的形式表示的。將海量行式數據轉換成列式數據通常速度較慢,所以很多內存數據庫都是針對更新數據進行分析和計算,而不是基于全量數據的分析和計算。而基于全量數據分析計算的分布式內存數據庫的應用場景,就需要設計一套高速、高效的數據導入方案,將原有存儲在行式數據庫中的結構化的行式數據轉換為適合內存數據庫存儲的壓縮后的列式數據,來提高內存數據庫的訪問效率和存儲效率。
[0008]綜上所述,本申請發明人在實現本申請實施例中發明技術方案的過程中,發現上述技術至少存在如下技術問題:
1.當數據量較大時,串行導入數據顯然是一種低效的數據導入方式,需要采用多路并行導入的方式,將原來存儲在持久化層的海量數據導入到分布式內存數據庫系統中。
[0009]2.在現有技術中,由于列式數據庫與行式數據庫結構上的差異,導致將行式存儲的數據轉換為列式數據時需要進行大量的數據結構轉換工作,因此在數據量很大的時候,數據轉換的工作量會很大,導入速度較慢、導入效率較低,因此,結合問題1,需要設計一種高速、高效的并行數據導入方案,將海量行式數據轉換成列式數據,然后并行導入到系統中。
【發明內容】
[0010]本發明提供了一種面向結構化列式數據的分布式并行數據導入方法,解決了現有的數據導入方法存在導入速度較慢、導入效率較低,降低了內存數據庫的訪問效率和存儲效率的技術問題,實現了將存儲在磁盤型數據庫中的結構化數據快速導入到分布式內存數據庫系統中,且能夠根據用戶需求進行個性化服務,并提供增量數據更新功能,提高了列式數據庫數據導入效率的技術效果。
[0011]為解決上述技術問題,本申請提供了一種面向結構化列式數據的分布式并行數據導入方法,將存儲在磁盤型數據庫中的結構化數據快速導入到分布式內存數據庫系統中,該導入方法首先能夠根據用戶需求,支持按照用戶需求導入數據,并根據用戶需求提供增量數據更新功能,并且針對列數據載入速度比較慢的問題,設計一種多路并行數據快速導入的解決方案,提高列式數據庫數據導入效率。
[0012]本發明所述的面向結構化列式數據的分布式并行數據導入方法,包括如下步驟: 步驟1:數據庫讀取組件根據數據導入規則,生成導入任務; 步驟2:根據所需讀取數據表數據規模,對數據庫讀取任務進行切分成多個子任務,每個子任務讀取部分數據表(子表),并建立子任務隊列管理子任務;
步驟3:子任務讀取子表完畢后,將讀取的原始數據封裝好發送給數據導入子系統;步驟4:數據導入子系統根據原始數據創建數據底層索引和數據分布索引,然后將建立好的數據底層索引和數據分布索引導入到分布式內存數據庫引擎中,并維護導入狀態。
[0013]優選的,所述步驟I獲取導入規則,根據數據導入規則,創建數據導入任務,維護數據導入任務狀態。
[0014]優選的,所述步驟2中,數據庫讀取組件讀取數據庫元信息,獲取待讀取的數據表規模,計算出每個子任務應該讀取的子表規模,并生成子任務隊列。
[0015]具體的,所述步驟2中創建數據庫讀取子任