亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種基于兩級緩存的高效時序數(shù)據(jù)庫系統(tǒng)

        2022-04-18 02:58:32郭亮亮彭甫镕
        測試技術(shù)學(xué)報 2022年2期
        關(guān)鍵詞:數(shù)據(jù)庫

        郭亮亮,靳 燕,楊 博,彭甫镕

        (1.山西省信息產(chǎn)業(yè)技術(shù)研究院有限公司,山西 太原 030006;2.山西大學(xué) 大數(shù)據(jù)科學(xué)與產(chǎn)業(yè)研究院,山西 太原 030006)

        0 引 言

        時間序列數(shù)據(jù)是一種很重要的數(shù)據(jù)類型,廣泛存在于工業(yè)控制、金融分析和物聯(lián)網(wǎng)等領(lǐng)域[1].對時間序列數(shù)據(jù)進行分析[2]可以發(fā)現(xiàn)數(shù)據(jù)潛在的結(jié)構(gòu)和知識,形成對設(shè)備、網(wǎng)絡(luò)、市場的監(jiān)控與預(yù)警.近些年來,隨著大數(shù)據(jù)時代的到來和工業(yè)物聯(lián)網(wǎng)技術(shù)的蓬勃發(fā)展,時序數(shù)據(jù)的采集、存儲、分析應(yīng)用已經(jīng)形成了一套完整的體系[3].時序數(shù)據(jù)存儲作為時間序列分析的一個重要環(huán)節(jié),寫入速度、并發(fā)能力和存儲效率是存儲技術(shù)的幾大重點問題.現(xiàn)有時序數(shù)據(jù)庫系統(tǒng)在面對海量時序數(shù)據(jù)存儲時也會體現(xiàn)出明顯的不足之處,主要體現(xiàn)在存儲速度慢和空間利用率較低,這兩個方面也是衡量時序數(shù)據(jù)庫性能的重要指標(biāo).在實際應(yīng)用中通常會結(jié)合具體應(yīng)用場景對現(xiàn)有時序數(shù)據(jù)庫做進一步優(yōu)化[4].

        基于兩級緩存的高效時序數(shù)據(jù)庫系統(tǒng)通過對OpenTSDB[5]時序數(shù)據(jù)庫系統(tǒng)的分析,對影響數(shù)據(jù)存儲速度的因素進行了優(yōu)化.通過對比OpenTSDB,Gorilla[6]等壓縮算法的穩(wěn)定性、適用性,選擇Gorilla壓縮算法提升OpenTSDB在空間利用率方面的不足.該系統(tǒng)創(chuàng)新性地加入了兩級緩存機制,使得存儲速率得到了極大的增強.此外,利用Socket[7]的Server/Client模式進行數(shù)據(jù)接收,可以實現(xiàn)多數(shù)據(jù)源的同時接入,提高了系統(tǒng)的并發(fā)性.在對數(shù)據(jù)查詢做可視化處理后,最終在OpenTSDB的基礎(chǔ)上形成一個寫入速度快、空間利用率高、穩(wěn)定性好的時序數(shù)據(jù)庫系統(tǒng).

        1 相關(guān)工作

        伴隨著大量時間序列數(shù)據(jù)的采集與應(yīng)用,工業(yè)領(lǐng)域普遍的做法是使用商業(yè)實時數(shù)據(jù)庫軟件,如OSIsoft PI[8],Wonderware Insql[9],GE IHistorian[10]等作為時序數(shù)據(jù)的存儲和讀取工具.隨著大數(shù)據(jù)技術(shù)的發(fā)展,近年來也有一些基于HBase[11],MongoDB[12]等大數(shù)據(jù)平臺的研究.目前使用較多的時序數(shù)據(jù)庫有InfluxDB[13],OpenTSDB等,InfluxDB是一款使用Go語言開發(fā)的時序數(shù)據(jù)庫,主要使用基于Google的Bigtable[14]架構(gòu)的LSM tree[15]進行數(shù)據(jù)存儲,也是最為流行的一種工業(yè)時序數(shù)據(jù)庫.OpenTSDB是基于Hbase的分布式可伸縮時序數(shù)據(jù)庫,具有良好的分布式存儲優(yōu)勢,易于列擴展,是一款流行的開源時序數(shù)據(jù)庫.時序數(shù)據(jù)庫的使用彌補了關(guān)系型數(shù)據(jù)庫在面對時間序列數(shù)據(jù)存儲時在性能和穩(wěn)定性方面的劣勢,優(yōu)化了存儲結(jié)構(gòu),使得數(shù)據(jù)的插入和查詢更加便捷.然而,通過對現(xiàn)有時序數(shù)據(jù)庫的對比發(fā)現(xiàn),當(dāng)前所使用的時序數(shù)據(jù)庫在單機上的數(shù)據(jù)寫入速度停留在幾萬條/s的級別.為此,本文通過深入研究OpenTSDB的數(shù)據(jù)通訊原理和存儲方式,提出了一種兩級緩存的方案,對寫入速度進行優(yōu)化.同時,引入時序數(shù)據(jù)壓縮算法,在數(shù)據(jù)存儲效率方面進一步提高性能.

        2 OpenTSDB的并發(fā)訪問與壓縮分析

        OpenTSDB的關(guān)鍵字包含metric(測度)、timestamp(時間戳)、value(值)、tag(標(biāo)簽),其寫入過程是將各關(guān)鍵字的值轉(zhuǎn)換成一條行記錄Rowkey(包含metric,tag和時間分區(qū)),調(diào)用Hbase的寫入接口將Rowkey當(dāng)作行鍵值,時間偏移當(dāng)作列名,時序值當(dāng)作數(shù)據(jù)值寫入數(shù)據(jù)庫.OpenTSDB在啟動時首先需要加載配置文件,之后初始化Netty對象生成一個HTTP服務(wù),用于接收HTTP請求,最后初始化TSDB對象進行數(shù)據(jù)寫入.

        在面對海量數(shù)據(jù)時,OpenTSDB有自己的壓縮策略:將Rowkey相同的一行多列的數(shù)據(jù)合并為一行一列數(shù)據(jù).具體做法是將同一個Rowkey對應(yīng)的所有列(時間偏移)和所有值(時間序列值)分別合并為一個數(shù)組進行存儲.因為所有時間偏移的長度一樣,合并后的數(shù)組長度除以單個時間偏移的長度即可對合并后數(shù)據(jù)進行切分,獲得單個時間偏移.對合并后的數(shù)據(jù)值做同樣操作也可以得到相應(yīng)的元素.通過將一行多列合并為一行一列,可以有效減少Rowkey的數(shù)量,提高數(shù)據(jù)的存儲效率.

        OpenTSDB在構(gòu)建Rowkey的時候并不是直接使用原始值,而是將metric, timestamp, tagk, tagv分別用了一個3 B的uid做了替代,可以減少Rowkey的存儲空間.所以這里需要一個表來做uid和真實值之間的轉(zhuǎn)換,這個表就是tsdb-uid表.uid表中有兩個family,分別是uid-name的映射(name family)和name-uid的映射(uid family).另外還有一行特殊的數(shù)據(jù),就是uid已分配情況記錄表.tsdb-uid表會在執(zhí)行OpenTSDB創(chuàng)建表的腳本時創(chuàng)建.

        通過對以上OpenTSDB的寫入和壓縮方案的介紹可以看出,OpenTSDB還有很多需要進行優(yōu)化的方面,其采用基于Netty[16]的Web服務(wù),會導(dǎo)致數(shù)據(jù)傳輸性能下降,同時OpenTSDB為保證線程安全,面對數(shù)據(jù)高速寫入時異步機制會產(chǎn)生高度頻繁的數(shù)據(jù)壓棧操作,導(dǎo)致性能下降.在壓縮算法方面,OpenTSDB自帶的壓縮算法只是將源數(shù)據(jù)進行了簡單的合并操作,相比Gorilla壓縮算法將數(shù)據(jù)轉(zhuǎn)換為字節(jié)碼進行存儲,OpenTSDB的壓縮算法在壓縮效率上有明顯的不足,所以,會導(dǎo)致其空間利用率較低.在面對海量時序數(shù)據(jù)的存儲時,針對OpenTSDB暴露出的在吞吐量和空間利用率方面的不足,本文設(shè)計了基于兩級緩存優(yōu)化與Gorilla壓縮算法的高效數(shù)據(jù)庫系統(tǒng).

        3 基于兩級緩存的寫入速度優(yōu)化

        為了提高寫入效率和系統(tǒng)穩(wěn)定性,提出采用兩級緩存機制進行數(shù)據(jù)存儲優(yōu)化.針對大量數(shù)據(jù)源并發(fā)寫入對服務(wù)器資源占用問題,提出基于消息網(wǎng)關(guān)的一級數(shù)據(jù)緩存機制.通過消息網(wǎng)關(guān)保證系統(tǒng)接受大量數(shù)據(jù)源傳來的數(shù)據(jù)之前對數(shù)據(jù)進行臨時緩沖,減少網(wǎng)絡(luò)系統(tǒng)I/O數(shù)量,提高系統(tǒng)通訊效率.第二級緩存用于寫入數(shù)據(jù)的批處理,在執(zhí)行數(shù)據(jù)寫入前建立緩存區(qū),當(dāng)緩存區(qū)的數(shù)據(jù)達(dá)到一定量的時候進行一次批量寫入,以此節(jié)省因頻繁執(zhí)行寫入操作帶來的磁盤索引消耗.

        一級緩存建立在數(shù)據(jù)采集與時序數(shù)據(jù)庫之間,在做數(shù)據(jù)緩存的同時可以將數(shù)據(jù)源傳來的數(shù)據(jù)做格式轉(zhuǎn)化,將采用不同協(xié)議采集到的數(shù)據(jù)轉(zhuǎn)化為時序數(shù)據(jù)庫寫入接口所接受的格式.一級緩存使用Flume[17]作為緩存器,F(xiàn)lume是一個提供緩存機制的日志處理工具,用于數(shù)據(jù)采集,并對數(shù)據(jù)做簡單處理后轉(zhuǎn)發(fā)到指定接收端.Flume的每一個處理單元為一個Agent,其中包含數(shù)據(jù)源Source、緩存區(qū)Channel和輸出Sink.Source將單個或多個事件推入緩存區(qū)Channel中供Sink對數(shù)據(jù)做持久化處理,緩存區(qū)Channel大小可以通過配置文件進行設(shè)定,Channel中的數(shù)據(jù)會保存到Sink完成對數(shù)據(jù)持久化操作,并將數(shù)據(jù)以固定的格式傳輸?shù)皆撓到y(tǒng)的寫入接口.一級緩存的工作流程如圖1 所示.

        圖1 一級緩存工作流程圖

        在引入基于消息網(wǎng)關(guān)的數(shù)據(jù)緩存機制以后,可以避免收集到的所有數(shù)據(jù)一次性涌入數(shù)據(jù)庫,OpenTSDB原有的Netty服務(wù)會因為異步調(diào)用產(chǎn)生的堆棧和壓棧操作導(dǎo)致高頻次的緩存,極其浪費CPU資源.為此,本文提出建立TCP直連機制,建立消費者-生產(chǎn)者模式的隊列機制,以此來最大程度地利用CPU和內(nèi)存資源.

        二級緩存是在時序數(shù)據(jù)庫內(nèi)部,在數(shù)據(jù)接收與寫入Hbase之間.當(dāng)有數(shù)據(jù)需要寫入Hbase時,若頻繁調(diào)用寫入接口則會產(chǎn)生大量的磁盤索引消耗[18].本文提出在調(diào)用Hbase寫入接口之前設(shè)立緩存區(qū),可以使數(shù)據(jù)進行批量寫入,當(dāng)數(shù)據(jù)條數(shù)不滿足設(shè)定的閾值時,則會將數(shù)據(jù)存入緩存區(qū),等到緩存區(qū)內(nèi)數(shù)據(jù)達(dá)到一定條數(shù)時,會進行批量寫入.若數(shù)據(jù)量較小無法達(dá)到緩存區(qū)閾值,則根據(jù)數(shù)據(jù)停留時間進行強制性寫入,以確保時序數(shù)據(jù)處理時的時效性.二級緩存工作流程如圖2 所示.

        圖2 二級緩存工作流程圖

        4 基于Gorilla的扇區(qū)壓縮算法引入

        OpenTSDB當(dāng)前支持HBase作為其主要存儲后端,為了利用HBase的排序和區(qū)域分布,所有OpenTSDB數(shù)據(jù)點都存儲在一個表中(默認(rèn)情況下表名為tsdb),所有值都存儲在t列族中.OpenTSDB將metric,tags,timestamp屬于同一時間段內(nèi)的所有數(shù)據(jù)放到一個扇區(qū)中.傳統(tǒng)OpenTSDB只是根據(jù)metric將所有同一扇區(qū)中的數(shù)據(jù)合并存放,沒有進行任何壓縮,導(dǎo)致數(shù)據(jù)寫入后的壓縮比在4∶1左右.為此,針對時序數(shù)據(jù)的特點,對時序數(shù)據(jù)提出壓縮后存儲.

        Gorilla壓縮算法使用單個字符串鍵識別時間序列,并依賴更高級別的工具來提取和識別時間序列的元數(shù)據(jù).算法的主要作用是對8 B的double類型數(shù)據(jù)進行壓縮,轉(zhuǎn)換為字節(jié)流,按照一定的格式不斷追加.Gorilla壓縮算法采用依據(jù)時間序列中數(shù)據(jù)點的壓縮策略,使得其壓縮過程中不必對整個時間序列進行壓縮,可以節(jié)約大量的壓縮成本.Gorilla壓縮算法將時間序列的每個數(shù)據(jù)點表示為一對64 b的值,代表時間戳和當(dāng)時的值.時間戳和值分別使用關(guān)于時間序列之前值的信息進行差異性存儲和壓縮.Gorilla壓縮算法將這個數(shù)據(jù)流壓縮成按時間劃分的塊,存儲在一個2 b 的報頭中,值以7位存儲,總大小只有9 b.然后用一個2 b頭進行編碼,編碼為有11個前導(dǎo)零、1個有意義的位和實際值.總共以14 b存儲.相比于OpenTSDB的壓縮算法只改變數(shù)據(jù)格式進行存儲,Gorilla壓縮算法采用字節(jié)碼的壓縮方式可以實現(xiàn)更高的壓縮效率.Gorilla壓縮算法的壓縮流程如圖3 所示.其中Gorilla壓縮器的原理如圖4 所示.

        圖3 Gorilla壓縮算法壓縮流程

        圖4 Gorilla壓縮器原理[19]

        為了在基于兩級緩存的高效時序數(shù)據(jù)庫系統(tǒng)中引入Gorilla壓縮機制,將同一扇區(qū)的數(shù)據(jù)進行合并,使用Gorilla進行壓縮再寫入HBase.為區(qū)分Gorilla壓縮后的數(shù)據(jù)與未壓縮數(shù)據(jù),在OpenTSDB的Quantifier中加入標(biāo)志信息.為了讓加入壓縮機制的OpenTSDB能夠兼容原有數(shù)據(jù)格式,在SaltScanner類子類ScannerCB的call回調(diào)函數(shù)中對返回的塊數(shù)據(jù)進行解壓替換處理.先判斷Quantifier中是否含有Gorilla的壓縮標(biāo)志,并根據(jù)壓縮情況采用Gorilla算法進行解壓,將解壓后的數(shù)據(jù)重新返回到ScannerCB子類的call回調(diào)函數(shù)中,以此實現(xiàn)對查詢結(jié)果的解壓.加入Gorilla壓縮算法后的OpenTSDB不僅提高了存儲效率,還完全兼容原有的寫入與查詢方法.

        5 系統(tǒng)測試

        實驗對原OpenTSDB的寫入速度做了測試,并與改進后的時序數(shù)據(jù)庫系統(tǒng)的寫入速度進行對比測試.實驗所用設(shè)備配置信息為:主頻:2.20 GHz,處理器:i7-8750H,內(nèi)存16.00GB,硬盤:SSD固態(tài)硬盤.

        5.1 單機環(huán)境寫入速度

        為驗證本文所提出的時序數(shù)據(jù)庫系統(tǒng)在寫入速度方面的改進效果,對主要改進步驟對寫入速度的影響進行實驗測試.實驗設(shè)置生成20個測試文件,其中每個文件中包含200萬條數(shù)據(jù).寫入過程中先根據(jù)線程個數(shù)將數(shù)據(jù)讀入內(nèi)存,之后進行對應(yīng)線程的并發(fā)寫入.原始OpenTSDB的寫入速度和每一步優(yōu)化后的時序數(shù)據(jù)庫系統(tǒng)的寫入速度如圖5 所示.

        圖5 OpenTSDB寫入速度對比

        通過實驗對比測試可以看出,相比于OpenTSDB的寫入速度,建立兩級緩存機制的數(shù)據(jù)寫入速度增加了近20倍,這是因為在面對大量數(shù)據(jù)時,該系統(tǒng)中特有的二級緩存機制對數(shù)據(jù)進行了批量寫入,相比OpenTSDB,該系統(tǒng)對Hbase的寫入接口調(diào)用次數(shù)更少,節(jié)約了大量的系統(tǒng)資源,同時將原來基于Netty的HTTP服務(wù)改為了基于Socket的TCP服務(wù)也會節(jié)約大量的系統(tǒng)資源,達(dá)到提高寫入速度的目的[20].

        5.2 壓縮比分析

        OpenTSDB利用一種特殊的表結(jié)構(gòu)作為索引,將同一metric的數(shù)據(jù)按時間戳排列進行合并存儲,壓縮策略的核心是數(shù)據(jù)合并,其壓縮比在4:1左右.在引入Gorilla壓縮算法后,該系統(tǒng)的壓縮比達(dá)到了接近25∶1,Gorilla壓縮算法使用的策略是將原數(shù)據(jù)轉(zhuǎn)換為字節(jié)碼進行存儲,可以節(jié)省大量的存儲空間,在數(shù)據(jù)查詢時只需要將原字節(jié)碼轉(zhuǎn)換為相應(yīng)的數(shù)據(jù)即可.

        壓縮比測試一共進行了10輪,首先生成一批數(shù)據(jù),記錄數(shù)據(jù)文件的大小為a(MB),再記錄未寫入數(shù)據(jù)前數(shù)據(jù)庫表結(jié)構(gòu)文件的大小b(MB)和寫入數(shù)據(jù)以后數(shù)據(jù)庫表結(jié)構(gòu)文件的大小c(MB),設(shè)壓縮比為φ,則壓縮比

        為保證寫入環(huán)境一致,在每一次壓縮比測試過程中先對數(shù)據(jù)庫表做清空,所以b為常數(shù),經(jīng)測試b=0.002 507(MB).具體測試結(jié)果如表1 所示.

        表1 壓縮比測試結(jié)果表

        引入Gorilla壓縮算法后,在該系統(tǒng)的第二級緩存中,系統(tǒng)會對接收到的數(shù)據(jù)先打包為數(shù)據(jù)塊,當(dāng)數(shù)據(jù)塊的個數(shù)達(dá)到一定閾值時進行一次批量寫入,這樣就確保了數(shù)據(jù)寫入Hbase的效率,使得調(diào)用Hbase寫入接口的次數(shù)減少,節(jié)約因頻繁調(diào)用寫入接口產(chǎn)生的大量的磁盤索引時間,在節(jié)約了系統(tǒng)資源的同時還會提高系統(tǒng)穩(wěn)定性.

        6 結(jié) 論

        本文通過對OpenTSDB的分析和研究,實現(xiàn)了一種基于兩級緩存的高速時序數(shù)據(jù)庫系統(tǒng).該系統(tǒng)應(yīng)用于數(shù)據(jù)源和Hbase之間,實現(xiàn)了時序數(shù)據(jù)的高性能寫入和存儲,其兩級緩存機制有效地解決了當(dāng)大量數(shù)據(jù)同時進行存儲時數(shù)據(jù)庫系統(tǒng)的效率問題,引入的Gorilla壓縮算法解決了Hbase在數(shù)據(jù)存儲上的空間消耗量大的問題,同時數(shù)據(jù)的批量寫入也解決了OpenTSDB在數(shù)據(jù)存儲時頻繁調(diào)用Hbase寫入接口造成的時間和系統(tǒng)資源損耗問題.該系統(tǒng)的使用極大地提高了時序數(shù)據(jù)存儲的穩(wěn)定性和并發(fā)性,為解決工業(yè)時序數(shù)據(jù)的存儲和分析提供了一種新的可靠的方法.

        猜你喜歡
        數(shù)據(jù)庫
        數(shù)據(jù)庫
        財經(jīng)(2017年15期)2017-07-03 22:40:49
        數(shù)據(jù)庫
        財經(jīng)(2017年2期)2017-03-10 14:35:35
        兩種新的非確定數(shù)據(jù)庫上的Top-K查詢
        數(shù)據(jù)庫
        財經(jīng)(2016年15期)2016-06-03 07:38:02
        數(shù)據(jù)庫
        財經(jīng)(2016年3期)2016-03-07 07:44:46
        數(shù)據(jù)庫
        財經(jīng)(2016年6期)2016-02-24 07:41:51
        數(shù)據(jù)庫
        財經(jīng)(2015年3期)2015-06-09 17:41:31
        數(shù)據(jù)庫
        財經(jīng)(2014年21期)2014-08-18 01:50:18
        數(shù)據(jù)庫
        財經(jīng)(2014年6期)2014-03-12 08:28:19
        數(shù)據(jù)庫
        財經(jīng)(2013年6期)2013-04-29 17:59:30
        无码免费人妻超级碰碰碰碰| 午夜免费电影| 久久精品成人无码观看不卡| 亚洲精品第一国产综合精品| 亚洲乱亚洲乱妇50p| 人妻被黑人粗大的猛烈进出| 国产chinese在线视频| 久久久精品国产老熟女| 麻豆人妻性色av专区0000| 亚洲精品白浆高清久久久久久| 久久婷婷香蕉热狠狠综合| 国产欧美日韩专区毛茸茸| 精品日本一区二区视频| 亚洲精品中文字幕视频色| 色妞色视频一区二区三区四区| 爽妇网国产精品| 蜜桃av区一区二区三| 日本最新一区二区三区在线视频| 亚洲国产精品ⅴa在线观看| 日日噜噜夜夜爽爽| 亚洲国产成a人v在线观看| 国产另类人妖在线观看| 精品国品一二三产品区别在线观看 | 国产日本精品视频一区二区| 正在播放东北夫妻内射| 成人区人妻精品一区二区不卡网站| 极品尤物高潮潮喷在线视频| 中文字幕一区二区人妻痴汉电车 | 亚洲中文字幕精品一区二区| 伊人久久大香线蕉av色婷婷色| 天天爽天天爽夜夜爽毛片| 91伊人久久| 久久久人妻丰满熟妇av蜜臀| av区无码字幕中文色| 亚洲av无码精品色午夜果冻不卡| 国产亚洲欧美在线观看的| 人妻熟女妇av北条麻记三级| 香蕉成人伊视频在线观看| 中文字幕爆乳julia女教师| 美女熟妇67194免费入口| 蜜桃视频第一区免费观看|