本發(fā)明涉及數(shù)據(jù)庫,具體提供一種時(shí)序數(shù)據(jù)索引方法及裝置。
背景技術(shù):
1、隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,物聯(lián)網(wǎng)設(shè)備與應(yīng)用數(shù)量迅速增長(zhǎng),對(duì)高效存儲(chǔ)、管理和分析物聯(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í)序數(shù)據(jù)處理特征,如:
3、(1)數(shù)據(jù)總是包含時(shí)間戳屬性,并通常按照時(shí)間順序高頻、穩(wěn)定的產(chǎn)生;
4、(2)數(shù)據(jù)量巨大。以一臺(tái)傳感器在一天產(chǎn)生的數(shù)據(jù)量約1.4m為例,一個(gè)擁有千萬傳感器的工廠一年即可產(chǎn)生500t數(shù)據(jù)。而在車聯(lián)網(wǎng)、數(shù)字能源等新興行業(yè),管理數(shù)億甚至數(shù)十億設(shè)備正在成為趨勢(shì);
5、(3)數(shù)據(jù)較少更新和刪除;
6、(4)查詢通常以時(shí)間作為過濾條件,聚合分析通常在設(shè)備與時(shí)間維度上進(jìn)行。
7、由于傳統(tǒng)數(shù)據(jù)處理技術(shù)難以在如此大規(guī)模的數(shù)據(jù)上進(jìn)行高效存儲(chǔ)與分析,時(shí)序數(shù)據(jù)處理作為一項(xiàng)專門的數(shù)據(jù)處理技術(shù)應(yīng)運(yùn)而生并迅速發(fā)展。除在物聯(lián)網(wǎng)行業(yè)外,時(shí)序數(shù)據(jù)處理技術(shù)在系統(tǒng)監(jiān)控、股票交易等行業(yè)也得到廣泛應(yīng)用。
8、時(shí)序數(shù)據(jù)處理中最大的挑戰(zhàn)之一是數(shù)據(jù)索引設(shè)計(jì)。因?yàn)闀r(shí)序數(shù)據(jù)數(shù)據(jù)量巨大且對(duì)寫入性能要求很高,傳統(tǒng)的b+樹索引、哈希索引等索引形式都會(huì)占用巨大的存儲(chǔ)空間且大幅增加寫入刪除操作開銷而無法滿足時(shí)序數(shù)據(jù)處理的要求。一些時(shí)序數(shù)據(jù)庫采用lsm樹的形式對(duì)數(shù)據(jù)按時(shí)間順序存儲(chǔ),但是在處理海量時(shí)序數(shù)據(jù)時(shí),lsm樹結(jié)構(gòu)也存在比較嚴(yán)重的讀放大、寫放大問題進(jìn)而影響讀寫性能。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明是針對(duì)上述現(xiàn)有技術(shù)的不足,提供一種實(shí)用性強(qiáng)的時(shí)序數(shù)據(jù)索引方法。
2、本發(fā)明進(jìn)一步的技術(shù)任務(wù)是提供一種設(shè)計(jì)合理,安全適用的時(shí)序數(shù)據(jù)索引裝置。
3、本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:
4、一種時(shí)序數(shù)據(jù)索引方法,時(shí)序數(shù)據(jù)索引結(jié)構(gòu)的索引項(xiàng)包括一個(gè)區(qū)間范圍內(nèi)所有數(shù)據(jù)位置統(tǒng)計(jì)信息,內(nèi)容包括:
5、(1)區(qū)間范圍開始的時(shí)間ts;
6、(2)區(qū)間范圍內(nèi)第一條記錄在存儲(chǔ)中的邏輯偏移量p;
7、(3)區(qū)間內(nèi)的數(shù)據(jù)記錄數(shù)量c;
8、(4)區(qū)間內(nèi)的數(shù)據(jù)的平均時(shí)間間隔i;
9、區(qū)間范圍的結(jié)束時(shí)間te按(ts+(c-1)*i)得出,因而無需存儲(chǔ)。
10、進(jìn)一步的,查找記錄r1位置的流程如下:
11、a1、通過樹形結(jié)構(gòu)查找算法查找“ts小于待查找記錄r1的時(shí)間tr1”的索引項(xiàng)中區(qū)間范圍開始的時(shí)間最大的索引項(xiàng)e1;
12、a2、如果e1不存在,則記錄r1早于索引中所有記錄,即尚未被索引覆蓋;
13、a3、如果e1存在,檢查e1是否覆蓋tr1。
14、進(jìn)一步的,在步驟a3中,進(jìn)一步包括:
15、a3-1:如果(e1范圍結(jié)束時(shí)間tee1+e1數(shù)據(jù)平均時(shí)間間隔ie1*容錯(cuò)比例)>tr1,則e1覆蓋r1的時(shí)間;
16、(a)找到存儲(chǔ)偏移量pr2=(tr1-tse1)/ie1+pe1(e1第一條記錄在存儲(chǔ)中的邏輯偏移量)對(duì)應(yīng)的記錄r2;
17、(b)如果r2的時(shí)間等于r1的時(shí)間,則找到了記錄;
18、(c)如果r2的時(shí)間小于r1的時(shí)間,從pr2位置向后查找直到找到與r1時(shí)間相等的記錄;
19、(d)如果r2的時(shí)間大于r1的時(shí)間,從pr2位置向前查找直到找到與r1時(shí)間相等的記錄;
20、a3-2:否則,e1未覆蓋r1的時(shí)間,即該索引中未有記錄r1。
21、進(jìn)一步的,索引的插入流程如下:
22、b1、當(dāng)有新記錄r1寫入數(shù)據(jù)表時(shí),需在索引中查找記錄對(duì)應(yīng)的時(shí)間tr1是否已被某索引項(xiàng)e1覆蓋;
23、b2、如果r1位置已經(jīng)被某索引項(xiàng)覆蓋,意味著r1的加入會(huì)改變?cè)饕?xiàng)的時(shí)間間隔規(guī)則,需分裂覆蓋該記錄的索引項(xiàng)e1;
24、b3、如果r1位置未被覆蓋,找到區(qū)間范圍開始時(shí)間小于等于tr1的索引項(xiàng)中區(qū)間范圍開始時(shí)間最大的索引項(xiàng)e2;
25、進(jìn)一步的,在步驟b2中,進(jìn)一步包括:
26、b2-1、如果記錄能夠合并到e1分裂后的前項(xiàng)索引項(xiàng)中,合并記錄到前項(xiàng)索引項(xiàng)中;
27、b2-2、如果記錄不能合并到e1分裂后的前項(xiàng)索引項(xiàng)中,建立新的索引項(xiàng),新增索引項(xiàng)的流程采用傳統(tǒng)樹形結(jié)構(gòu)增加節(jié)點(diǎn)的流程;
28、在步驟b3中,進(jìn)一步包括:
29、b3-1、如果r1能夠合并到e2中,合并記錄到e2中;
30、b3-2、如果r1不能合并到e2中,建立新的索引項(xiàng),新增索引項(xiàng)的流程采用傳統(tǒng)樹形結(jié)構(gòu)增加節(jié)點(diǎn)的流程。
31、進(jìn)一步的,記錄r1與前項(xiàng)索引項(xiàng)ep的合并流程如下:
32、c1、如果前項(xiàng)索引項(xiàng)ep數(shù)據(jù)記錄數(shù)量為1,則可以合并;
33、c2、如果記錄r1的位置pr1不等于ep的第一條記錄位置pep+ep的數(shù)據(jù)記錄數(shù)量cep,則意味著記錄r1與ep中的記錄在存儲(chǔ)空間上不連續(xù),不能合并,退出;
34、c3、如果前項(xiàng)索引項(xiàng)(ep的范圍結(jié)束時(shí)間teep+ep數(shù)據(jù)平均時(shí)間間隔iep*容錯(cuò)比例)>該記錄的時(shí)間戳tr1,則繼續(xù)處理,否則退出;
35、c4、計(jì)算合并后索引項(xiàng)ec的數(shù)據(jù)平均時(shí)間間隔iec=(tr1-合并后索引項(xiàng)的區(qū)間范圍開始的時(shí)間tsec)/(合并后索引項(xiàng)的數(shù)據(jù)記錄數(shù)量cec-1),如果該時(shí)間間隔與原索引項(xiàng)時(shí)間間隔差距小于預(yù)設(shè)閾值,則可以合并;否則退出;
36、c5、合并后索引項(xiàng)的數(shù)據(jù)記錄數(shù)量cec=cep+1;
37、c6、合并后索引項(xiàng)的數(shù)據(jù)平均時(shí)間間隔iec=(新記錄時(shí)間戳tr1-合并后索引項(xiàng)的區(qū)間范圍開始的時(shí)間tsec)/(cec-1)。
38、進(jìn)一步的,索引項(xiàng)e的分裂流程如下:
39、d1、確定索引項(xiàng)分裂的時(shí)間點(diǎn)t;
40、d2、找到時(shí)間點(diǎn)t對(duì)應(yīng)的在存儲(chǔ)文件中的邏輯偏移,用序號(hào)pt代表;
41、d3、原索引項(xiàng)es更新;
42、包括:
43、d3-1、原索引項(xiàng)區(qū)間內(nèi)的數(shù)據(jù)記錄數(shù)量ces=pt-第一條記錄在存儲(chǔ)中的邏輯偏移量pe;
44、d3-2、原索引項(xiàng)區(qū)間內(nèi)的數(shù)據(jù)平均時(shí)間間隔ies=(pt位置記錄的時(shí)間-原索引項(xiàng)的區(qū)間范圍開始的時(shí)間tse)/(ces-1);
45、d4、新索引項(xiàng)en建立;
46、包括:
47、d4-1、找到pt的下一條記錄pt’;
48、d4-2、新索引項(xiàng)的區(qū)間范圍開始的時(shí)間tsen=pt’對(duì)應(yīng)記錄的時(shí)間;
49、d4-3、新索引項(xiàng)區(qū)間內(nèi)的數(shù)據(jù)記錄數(shù)量cen=ce-ces;
50、d4-4、新索引項(xiàng)區(qū)間內(nèi)的數(shù)據(jù)平均時(shí)間間隔ien=(原索引項(xiàng)的區(qū)間范圍結(jié)束的時(shí)間tee-pt’位置記錄的時(shí)間)/(cen-1)。
51、進(jìn)一步的,索引的刪除流程如下:
52、e1、當(dāng)有記錄r被刪除,需在索引中查找記錄對(duì)應(yīng)的時(shí)間在索引上所在的位置;
53、e2、記錄r時(shí)間分裂覆蓋r的索引項(xiàng);
54、e3、對(duì)于分類后的索引項(xiàng)中的前項(xiàng)e:
55、索引項(xiàng)e區(qū)間內(nèi)的數(shù)據(jù)記錄數(shù)量ce=ce-1,如果e的數(shù)據(jù)記錄數(shù)量為0,刪除索引項(xiàng)。
56、一種時(shí)序數(shù)據(jù)索引裝置,包括:至少一個(gè)存儲(chǔ)器和至少一個(gè)處理器;
57、所述至少一個(gè)存儲(chǔ)器,用于存儲(chǔ)機(jī)器可讀程序;
58、所述至少一個(gè)處理器,用于調(diào)用所述機(jī)器可讀程序,執(zhí)行一種時(shí)序數(shù)據(jù)索引方法。
59、本發(fā)明的一種時(shí)序數(shù)據(jù)索引方法及裝置和現(xiàn)有技術(shù)相比,具有以下突出的有益效果:
60、本發(fā)明提出在索引項(xiàng)中記錄鍵值區(qū)間內(nèi)數(shù)據(jù)統(tǒng)計(jì)信息而非原始數(shù)據(jù),從而大幅降低索引所需要存儲(chǔ)的索引項(xiàng)數(shù)目,進(jìn)而減少索引的存儲(chǔ)空間并提升索引的數(shù)據(jù)寫入、查找、更新和刪除效率。