盛文婷,付國慶
(新疆農(nóng)業(yè)大學(xué) 科學(xué)技術(shù)學(xué)院,新疆 烏魯木齊 830000)
時(shí)間序列數(shù)據(jù)是按時(shí)間進(jìn)行排序的一種數(shù)據(jù),目前在各個(gè)領(lǐng)域中都有著相應(yīng)的應(yīng)用,而隨著數(shù)據(jù)量的不斷增多,人們正處在一個(gè)時(shí)間序列數(shù)據(jù)的世界中。傳統(tǒng)的數(shù)據(jù)處理方法一般都是針對(duì)靜態(tài)的數(shù)據(jù)。而目前的數(shù)據(jù)表現(xiàn)出數(shù)據(jù)量較大、變化較快且呈現(xiàn)出動(dòng)態(tài)化的特征,因此傳統(tǒng)的方法已經(jīng)不能有效地實(shí)現(xiàn)對(duì)數(shù)據(jù)的處理和存儲(chǔ)。本文結(jié)合MaxCompute大數(shù)據(jù)處理技術(shù)對(duì)時(shí)間序列數(shù)據(jù)進(jìn)行處理,便于發(fā)現(xiàn)時(shí)間序列中有價(jià)值的信息,進(jìn)而轉(zhuǎn)換成所需要的信息。
時(shí)間序列數(shù)據(jù)帶有一定的時(shí)間戳,同時(shí)數(shù)據(jù)量大,在相同的時(shí)間內(nèi)數(shù)據(jù)比較接近,并具有存儲(chǔ)后很難進(jìn)行修改等特點(diǎn)。
海量時(shí)間序列的一個(gè)最典型的特征是時(shí)間性,每一個(gè)數(shù)據(jù)都有一個(gè)時(shí)間區(qū)和一個(gè)時(shí)間點(diǎn),同一數(shù)據(jù)源具有先后順序和時(shí)間屬性。在某個(gè)特定的空間和特定的時(shí)間里,數(shù)據(jù)值是唯一的。典型的時(shí)序數(shù)據(jù)如表1所示的Dodgers數(shù)據(jù)集,表中涵蓋了時(shí)間戳和相應(yīng)的值。這個(gè)數(shù)據(jù)信息來源于洛杉磯北101高速公路所通過車輛的數(shù)據(jù),以5 min為時(shí)間節(jié)點(diǎn)[1]。
表1 Dodgers 時(shí)序數(shù)據(jù)
海量時(shí)間數(shù)據(jù)之所以是“海量”,主要是隨著時(shí)間的推移數(shù)據(jù)不斷出現(xiàn),量越來越大,并呈現(xiàn)出動(dòng)態(tài)化的特點(diǎn),是靜態(tài)數(shù)據(jù)所不能比擬的。同時(shí),如今的信息數(shù)字化技術(shù)發(fā)展越來越快,數(shù)據(jù)采集的類型也越來越多,相應(yīng)的數(shù)據(jù)源也呈現(xiàn)出快速上升的趨勢(shì)。此外,隨著數(shù)據(jù)源挖掘技術(shù)的提高和監(jiān)控技術(shù)的進(jìn)步,存儲(chǔ)設(shè)備和傳感器等設(shè)備價(jià)格不斷降低,時(shí)序數(shù)據(jù)的增長速度呈現(xiàn)爆發(fā)式的特征,且數(shù)量巨大。隨著時(shí)間的推移,數(shù)據(jù)量越來越大,原來的舊數(shù)據(jù)也沒有刪除,對(duì)于快速檢測(cè)到正確的數(shù)據(jù)是一個(gè)重大的考驗(yàn)。例如,F(xiàn)acebook公司每天需要處理大量的用戶在平臺(tái)上分享的內(nèi)容,每天的數(shù)量高達(dá)25億條,超過500 TB。
由于海量時(shí)間數(shù)據(jù)的總量比較龐大,人們不可能對(duì)所有的數(shù)據(jù)進(jìn)行關(guān)注。從實(shí)際情況來看,用戶往往關(guān)注一些在特定時(shí)間段的數(shù)據(jù),或者一定時(shí)間內(nèi)的最大值、最小值和均值,造成了對(duì)數(shù)據(jù)關(guān)注的局部性。例如在查詢監(jiān)控系統(tǒng)時(shí),人們往往會(huì)選取某個(gè)時(shí)間段的數(shù)據(jù),或者只關(guān)注某些數(shù)據(jù)源。在檢索時(shí)序數(shù)據(jù)時(shí),只需查詢到某個(gè)數(shù)據(jù)源在某個(gè)時(shí)段的數(shù)據(jù),或者是某個(gè)時(shí)間段內(nèi)特定數(shù)據(jù)源的數(shù)據(jù)。例如,查詢表1的Dodgers數(shù)據(jù),只需要統(tǒng)計(jì)出最高值,就可以判斷出哪個(gè)時(shí)間段的交通比較擁堵,從而采取必要的措施。
海量時(shí)序數(shù)據(jù)一般都有著固定的采樣頻率。在表1中,系統(tǒng)每5 min對(duì)車流量的值進(jìn)行保存。也有少量的時(shí)序數(shù)據(jù)是會(huì)跟著行為的變化而發(fā)生變化,在股票市場(chǎng)中,股民的購買行為對(duì)股票價(jià)格的變化有著直接的影響,因此需要分析它們的行為搜索數(shù)據(jù)。
海量時(shí)序數(shù)據(jù)有一個(gè)重要的特點(diǎn)是數(shù)據(jù)在寫入后一般是不能修改的。時(shí)序數(shù)據(jù)一般是根據(jù)時(shí)間記錄的每個(gè)階段的數(shù)據(jù),這些數(shù)據(jù)產(chǎn)生的時(shí)間具有唯一性的特征,且都是發(fā)生在過去的時(shí)間里,這也是時(shí)序數(shù)據(jù)與其他數(shù)據(jù)的不同之處。由于數(shù)據(jù)的不變性,可以采用壓縮算法對(duì)數(shù)據(jù)進(jìn)行壓縮,數(shù)據(jù)也不會(huì)發(fā)生變化。在數(shù)據(jù)壓縮時(shí),不需要對(duì)整個(gè)數(shù)據(jù)信息進(jìn)行壓縮,只需要對(duì)直接訪問的數(shù)據(jù)進(jìn)行壓縮,這樣在解壓時(shí)只需要提取部分需要的數(shù)據(jù),不會(huì)因?yàn)橐鈮捍罅繑?shù)據(jù)而影響讀取速率,同時(shí)通過數(shù)據(jù)壓縮還可以提高存儲(chǔ)速率。
對(duì)海量時(shí)間序列數(shù)據(jù)進(jìn)行分析,需要有一套規(guī)范的流程,明確分析的目的,收集數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行加工,并展示數(shù)據(jù)分析結(jié)果。其中,數(shù)據(jù)分析環(huán)節(jié)主要使用SQL命令,或者采用機(jī)器學(xué)習(xí)方法進(jìn)行數(shù)據(jù)挖掘。而數(shù)據(jù)分析的結(jié)果可以通過報(bào)表的形式呈現(xiàn)出來,也可以通過可視化手段進(jìn)行呈現(xiàn)。圖1為時(shí)間序列數(shù)據(jù)分析處理整體流程。
在圖1中,原始的時(shí)間序列數(shù)據(jù)流被收集之后,通常會(huì)采用二進(jìn)制文件方式存儲(chǔ)在本地文件系統(tǒng)中,同時(shí)再經(jīng)過本地程序?qū)崿F(xiàn)格式的轉(zhuǎn)換,轉(zhuǎn)換為時(shí)間序列文本,如txt文檔并將數(shù)據(jù)上傳到MaxCompute。在數(shù)據(jù)上傳前,文本的格式設(shè)計(jì)要與MaxCompute表結(jié)構(gòu)相匹配,匹配格式如圖2所示。數(shù)據(jù)加工則是對(duì)本地存儲(chǔ)的數(shù)據(jù)進(jìn)行加工,采用排列熵的算法進(jìn)行數(shù)據(jù)分析,最后對(duì)結(jié)果進(jìn)行展示。
圖1 時(shí)間序列數(shù)據(jù)分析整體流程
圖2是文本文件和MaxCompute表結(jié)構(gòu)的匹配情況,表的操作可以使用SQL DDL語句方式完成,通過Tunnel工具完成數(shù)據(jù)的上傳,運(yùn)用編程框架實(shí)現(xiàn)了并行化的排列熵算法。本地Eclipse開發(fā)環(huán)境需要對(duì)算法進(jìn)行調(diào)試,再將jar包導(dǎo)出,導(dǎo)出的資源再上傳到MaxCompute,運(yùn)用jar命令執(zhí)行。算法中輸入的數(shù)據(jù)都是來源于MaxCompute表,同時(shí)進(jìn)行排列熵算法后,所輸出的結(jié)果,也會(huì)再進(jìn)入到MaxCompute中。由MaxCompute提供的SQL接口可以直接讀取表中的數(shù)據(jù),在后續(xù)計(jì)算中可以進(jìn)行展示和應(yīng)用。
圖2 文本文件和表的格式匹配
海量時(shí)序數(shù)據(jù)量比較龐大,但是對(duì)數(shù)據(jù)查詢的過程則較為簡(jiǎn)單。而傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的查詢功能比較復(fù)雜,其嚴(yán)格遵循了ACID原則,即這種數(shù)據(jù)庫在程序上比較復(fù)雜,有些功能很多時(shí)候是用不到的。因此有必要結(jié)合時(shí)序數(shù)據(jù)的特征,設(shè)計(jì)出便捷合理的存儲(chǔ)結(jié)構(gòu),以提高存儲(chǔ)和檢索的效率。通過設(shè)計(jì)合理的存儲(chǔ)格式,可以加快檢索的速度。數(shù)據(jù)組織形式采用堆表型的方式能夠大大增加寫入的速度,存儲(chǔ)結(jié)構(gòu)采用列式的存儲(chǔ)結(jié)構(gòu)可以改善壓縮的效果[2]。
監(jiān)測(cè)系統(tǒng)對(duì)各個(gè)時(shí)間點(diǎn)進(jìn)行檢測(cè),獲得的數(shù)據(jù),就是時(shí)間序列數(shù)據(jù),較大的時(shí)間數(shù)據(jù)可以用h或d來表示,ms或μs則可用來表示較小的時(shí)間數(shù)據(jù)。以往的時(shí)間序列數(shù)據(jù)存儲(chǔ)數(shù)據(jù)庫主要是關(guān)系型數(shù)據(jù)庫、文本文件數(shù)據(jù)庫以及實(shí)時(shí)數(shù)據(jù)庫。最常用的方式是文本文件存儲(chǔ)方式。在大數(shù)據(jù)下,分布式的文件系統(tǒng)較為常用,能夠?qū)崿F(xiàn)對(duì)大文本的存儲(chǔ),如Hadoop分布式文件系統(tǒng)以及HDFS(Hadoop Distributed File System)等。關(guān)系型的數(shù)據(jù)庫容量較小,存儲(chǔ)的數(shù)據(jù)有限,且擴(kuò)展性不好。而實(shí)時(shí)數(shù)據(jù)庫適合監(jiān)測(cè)數(shù)據(jù)的實(shí)時(shí)寫入,運(yùn)用壓縮算法對(duì)數(shù)據(jù)進(jìn)行壓縮,解決存儲(chǔ)容量不足的問題。
阿里云開發(fā)的數(shù)據(jù)庫產(chǎn)品MaxCompute,使用二維表完成對(duì)用戶層的數(shù)據(jù)存儲(chǔ),而分布式文件系統(tǒng)實(shí)現(xiàn)對(duì)底層數(shù)據(jù)的存儲(chǔ)。
表是MaxCompute存儲(chǔ)數(shù)據(jù)的基本單位,所以對(duì)表模式的設(shè)計(jì)是進(jìn)行數(shù)據(jù)存儲(chǔ)的前提。文本形式的波形信號(hào)數(shù)據(jù)采用按行存儲(chǔ)的方式,即每行存儲(chǔ)1條時(shí)間序列數(shù)據(jù),用于排列熵計(jì)算。由于數(shù)據(jù)來源以及計(jì)算方式不同,各條時(shí)間序列的長度是不一樣的。使用文本方式進(jìn)行存儲(chǔ)時(shí),1條數(shù)據(jù)占據(jù)1行的空間,這1條數(shù)據(jù)的長度是不受限制的。但MaxCompute表的寬度則受到一定的限制,小于1 024列。如果某個(gè)數(shù)據(jù)長度大于1 024列,則不能進(jìn)行按行存儲(chǔ)[3]。
本文使用按列存儲(chǔ)模式存儲(chǔ)時(shí)間序列數(shù)據(jù)。排列熵計(jì)算過程中產(chǎn)生的重構(gòu)向量使用按行存儲(chǔ)的模式,如圖3所示。首先需要將行存儲(chǔ)的文件進(jìn)行格式化,形成按列存儲(chǔ)的文件。列存儲(chǔ)文件需要與MaxCompute上的原始時(shí)間序列數(shù)據(jù)表的列進(jìn)行匹配,才能執(zhí)行Tunnel數(shù)據(jù)上傳操作。如表2所示,表中的ID字段代表不同的時(shí)間序列信號(hào)標(biāo)識(shí)。對(duì)時(shí)間序列數(shù)據(jù)執(zhí)行排列熵計(jì)算的步驟1是向量重構(gòu),重構(gòu)后的結(jié)果數(shù)據(jù)存儲(chǔ)在MaxCompute的重構(gòu)向量表中。重構(gòu)向量的維數(shù)M通常小于1 024,因此可以進(jìn)行有效的數(shù)據(jù)存儲(chǔ)。根據(jù)計(jì)算維度需求的不同,需要分別創(chuàng)建多張重構(gòu)向量表。以三維存儲(chǔ)表為例,創(chuàng)建存儲(chǔ)表的SQL,DDL描述如表3所示。
圖3 時(shí)間序列數(shù)據(jù)的存儲(chǔ)模式
表2 數(shù)據(jù)上傳操作
表3 三維重構(gòu)向量表DDL描述
在表3中,創(chuàng)建了包含4個(gè)字段的表d3vector,分別是ID、d1、d2、d3。其中,ID作為第一個(gè)字段,是對(duì)時(shí)間序列數(shù)據(jù)的一種標(biāo)識(shí),通過這樣的標(biāo)識(shí)可以對(duì)不同的排列熵計(jì)算方法進(jìn)行區(qū)分;d1,d2,d3是代表的是標(biāo)識(shí)上的三個(gè)維度值。排列熵的計(jì)算結(jié)果是在MaxCompute表完成存儲(chǔ),其中包含ID標(biāo)識(shí)和排列熵結(jié)果這兩列內(nèi)容[4]。此外,排列熵計(jì)算結(jié)果并不是完全不能移動(dòng)的,可以通過數(shù)據(jù)集成服務(wù)將其導(dǎo)出,以便在其他存儲(chǔ)系統(tǒng)進(jìn)行存儲(chǔ)??梢灾苯釉贛axCompute數(shù)據(jù)庫上對(duì)數(shù)據(jù)進(jìn)行分析,也可以在導(dǎo)出的系型數(shù)據(jù)庫、非關(guān)系型數(shù)據(jù)庫(NoSQL)中對(duì)數(shù)據(jù)進(jìn)行分析,以便完成相應(yīng)的數(shù)據(jù)處理業(yè)務(wù)。
時(shí)間序列數(shù)據(jù)存在于社會(huì)生產(chǎn)和生活的各個(gè)領(lǐng)域,且數(shù)據(jù)量越來越大,變化較快。因此,要想對(duì)數(shù)據(jù)進(jìn)行有效的處理,就要把握好海量時(shí)間序列數(shù)據(jù)中的特征,如時(shí)間屬性、數(shù)據(jù)量龐大特征、數(shù)據(jù)關(guān)注的局部性、采樣頻率固定以及數(shù)據(jù)的不變性。同時(shí),建立一套規(guī)范的分析流程,對(duì)時(shí)間序列數(shù)據(jù)進(jìn)行分析和挖掘,以不斷滿足社會(huì)發(fā)展的需要。