杜 楚,彭會湘,陳 勇
(中國電子科技集團(tuán)公司第五十四研究所,河北 石家莊 050081)
以文檔結(jié)構(gòu)存儲海量衛(wèi)星遙測數(shù)據(jù)
杜 楚,彭會湘,陳 勇
(中國電子科技集團(tuán)公司第五十四研究所,河北 石家莊 050081)
通過對衛(wèi)星遙測數(shù)據(jù)的分析與挖掘,可以有效地進(jìn)行衛(wèi)星故障診斷、衛(wèi)星參數(shù)異常變化預(yù)測以及提升衛(wèi)星運(yùn)行的可靠性。針對無法在海量衛(wèi)星遙測數(shù)據(jù)中進(jìn)行高效儲存、檢索的問題,提出了利用NoSQL數(shù)據(jù)庫MongoDB以文檔的結(jié)構(gòu)形式存儲衛(wèi)星遙測數(shù)據(jù)。實(shí)驗(yàn)結(jié)果表明,相對于傳統(tǒng)的SQL數(shù)據(jù)庫,此方法可以有效地減少數(shù)據(jù)冗余并提高查詢效率。
衛(wèi)星遙測數(shù)據(jù);NoSQL數(shù)據(jù)庫;MongoDB;文檔存儲結(jié)構(gòu)
衛(wèi)星遙測數(shù)據(jù)是掌握衛(wèi)星在軌運(yùn)行狀態(tài)的重要手段,每個衛(wèi)星的遙測數(shù)據(jù)都包含電流、電壓和溫度等上千個參數(shù),這些參數(shù)的模擬量或數(shù)字量可以反映出衛(wèi)星的工作狀態(tài)或空間環(huán)境狀態(tài)[1]。因此對衛(wèi)星遙測數(shù)據(jù)的分析以及數(shù)據(jù)挖掘工作,對衛(wèi)星異常檢測、故障檢測以及壽命預(yù)測等研究具有重要意義[2]。衛(wèi)星遙測數(shù)據(jù)密度大、涉及的參數(shù)范圍廣[3],而目前對衛(wèi)星遙測數(shù)據(jù)的存儲多基于傳統(tǒng)的關(guān)系數(shù)據(jù)庫(RBDMS),這種存儲方式的數(shù)據(jù)冗余大、查詢效率低,嚴(yán)重影響了后續(xù)對衛(wèi)星遙測數(shù)據(jù)的分析與數(shù)據(jù)挖掘工作,因此需要一種新的存儲方式來解決這些問題。根據(jù)衛(wèi)星遙測數(shù)據(jù)的特點(diǎn),設(shè)計(jì)了一種以時間為索引的文檔結(jié)構(gòu),將遙測數(shù)據(jù)以文檔的形式存儲在NoSQL數(shù)據(jù)庫(非關(guān)系數(shù)據(jù)庫)MongoDB中,有效地解決了關(guān)系數(shù)據(jù)庫存儲衛(wèi)星遙測數(shù)據(jù)冗余過大、查詢效率低的問題。
1.1 NoSQL數(shù)據(jù)庫
NoSQL數(shù)據(jù)庫是非關(guān)系型數(shù)據(jù)庫系統(tǒng)的總稱,是指不使用SQL語言的數(shù)據(jù)庫,這是其與傳統(tǒng)RBDMS最明顯的不同[4]。在大數(shù)據(jù)時代的背景下,面對數(shù)據(jù)量、分析量以及數(shù)據(jù)種類快速增長的現(xiàn)狀,傳統(tǒng)的RDBMS性能瓶頸頻繁出現(xiàn),單機(jī)的處理能力已經(jīng)無法滿足日益增長的數(shù)據(jù)處理需求,無論縱向擴(kuò)展或是向外擴(kuò)展都面臨較多的限制與較高的技術(shù)成本[5]。NoSQL數(shù)據(jù)庫作為新興數(shù)據(jù)庫系統(tǒng),由于其具有處理海量數(shù)據(jù)的能力、非關(guān)系型、分布式、開源和橫向擴(kuò)展等特點(diǎn),受到各大IT公司的追捧。相對于RDBMS,NoSQL數(shù)據(jù)庫在海量數(shù)據(jù)存取上具有巨大的性能優(yōu)勢。NoSQL數(shù)據(jù)庫根據(jù)其存儲模型的區(qū)別,可以分為鍵值模型、列式模型、面向文檔的模型以及圖形模型[6],而MongoDB數(shù)據(jù)庫是屬于面向文檔的NoSQL數(shù)據(jù)庫[7]。
1.2 MongoDB數(shù)據(jù)庫
MongoDB是一個高性能、開源、可擴(kuò)展的文檔型數(shù)據(jù)庫。MongoDB的文檔的存儲模型是一種介于鍵值存儲模型與關(guān)系數(shù)據(jù)庫表之間的存儲模型,由數(shù)據(jù)庫(database)、集合(collection)和文檔(document)組成,與RDBMS的結(jié)構(gòu)有簡單的對應(yīng)關(guān)系,如圖1所示。MongoDB中的文檔采用類似于JSON語言的BSON語言,是一種理想的數(shù)據(jù)交換語言[8]。BSON以鍵值對的形式存儲每一個集合中的文檔,每個文檔有一個字符串類型可以唯一地對其進(jìn)行標(biāo)識,該唯一標(biāo)識的屬性為“_id”[9]。其查詢語言類似于面向?qū)ο蟮牟樵冋Z言,可以實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,且支持對數(shù)據(jù)建立索引[10]。
圖1 MongoDB與RDBMS數(shù)據(jù)庫結(jié)構(gòu)對應(yīng)關(guān)系
MongoDB的基本構(gòu)架是建立在Mongos、Shard、Config Server和Replica Set四類組件之上[11]:① Mongos是數(shù)據(jù)庫集群請求的入口,所有的請求都通過Mongos進(jìn)行協(xié)調(diào),它負(fù)責(zé)把對應(yīng)的數(shù)據(jù)請求轉(zhuǎn)發(fā)到對應(yīng)的Shard服務(wù)器上;② Shard是分片,單個節(jié)點(diǎn)處理能力有限,分布式存儲環(huán)境下采用分片機(jī)制可以將一個完整的數(shù)據(jù)按照一定的順序進(jìn)行分割,分別存儲到不同的分片中,數(shù)據(jù)讀寫在多個節(jié)點(diǎn)上同時進(jìn)行,以提高數(shù)據(jù)存取速度;③ Config Server是配置服務(wù)器,存儲所有數(shù)據(jù)庫元信息(路由、分片)的重要配置信息,Mongos第1次啟動或者關(guān)掉重啟就會從Config Server加載配置信息,此后如果配置服務(wù)器信息變化會通知到所有的Mongos更新自己的狀態(tài);④ Replica Set是副本集,由分布在不同機(jī)器上的一組Mongod進(jìn)程組成,通常一組包括3臺Mongod進(jìn)程,其中有1臺是主(primary)節(jié)點(diǎn),另外2臺是從(secondary)節(jié)點(diǎn),它們之間遵循主從模式開展工作。
一個雙分片三備份的MongoDB組織結(jié)構(gòu)如圖2所示。其中,Mongos進(jìn)程是整個數(shù)據(jù)庫的入口與請求轉(zhuǎn)發(fā)路由;3個Config是服務(wù)器的配置信息;Shard11、Shard12和Shard13這3個進(jìn)程組成一個副本集,提供分片1的功能,分片1保存著所有數(shù)據(jù)中一半的數(shù)據(jù),而Shard11、Shard12和Shard13這3個分本集數(shù)據(jù)內(nèi)容相同;同理,Shard21、Shard22和Shard23這3個進(jìn)程組成一個副本集,提供分片2的功能。
圖2 MongoDB數(shù)據(jù)庫組織結(jié)構(gòu)
衛(wèi)星遙測數(shù)據(jù)在關(guān)系數(shù)據(jù)庫中以記錄的方式存儲,每一條記錄代表一個時刻產(chǎn)生的一個參數(shù)的數(shù)值及其相關(guān)信息,包括:ID、參數(shù)編號(CSBH)、處理結(jié)果(CLJG)、衛(wèi)星代號(WXDH)、地面站代號(DMZDH)、超限標(biāo)志(CXBZ)和數(shù)據(jù)時間(SJSJ)。若在同一時刻產(chǎn)生了6個參數(shù)的數(shù)據(jù),那么這些數(shù)據(jù)在關(guān)系數(shù)據(jù)庫表中的存儲形式如表1所示。
表1 衛(wèi)星遙測數(shù)據(jù)在關(guān)系數(shù)據(jù)庫中的存儲方式
從表1中可以看出,WXDH、DMZDH和SJSJ這3個字段的信息為冗余存儲,隨著衛(wèi)星遙測數(shù)據(jù)的不斷產(chǎn)生,數(shù)據(jù)表的記錄數(shù)也快速增長,致使查詢操作緩慢,制約了對衛(wèi)星遙測數(shù)據(jù)的分析以及數(shù)據(jù)挖掘工作。
將同樣的數(shù)據(jù)以文檔的形式存入MongoDB則需要依據(jù)衛(wèi)星遙測數(shù)據(jù)的特點(diǎn),設(shè)計(jì)合適的文檔結(jié)構(gòu),達(dá)到在減少數(shù)據(jù)冗余的同時記錄完整數(shù)據(jù)的目的。在MongoDB的文檔結(jié)構(gòu)中,“_id”是唯一標(biāo)識該文檔的屬性,將數(shù)據(jù)時間作為文檔的“_id”數(shù)據(jù)項(xiàng)表示該文檔,就形成了以數(shù)據(jù)時間為索引的文檔。衛(wèi)星代號、地面站代號和此時刻記錄的每一個衛(wèi)星參數(shù)都作為文檔的數(shù)據(jù)項(xiàng)保存在文檔內(nèi),而衛(wèi)星參數(shù)的其他信息,如處理結(jié)果和超限標(biāo)志等信息則作為衛(wèi)星參數(shù)的嵌套數(shù)據(jù)項(xiàng)保存。依據(jù)此設(shè)計(jì)將表1中的6條數(shù)據(jù)寫成文檔,如下所示:
{
“_id”:“24-10月-10 12.32.14.205000 下午”,
“WXDH”:“XX”,
“DMZDH”:“YY”,
“01”:{ “ID”:6237,
“CLJG”:1.2,
“CXBZ”:0},
…
“06”:{ “ID”:6242, “CLJG”:2.98, “CXBZ”:1}
}
文檔完整地記錄了6個參數(shù)數(shù)據(jù)及其相關(guān)信息,且沒有數(shù)據(jù)冗余存儲。同時,文檔在語義上所表達(dá)的意義為:“該時刻衛(wèi)星產(chǎn)生的所有參數(shù)數(shù)據(jù)及其相關(guān)信息”。
3.1 實(shí)驗(yàn)環(huán)境
實(shí)驗(yàn)環(huán)境如表2所示。
表2 實(shí)驗(yàn)環(huán)境
MongoDB部署在3臺臺式機(jī)組成的集群上,部署模式采用兩分片三副本集的方式;Oracle數(shù)據(jù)庫是技術(shù)成熟、應(yīng)用廣泛的數(shù)據(jù)庫系統(tǒng),作為本文實(shí)驗(yàn)的對比數(shù)據(jù)庫。對比實(shí)驗(yàn)1的數(shù)據(jù)為同一時間段內(nèi)同一衛(wèi)星產(chǎn)生的遙測數(shù)據(jù),數(shù)據(jù)在Oracle數(shù)據(jù)庫中存儲的記錄數(shù)為6 100萬條,在MongoDB中對應(yīng)的文檔數(shù)為810萬個;對比實(shí)驗(yàn)2的數(shù)據(jù)是在實(shí)驗(yàn)1的基礎(chǔ)上擴(kuò)大了時間范圍,數(shù)據(jù)在Oracle數(shù)據(jù)庫中存儲的記錄數(shù)為1.22億條,在MongoDB中對應(yīng)的文檔數(shù)為1 620萬個。
3.2 對比實(shí)驗(yàn)
由于衛(wèi)星遙測數(shù)據(jù)記錄的是衛(wèi)星的運(yùn)行狀態(tài),數(shù)據(jù)不會發(fā)生更改,因此對比試驗(yàn)著重于2個存儲模式在查詢上的效率對比。實(shí)驗(yàn)逐漸增加查詢的復(fù)雜程度,計(jì)時由發(fā)起查詢命令開始至返回結(jié)果集為止。查詢語句的限制條件分為4種:限定參數(shù)、限定參數(shù)與值域、限定參數(shù)與時間范圍,以及限定參數(shù)、時間范圍與值域。返回結(jié)果分為4種:以處理結(jié)果字段排序、以時間字段排序、返回最大處理結(jié)果和返回最小處理結(jié)果。因此,每個對比實(shí)驗(yàn)形成16組測試,在均建立索引的條件下分別測試文檔存儲與記錄存儲2種模式,對比實(shí)驗(yàn)結(jié)果如圖3和圖4所示。
圖3 對比實(shí)驗(yàn)1結(jié)果
圖4 對比實(shí)驗(yàn)2結(jié)果
圖3和圖4中縱軸代表語句執(zhí)行的時間,從對比實(shí)驗(yàn)結(jié)果中可以得出:在查詢測試中, MongoDB中以文檔存儲的模式的效率大幅領(lǐng)先Oracle中以記錄存儲的模式;對比實(shí)驗(yàn)2在數(shù)據(jù)量增長1倍的情況下,文檔存儲對數(shù)據(jù)量的增長不敏感,而記錄存儲受數(shù)據(jù)量影響較大。
簡述了衛(wèi)星遙測數(shù)據(jù)在保障衛(wèi)星正常運(yùn)行等方面的重要作用,指出了現(xiàn)有的關(guān)系數(shù)據(jù)庫中以記錄方式存儲海量衛(wèi)星遙測數(shù)據(jù)的數(shù)據(jù)冗余以及查詢效率問題嚴(yán)重制約了衛(wèi)星遙測數(shù)據(jù)的分析與數(shù)據(jù)挖掘工作。設(shè)計(jì)了一個文檔結(jié)構(gòu)存儲衛(wèi)星遙測數(shù)據(jù),并將同樣的數(shù)據(jù)分別以文檔與記錄的方式存儲,基于MongoDB數(shù)據(jù)庫與Oracle數(shù)據(jù)庫進(jìn)行對比實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,以文檔存儲的模式在查詢效率上大幅領(lǐng)先以記錄方式存儲的模式,證明了以文檔方式存儲海量衛(wèi)星遙測數(shù)據(jù)可以有效地減少數(shù)據(jù)冗余并提高查詢效率。同時,MongoDB數(shù)據(jù)庫兩分片三備份的模式不需要額外代價管理維護(hù)負(fù)載平衡與數(shù)據(jù)備份。
[1] 董 房,劉 洋.一種衛(wèi)星遙測在線狀態(tài)監(jiān)測及分析系統(tǒng)的設(shè)計(jì)[J].電子科學(xué)技術(shù),2015,2(5):542-546.
[2] 劉海芳.航天衛(wèi)星遙測數(shù)據(jù)管理與應(yīng)用系統(tǒng)設(shè)計(jì)過程控制方法研究[J].計(jì)算機(jī)測量與控制,2015,23(2):443-445.
[3] 楊 亭,常 霞.衛(wèi)星遙測數(shù)據(jù)處理軟件的Excel VBA實(shí)現(xiàn)[J].計(jì)算機(jī)測量與控制,2014,22(8):2 677-2 691.
[4] 白長清,劉 敏.MongoDB在氣象傳感器數(shù)據(jù)處理中的應(yīng)用[J].軟件,2015,36(11):34-37.
[5] 李馮筱,羅高松.NoSQL理論體系及應(yīng)用[J].電信科學(xué),2012(12):23-30.
[6] 李 青.基于NoSQL的大數(shù)據(jù)處理研究[D].西安:西安電子科技大學(xué),2014.
[7] 席曉筱,詹舒波.MongoDB在呼叫中心系統(tǒng)中的應(yīng)用[J].軟件,2012,33(11):116-117.
[8] 梁 海.MongoDB數(shù)據(jù)庫中Sharding技術(shù)應(yīng)用研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2014,24(7):60-62.
[9] 賀建英.大數(shù)據(jù)下MongoDB數(shù)據(jù)庫檔案文檔存儲去重研究[J].現(xiàn)代電子技術(shù),2015,38(16):51-55.
[10] 張 剛,孫 涌.基于MongoDB的BESIII分布式計(jì)算記賬系統(tǒng)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2015,32(9):62-67.
[11] 夏秀峰,曾 喆.PDM數(shù)據(jù)向MongoDB遷移的設(shè)計(jì)實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī),2016,2(2):87-92.
杜 楚 男,(1987—),博士,工程師。主要研究方向:航天地面應(yīng)用。
彭會湘 男,(1973—),研究員。主要研究方向:航天地面應(yīng)用、地理信息系統(tǒng)。
Massive Satellite Telemetry Data Storage Based on Document Structure
DU Chu,PENG Hui-xiang,CHEN Yong
(The54thResearchInstituteofCETC,ShijiazhuangHebei050081,China)
The satellite fault diagnosis,satellite parameter abnormal change forecasting and satellite reliability improvement can be effectively performed based on analysis and mining of satellite telemetry data.It is difficult to implement high-efficiency storage and retrieval of massive satellite telemetry data.For solving this problem,this paper proposes a method,which uses NoSQL database MongoDB to store satellite telemetry data based on document structure.The experiment results show this method can effectively decrease data redundancy and improve inquiry efficiency compared with SQL database.
satellite telemetry data;NoSQL database;MongoDB;document storage structure
10.3969/j.issn.1003-3106.2017.01.11
杜 楚,彭會湘,陳 勇.以文檔結(jié)構(gòu)存儲海量衛(wèi)星遙測數(shù)據(jù)[J].無線電工程,2017,47(1):46-48,75.
2016-11-02
國家部委基金資助項(xiàng)目。
V55
A
1003-3106(2017)01-0046-03