鄭 羽,陳廣柱,胡積寶
(1.安慶師范大學經(jīng)濟與管理學院,安徽安慶246133;2.池州交警支隊,安徽池州247100;3.安慶師范大學數(shù)理學院,安徽安慶246133)
物聯(lián)網(wǎng)發(fā)展快速,它越來越多地滲透到各個領(lǐng)域。作為物聯(lián)網(wǎng)終端的信息存儲,無線傳感器網(wǎng)絡在更大范圍內(nèi)傳播,傳輸?shù)男畔⒘恳苍絹碓酱骩1-2]。時間的積累和數(shù)據(jù)存儲量的增加會導致數(shù)據(jù)庫性能降低,系統(tǒng)不能在合理的時間內(nèi)滿足用戶的需求。因此,根據(jù)數(shù)據(jù)庫的實際需求,選擇適當?shù)姆椒▉砀纳朴脩舻拇鎯蜋z索效率變得非常重要?,F(xiàn)有的基于關(guān)系和對象模型的數(shù)據(jù)庫可以解決復雜數(shù)據(jù)的存儲問題,但是存儲和系統(tǒng)消耗的成本過大[3-4]。無線傳感器網(wǎng)絡對數(shù)據(jù)實時分析有很高的需求,需要建立區(qū)域存儲集群,每個區(qū)域都有獨立的數(shù)據(jù)存儲集群[5-6]。
在數(shù)據(jù)存儲器中,數(shù)據(jù)保存在分布式緩存系統(tǒng)中。分布式緩存系統(tǒng)的緩存條目以<鍵、值>的形式存在。它使用內(nèi)存緩存查詢的緩存技術(shù),以便暫時將數(shù)據(jù)庫內(nèi)存中第一次獲得的結(jié)果存儲起來。當用戶請求相同的內(nèi)存時,它可以直接讀取數(shù)據(jù)庫以便用戶重新使用,這樣既減少了請求的時間,又提高了系統(tǒng)的效率。Hadoop分布式文件系統(tǒng)適用于大規(guī)模數(shù)據(jù)集,能提供大吞吐量的數(shù)據(jù)訪問和高容錯性[7-8]。
Hadoop的分布式文件系統(tǒng)基于HBase數(shù)據(jù)存儲特定的優(yōu)化技術(shù),包含數(shù)據(jù)共享和數(shù)據(jù)分布兩個普通的優(yōu)化策略[9-10]。本文選擇后者,因為數(shù)據(jù)共享統(tǒng)一了所有類型數(shù)據(jù)的管理存儲,當一個隊列用于接受數(shù)據(jù)時,解決了擁塞問題,卻忽略了多源數(shù)據(jù)的不同模式,從而降低了輸入和數(shù)據(jù)流查詢的效率。本文在存儲優(yōu)化策略指導下,設(shè)計一個有效的實時存儲模型:實時的數(shù)據(jù)流會快速存儲到集群數(shù)據(jù)庫中以滿足用戶的多種需求。以文本形式存儲的歷史數(shù)據(jù)流將被遷移到高效、高穩(wěn)定性的HBase集群數(shù)據(jù)庫中。當存儲空間不夠、或者集群文本系統(tǒng)的存儲空間太大時,HBase數(shù)據(jù)集群有效且便捷地更新會有助于優(yōu)化數(shù)據(jù)空間。
為數(shù)據(jù)訪問預處理區(qū)域設(shè)計了多源異構(gòu)、海量、高速的數(shù)據(jù)存儲結(jié)構(gòu),該架構(gòu)包含3個部分:數(shù)據(jù)緩沖區(qū)域、數(shù)據(jù)調(diào)度區(qū)域和數(shù)據(jù)存儲區(qū)域,如圖1所示。
圖1 實時系統(tǒng)架構(gòu)
通過哈希方法將多元數(shù)據(jù)轉(zhuǎn)換隊列傳輸?shù)骄彌_區(qū)后,預處理區(qū)域就可以訪問了。為了提高分區(qū)后的數(shù)據(jù)傳輸速率,數(shù)據(jù)隊列存儲在鏈表結(jié)構(gòu)中。每個緩沖區(qū)中有三個隊列等待數(shù)據(jù)分割。圖2顯示的是多元緩沖區(qū)架構(gòu)。
面對每秒將近一百萬個高速數(shù)據(jù),系統(tǒng)的寫入緩沖速度被設(shè)置為6 MB/s。隊列完成后,通過窗口閾值調(diào)用HBase多線程,將數(shù)據(jù)發(fā)送到緩沖區(qū),從而使客戶端通過遠程過程執(zhí)行請求,并將數(shù)據(jù)發(fā)送到服務器進行永久存儲。
圖2 多元緩沖架構(gòu)
用戶可以在多個維度(行、列、數(shù)據(jù)版本)上過濾HBase特定存儲單元上的數(shù)據(jù),提高從表中檢索數(shù)據(jù)的效率。當發(fā)送大量數(shù)據(jù)時,HBase提供端點的協(xié)處理器,具有復雜代碼及不同分銷協(xié)議的服務器執(zhí)行計算任務,然后將結(jié)果返回到客戶端。與從數(shù)據(jù)服務器檢索數(shù)據(jù)的方法相比,該方法具有減少網(wǎng)絡傳輸壓力和客戶端計算量的優(yōu)點。
首先,考慮數(shù)據(jù)的壓縮比、壓縮率以及解壓速度等參數(shù),平衡I/O和CPU資源性能,群集配置是壓縮模式時,選擇更優(yōu)化的算法。其次,為了減少服務器上緩沖區(qū)的數(shù)據(jù)、客戶端內(nèi)存的消耗以及RPC的連接數(shù),設(shè)置HTable客戶端模式,以減少HBase和I/O頻繁的溝通。再次,基于一致性維護功能,如果從服務器端返回的數(shù)據(jù)量太大或者要訪問的數(shù)據(jù)不在緩存中,集群配置將調(diào)整參數(shù)時間(HBase.rpc.timeout)。最后,服務器端每次讀取遠程調(diào)用設(shè)置的次數(shù)都會被調(diào)整。調(diào)整太少會降低訪問效率,太多會導致內(nèi)存被占用而降低訪問速率。
為了將各個無線節(jié)點所采集的數(shù)據(jù)傳輸回測試終端,集群各節(jié)點的組網(wǎng)設(shè)計必須科學合理。本文采用層次路由協(xié)議,利用多通道數(shù)據(jù)傳輸技術(shù),使得在層次路由協(xié)議的星型簇中,作為簇頭的無線節(jié)點讀取簇成員時可以同時與多個簇成員節(jié)點通信,該網(wǎng)絡層次結(jié)構(gòu)如圖3所示。與傳統(tǒng)的流程相比較,這種結(jié)構(gòu)降低了整個系統(tǒng)的數(shù)據(jù)傳輸時延,降低了傳輸過程中的誤碼率,增強了利用該技術(shù)進行組網(wǎng)的能力。
圖3 網(wǎng)絡路由層次架構(gòu)
當數(shù)據(jù)訪問到數(shù)據(jù)預處理區(qū)域時,不同類型的源數(shù)據(jù)是用唯一的標記創(chuàng)建的,它丟棄不完整的數(shù)據(jù)對象,或提供格式化的操作確保數(shù)據(jù)完整而高效地傳輸?shù)骄彌_區(qū)進行隊列分區(qū)。多數(shù)據(jù)緩沖區(qū)接收經(jīng)過預處理的數(shù)據(jù)來初始化存儲數(shù)據(jù)的隊列,根據(jù)時間戳屬性計算接收到的數(shù)據(jù),并將數(shù)據(jù)發(fā)送到相應的隊列。當緩沖區(qū)的數(shù)據(jù)量達到閾值,系統(tǒng)將數(shù)據(jù)值寫入預分配策略,數(shù)據(jù)存儲在相應的數(shù)據(jù)庫服務器中,并更新HBase集群數(shù)據(jù)庫的計數(shù)記錄表。
程序執(zhí)行根據(jù)消息的時間屬性使用Hash計算初始化數(shù)據(jù)隊列,然后根據(jù)相應數(shù)據(jù)隊列的哈希值比較數(shù)據(jù)大小和閾值。HBase數(shù)據(jù)庫在數(shù)據(jù)大小超過閾值或接收時間超過1秒時啟動。表中記錄的總數(shù)是基于原始寫入數(shù)的記錄數(shù)。
當用戶數(shù)據(jù)量增加時,現(xiàn)有的集群數(shù)據(jù)庫不能滿足用戶對空間和性能的要求,也不能滿足系統(tǒng)丟失大量的歷史數(shù)據(jù)時的需求。如果手動修改Hadoop和HBase的配置文件,既浪費時間和人力,也會增加修改配置過程中的錯誤率,所以在集群節(jié)點使用shell腳本的形式進行動態(tài)更新。
集合U={U1,U2,U3,…,Un-1,Un}為研究對象的集合(包括物質(zhì)、事件和關(guān)系等),集合O={O1,O2,O3,…,Om}為研究對象的特征集,值Vaij是對象Ui的屬性O(shè)j,i為基元,j是基元維度,i和j的取值范圍分別為i=1,2,3,…,n;j=1,2,3,…,m。Vaij為空時表示對象Ui和相關(guān)屬性O(shè)j之間沒有關(guān)系。
HBase是面向列的數(shù)據(jù)庫,應用列是主鍵,數(shù)據(jù)寫入查詢的時間復雜度是logN。當查詢訪問時,客戶端首先訪問主要節(jié)點,然后通過主要節(jié)點的引導和區(qū)域服務器的協(xié)調(diào)響應客戶機的寫請求和讀請求。因此,查詢訪問的時間由主要節(jié)點時間Tmaster、主要節(jié)點的導引和區(qū)域服務器協(xié)調(diào)時間TAreaServer組成。將查詢數(shù)據(jù)的數(shù)量設(shè)置為i列,由主要節(jié)點協(xié)調(diào)的區(qū)域服務器的數(shù)量m作為j列存儲在每個區(qū)域服務器中,每個主要節(jié)點內(nèi)容的長度是i/j,區(qū)域服務器中保存數(shù)據(jù)的長度是i/(j×m),總的時間是TTotal。各時間變量間的關(guān)系如下所示:
為了驗證HBase的存儲、查詢和可擴展性,我們使用300個傳感器節(jié)點,用于寫入和讀取時間。
實時存儲方法是基于Oracle的數(shù)據(jù)存儲,數(shù)據(jù)存儲測試單獨進行。本文設(shè)計的系統(tǒng)對數(shù)據(jù)寫入?yún)^(qū)內(nèi)的操作采用單線程和多線程寫入。具體設(shè)置如下:寫入客戶機緩沖區(qū)寬度設(shè)置成6 M,緩沖區(qū)大小設(shè)置為2,4,6,8,單位是MB,數(shù)據(jù)傳輸速率是1,2,3,…,30,單位是該窗口時間閾值,設(shè)為2 s。
圖4是用分布式實時存儲方法存儲Oracle的流數(shù)據(jù)。當數(shù)據(jù)傳輸速率為12 000 bit/s,隨著數(shù)據(jù)傳輸速率的增加,存儲的數(shù)據(jù)延遲和延遲時間不斷增加。當系統(tǒng)使用單機測試時,延遲點是25 000 bit/s。當使用集群技術(shù)時,數(shù)據(jù)庫吞吐量顯著增加,傳輸速率為55 000 bit/s,并且沒有延遲。
圖4 傳感器數(shù)量與等待時間及讀取時間的對比
圖5的水平軸是每秒發(fā)送的數(shù)據(jù),豎直軸是HBase集群數(shù)據(jù)庫實時存儲流數(shù)據(jù)的延遲時間,單位是ms。
圖5 延遲模擬測試
如圖6所示,吞吐量效率是25 000次/s,1次延遲,隨著數(shù)據(jù)傳輸速率的增加,延遲將更長。當閾值設(shè)為6 MB時,不同緩沖區(qū)閾值的模擬測試結(jié)果是最優(yōu)的,增加或減少緩沖閾值將增加實時數(shù)據(jù)的內(nèi)存延遲時間,在無線傳感器網(wǎng)絡運行的初始階段,因為節(jié)點還沒有開始產(chǎn)生數(shù)據(jù)或者產(chǎn)生的數(shù)據(jù)比較少,所以也沒有產(chǎn)生重復的數(shù)據(jù),此時的空間利用率為1。然而,隨著網(wǎng)絡中數(shù)據(jù)量的不斷增長,重復的冗余數(shù)據(jù)量也逐漸變大,空間利用率會逐漸變小,節(jié)省了網(wǎng)絡的存儲空間。在能夠容忍一定錯誤的前提下,該方法能夠很好地處理傳感器網(wǎng)絡中的數(shù)據(jù)冗余問題,并進一步提高了網(wǎng)絡的存儲能力[11]。
圖6 緩沖閾值模擬測試
本文設(shè)計了一種高效的實時存儲模型以滿足高效存儲數(shù)據(jù)的需求。數(shù)據(jù)流實時存儲在Hadoop集群數(shù)據(jù)庫中,在多種復雜環(huán)境下滿足用戶對數(shù)據(jù)的存儲及讀寫。此外,以文本形式存儲的歷史數(shù)據(jù)流將被遷移到高效、高穩(wěn)定性的HBase集群數(shù)據(jù)庫,簡單的動態(tài)更新HBase數(shù)據(jù)庫集群及其效率將有助于優(yōu)化數(shù)據(jù)庫空間的使用。