本發(fā)明涉及數(shù)據(jù)庫,具體提供一種面向時序數(shù)據(jù)提供有序訪問的存儲方法及裝置。
背景技術(shù):
1、隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,物聯(lián)網(wǎng)設(shè)備與應(yīng)用數(shù)據(jù)迅速增長,對高效存儲、管理和分析物聯(lián)網(wǎng)設(shè)備所產(chǎn)生的海量數(shù)據(jù)的需求也日益增加。
2、與傳統(tǒng)數(shù)據(jù)庫所處理的數(shù)據(jù)相比,物聯(lián)網(wǎng)設(shè)備與應(yīng)用所產(chǎn)生的數(shù)據(jù)具有明顯的時序數(shù)據(jù)處理特征,如:
3、(1)數(shù)據(jù)總是包含時間戳屬性,并通常按照時間順序高頻、穩(wěn)定的產(chǎn)生;
4、(2)數(shù)據(jù)量巨大。以一臺傳感器在一天產(chǎn)生的數(shù)據(jù)量約1.4m為例,一個擁有千萬傳感器的工廠一年即可產(chǎn)生500t數(shù)據(jù)。而在車聯(lián)網(wǎng)、數(shù)字能源等新興行業(yè),管理數(shù)億甚至數(shù)十億設(shè)備正在成為趨勢;
5、(3)數(shù)據(jù)較少更新和刪除;
6、(4)查詢通常以時間作為過濾條件,聚合分析通常在設(shè)備與時間維度上進(jìn)行。
7、由于傳統(tǒng)數(shù)據(jù)處理技術(shù)難以在如此大規(guī)模的數(shù)據(jù)上進(jìn)行高效存儲與分析,時序數(shù)據(jù)處理作為一項專門的數(shù)據(jù)處理技術(shù)應(yīng)運(yùn)而生并迅速發(fā)展。除在物聯(lián)網(wǎng)行業(yè)外,時序數(shù)據(jù)處理技術(shù)在系統(tǒng)監(jiān)控、股票交易等行業(yè)也得到廣泛應(yīng)用。
8、在時序數(shù)據(jù)處理場景中,大量的數(shù)據(jù)訪問都是以時間維度作為過濾條件或者聚合條件的。例如,在物聯(lián)網(wǎng)設(shè)備監(jiān)控場景中,系統(tǒng)會定時獲取最新生成的數(shù)據(jù);在時序數(shù)據(jù)展示應(yīng)用中,會要求獲取的數(shù)據(jù)從新到舊排列;在時序分析場景中,會在時間維度按一定時間間隔聚合等等。在這些場景中,如果計算引擎從存儲引擎獲取的時序數(shù)據(jù)是按照時間有序的,則數(shù)據(jù)處理會高效的多。原因如下:
9、(1)很多時序數(shù)據(jù)查詢本身要求結(jié)果按時間排序(例如order?by?time_col)。如果計算引擎從存儲引擎獲取的時序數(shù)據(jù)已經(jīng)有序則無需再次排序;
10、(2)對于需要在時間維度上的進(jìn)行聚合的查詢,在有序數(shù)據(jù)集上的聚合效率較在無序數(shù)據(jù)集上的聚合效率高很多;
11、(3)對于對結(jié)果集要求結(jié)果按時間排序(例如order?by?time_col)且有數(shù)量限制的查詢(例如limit?20),如果存儲引擎所提供的數(shù)據(jù)已經(jīng)是有序的,則可以啟用提前退出機(jī)制。
12、綜上,時序數(shù)據(jù)存儲引擎提供按時間排序的數(shù)據(jù)集對于提升時序數(shù)據(jù)處理效率的效果是顯著的。因此,很多時序數(shù)據(jù)庫的存儲引擎也提供了此功能。該能力的實現(xiàn)方法主要有如下幾種:
13、(1)時序數(shù)據(jù)以按時間排序的數(shù)據(jù)結(jié)構(gòu)進(jìn)行存儲。很多數(shù)據(jù)庫選擇采用lsm或者類似lsm的結(jié)構(gòu)從而實現(xiàn)訪問時數(shù)據(jù)可以按照時間順序返回結(jié)果;
14、(2)通過索引等輔助數(shù)據(jù)結(jié)構(gòu)實現(xiàn)數(shù)據(jù)的有序訪問。一些基于傳統(tǒng)關(guān)系數(shù)據(jù)庫架構(gòu)實現(xiàn)的時序數(shù)據(jù)庫會通過在時間戳列建立索引的方式提供有序的數(shù)據(jù)訪問;
15、(3)此外,也可以通過數(shù)據(jù)存儲引擎先排序再返回結(jié)果的方式提供給計算引擎有序數(shù)據(jù)。但是由于該方法的效率較低,少有數(shù)據(jù)庫采用。
16、然而,時序數(shù)據(jù)的特點是按時間生成。在絕大多數(shù)情況下,時序數(shù)據(jù)都是按時間順序?qū)懭霐?shù)據(jù)庫的。也就是說,采用順序?qū)懭氪鎯Φ姆绞绞亲罡咝У臄?shù)據(jù)寫入方式并能夠在絕大多數(shù)情況下保持?jǐn)?shù)據(jù)的有效性。
17、使用傳統(tǒng)的索引結(jié)構(gòu)會對數(shù)據(jù)寫入造成很大的額外開銷,即使是lsm這種支持高性能寫入的存儲結(jié)構(gòu)相較順序追加寫入的方式也有一定的額外開銷。
技術(shù)實現(xiàn)思路
1、本發(fā)明是針對上述現(xiàn)有技術(shù)的不足,提供一種實用性強(qiáng)的面向時序數(shù)據(jù)提供有序訪問的存儲方法。
2、本發(fā)明進(jìn)一步的技術(shù)任務(wù)是提供一種設(shè)計合理,安全適用的面向時序數(shù)據(jù)提供有序訪問的存儲裝置。
3、本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:
4、一種面向時序數(shù)據(jù)提供有序訪問的存儲方法,具有如下步驟:
5、s1、按采集設(shè)備分區(qū)數(shù)據(jù)文件;
6、s2、亂序數(shù)據(jù)索引;
7、s3、動態(tài)排序模塊;
8、s4、數(shù)據(jù)重組模塊;
9、s5、查詢優(yōu)化器。
10、進(jìn)一步的,在步驟s1中,共享同一個或者一組文件的一組采集設(shè)備構(gòu)成一個數(shù)據(jù)分區(qū),通過在一個或一組文件內(nèi)為每一個采集設(shè)備預(yù)分配一段空間,在預(yù)分配空間內(nèi)持續(xù)追加寫入采集設(shè)備采集的時序數(shù)據(jù);
11、數(shù)據(jù)分區(qū)內(nèi)為某一個設(shè)備分配的空間由固定大小的數(shù)據(jù)存儲單位組成,所述單位稱為數(shù)據(jù)庫block;
12、當(dāng)為這個采集設(shè)備預(yù)分配的數(shù)據(jù)塊即將寫滿,則預(yù)分配新的數(shù)據(jù)塊給存儲設(shè)備。
13、進(jìn)一步的,在步驟s2中,包括:
14、(1)僅針對亂序數(shù)據(jù)建立部分索引;
15、(2)對數(shù)據(jù)塊而非數(shù)據(jù)記錄建立索引。
16、進(jìn)一步的,在步驟(1)中,所述亂序數(shù)據(jù)索引為對具有亂序數(shù)據(jù)的時間范圍內(nèi)的數(shù)據(jù)建立索引;
17、在步驟(2)中,假定在絕大多數(shù)情況下本系統(tǒng)中的時序數(shù)據(jù)在一個數(shù)據(jù)塊內(nèi)是有序的,而只是在數(shù)據(jù)塊間存在亂序的情況,本系統(tǒng)中的亂序索引的索引項為數(shù)據(jù)塊。
18、進(jìn)一步的,在步驟s3中,在絕大多數(shù)情況下,采用在亂序數(shù)據(jù)寫入新塊的方法保證數(shù)據(jù)塊內(nèi)數(shù)據(jù)有序,對于特殊情況下,需要增加動態(tài)排序功能對存在亂序數(shù)據(jù)的數(shù)據(jù)塊內(nèi)數(shù)據(jù)再返回給上層引擎前進(jìn)行排序;
19、判斷一個數(shù)據(jù)塊內(nèi)是否有亂序數(shù)據(jù)通過在數(shù)據(jù)塊內(nèi)增加亂序標(biāo)記完成,標(biāo)記初始化為false;當(dāng)有亂序數(shù)據(jù)寫入一個數(shù)據(jù)塊時,設(shè)置標(biāo)記為true。
20、進(jìn)一步的,在步驟s4中,包括:
21、s4-1、數(shù)據(jù)局部重組;
22、s4-2、數(shù)據(jù)全局重組。
23、進(jìn)一步的,在步驟s4-1中,數(shù)據(jù)局部重組負(fù)責(zé)對數(shù)據(jù)塊內(nèi)的亂序數(shù)據(jù)進(jìn)行重組,即將數(shù)據(jù)排序后寫回原數(shù)據(jù)塊;
24、在步驟s4-2中,當(dāng)部分索引索引項過多,也就意味著塊間亂序較多,需進(jìn)行全局重組,即對所有數(shù)據(jù)重新排序?qū)懟卦瓟?shù)據(jù)文件。
25、進(jìn)一步的,在步驟s5中,所述優(yōu)化器根據(jù)如下統(tǒng)計信息決定由存儲提供有序數(shù)據(jù)還是有計算引擎的排序算子排序:
26、(1)塊間亂序數(shù)量:即某數(shù)據(jù)塊中的數(shù)據(jù)相對之前寫入的數(shù)據(jù)塊有亂序的數(shù)據(jù)塊數(shù)量;
27、(2)塊內(nèi)亂序數(shù)量:即在數(shù)據(jù)塊內(nèi)有亂序數(shù)據(jù)的數(shù)據(jù)塊數(shù)量;
28、(3)塊總數(shù)量:即數(shù)據(jù)塊的總數(shù)量;
29、以上統(tǒng)計信息用于計算在存儲引擎提供有序數(shù)據(jù)所花的成本并于在計算引擎排序的成本進(jìn)行比較。
30、一種面向時序數(shù)據(jù)提供有序訪問的存儲裝置,包括:至少一個存儲器和至少一個處理器;
31、所述至少一個存儲器,用于存儲機(jī)器可讀程序;
32、所述至少一個處理器,用于調(diào)用所述機(jī)器可讀程序,執(zhí)行一種面向時序數(shù)據(jù)提供有序訪問的存儲方法。
33、本發(fā)明的一種面向時序數(shù)據(jù)提供有序訪問的存儲方法及裝置和現(xiàn)有技術(shù)相比,具有以下突出的有益效果:
34、本發(fā)明采用了最簡單有效的數(shù)據(jù)追加寫入方式實現(xiàn)時序數(shù)據(jù)寫入,在寫入性能上大幅優(yōu)于基于有序數(shù)據(jù)結(jié)構(gòu)的存儲系統(tǒng)。
1.一種面向時序數(shù)據(jù)提供有序訪問的存儲方法,其特征在于,具有如下步驟:
2.根據(jù)權(quán)利要求1所述的一種面向時序數(shù)據(jù)提供有序訪問的存儲方法,其特征在于,在步驟s1中,共享同一個或者一組文件的一組采集設(shè)備構(gòu)成一個數(shù)據(jù)分區(qū),通過在一個或一組文件內(nèi)為每一個采集設(shè)備預(yù)分配一段空間,在預(yù)分配空間內(nèi)持續(xù)追加寫入采集設(shè)備采集的時序數(shù)據(jù);
3.根據(jù)權(quán)利要求2所述的一種面向時序數(shù)據(jù)提供有序訪問的存儲方法,其特征在于,在步驟s2中,包括:
4.根據(jù)權(quán)利要求3所述的一種面向時序數(shù)據(jù)提供有序訪問的存儲方法,其特征在于,在步驟(1)中,所述亂序數(shù)據(jù)索引為對具有亂序數(shù)據(jù)的時間范圍內(nèi)的數(shù)據(jù)建立索引;
5.根據(jù)權(quán)利要求4所述的一種面向時序數(shù)據(jù)提供有序訪問的存儲方法,其特征在于,在步驟s3中,在絕大多數(shù)情況下,采用在亂序數(shù)據(jù)寫入新塊的方法保證數(shù)據(jù)塊內(nèi)數(shù)據(jù)有序,對于特殊情況下,需要增加動態(tài)排序功能對存在亂序數(shù)據(jù)的數(shù)據(jù)塊內(nèi)數(shù)據(jù)再返回給上層引擎前進(jìn)行排序;
6.根據(jù)權(quán)利要求5所述的一種面向時序數(shù)據(jù)提供有序訪問的存儲方法,其特征在于,在步驟s4中,包括:
7.根據(jù)權(quán)利要求6所述的一種面向時序數(shù)據(jù)提供有序訪問的存儲方法,其特征在于,在步驟s4-1中,數(shù)據(jù)局部重組負(fù)責(zé)對數(shù)據(jù)塊內(nèi)的亂序數(shù)據(jù)進(jìn)行重組,即將數(shù)據(jù)排序后寫回原數(shù)據(jù)塊;
8.根據(jù)權(quán)利要求7所述的一種面向時序數(shù)據(jù)提供有序訪問的存儲方法,其特征在于,在步驟s5中,所述優(yōu)化器根據(jù)如下統(tǒng)計信息決定由存儲提供有序數(shù)據(jù)還是有計算引擎的排序算子排序:
9.一種面向時序數(shù)據(jù)提供有序訪問的存儲裝置,其特征在于,包括:至少一個存儲器和至少一個處理器;