摘 要:隨著智慧城市的發(fā)展,物聯(lián)網(wǎng)和云計(jì)算技術(shù)首當(dāng)其沖,預(yù)測(cè)到2020年世界上將有200億到2000億的物聯(lián)網(wǎng)終端設(shè)備接入到網(wǎng)絡(luò)。物聯(lián)網(wǎng)平臺(tái)承擔(dān)著大量的物聯(lián)網(wǎng)設(shè)備終端的高頻度數(shù)據(jù)上報(bào)、異常預(yù)警以及后端大數(shù)據(jù)分析和挖掘功能。如何確保物聯(lián)網(wǎng)平臺(tái)數(shù)據(jù)存儲(chǔ)的穩(wěn)定,數(shù)據(jù)處理的高效是當(dāng)前的技術(shù)瓶頸,那么選取一種優(yōu)質(zhì)、高效數(shù)據(jù)庫(kù)技術(shù)就顯得刻不容緩。本文主要結(jié)合我司實(shí)際項(xiàng)目研發(fā),簡(jiǎn)單的探討了當(dāng)前環(huán)境下基于NB-IoT物聯(lián)網(wǎng)平臺(tái)的數(shù)據(jù)庫(kù)建設(shè)。
關(guān)鍵字:物聯(lián)網(wǎng) NB-IoT 平臺(tái) 數(shù)據(jù)庫(kù) 時(shí)序數(shù)據(jù)庫(kù)
隨著智慧城市的發(fā)展,物聯(lián)網(wǎng)(IoT)、云計(jì)算(Cloud Computing)是當(dāng)下最具有發(fā)展前景的技術(shù)趨勢(shì)。全球各大科技公司預(yù)測(cè)到2020年世界將有大約200億至2000億的物聯(lián)網(wǎng)設(shè)備(ABI預(yù)測(cè)有300億、Gartner預(yù)測(cè)有260億、Oracle預(yù)測(cè)有500億、Intel預(yù)測(cè)有2000億)。NB-IoT(Narrow Band Internet of Things,基于蜂窩的窄帶物聯(lián)網(wǎng))是IoT領(lǐng)域的一個(gè)新興技術(shù),是物聯(lián)網(wǎng)中的一個(gè)重要分支。它支持低功耗終端設(shè)備在廣域網(wǎng)的蜂窩數(shù)據(jù)連接,具有廣覆蓋、大容量、低功耗、低成本等優(yōu)勢(shì)。
NB-IoT在水務(wù)行業(yè)的使用中,最顯著的特點(diǎn)就是廣覆蓋和大容量。在同樣的頻段下,NB-IoT比現(xiàn)有的網(wǎng)絡(luò)增益20dB,其覆蓋面積擴(kuò)大100倍;其具有海量連接的支撐能力,一個(gè)扇區(qū)能夠支持10萬(wàn)個(gè)連接。如中國(guó)電信部署了31萬(wàn)個(gè)基站,那么可以接入的物聯(lián)網(wǎng)終端設(shè)備數(shù)將高達(dá)310億個(gè),這還不包括移動(dòng)和聯(lián)通的基站部署。
如此多的聯(lián)網(wǎng)設(shè)備產(chǎn)生的數(shù)據(jù)都是動(dòng)態(tài)數(shù)據(jù),相比于傳統(tǒng)的(靜態(tài))數(shù)據(jù)在管理要復(fù)雜得多,而最大的技術(shù)瓶頸在于“數(shù)據(jù)量”的大幅提升和“實(shí)時(shí)處理”性能要求上。在物聯(lián)網(wǎng)系統(tǒng)的發(fā)展過(guò)程中,傳感器單元的不斷增加;數(shù)據(jù)采樣的頻率加快;數(shù)據(jù)保存的時(shí)間也越來(lái)越久;因此產(chǎn)生的數(shù)據(jù)量時(shí)非常龐大的,動(dòng)輒將是幾十億、上百億、千億的規(guī)模;而且數(shù)據(jù)產(chǎn)生的頻度也非常高,隨著數(shù)量的上漲以每秒十萬(wàn)、百萬(wàn)級(jí)別增長(zhǎng);同時(shí)傳感器單元上報(bào)的數(shù)據(jù)很多時(shí)候是用于異常、預(yù)警、趨勢(shì)預(yù)測(cè)等,要求能根據(jù)異常預(yù)警及時(shí)反饋?zhàn)龀鲰憫?yīng)。因此對(duì)上報(bào)的數(shù)據(jù)在實(shí)時(shí)處理上有較高的性能響應(yīng)要求。
那么在數(shù)據(jù)量劇增以及對(duì)數(shù)據(jù)處理能力要求非常高的前提下,我們對(duì)NB-IoT的數(shù)據(jù)庫(kù)存儲(chǔ)和響應(yīng)服務(wù)可以嘗試提出如下要求:
寫入實(shí)時(shí)性:
1) 數(shù)據(jù)寫入數(shù)據(jù)庫(kù),立即能被第三方應(yīng)用程序使用;
2) 支持?jǐn)?shù)據(jù)Ad-Hoc 點(diǎn)對(duì)點(diǎn)的查詢和分析響應(yīng);
讀寫高響應(yīng)性:
1) 因?yàn)橹饕獮閿?shù)據(jù)上報(bào),與傳統(tǒng)數(shù)據(jù)庫(kù)和NoSql數(shù)據(jù)庫(kù)正好相反,對(duì)數(shù)據(jù)庫(kù)的寫操作大大多于讀操作,但是讀和寫都要求高速響應(yīng);
2) 數(shù)據(jù)主要以新增追加為主,少量進(jìn)行更新操作;
3) 數(shù)據(jù)新增追加主要按照時(shí)間寫入為主,但是也要有時(shí)間順序錯(cuò)亂時(shí)的容錯(cuò)處理機(jī)制;
4) 按照時(shí)間順序建立索引機(jī)制;可以按照時(shí)間索引進(jìn)行刪除,也可以在給定時(shí)間段索引范圍內(nèi),根據(jù)指定字段進(jìn)行精確、模糊查詢;
5) 讀寫并發(fā)要求響應(yīng)性能高,尤其時(shí)讀寫同時(shí)并發(fā),以及讀并發(fā);
6) 海量數(shù)據(jù)的存儲(chǔ)支持(T-P 級(jí)別);
檢索和分析便捷性:
1) 支持過(guò)濾(Filtering,條件范圍過(guò)濾數(shù)據(jù)集)、投影(Projection,快速獲取索引中屬性,減少和數(shù)據(jù)庫(kù)的交互)和分面(Faceted Search,垂直分類搜索)檢索分析;
2) 支持聚合分析(Aggregation Analysis),即多維度分組呈現(xiàn)可分析性數(shù)據(jù);
3) 支持關(guān)聯(lián)分析(Relational Analysis),即通過(guò)類似關(guān)系型數(shù)據(jù)JOIN關(guān)鍵字關(guān)聯(lián)多個(gè)數(shù)據(jù)進(jìn)行數(shù)據(jù)呈現(xiàn);
4) 通過(guò)以上方式實(shí)現(xiàn)數(shù)據(jù)挖掘(Data Mining),即通過(guò)分類(Classification)、估計(jì)(Estimation)、預(yù)測(cè)(Prediction)、關(guān)聯(lián)(Association)、聚類合(Clustering)以及復(fù)雜數(shù)據(jù)類型挖掘(文檔、Web、圖形圖像、視頻、音頻等非結(jié)構(gòu)化數(shù)據(jù))來(lái)挖掘信息背后的可利用性;
高可用和高可擴(kuò)展性:
1) 高可用和高可擴(kuò)展性也是傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)以及非關(guān)系型數(shù)據(jù)庫(kù)解決單點(diǎn)故障,確保數(shù)據(jù)庫(kù)穩(wěn)定運(yùn)行的瓶頸技術(shù)點(diǎn)之一。即要確保數(shù)據(jù)庫(kù)可以7x24小時(shí)在線穩(wěn)定運(yùn)行,而且在資源不足的情況下可以按需要隨時(shí)在線增加節(jié)點(diǎn)以實(shí)現(xiàn)水平擴(kuò)展;
目前我們所使用的數(shù)據(jù)庫(kù)技術(shù)分為關(guān)系型數(shù)據(jù)庫(kù)(Relational DataBase,如:SQL Server、Oracle、MySQL)和非關(guān)系型數(shù)據(jù)庫(kù)(Not Only SQL,如:Redis、MongoDb、CouchDB、Oracle BDB)。關(guān)系型數(shù)據(jù)庫(kù)具備復(fù)雜的檢索分析能力,但是其受限于數(shù)據(jù)庫(kù)方式導(dǎo)致其讀寫速度不足;非關(guān)系型數(shù)據(jù)庫(kù)具有良好的性能和可擴(kuò)展性,讀寫速度很快,但是其受限于數(shù)據(jù)庫(kù)的列存儲(chǔ)方式導(dǎo)致檢索和分析能力不足;
由此可見(jiàn),目前傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)與非關(guān)系型數(shù)據(jù)庫(kù)等都無(wú)法滿足NB-IoT系統(tǒng)平臺(tái)對(duì)數(shù)據(jù)庫(kù)的要求。
那么是否有一種數(shù)據(jù)庫(kù)能滿足我們的NB-IoT系統(tǒng)平臺(tái)對(duì)數(shù)據(jù)庫(kù)的要求?答案是有的,而且是有成熟的數(shù)據(jù)庫(kù)能滿足我們的要求,它叫做:時(shí)序數(shù)據(jù)庫(kù)。
時(shí)序數(shù)據(jù)庫(kù)(Time Series DataBase,TSDB,如InfluxDb,OpenTSDB,Kairosdb),全稱為時(shí)間序列數(shù)據(jù)庫(kù)。維基百科的解釋是:A time series database(TSDB) is a software system that is optimized for handling time series data, arrays of num bersindexed by time ( a datetime or a datetime range). 簡(jiǎn)單翻譯過(guò)來(lái)就是“時(shí)序數(shù)據(jù)庫(kù)是一種用來(lái)存儲(chǔ)時(shí)序列(time-series)數(shù)據(jù)并以時(shí)間(時(shí)間點(diǎn)或時(shí)間區(qū)間范圍)來(lái)建立索引的軟件”。它擁有了關(guān)系型數(shù)據(jù)庫(kù)的檢索和分析的關(guān)聯(lián)規(guī)則優(yōu)勢(shì)和非系型數(shù)據(jù)庫(kù)讀寫響應(yīng)快的列存儲(chǔ)方式兩大優(yōu)勢(shì)。
目前已經(jīng)有了許多開(kāi)源的或商用的時(shí)序數(shù)據(jù)庫(kù),我們就以我司在用的OpenTSDB為例,來(lái)簡(jiǎn)單介紹:
OpenTSDB是基于HBase存儲(chǔ)時(shí)間序列數(shù)據(jù)的一個(gè)開(kāi)源數(shù)據(jù)庫(kù)。
存儲(chǔ)到OpenTSDB的數(shù)據(jù),是以metric為單位的,metric是一個(gè)監(jiān)測(cè)項(xiàng),譬如假設(shè),我們采集一個(gè)水表的使用情況,發(fā)現(xiàn)該水表在凌晨3:00的時(shí)候,水表的一組上報(bào)數(shù)據(jù):流經(jīng)水表的瞬時(shí)流量是0.05立方米/時(shí)、正轉(zhuǎn)累計(jì)流量是132.55立方米、電壓是3.5伏特、安裝點(diǎn)信號(hào)強(qiáng)度是88、累計(jì)運(yùn)行時(shí)間是466小時(shí)等這些metric;
結(jié)合以上數(shù)據(jù),我們來(lái)看看OpenTSDB存儲(chǔ)的核心概念:
1) Metric:監(jiān)控單元,也就是我們通常理解的監(jiān)控項(xiàng);比如上面監(jiān)控的一組水表數(shù)據(jù);
2) Tags:標(biāo)簽項(xiàng),在時(shí)序數(shù)據(jù)庫(kù)中,Tags由tagk和tagv組成,類似key-value關(guān)系一一對(duì)應(yīng)。標(biāo)簽是用來(lái)描述Metric的,譬如我們上面標(biāo)記的瞬時(shí)流量、正轉(zhuǎn)累計(jì)流量、電壓、信號(hào)、累計(jì)運(yùn)行時(shí)間等都是一個(gè)個(gè)的標(biāo)簽項(xiàng);
3) Value:表示一個(gè)Metric的實(shí)際值,譬如上面的一組數(shù)據(jù);但是對(duì)應(yīng)的存儲(chǔ)可能是多列或者以特定方式存儲(chǔ);
4) Timestamp:時(shí)間戳,用來(lái)描述存儲(chǔ)的Value值上報(bào)的時(shí)間節(jié)點(diǎn),譬如上面描述的3:00;一般是一個(gè)Unix的時(shí)間戳,通常使用秒級(jí)別以上精度(比如influxdb里面是nano秒),具體以實(shí)際監(jiān)控項(xiàng)的業(yè)務(wù)要求來(lái)確定。比如水表行業(yè)可能使用時(shí)間戳間隔為每5分鐘等;
5) Data Point:某一個(gè)Metric在某一個(gè)時(shí)間節(jié)點(diǎn)的值。Data Point包括一下部分:Metric、Tags、Value、Timestamp,上面描述的水表在凌晨3:00上報(bào)了一組數(shù)據(jù),就是一個(gè)Data Point;將每個(gè)時(shí)間節(jié)點(diǎn)上報(bào)的數(shù)據(jù)都存儲(chǔ)到OpenTSDB數(shù)據(jù)庫(kù),那就是無(wú)數(shù)個(gè)Data Point,最后進(jìn)行數(shù)據(jù)分析和挖掘;
我們了解了OpenTSDB時(shí)序數(shù)據(jù)庫(kù)的核心概念了,那么我們來(lái)看一下它是如何存儲(chǔ)的。比如一個(gè)Data Point(即一塊水表凌晨3:00上報(bào)的一組數(shù)據(jù))的核心概念項(xiàng)為如下:
Metric(name):100716120001(水表編號(hào))
Timestamp:1234567890(表示一個(gè)Unix時(shí)間戳)
Value:133.55
Tags:instanflow=0.05,battery=3.5,rssi=88,runhour=466
因?yàn)镺penTSDB是基于HBase存儲(chǔ)的,所以存儲(chǔ)會(huì)有兩張表,tsdb和tsdb-uid,一張用來(lái)保存數(shù)據(jù),一張用來(lái)保存一些metric、tagk、tagv的映射關(guān)系,兩個(gè)表之間通過(guò)唯一關(guān)鍵標(biāo)識(shí)字RowKey進(jìn)行弱關(guān)聯(lián)。
為了數(shù)據(jù)分析和數(shù)據(jù)挖掘,一般我們?cè)O(shè)計(jì)一條數(shù)據(jù)的RowKey,會(huì)包含至少一個(gè)指標(biāo)和一個(gè)標(biāo)簽,這樣的數(shù)據(jù)才是有意義的,利于檢索和分析的,所以我們RowKey設(shè)計(jì)一般為如下格式為最簡(jiǎn)單的設(shè)計(jì):
RowKey:metric|timestamp|tagk1|tagv1|[tagkN|tagvN],所以上述數(shù)據(jù)的RowKey設(shè)計(jì)為:
RowKey:
100716120001 |1234567890|instanflow|0.05|battery|3.5|rssi|88|runhour|466
針對(duì)水表行業(yè)的NB-IoT水表上報(bào)數(shù)據(jù)頻率,為了減少存儲(chǔ)空間,針對(duì)同一天作為時(shí)間前綴,而且對(duì)于變化頻度大的tagk標(biāo)簽屬性我們作為value存儲(chǔ),那么我們的RowKey設(shè)計(jì)為:
RowKey:metric|timestamp
RowKey:100716120001|20180507030000 + 偏移量
參見(jiàn)下圖的tsdb表的存儲(chǔ)設(shè)計(jì):
為了能提高數(shù)據(jù)分析性能和業(yè)務(wù)要求,我們針對(duì)RowKey也會(huì)做雙向映射,故數(shù)據(jù)存儲(chǔ)在tsdb_uid 的表設(shè)計(jì)為:
從以上的核心概念介紹以及針對(duì)水表上報(bào)數(shù)據(jù)的表存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)來(lái)看,因?yàn)閿?shù)據(jù)的存儲(chǔ)是基于HBase的,所以與NoSQL的列存儲(chǔ)類似,但是它有因?yàn)榭梢宰灾鞯臄U(kuò)展很多的列,又朝著關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì)貼近,同時(shí)OpenTSDB又不需要受到范式的限制,所以說(shuō)針對(duì)物聯(lián)網(wǎng)(IoT)的定時(shí)上報(bào)大量數(shù)據(jù)的業(yè)務(wù)來(lái)說(shuō),時(shí)序數(shù)據(jù)庫(kù)技術(shù)是完全符合和適用于我們的NB-IoT的物聯(lián)網(wǎng)平臺(tái)對(duì)后臺(tái)數(shù)據(jù)庫(kù)的要求。
總結(jié)
本文簡(jiǎn)單的討論了基于NB-IoT的物聯(lián)網(wǎng)平臺(tái)在數(shù)據(jù)庫(kù)方面的需求,提出了時(shí)序數(shù)據(jù)庫(kù)的技術(shù)特點(diǎn),并針對(duì)其中一種時(shí)序數(shù)據(jù)庫(kù)(OpenTSDB)進(jìn)行了簡(jiǎn)單的介紹和對(duì)于水表數(shù)據(jù)上報(bào)業(yè)務(wù)在使用上的初步設(shè)計(jì)。目前我司正在研究和使用OpenTSDB作為NB-IoT平臺(tái)的數(shù)據(jù)存儲(chǔ)技術(shù),接下來(lái),還有比如數(shù)據(jù)壓縮、拘束均衡性、查詢性能、設(shè)計(jì)方案的優(yōu)缺點(diǎn)以及數(shù)據(jù)分析等很多方面的評(píng)估和研究。希望更多的有興趣水務(wù)同行和技術(shù)同行和我們一起共同探討和研究。
參考文獻(xiàn):
[1] 趙華.時(shí)間序列數(shù)據(jù)分析:R軟件應(yīng)用.清華大學(xué)出版社,2016.
[2] 郭寶,張陽(yáng),顧安,劉毅. 萬(wàn)物互聯(lián)NB-IoT關(guān)鍵技術(shù)與應(yīng)用實(shí)踐. 機(jī)械工業(yè)出版社. 2017.
[3] [美]Jean-Marc,Spaggiari.Kevin. HBase 應(yīng)用架構(gòu). 中國(guó)電力出版社,2017.
[4] 黃健宏. Redis設(shè)計(jì)與實(shí)現(xiàn).機(jī)械工業(yè)出版社,2017.
[5] 黃曉君,周志斌. 淺談遠(yuǎn)傳水表系統(tǒng). 科技信息學(xué)術(shù)版,2008(16):260+262.
作者簡(jiǎn)介:
張景(1986-12),男(漢族),湖南岳陽(yáng)人,本科學(xué)歷,畢業(yè)于湖南文理學(xué)院學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)。工作單位:湖南常德牌水表制造有限公司,系統(tǒng)分析師。電話:0736-2996799。電子信箱:279109777@qq.com