郭亮亮,靳 燕,楊 博,彭甫镕
(1.山西省信息產(chǎn)業(yè)技術(shù)研究院有限公司,山西 太原 030006;2.山西大學(xué) 大數(shù)據(jù)科學(xué)與產(chǎn)業(yè)研究院,山西 太原 030006)
時(shí)間序列數(shù)據(jù)是一種很重要的數(shù)據(jù)類(lèi)型,廣泛存在于工業(yè)控制、金融分析和物聯(lián)網(wǎng)等領(lǐng)域[1].對(duì)時(shí)間序列數(shù)據(jù)進(jìn)行分析[2]可以發(fā)現(xiàn)數(shù)據(jù)潛在的結(jié)構(gòu)和知識(shí),形成對(duì)設(shè)備、網(wǎng)絡(luò)、市場(chǎng)的監(jiān)控與預(yù)警.近些年來(lái),隨著大數(shù)據(jù)時(shí)代的到來(lái)和工業(yè)物聯(lián)網(wǎng)技術(shù)的蓬勃發(fā)展,時(shí)序數(shù)據(jù)的采集、存儲(chǔ)、分析應(yīng)用已經(jīng)形成了一套完整的體系[3].時(shí)序數(shù)據(jù)存儲(chǔ)作為時(shí)間序列分析的一個(gè)重要環(huán)節(jié),寫(xiě)入速度、并發(fā)能力和存儲(chǔ)效率是存儲(chǔ)技術(shù)的幾大重點(diǎn)問(wèn)題.現(xiàn)有時(shí)序數(shù)據(jù)庫(kù)系統(tǒng)在面對(duì)海量時(shí)序數(shù)據(jù)存儲(chǔ)時(shí)也會(huì)體現(xiàn)出明顯的不足之處,主要體現(xiàn)在存儲(chǔ)速度慢和空間利用率較低,這兩個(gè)方面也是衡量時(shí)序數(shù)據(jù)庫(kù)性能的重要指標(biāo).在實(shí)際應(yīng)用中通常會(huì)結(jié)合具體應(yīng)用場(chǎng)景對(duì)現(xiàn)有時(shí)序數(shù)據(jù)庫(kù)做進(jìn)一步優(yōu)化[4].
基于兩級(jí)緩存的高效時(shí)序數(shù)據(jù)庫(kù)系統(tǒng)通過(guò)對(duì)OpenTSDB[5]時(shí)序數(shù)據(jù)庫(kù)系統(tǒng)的分析,對(duì)影響數(shù)據(jù)存儲(chǔ)速度的因素進(jìn)行了優(yōu)化.通過(guò)對(duì)比OpenTSDB,Gorilla[6]等壓縮算法的穩(wěn)定性、適用性,選擇Gorilla壓縮算法提升OpenTSDB在空間利用率方面的不足.該系統(tǒng)創(chuàng)新性地加入了兩級(jí)緩存機(jī)制,使得存儲(chǔ)速率得到了極大的增強(qiáng).此外,利用Socket[7]的Server/Client模式進(jìn)行數(shù)據(jù)接收,可以實(shí)現(xiàn)多數(shù)據(jù)源的同時(shí)接入,提高了系統(tǒng)的并發(fā)性.在對(duì)數(shù)據(jù)查詢做可視化處理后,最終在OpenTSDB的基礎(chǔ)上形成一個(gè)寫(xiě)入速度快、空間利用率高、穩(wěn)定性好的時(shí)序數(shù)據(jù)庫(kù)系統(tǒng).
伴隨著大量時(shí)間序列數(shù)據(jù)的采集與應(yīng)用,工業(yè)領(lǐng)域普遍的做法是使用商業(yè)實(shí)時(shí)數(shù)據(jù)庫(kù)軟件,如OSIsoft PI[8],Wonderware Insql[9],GE IHistorian[10]等作為時(shí)序數(shù)據(jù)的存儲(chǔ)和讀取工具.隨著大數(shù)據(jù)技術(shù)的發(fā)展,近年來(lái)也有一些基于HBase[11],MongoDB[12]等大數(shù)據(jù)平臺(tái)的研究.目前使用較多的時(shí)序數(shù)據(jù)庫(kù)有InfluxDB[13],OpenTSDB等,InfluxDB是一款使用Go語(yǔ)言開(kāi)發(fā)的時(shí)序數(shù)據(jù)庫(kù),主要使用基于Google的Bigtable[14]架構(gòu)的LSM tree[15]進(jìn)行數(shù)據(jù)存儲(chǔ),也是最為流行的一種工業(yè)時(shí)序數(shù)據(jù)庫(kù).OpenTSDB是基于Hbase的分布式可伸縮時(shí)序數(shù)據(jù)庫(kù),具有良好的分布式存儲(chǔ)優(yōu)勢(shì),易于列擴(kuò)展,是一款流行的開(kāi)源時(shí)序數(shù)據(jù)庫(kù).時(shí)序數(shù)據(jù)庫(kù)的使用彌補(bǔ)了關(guān)系型數(shù)據(jù)庫(kù)在面對(duì)時(shí)間序列數(shù)據(jù)存儲(chǔ)時(shí)在性能和穩(wěn)定性方面的劣勢(shì),優(yōu)化了存儲(chǔ)結(jié)構(gòu),使得數(shù)據(jù)的插入和查詢更加便捷.然而,通過(guò)對(duì)現(xiàn)有時(shí)序數(shù)據(jù)庫(kù)的對(duì)比發(fā)現(xiàn),當(dāng)前所使用的時(shí)序數(shù)據(jù)庫(kù)在單機(jī)上的數(shù)據(jù)寫(xiě)入速度停留在幾萬(wàn)條/s的級(jí)別.為此,本文通過(guò)深入研究OpenTSDB的數(shù)據(jù)通訊原理和存儲(chǔ)方式,提出了一種兩級(jí)緩存的方案,對(duì)寫(xiě)入速度進(jìn)行優(yōu)化.同時(shí),引入時(shí)序數(shù)據(jù)壓縮算法,在數(shù)據(jù)存儲(chǔ)效率方面進(jìn)一步提高性能.
OpenTSDB的關(guān)鍵字包含metric(測(cè)度)、timestamp(時(shí)間戳)、value(值)、tag(標(biāo)簽),其寫(xiě)入過(guò)程是將各關(guān)鍵字的值轉(zhuǎn)換成一條行記錄Rowkey(包含metric,tag和時(shí)間分區(qū)),調(diào)用Hbase的寫(xiě)入接口將Rowkey當(dāng)作行鍵值,時(shí)間偏移當(dāng)作列名,時(shí)序值當(dāng)作數(shù)據(jù)值寫(xiě)入數(shù)據(jù)庫(kù).OpenTSDB在啟動(dòng)時(shí)首先需要加載配置文件,之后初始化Netty對(duì)象生成一個(gè)HTTP服務(wù),用于接收HTTP請(qǐng)求,最后初始化TSDB對(duì)象進(jìn)行數(shù)據(jù)寫(xiě)入.
在面對(duì)海量數(shù)據(jù)時(shí),OpenTSDB有自己的壓縮策略:將Rowkey相同的一行多列的數(shù)據(jù)合并為一行一列數(shù)據(jù).具體做法是將同一個(gè)Rowkey對(duì)應(yīng)的所有列(時(shí)間偏移)和所有值(時(shí)間序列值)分別合并為一個(gè)數(shù)組進(jìn)行存儲(chǔ).因?yàn)樗袝r(shí)間偏移的長(zhǎng)度一樣,合并后的數(shù)組長(zhǎng)度除以單個(gè)時(shí)間偏移的長(zhǎng)度即可對(duì)合并后數(shù)據(jù)進(jìn)行切分,獲得單個(gè)時(shí)間偏移.對(duì)合并后的數(shù)據(jù)值做同樣操作也可以得到相應(yīng)的元素.通過(guò)將一行多列合并為一行一列,可以有效減少Rowkey的數(shù)量,提高數(shù)據(jù)的存儲(chǔ)效率.
OpenTSDB在構(gòu)建Rowkey的時(shí)候并不是直接使用原始值,而是將metric, timestamp, tagk, tagv分別用了一個(gè)3 B的uid做了替代,可以減少Rowkey的存儲(chǔ)空間.所以這里需要一個(gè)表來(lái)做uid和真實(shí)值之間的轉(zhuǎn)換,這個(gè)表就是tsdb-uid表.uid表中有兩個(gè)family,分別是uid-name的映射(name family)和name-uid的映射(uid family).另外還有一行特殊的數(shù)據(jù),就是uid已分配情況記錄表.tsdb-uid表會(huì)在執(zhí)行OpenTSDB創(chuàng)建表的腳本時(shí)創(chuàng)建.
通過(guò)對(duì)以上OpenTSDB的寫(xiě)入和壓縮方案的介紹可以看出,OpenTSDB還有很多需要進(jìn)行優(yōu)化的方面,其采用基于Netty[16]的Web服務(wù),會(huì)導(dǎo)致數(shù)據(jù)傳輸性能下降,同時(shí)OpenTSDB為保證線程安全,面對(duì)數(shù)據(jù)高速寫(xiě)入時(shí)異步機(jī)制會(huì)產(chǎn)生高度頻繁的數(shù)據(jù)壓棧操作,導(dǎo)致性能下降.在壓縮算法方面,OpenTSDB自帶的壓縮算法只是將源數(shù)據(jù)進(jìn)行了簡(jiǎn)單的合并操作,相比Gorilla壓縮算法將數(shù)據(jù)轉(zhuǎn)換為字節(jié)碼進(jìn)行存儲(chǔ),OpenTSDB的壓縮算法在壓縮效率上有明顯的不足,所以,會(huì)導(dǎo)致其空間利用率較低.在面對(duì)海量時(shí)序數(shù)據(jù)的存儲(chǔ)時(shí),針對(duì)OpenTSDB暴露出的在吞吐量和空間利用率方面的不足,本文設(shè)計(jì)了基于兩級(jí)緩存優(yōu)化與Gorilla壓縮算法的高效數(shù)據(jù)庫(kù)系統(tǒng).
為了提高寫(xiě)入效率和系統(tǒng)穩(wěn)定性,提出采用兩級(jí)緩存機(jī)制進(jìn)行數(shù)據(jù)存儲(chǔ)優(yōu)化.針對(duì)大量數(shù)據(jù)源并發(fā)寫(xiě)入對(duì)服務(wù)器資源占用問(wèn)題,提出基于消息網(wǎng)關(guān)的一級(jí)數(shù)據(jù)緩存機(jī)制.通過(guò)消息網(wǎng)關(guān)保證系統(tǒng)接受大量數(shù)據(jù)源傳來(lái)的數(shù)據(jù)之前對(duì)數(shù)據(jù)進(jìn)行臨時(shí)緩沖,減少網(wǎng)絡(luò)系統(tǒng)I/O數(shù)量,提高系統(tǒng)通訊效率.第二級(jí)緩存用于寫(xiě)入數(shù)據(jù)的批處理,在執(zhí)行數(shù)據(jù)寫(xiě)入前建立緩存區(qū),當(dāng)緩存區(qū)的數(shù)據(jù)達(dá)到一定量的時(shí)候進(jìn)行一次批量寫(xiě)入,以此節(jié)省因頻繁執(zhí)行寫(xiě)入操作帶來(lái)的磁盤(pán)索引消耗.
一級(jí)緩存建立在數(shù)據(jù)采集與時(shí)序數(shù)據(jù)庫(kù)之間,在做數(shù)據(jù)緩存的同時(shí)可以將數(shù)據(jù)源傳來(lái)的數(shù)據(jù)做格式轉(zhuǎn)化,將采用不同協(xié)議采集到的數(shù)據(jù)轉(zhuǎn)化為時(shí)序數(shù)據(jù)庫(kù)寫(xiě)入接口所接受的格式.一級(jí)緩存使用Flume[17]作為緩存器,F(xiàn)lume是一個(gè)提供緩存機(jī)制的日志處理工具,用于數(shù)據(jù)采集,并對(duì)數(shù)據(jù)做簡(jiǎn)單處理后轉(zhuǎn)發(fā)到指定接收端.Flume的每一個(gè)處理單元為一個(gè)Agent,其中包含數(shù)據(jù)源Source、緩存區(qū)Channel和輸出Sink.Source將單個(gè)或多個(gè)事件推入緩存區(qū)Channel中供Sink對(duì)數(shù)據(jù)做持久化處理,緩存區(qū)Channel大小可以通過(guò)配置文件進(jìn)行設(shè)定,Channel中的數(shù)據(jù)會(huì)保存到Sink完成對(duì)數(shù)據(jù)持久化操作,并將數(shù)據(jù)以固定的格式傳輸?shù)皆撓到y(tǒng)的寫(xiě)入接口.一級(jí)緩存的工作流程如圖1 所示.
圖1 一級(jí)緩存工作流程圖
在引入基于消息網(wǎng)關(guān)的數(shù)據(jù)緩存機(jī)制以后,可以避免收集到的所有數(shù)據(jù)一次性涌入數(shù)據(jù)庫(kù),OpenTSDB原有的Netty服務(wù)會(huì)因?yàn)楫惒秸{(diào)用產(chǎn)生的堆棧和壓棧操作導(dǎo)致高頻次的緩存,極其浪費(fèi)CPU資源.為此,本文提出建立TCP直連機(jī)制,建立消費(fèi)者-生產(chǎn)者模式的隊(duì)列機(jī)制,以此來(lái)最大程度地利用CPU和內(nèi)存資源.
二級(jí)緩存是在時(shí)序數(shù)據(jù)庫(kù)內(nèi)部,在數(shù)據(jù)接收與寫(xiě)入Hbase之間.當(dāng)有數(shù)據(jù)需要寫(xiě)入Hbase時(shí),若頻繁調(diào)用寫(xiě)入接口則會(huì)產(chǎn)生大量的磁盤(pán)索引消耗[18].本文提出在調(diào)用Hbase寫(xiě)入接口之前設(shè)立緩存區(qū),可以使數(shù)據(jù)進(jìn)行批量寫(xiě)入,當(dāng)數(shù)據(jù)條數(shù)不滿足設(shè)定的閾值時(shí),則會(huì)將數(shù)據(jù)存入緩存區(qū),等到緩存區(qū)內(nèi)數(shù)據(jù)達(dá)到一定條數(shù)時(shí),會(huì)進(jìn)行批量寫(xiě)入.若數(shù)據(jù)量較小無(wú)法達(dá)到緩存區(qū)閾值,則根據(jù)數(shù)據(jù)停留時(shí)間進(jìn)行強(qiáng)制性寫(xiě)入,以確保時(shí)序數(shù)據(jù)處理時(shí)的時(shí)效性.二級(jí)緩存工作流程如圖2 所示.
圖2 二級(jí)緩存工作流程圖
OpenTSDB當(dāng)前支持HBase作為其主要存儲(chǔ)后端,為了利用HBase的排序和區(qū)域分布,所有OpenTSDB數(shù)據(jù)點(diǎn)都存儲(chǔ)在一個(gè)表中(默認(rèn)情況下表名為tsdb),所有值都存儲(chǔ)在t列族中.OpenTSDB將metric,tags,timestamp屬于同一時(shí)間段內(nèi)的所有數(shù)據(jù)放到一個(gè)扇區(qū)中.傳統(tǒng)OpenTSDB只是根據(jù)metric將所有同一扇區(qū)中的數(shù)據(jù)合并存放,沒(méi)有進(jìn)行任何壓縮,導(dǎo)致數(shù)據(jù)寫(xiě)入后的壓縮比在4∶1左右.為此,針對(duì)時(shí)序數(shù)據(jù)的特點(diǎn),對(duì)時(shí)序數(shù)據(jù)提出壓縮后存儲(chǔ).
Gorilla壓縮算法使用單個(gè)字符串鍵識(shí)別時(shí)間序列,并依賴(lài)更高級(jí)別的工具來(lái)提取和識(shí)別時(shí)間序列的元數(shù)據(jù).算法的主要作用是對(duì)8 B的double類(lèi)型數(shù)據(jù)進(jìn)行壓縮,轉(zhuǎn)換為字節(jié)流,按照一定的格式不斷追加.Gorilla壓縮算法采用依據(jù)時(shí)間序列中數(shù)據(jù)點(diǎn)的壓縮策略,使得其壓縮過(guò)程中不必對(duì)整個(gè)時(shí)間序列進(jìn)行壓縮,可以節(jié)約大量的壓縮成本.Gorilla壓縮算法將時(shí)間序列的每個(gè)數(shù)據(jù)點(diǎn)表示為一對(duì)64 b的值,代表時(shí)間戳和當(dāng)時(shí)的值.時(shí)間戳和值分別使用關(guān)于時(shí)間序列之前值的信息進(jìn)行差異性存儲(chǔ)和壓縮.Gorilla壓縮算法將這個(gè)數(shù)據(jù)流壓縮成按時(shí)間劃分的塊,存儲(chǔ)在一個(gè)2 b 的報(bào)頭中,值以7位存儲(chǔ),總大小只有9 b.然后用一個(gè)2 b頭進(jìn)行編碼,編碼為有11個(gè)前導(dǎo)零、1個(gè)有意義的位和實(shí)際值.總共以14 b存儲(chǔ).相比于OpenTSDB的壓縮算法只改變數(shù)據(jù)格式進(jìn)行存儲(chǔ),Gorilla壓縮算法采用字節(jié)碼的壓縮方式可以實(shí)現(xiàn)更高的壓縮效率.Gorilla壓縮算法的壓縮流程如圖3 所示.其中Gorilla壓縮器的原理如圖4 所示.
圖3 Gorilla壓縮算法壓縮流程
圖4 Gorilla壓縮器原理[19]
為了在基于兩級(jí)緩存的高效時(shí)序數(shù)據(jù)庫(kù)系統(tǒng)中引入Gorilla壓縮機(jī)制,將同一扇區(qū)的數(shù)據(jù)進(jìn)行合并,使用Gorilla進(jìn)行壓縮再寫(xiě)入HBase.為區(qū)分Gorilla壓縮后的數(shù)據(jù)與未壓縮數(shù)據(jù),在OpenTSDB的Quantifier中加入標(biāo)志信息.為了讓加入壓縮機(jī)制的OpenTSDB能夠兼容原有數(shù)據(jù)格式,在SaltScanner類(lèi)子類(lèi)ScannerCB的call回調(diào)函數(shù)中對(duì)返回的塊數(shù)據(jù)進(jìn)行解壓替換處理.先判斷Quantifier中是否含有Gorilla的壓縮標(biāo)志,并根據(jù)壓縮情況采用Gorilla算法進(jìn)行解壓,將解壓后的數(shù)據(jù)重新返回到ScannerCB子類(lèi)的call回調(diào)函數(shù)中,以此實(shí)現(xiàn)對(duì)查詢結(jié)果的解壓.加入Gorilla壓縮算法后的OpenTSDB不僅提高了存儲(chǔ)效率,還完全兼容原有的寫(xiě)入與查詢方法.
實(shí)驗(yàn)對(duì)原OpenTSDB的寫(xiě)入速度做了測(cè)試,并與改進(jìn)后的時(shí)序數(shù)據(jù)庫(kù)系統(tǒng)的寫(xiě)入速度進(jìn)行對(duì)比測(cè)試.實(shí)驗(yàn)所用設(shè)備配置信息為:主頻:2.20 GHz,處理器:i7-8750H,內(nèi)存16.00GB,硬盤(pán):SSD固態(tài)硬盤(pán).
為驗(yàn)證本文所提出的時(shí)序數(shù)據(jù)庫(kù)系統(tǒng)在寫(xiě)入速度方面的改進(jìn)效果,對(duì)主要改進(jìn)步驟對(duì)寫(xiě)入速度的影響進(jìn)行實(shí)驗(yàn)測(cè)試.實(shí)驗(yàn)設(shè)置生成20個(gè)測(cè)試文件,其中每個(gè)文件中包含200萬(wàn)條數(shù)據(jù).寫(xiě)入過(guò)程中先根據(jù)線程個(gè)數(shù)將數(shù)據(jù)讀入內(nèi)存,之后進(jìn)行對(duì)應(yīng)線程的并發(fā)寫(xiě)入.原始OpenTSDB的寫(xiě)入速度和每一步優(yōu)化后的時(shí)序數(shù)據(jù)庫(kù)系統(tǒng)的寫(xiě)入速度如圖5 所示.
圖5 OpenTSDB寫(xiě)入速度對(duì)比
通過(guò)實(shí)驗(yàn)對(duì)比測(cè)試可以看出,相比于OpenTSDB的寫(xiě)入速度,建立兩級(jí)緩存機(jī)制的數(shù)據(jù)寫(xiě)入速度增加了近20倍,這是因?yàn)樵诿鎸?duì)大量數(shù)據(jù)時(shí),該系統(tǒng)中特有的二級(jí)緩存機(jī)制對(duì)數(shù)據(jù)進(jìn)行了批量寫(xiě)入,相比OpenTSDB,該系統(tǒng)對(duì)Hbase的寫(xiě)入接口調(diào)用次數(shù)更少,節(jié)約了大量的系統(tǒng)資源,同時(shí)將原來(lái)基于Netty的HTTP服務(wù)改為了基于Socket的TCP服務(wù)也會(huì)節(jié)約大量的系統(tǒng)資源,達(dá)到提高寫(xiě)入速度的目的[20].
OpenTSDB利用一種特殊的表結(jié)構(gòu)作為索引,將同一metric的數(shù)據(jù)按時(shí)間戳排列進(jìn)行合并存儲(chǔ),壓縮策略的核心是數(shù)據(jù)合并,其壓縮比在4:1左右.在引入Gorilla壓縮算法后,該系統(tǒng)的壓縮比達(dá)到了接近25∶1,Gorilla壓縮算法使用的策略是將原數(shù)據(jù)轉(zhuǎn)換為字節(jié)碼進(jìn)行存儲(chǔ),可以節(jié)省大量的存儲(chǔ)空間,在數(shù)據(jù)查詢時(shí)只需要將原字節(jié)碼轉(zhuǎn)換為相應(yīng)的數(shù)據(jù)即可.
壓縮比測(cè)試一共進(jìn)行了10輪,首先生成一批數(shù)據(jù),記錄數(shù)據(jù)文件的大小為a(MB),再記錄未寫(xiě)入數(shù)據(jù)前數(shù)據(jù)庫(kù)表結(jié)構(gòu)文件的大小b(MB)和寫(xiě)入數(shù)據(jù)以后數(shù)據(jù)庫(kù)表結(jié)構(gòu)文件的大小c(MB),設(shè)壓縮比為φ,則壓縮比
為保證寫(xiě)入環(huán)境一致,在每一次壓縮比測(cè)試過(guò)程中先對(duì)數(shù)據(jù)庫(kù)表做清空,所以b為常數(shù),經(jīng)測(cè)試b=0.002 507(MB).具體測(cè)試結(jié)果如表1 所示.
表1 壓縮比測(cè)試結(jié)果表
引入Gorilla壓縮算法后,在該系統(tǒng)的第二級(jí)緩存中,系統(tǒng)會(huì)對(duì)接收到的數(shù)據(jù)先打包為數(shù)據(jù)塊,當(dāng)數(shù)據(jù)塊的個(gè)數(shù)達(dá)到一定閾值時(shí)進(jìn)行一次批量寫(xiě)入,這樣就確保了數(shù)據(jù)寫(xiě)入Hbase的效率,使得調(diào)用Hbase寫(xiě)入接口的次數(shù)減少,節(jié)約因頻繁調(diào)用寫(xiě)入接口產(chǎn)生的大量的磁盤(pán)索引時(shí)間,在節(jié)約了系統(tǒng)資源的同時(shí)還會(huì)提高系統(tǒng)穩(wěn)定性.
本文通過(guò)對(duì)OpenTSDB的分析和研究,實(shí)現(xiàn)了一種基于兩級(jí)緩存的高速時(shí)序數(shù)據(jù)庫(kù)系統(tǒng).該系統(tǒng)應(yīng)用于數(shù)據(jù)源和Hbase之間,實(shí)現(xiàn)了時(shí)序數(shù)據(jù)的高性能寫(xiě)入和存儲(chǔ),其兩級(jí)緩存機(jī)制有效地解決了當(dāng)大量數(shù)據(jù)同時(shí)進(jìn)行存儲(chǔ)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)的效率問(wèn)題,引入的Gorilla壓縮算法解決了Hbase在數(shù)據(jù)存儲(chǔ)上的空間消耗量大的問(wèn)題,同時(shí)數(shù)據(jù)的批量寫(xiě)入也解決了OpenTSDB在數(shù)據(jù)存儲(chǔ)時(shí)頻繁調(diào)用Hbase寫(xiě)入接口造成的時(shí)間和系統(tǒng)資源損耗問(wèn)題.該系統(tǒng)的使用極大地提高了時(shí)序數(shù)據(jù)存儲(chǔ)的穩(wěn)定性和并發(fā)性,為解決工業(yè)時(shí)序數(shù)據(jù)的存儲(chǔ)和分析提供了一種新的可靠的方法.