一種電動汽車遠程監控通信服務系統及方法與流程
2024-02-08 16:11:15 2
本發明屬於電動汽車通信中的數據讀寫方法領域,具體是一種電動汽車遠程監控通信服務系統及方法。
背景技術:
電動汽車遠程監控系統可以實現對汽車的實時跟蹤管理和科學的運行考核,其中通信服務系統是整個監控系統實現數據通信的中樞,負責接收來自車載終端的位置及運行參數等信息,同時向各車載終端下傳控制調度指令及優化的運行參數,來實現對車載終端的遠程監測和控制調度,其設計的優劣直接影響整個系統的性能。面對通信服務系統中海量的、實時採樣的、高並發的車載終端數據流,傳統資料庫解決方法出現瓶頸,無法滿足數據的大量存儲及應用服務系統快速檢索要求。
分布式nosql(notonlysql非關係型)資料庫hbase解決方案的出現很好的解決數據的存儲問題,採用key-value(鍵-值)數據對的列式存儲也很好的解決了數據的欄位伸縮性。雖然分布式資料庫hbase有很多的優點,很好的解決了數據的存儲問題,但是分布式資料庫hbase在檢索方面存在一定的局限性。首先,分布式資料庫hbase只支持針對rowkey(hbase中每行的主鍵也就是key-value對中的key)的數據檢索,不支持對value(值)的數據檢索,而結構化的數據中的value才是數據的價值所在,分布式資料庫hbase只提供對rowkey的一級索引檢索,還有範圍(beginrowkey,endrowkey)的scan(掃描,hbaseapi的一種,可以對響應的rowkey數據做出快速響應)查詢。對value檢索會導致mapreduce任務形式的全表的暴力檢索,非常的耗時;再者,分布式資料庫hbase不能很好的支持sql語言,由於已經積累了多年針對關係型資料庫的應用經驗,有豐富的面向sql的應用接口需求,把分布式資料庫hbase的優點和sql的易用性結合起來也是有待解決的問題。
技術實現要素:
針對現有技術中存在的不足,本發明提供了一種電動汽車遠程監控系統中通信服務系統及方法,可以實現快速、高效傳輸和處理移動車輛的海量信息,實現對sql語句的支持,應用服務系統能有效的獲取車輛的運行數據,提高檢索效率,達到應用服務系統對數據檢索操作的方便易用。
本發明採用下面的技術方案:
一種電動汽車遠程監控通信服務系統,包括netty通信服務系統和hbase數據服務系統;在所述hbase數據服務系統與netty通信服務系統間設有二級索引系統,用於封裝hbase數據服務系統,提供數據接口;所述netty通信服務系統接收來自車載終端的數據並發送至二級索引系統,二級索引系統接收netty通信服務系統傳遞的數據並轉換為對應操作,根據所述對應操作對hbase數據服務系統執行讀寫操作。
進一步的,所述二級索引系統包括用於與netty通信服務系統連接的sql解析層以及與hbase數據服務系統連接的dml數據操作接口。
進一步的,所述netty通信服務系統接收來自車載終端的數據並解析成sql語句發送至sql解析層,sql解析層接收netty通信服務系統傳遞的sql語句解析並轉換為對應dml操作,dml數據操作接口根據sql解析層轉換的dml操作對hbase數據服務系統執行讀寫操作。
本發明還提供了另一技術方案:
一種電動汽車遠程監控通信服務方法,車載終端將實時數據流發送給netty通信服務系統,netty通信服務系統對接收到數據並發送至二級索引系統,二級索引系統接收netty通信服務系統傳遞的數據並轉換為對應操作,根據所述對應操作對hbase數據服務系統執行讀寫操作。
進一步的,所述二級索引系統具有與netty通信服務系統連接的sql解析層以及與hbase數據服務系統連接的dml數據操作接口;所述netty通信服務系統接收來自車載終端的數據並解析成sql語句發送至sql解析層,sql解析層接收netty通信服務系統傳遞的sql語句解析並轉換為對應dml操作,dml數據操作接口根據sql解析層轉換的dml操作對hbase數據服務系統執行讀寫操作。
進一步的,所述dml數據操作接口包括寫入接口和檢索接口。
進一步的,所述寫入接口根據sql語義完成對hbase數據服務系統的數據插入、更新和刪除操作。
進一步的,所述檢索接口根據sql語義完成對hbase數據服務系統的數據獲取和掃描操作,hbase數據服務系統具有數據表格和索引表格,通過對索引表格執行掃描操作查找目標數據的主鍵集合,通過獲取操作基於上述獲取的主鍵集合獲得目標數據集合,並將目標數據集合返回給應用服務系統。
進一步的,通過對索引表格執行掃描操作查找目標數據的主鍵集合具體為:將hbase數據服務系統中的結構化數據的主鍵部分和其中需要做索引的value欄位整合在一起,使得具有相同value值的索引數據之存儲位置相鄰,通過對所述整合後的數據進行提取,獲得目標數據的主鍵集合。
進一步的,所述寫入接口向hbase數據服務系統執行操作時,將hbase數據服務系統內的結構化數據的id前添加hash前綴,並存儲在數據表格的數據主鍵內;同時,將結構化數據的id、需要索引的欄位前添加hash前綴,並存儲在索引表格的索引主鍵內;在將結構化數據寫入數據表格內時,每個結構化數據的id後面的欄位轉化成列簇的欄位,索引表格內列簇的欄位為空。
本發明的有益效果:
通過對電動汽車遠程監控系統中通信服務系統的結構化設計以及對netty通信服務系統和hbase數據服務系統的非植入式開發,在分布式資料庫hbase系統的邏輯複雜性的前提下,擁有很好的擴展性和兼容性;將sql的易用性與hbase數據服務系統完美結合,實現快速、高效傳輸和處理移動車輛的海量信息,大幅提升了應用服務系統中對value數據的檢索效率,同時也拓展了hbase數據服務系統的應用領域及應用服務系統的開發性能。
本發明的indexrowkey(索引主鍵)的組成是由hash前綴、需要建立索引的欄位value和結構化數據的id組成的,在索引表格的列簇的欄位空的,只是插入一條空的索引主鍵作為數據主鍵所標示的反向索引,採用空間換時間的策略,通過建立索引數據表格最終能夠大幅度提升系統查詢的速度。
附圖說明
圖1為本發明的結構框圖。
圖2為netty通信服務系統邏輯架構
圖3為本發明的流程圖。
圖4為hbase數據服務系統原始結構化數據進行存儲後的示意圖。
圖5為應用服務系統數據檢索的過程示意圖。
具體實施方式:
下面結合附圖與實施例對本發明作進一步說明:
應該指出,以下詳細說明都是例示性的,旨在對本申請提供進一步的說明。除非另有指明,本文使用的所有技術和科學術語具有與本申請所屬技術領域的普通技術人員通常理解的相同含義。
需要注意的是,這裡所使用的術語僅是為了描述具體實施方式,而非意圖限制根據本申請的示例性實施方式。如在這裡所使用的,除非上下文另外明確指出,否則單數形式也意圖包括複數形式,此外,還應當理解的是,當在本說明書中使用術語「包含」和/或「包括」時,其指明存在特徵、步驟、操作、器件、組件和/或它們的組合。
本發明的一種典型實施例是:
一種電動汽車遠程監控通信服務系統,包括netty通信服務系統和hbase數據服務系統;在所述hbase數據服務系統與netty通信服務系統間設有二級索引系統,用於封裝hbase數據服務系統,提供數據接口;二級索引系統包括用於與netty通信服務系統連接的sql解析層以及與hbase數據服務系統連接的dml數據操作接口。
netty通信服務系統接收來自車載終端的數據並解析成sql語句發送至sql解析層,sql解析層接收netty通信服務系統傳遞的sql語句解析並轉換為對應dml操作,dml數據操作接口根據sql解析層轉換的dml操作對hbase數據服務系統執行讀寫操作。
如圖2所示:netty通信服務系統包括主反應器,主反應器與若干客戶端連接,主反應器與接收器連接,接收器與子反應器連接,子反應器通過讀模塊與線程池連接,子反應器還與發送模塊連接,線程池還與若干數據處理模塊連接;
所述主反應器,用於負責響應客戶端的連接請求,並建立連接,主反應器只有一個,採用獨立的選擇器;
所述若干客戶端,是指並發的多個消息連接;
所述接收器,用於接收客戶端的tcp連接請求;
所述子反應器,用於維護上述獨立的選擇器,子反應器可以有一個或者多個,每個子反應器都會在一個獨立線程中執行;
所述讀模塊,用於對接收到消息的解讀並進行傳輸;
所述線程池用於消息的讀取、解碼、編碼和發送,採用標準的jdk線程池實現,包含一個任務隊列和n個可用的線程;
所述發送模塊,用於響應客戶端的數據請求。
所述數據處理模塊,包括:解碼請求數據單元、業務邏輯處理單元和編碼響應單元。
所述解碼請求處理單元,用於對請求數據流進行按照數據包的信息類型進行分類;
所述業務邏輯處理單元,用於根據數據包的劃分歸類進行業務的處理;
所述編碼響應單元,用於根據業務的處理生成sql語句進行消息的發送。
所述解碼請求處理單元是鑑於tcp通訊的「粘包」特性,在解碼時需對整包、半包、錯包分別進行適當的處理。
本發明的另一實施例是一種電動汽車遠程監控通信服務方法,車載終端將實時數據流發送給netty通信服務系統,netty通信服務系統對接收到數據並發送至二級索引系統,二級索引系統具有與netty通信服務系統連接的sql解析層以及與hbase數據服務系統連接的dml數據操作接口;netty通信服務系統接收來自車載終端的數據並解析成sql語句發送至sql解析層,sql解析層接收netty通信服務系統傳遞的sql語句解析並轉換為對應dml操作,dml數據操作接口根據sql解析層轉換的dml操作對hbase數據服務系統執行讀寫操作。
二級索引系統承接netty通信服務系統與hbase數據服務系統之間的橋梁,封裝hbase數據服務系統的api,為應用服務系統提供通用的使用接口。sql解析層針對sql語句的解析層,負責將netty通信服務系統通過rpc遠程調用傳遞過來的sql語句進行語義解析,轉換成為一系列的dml(datamanipulationlanguage)是數據操縱語言:它們是select、update、insert、delete,這四條命令是用來對hbase數據服務系統裡的數據進行操作的語言)操作。dml數據操作接口主要是完成對hbaseapi的封裝,內部分兩種接口,一種是數據的寫入接口,根據數據向hbase數據服務系統的數據輸入;還有中是數據的檢索接口,提供通過檢索從hbase數據服務系統中輸出目標數據。數據的寫入分為兩種形式,一種是通過實時的數據採集存儲,一種是離線的數據批量導入。
例如,insert(插入)、update(更新)等都屬於寫入操作,而select(選擇)操作就屬於檢索操作。
離線批量數據導入是通過將採集的數據寫入到臨時文件,在集群任務比較空閒的時候,通過對文件的處理,進行數據的批量導入,是一個非實時的過程。
netty通信服務系統是internet網絡上具有固定ip的計算機,通過internet網絡接收車載終端上傳的車身總線數據信息,對來自車輛的不同廠商的子應用層協議加以解析成sql語句。
netty通信服務系統採用netty框架進行開發,基於tcp協議傳輸,並結合汽車廠商的監控需求,制訂出一套適合車輛安全隱患系統的私有通信協議,實現高並發的實時網絡通信要求。netty通信服務系統邏輯架構如圖2所示。網絡通信程序對數據流的一般處理流程是:解碼請求數據、業務邏輯處理、編碼響應。作為服務中心與車載終端溝通媒介,通信服務系統的首要職責是應對高並發的車載終端實時數據流,數據流的接收工作由通信服務模塊的接收層(acceptor)完成。由於通信協議是透傳模式,通信服務模塊會接收到來自不同廠家的各種各樣的子協議和數據格式,在入庫存儲前還需要將這些數據解析處理為統一格式。所以在接收層工作完成後,還需要由數據處理層(handler)對數據進行解碼(decode)、業務處理(compute)、編碼(encode)後返回給sql解析層。
netty通信服務系統採用reactor模式分別應對信息的接收和處理過程。服務系統的cpu處理速度遠遠快於io速度,如果cpu為了io操作而阻塞是極不划算的。通信服務系統使用reactor模式來解決這個問題,由一個不斷等待和循環的單獨進程(或線程)接受各handler的註冊,並負責查詢io是否就緒,在就緒後調用指定的handler進行處理。
nett通信服務系統中,啟用一個mainreactor線程,負責響應client的連接請求,並建立連接,使用一個nioselector;啟用多個subreactor線程,每個subreactor維護一個獨立的nioselector。由於subreactor會執行一些比較耗時的io操作,例如消息的讀寫,使用多個線程去執行,更加有利於發揮cpu的運算能力,減少io等待時間。
如圖3所示,為netty通信服務系統的應用層調用到hbase數據服務系統之間的整體的數據流程圖,其中包括兩種數據流程,一個是數據的寫入流程,另外一個是數據的檢索流程。首先netty通信服務系統通過rpc遠程調用,傳遞過來應用層的sql語句,sql語句在sql解析層執行語義分析,通過對sql語義分析獲得的結果來判斷數據是寫入操作還是檢索操作,比如insert(插入)、update(更新)等都屬於寫入操作,而select(選擇)操作就屬於檢索操作。對於數據的寫入操作,由於不一定都是實時在線的數據寫入,又開闢了離線批量數據導入,其中,離線批量數據導入是通過將採集的數據寫入到臨時文件,在集群任務比較空閒的時候,通過對文件的處理,進行數據的批量導入,是一個非實時的過程。
在寫入接口中,dml數據操作接口完成sql語義到hbaseapi中的put(寫入)操作和delete(刪除)操作,完成對hbase數據服務系統的數據插入、更新和刪除操作;在檢索接口中,dml數據操作接口主要是完成sql語義到hbaseapi中的get(獲取)操作和一系列的scan(掃描)操作,通過對索引表格的scan(掃描)操作查找出來目標數據的rowkey(主鍵)集合,然後通過獲取的rowkey集合,通過get操作獲得目標數據集合,最終將這些數據集合返回給應用服務系統。
如圖4所示,為了能實現快速存儲以及快速檢索,本發明通過對主鍵的操作,把原結構化數據的主鍵部分和其中需要做索引的value欄位設計在一起,由於hbase數據服務系統中數據存儲的特徵,所有數據都按照字典序排序,這樣對於相同的value值的索引數據的存儲位置相鄰,通過對這些數據進行提取獲取原存儲數據的rowkey數據。
圖4中的原始數據就是結構化數據,每一條都由全表唯一的id標記,每個id代表的一行裡面都代表不同意義的欄位。在第二個表裡面的數據就是原始數據寫入到hbase數據服務系統中數據表格的詳細情況,在原始結構化數據中的id前面添加hash前綴組成主鍵,以存儲在數據表格的數據主鍵(datarowkey內),後面的欄位都轉化成列族columnfamily的欄位。
由於結構化數據的順序寫入,會造成hbase數據服務系統中數據的寫入局部熱點,數據表格的主鍵以及索引表格的主鍵在hbase數據服務系統中是按照字典序排序的,如果順序寫入,造成短時間內寫入的主鍵(rowkey)都集中在集群中的局部節點,嚴重影響了寫入的性能。通過添加了hash前綴從而將順序寫入的數據通過hash離散化分配到數據表格以及索引表格中不同的節點區域,充分利用分布式存儲的並行存儲優勢。
在原始結構化數據寫入hbase數據服務系統的同時,原始結構化數據中需要添加索引的欄位要建立索引數據,並且與原結構化數據一同寫入hbase數據服務系統的索引表格內。如圖中標註的indexrowkey(索引主鍵)的組成是由hash前綴、需要建立索引的欄位value和結構化數據的id組成的,在索引表格的列簇的欄位空的,只是插入一條空的索引主鍵作為數據主鍵所標示的反向索引,採用空間換時間的策略,通過建立索引數據表格最終能夠大幅度提升系統查詢的速度。
如圖5所示,給出了實例來說明應用服務系統的檢索中獲取rowkey(主鍵)集合的流程。例子中舉了對於兩個條件的數據select檢索請求。最左邊的是數據在hbase數據服務系統中的存儲狀態,標示著原始結構化數據寫入到hbase系統存儲之後的狀態,接著右邊的兩個索引表格分別是數據的prov欄位索引和age欄位索引,在搜索省份prov為濟南jn同時年齡age為30的條目信息的時候執行流程是這樣的,並行的在prov和age欄位分別進行prov欄位為jn和age為30的搜索,通過檢索查詢得到的兩個集合就是後來的prov=jn集合與age=30集合,通過對sql語句中兩個欄位條件的邏輯關係判斷發現是「and」,那就對兩個集合求交集通過合併操作,最終發現主鍵的交集為0001,接下來拿著0001去數據表格中取出目標數據,返回給應用服務系統就完成了系統的檢索流程。由於此處只是為了說明下整個系統設計的原理,簡化了hbase數據服務系統中主鍵的設置與檢索流程中的一些其他的輔助措施。
本發明通過對電動汽車遠程監控系統中通信服務系統的結構化設計以及對netty通信服務系統和hbase數據服務系統的非植入式開發,實現快速、高效傳輸和處理移動車輛的海量信息,實現對sql語句的支持,應用服務系統能有效的獲取車輛的運行數據,提高檢索效率,達到應用服務系統對數據檢索操作的方便易用。
其中,本發明的indexrowkey(索引主鍵)的組成是由hash前綴、需要建立索引的欄位value和結構化數據的id組成的,在索引表格的列簇的欄位空的,只是插入一條空的索引主鍵作為數據主鍵所標示的反向索引,採用空間換時間的策略,通過建立索引數據表格最終能夠大幅度提升系統查詢的速度。
以上所述僅為本申請的優選實施例而已,並不用於限制本申請,對於本領域的技術人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本申請的保護範圍之內。