陳旭飛,于鳳芹,欽道理(.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無錫 4;.銳泰節(jié)能系統(tǒng)科學(xué)有限公司,江蘇 無錫 435)
異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)轉(zhuǎn)換方法設(shè)計(jì)與實(shí)現(xiàn)*
陳旭飛1,于鳳芹1,欽道理2
(1.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無錫 214122;2.銳泰節(jié)能系統(tǒng)科學(xué)有限公司,江蘇 無錫 214135)
針對(duì)傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)處理海量數(shù)據(jù)效率低下的問題,提出了一種基于鍵值數(shù)據(jù)庫(kù)Level DB與傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)MySQL協(xié)同存儲(chǔ)管理海量數(shù)據(jù)的方案,以及兩種數(shù)據(jù)庫(kù)之間數(shù)據(jù)轉(zhuǎn)換方法。首先對(duì)兩種數(shù)據(jù)庫(kù)特點(diǎn)進(jìn)行了分析,提出了一種異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)存儲(chǔ)策略,并在此基礎(chǔ)上介紹了Level DB到MySQL的數(shù)據(jù)轉(zhuǎn)移流程以及基于實(shí)用性的異構(gòu)數(shù)據(jù)轉(zhuǎn)換方法,最后給出了數(shù)據(jù)轉(zhuǎn)換應(yīng)用示例展示,結(jié)果表明,該方法具備良好的可行性和實(shí)用價(jià)值。
異構(gòu);能耗數(shù)據(jù);存儲(chǔ);數(shù)據(jù)轉(zhuǎn)換
隨著社會(huì)節(jié)能環(huán)保意識(shí)的不斷加強(qiáng),能耗監(jiān)管網(wǎng)關(guān)被廣泛地使用在學(xué)校、企業(yè)等各種大型公共建筑中,其運(yùn)行的核心內(nèi)容就是能耗數(shù)據(jù)[1]。由于能源消耗的激增,采用單一的傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)處理能耗數(shù)據(jù)存在很大的局限性,因此可以采用多個(gè)數(shù)據(jù)庫(kù)協(xié)同管理的異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)的處理方案。支持?jǐn)?shù)據(jù)管理的數(shù)據(jù)庫(kù)產(chǎn)品呈現(xiàn)多樣化,比較常見的大體分為兩類,分別是鍵值數(shù)據(jù)庫(kù)和關(guān)系數(shù)據(jù)庫(kù),兩者都有各自的優(yōu)缺點(diǎn)。
鍵值存儲(chǔ)模型簡(jiǎn)單,具有高吞吐、海量存儲(chǔ)、較強(qiáng)的擴(kuò)展性等特點(diǎn)[2],可以作為實(shí)時(shí)數(shù)據(jù)庫(kù),快速地存儲(chǔ)由感知層上報(bào)的能耗數(shù)據(jù)。關(guān)系數(shù)據(jù)庫(kù)因?yàn)榇嫒÷窂綄?duì)用戶透明、數(shù)據(jù)獨(dú)立性好等特點(diǎn),為數(shù)據(jù)庫(kù)用戶提供了對(duì)結(jié)構(gòu)化數(shù)據(jù)的簡(jiǎn)單、健壯、靈活、高效的組織和管理方法[3],適合設(shè)計(jì)網(wǎng)關(guān)平臺(tái)數(shù)據(jù)庫(kù),向用戶提供能耗數(shù)據(jù)的頁(yè)面展示,并能查詢歷史數(shù)據(jù)記錄。
將鍵值數(shù)據(jù)庫(kù)與關(guān)系數(shù)據(jù)庫(kù)相結(jié)合,構(gòu)建能耗監(jiān)管網(wǎng)關(guān)數(shù)據(jù)管理系統(tǒng),可以發(fā)揮各自的優(yōu)勢(shì),實(shí)現(xiàn)對(duì)能耗數(shù)據(jù)的高效存儲(chǔ)和訪問。本文所述建筑能耗監(jiān)管網(wǎng)關(guān)采用鍵值數(shù)據(jù)庫(kù)Level DB加關(guān)系數(shù)據(jù)庫(kù)MySQL的數(shù)據(jù)存儲(chǔ)方案,由于兩種數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)模型不同,在實(shí)際運(yùn)行環(huán)境中,數(shù)據(jù)在兩者之間進(jìn)行交流和轉(zhuǎn)換,實(shí)現(xiàn)數(shù)據(jù)的共享,是網(wǎng)關(guān)系統(tǒng)運(yùn)行不可避免的問題[4]。在敘述完數(shù)據(jù)庫(kù)系統(tǒng)架構(gòu)設(shè)計(jì)后,具體介紹異構(gòu)數(shù)據(jù)轉(zhuǎn)換方法。
圖1所示為數(shù)據(jù)系統(tǒng)整體架構(gòu)。
圖1 數(shù)據(jù)庫(kù)系統(tǒng)整體架構(gòu)
采集的能耗數(shù)據(jù)通過數(shù)據(jù)上報(bào)模板自動(dòng)并實(shí)時(shí)上傳給實(shí)時(shí)數(shù)據(jù)庫(kù),以保證數(shù)據(jù)得到有效的處理和支持高效率的查詢服務(wù)。數(shù)據(jù)上報(bào)采取統(tǒng)一的JSON格式,實(shí)現(xiàn)數(shù)據(jù)組織、存儲(chǔ)及交換的一致性。
網(wǎng)關(guān)數(shù)據(jù)庫(kù)系統(tǒng)接收并存儲(chǔ)感知層上傳的能耗數(shù)據(jù),并對(duì)其進(jìn)行處理,具體設(shè)計(jì)分成鍵值數(shù)據(jù)庫(kù)和傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)兩部分。數(shù)據(jù)庫(kù)接收到數(shù)據(jù)后,先存儲(chǔ)數(shù)據(jù)至實(shí)時(shí)數(shù)據(jù)庫(kù)Level DB,按照業(yè)務(wù)需求將數(shù)據(jù)分別存儲(chǔ)在對(duì)應(yīng)的數(shù)據(jù)庫(kù)中,客戶端程序可以通過REST接口將數(shù)據(jù)上傳到頁(yè)面,實(shí)現(xiàn)對(duì)能耗數(shù)據(jù)的實(shí)時(shí)監(jiān)測(cè);同時(shí),后臺(tái)程序讀取JSON格式的實(shí)時(shí)數(shù)據(jù),進(jìn)行數(shù)據(jù)轉(zhuǎn)換,形成對(duì)應(yīng)的 CSV格式文件,批量存儲(chǔ)到 MySQL。所以,客戶端也可以通過SQL語(yǔ)言接口訪問傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)MySQL,查詢歷史數(shù)據(jù)記錄。
數(shù)據(jù)庫(kù)訪問接口集成了對(duì)能耗數(shù)據(jù)封裝的兩類接口:一類是標(biāo)準(zhǔn)結(jié)構(gòu)化查詢語(yǔ)言SQL接口,用于訪問關(guān)系型數(shù)據(jù)庫(kù) MySQL;另一類是用于訪問實(shí)時(shí)數(shù)據(jù)庫(kù)Level DB的 REST接口。REST實(shí)時(shí)數(shù)據(jù)接口通過對(duì)Level DB數(shù)據(jù)庫(kù)自帶的API進(jìn)行封裝,形成一個(gè)類似于關(guān)系數(shù)據(jù)庫(kù)對(duì)象關(guān)系映射模型的數(shù)據(jù)對(duì)象接口,隱藏了客戶端與不同類型數(shù)據(jù)庫(kù)之間連接細(xì)節(jié),簡(jiǎn)化了用戶對(duì)數(shù)據(jù)的讀寫和管理流程。
數(shù)據(jù)的傳輸與存儲(chǔ)效率是能耗監(jiān)管網(wǎng)關(guān)非常重要的指標(biāo),選擇一種合適的數(shù)據(jù)格式顯得至關(guān)重要。JSON作為一種輕量級(jí)的數(shù)據(jù)格式,獨(dú)立于編程語(yǔ)言和開發(fā)平臺(tái),并且易于閱讀和編碼[5]。相比于傳統(tǒng)的 XML文件格式,JSON格式屏蔽了前者解析文件時(shí)的復(fù)雜性,縮短數(shù)據(jù)傳輸和存儲(chǔ)時(shí)間[6]。這些特征使 JSON成為理想的數(shù)據(jù)交換語(yǔ)言,一般鍵值數(shù)據(jù)庫(kù)支持JSON作為應(yīng)用程序開發(fā)的數(shù)據(jù)載體[7]。因此本網(wǎng)關(guān)系統(tǒng)選擇 JSON格式作為傳輸媒介,將能耗數(shù)據(jù)實(shí)時(shí)存儲(chǔ)到鍵值數(shù)據(jù)庫(kù)Level DB,并向應(yīng)用層客戶端上報(bào)數(shù)據(jù)。
網(wǎng)關(guān)平臺(tái)數(shù)據(jù)庫(kù)基于關(guān)系數(shù)據(jù)庫(kù) MySQL設(shè)計(jì),數(shù)據(jù)的批量存儲(chǔ)采用CSV格式。這是一種用來存儲(chǔ)數(shù)據(jù)的純文本格式,一般用于傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)的讀寫。CSV格式良好,主流數(shù)據(jù)庫(kù)都支持該格式,非常有利于異構(gòu)數(shù)據(jù)遷移[8]。
能耗數(shù)據(jù)上傳并存儲(chǔ)至實(shí)時(shí)數(shù)據(jù)庫(kù)以后,需要轉(zhuǎn)移到平臺(tái)數(shù)據(jù)庫(kù)MySQL,以便用戶通過服務(wù)器訪問查詢數(shù)據(jù)記錄。圖2所示為能耗數(shù)據(jù)從實(shí)時(shí)數(shù)據(jù)庫(kù)Level DB導(dǎo)入MySQL的總體流程。
圖2 Level DB數(shù)據(jù)導(dǎo)入MySQL流程
整個(gè)過程包括以下4個(gè)步驟:
(1)導(dǎo)出實(shí)時(shí)數(shù)據(jù)表。能耗數(shù)據(jù)采集好后,從數(shù)據(jù)資源層上報(bào)并存儲(chǔ)到實(shí)時(shí)數(shù)據(jù)庫(kù) Level DB,第一步先從 Level DB中取出實(shí)時(shí)數(shù)據(jù),因?yàn)槭且訨SON格式存儲(chǔ)的,當(dāng)取出保存時(shí),就形成了JSON格式的數(shù)據(jù)文件。
(2)JOSN文件放到緩沖區(qū)。由于兩種數(shù)據(jù)庫(kù)的讀寫速度不同,為了使兩者工作銜接,在處理器中開辟一個(gè)緩沖區(qū)來臨時(shí)存放交換的數(shù)據(jù)文件,因此保存實(shí)時(shí)數(shù)據(jù)表的JSON文件被取出后,被存儲(chǔ)至緩沖區(qū)。
(3)數(shù)據(jù)轉(zhuǎn)換。這是數(shù)據(jù)轉(zhuǎn)移流程的核心。由于是在緩沖區(qū)完成數(shù)據(jù)轉(zhuǎn)換,在導(dǎo)入 MySQL前會(huì)判斷是否轉(zhuǎn)換成功,不會(huì)因?yàn)槌绦驁?zhí)行的滯后性導(dǎo)致系統(tǒng)運(yùn)行阻塞。轉(zhuǎn)換程序執(zhí)行以后,需要根據(jù)文件生成的時(shí)間判斷轉(zhuǎn)換是否成功。此部分具體的轉(zhuǎn)換程序在本文第3部分會(huì)詳細(xì)敘述。
(4)MySQL是關(guān)系數(shù)據(jù)庫(kù),采用SQL語(yǔ)句將CSV文件批量導(dǎo)入MySQL。由于JSON格式保存了字段的值,沒有值對(duì)應(yīng)的屬性信息,而數(shù)據(jù)在存入 MySQL前,需要根據(jù)這些值的屬性信息建立對(duì)應(yīng)的數(shù)據(jù)表。數(shù)據(jù)表結(jié)構(gòu)用于設(shè)置這些屬性信息,在CSV數(shù)據(jù)導(dǎo)入前通過它可以在MySQL中建立對(duì)應(yīng)的數(shù)據(jù)表,從而完成整個(gè)導(dǎo)入流程。文件結(jié)構(gòu)表如表1所示,其中Field欄是字段列名,Type欄中是數(shù)據(jù)類型,括號(hào)中數(shù)字表示給字段分配的字節(jié)數(shù),PRI表示主鍵,Default表示默認(rèn),NULL表示任何值都能保存。
表1 數(shù)據(jù)表結(jié)構(gòu)
3.1字段映射關(guān)系建立
建立異構(gòu)數(shù)據(jù)格式之間的字段映射關(guān)系是數(shù)據(jù)轉(zhuǎn)換的首要步驟,圖3所示為字段映射關(guān)系示意圖。圖中上半部分的表格為數(shù)據(jù)記錄的CSV格式,第一行為字段,第二、三、四行是字段內(nèi)容;圖的下半部分為 JSON
表1數(shù)據(jù)表結(jié)構(gòu)格式,字段和數(shù)值在雙引號(hào)中,中間用冒號(hào)隔開,以值對(duì)的形式表示,例如“NodeID”:“1001”,多個(gè)值對(duì)組成一組記錄,用大括號(hào)“{}”括起來的,每組記錄對(duì)應(yīng) CSV文件中每一行記錄。在進(jìn)行數(shù)據(jù)轉(zhuǎn)換前,根據(jù)已知格式文件中的字段建立另一種文件格式的模板。通過讀取CSV文件,執(zhí)行轉(zhuǎn)換程序,并將執(zhí)行結(jié)果插入到數(shù)據(jù)模板中的相應(yīng)位置,就可以得到相應(yīng)JSON文檔。
圖3 字段映射關(guān)系示意圖
3.2JSON文件轉(zhuǎn)換成CSV文件
轉(zhuǎn)換過程中,首先讀取JSON文件,再利用 push()函數(shù)將每組記錄存入臨時(shí)數(shù)組 arr[0],arr [2],...,arr[n],最后將各個(gè)臨時(shí)數(shù)組作為數(shù)據(jù)流導(dǎo)入CSV文件,每個(gè)數(shù)組arr[i]作為一行記錄,利用監(jiān)聽函數(shù)的記錄的導(dǎo)入記錄數(shù),判斷數(shù)據(jù)是否準(zhǔn)確導(dǎo)入 CSV文件,這樣就將JSON格式的數(shù)據(jù)轉(zhuǎn)換保存為CSV格式的文件。此轉(zhuǎn)換過程如圖4所示。
圖4 JSON文件到CSV文件轉(zhuǎn)換流程
數(shù)據(jù)轉(zhuǎn)換程序設(shè)計(jì)是異構(gòu)數(shù)據(jù)導(dǎo)入流程的核心部分,采用JavaScript語(yǔ)言作為數(shù)據(jù)轉(zhuǎn)換部分的編程語(yǔ)言,軟件環(huán)境采用在Linux系統(tǒng)中嵌入的 Node.js平臺(tái)。
將網(wǎng)關(guān)現(xiàn)場(chǎng)設(shè)備采集的數(shù)據(jù)存入實(shí)時(shí)數(shù)據(jù)庫(kù) Level DB并上報(bào)至平臺(tái)后,后臺(tái)程序通過該數(shù)據(jù)轉(zhuǎn)換方法將從實(shí)時(shí)數(shù)據(jù)庫(kù)取出的JSON格式數(shù)據(jù) (圖5所示為設(shè)備信息表的一部分)轉(zhuǎn)換成CSV格式后,批量存入關(guān)系數(shù)據(jù)庫(kù)MySQL。打開MySQL監(jiān)視器,鍵入查看命令 select*from DevInfo可以查看存入 MySQL的設(shè)備信息表 DevInfo。圖 6為 MySQL監(jiān)視器中設(shè)備信息表DevInfo截圖。
圖5 Level DB中JSON格式數(shù)據(jù)
圖6 MySQL監(jiān)視器截圖
本文提出了基于鍵值數(shù)據(jù)庫(kù) Level DB和關(guān)系數(shù)據(jù)庫(kù)MySQL協(xié)同存儲(chǔ)能耗數(shù)據(jù)的方案及其異構(gòu)數(shù)據(jù)存儲(chǔ)格式之間的轉(zhuǎn)換方法。兩種異構(gòu)數(shù)據(jù)庫(kù)數(shù)據(jù)結(jié)構(gòu)不同,后臺(tái)程序?qū)?shù)據(jù)從Level DB轉(zhuǎn)移到MySQL時(shí)調(diào)用數(shù)據(jù)轉(zhuǎn)換程序,可以實(shí)現(xiàn)兩者的無縫對(duì)接。本文提出的存儲(chǔ)方案和數(shù)據(jù)轉(zhuǎn)換方法已應(yīng)用于實(shí)際的能源監(jiān)測(cè)系統(tǒng)中且系統(tǒng)運(yùn)行良好,該方法具有一定的實(shí)用價(jià)值。
[1]曹洪波,陳揚(yáng).MySQL與 SQL Server數(shù)據(jù)轉(zhuǎn)換研究與實(shí)現(xiàn)[J].電腦開發(fā)與應(yīng)用,2010,23(4):31-32,36.
[2]周沫.Key value數(shù)據(jù)庫(kù)的發(fā)展與展望 [J].信息與電腦(理論版),2012(7):152-153.
[3]劉小春.分布式海量空間數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)研究[J].地礦測(cè)繪,2014,30(1):16-18,22.
[4]Li Ning,Xu Bin,Zhao Xin,et al.Database conversion based on relationship schema mapping[C].2011 International Conference on Internet Technology and Applications (iTAP),2011:1-5.[5]高靜,段會(huì)川.JSON數(shù)據(jù)傳輸效率研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(7):2267-2270.
[6]WEHNER P,PIBERGER C,GOHRINGER D.Using JSON to manage communication between services in the Internet of Things[C].2014 9th International Symposium on ReconfigurableandCommunication-CentricSystems-on-Chip (ReCoSoC),2014:1-4.
[7]Liu Zhenhua,HAMMERSCHMIDT B,MCMAHOND.JSONdata management-supporting schema-less development in RDBMS[C].Proceedings of the ACM SIGMOD International ConferenceonManagement of Data,2014:1247-1258.
[8]毛應(yīng)爽.EXCEL到mongoDB數(shù)據(jù)遷移解決方案[J].信息通信,2013(7):87-88.
The design and realization of the data conversion method in heterogeneous database system
Chen Xufei1,Yu Fengqin1,Qin Daoli2
(1.School of Internet of Things Engeneering,Jiangnan University,Wuxi 214122,China;2.Reatgreen Energy-saving SystemScience Co.,Ltd.,Wuxi 214135,China)
In consideration of the low efficiency of the traditional relational database when processing massive data,a plan based on key-value database Level DBand traditional relational database MySQL to store and manage the massive data was proposed.The data conversion method between the two databases was also proposed.After analyzing the characteristics of the two databases,a storage strategy based on heterogeneous database was proposed.Based on this strategy,the data transfer process from Level DB to MySQL was introduced,and heterogeneous data conversion method based on practice was presented.Finally,the applied example of data conversion was showed.The result shows that the data conversion method has great feasibility and practical value.
heterogeneous;the data of energy consumption;store;data conversion
TP311.1
A
1674-7720(2015)08-0094-03
2014-11-23)
陳旭飛(1988-),通信作者,男,碩士研究生,主要研究方向:嵌入式系統(tǒng)及機(jī)器人。E-mail:chenyxy@163.com。
于鳳芹(1962-),女,博士,教授,主要研究方向:基于物聯(lián)網(wǎng)的能耗感知系統(tǒng)研究與設(shè)計(jì)、語(yǔ)音和圖像等多模態(tài)信號(hào)分析與處理。
欽道理(1980-),男,碩士,軟件工程師,主要研究方向:嵌入式系統(tǒng)科學(xué)與節(jié)能。
2012 年度教育部-中國(guó)移動(dòng)科研基金項(xiàng)目(MCM20122013)