張文正 孫知信 宮婧
摘? 要:為了解決物聯網異構數據的存儲問題,該文提出了一種混合技術存儲方案。針對結構化數據存儲,該文基于MySQL分布式數據庫和Redis緩存,設計了結構化數據的存儲方案;對于圖片等非結構化數據,通過FastDFS分布式文件系統進行管理,使用Redis緩存保存文件的索引映射關系并實現快讀熱點數據的功能。最后對系統進行測試,測試結果表明該方案實現了性能目標。
關鍵詞:物聯網? 數據存儲? 結構化數據? 非結構化數據
中圖分類號:TP3? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻標識碼:A文章編號:1672-3791(2021)04(b)-0001-04
A Hybrid Heterogeneous Data Storage Scheme
ZHANG Wenzheng? SUN Zhixin*? GONG Jing
(Nanjing University of Posts and Telecommunications, Nanjing, Jiangsu Province, 210023? China)
Abstract: In order to solve the storage problem of heterogeneous data in the Internet of Things, this paper proposes a hybrid technology storage scheme. For structured data storage, this paper designs a structured data storage scheme based on MySQL distributed database and Redis cache; for unstructured data such as pictures, it is managed through the FastDFS distributed file system, and the Redis cache is used to store the index mapping of the file relationship and realize the function of fast reading hot data. Finally, the system is tested, and the test results show that the solution in this paper has achieved the performance goal.
Key Words: Internet of things; Data storage; Structured data; Unstructured data
近年來,國內外在物聯網方面的技術應用水平不斷提升。伴隨著傳感器設備種類和數量的不斷增加,物聯網應用系統中的數據量也日益龐大且逐漸趨于多樣化[1]。如何高性能地對各式各樣的物聯網數據進行存儲,成為當前物聯網領域的一個熱點問題。為了解決物聯網數據的高性能存儲問題,該文研究了物聯網數據的特點,提出了面向異構數據的混合型存儲方案。
1? 物聯網數據存儲需求分析
物聯網數據的來源是不同的傳感器設備[2],通常情況下物聯網數據存儲系統應滿足以下幾點要求。
1.1 可靠性
要有較好的數據備份與恢復方案,用以保證數據丟失狀況下系統的可靠性。
1.2 開放性
提供相應數據接口,來解決不同場景的數據處理或分析。
1.3 實時性
針對實時監測的需求,可以實時地接收數據,且可以實時地計算處理。
2? 物聯網數據的分類
考慮到傳感器型號、屬性差異,物聯網數據的往往沒有一種統一的格式。一般可以分為兩大類:一是結構化數據,可以很方便地用關系記錄來表示,可存儲在關系型數據庫。二是非結構化數據,難以用常規的關系記錄來表示,這類數據常使用非關系型數據庫或是文件系統來進行管理,由于通常沒有固定的格式,組織起來往往具有一定的難度[3]。
此外,這兩類數據的性能指標是不一樣的。對于結構化數據,由于單條數據記錄占用空間非常少,一般沒有千字節大小,所以這些數據很適合用傳統的關系型數據庫進行管理。至于非結構化數據,例如圖片、文檔,單個文件占用空間較少,通常狀況下,占用空間在64 kB~1 MB,在這種情況下讀寫速度較快。
面對日益增長的各類數據,利用傳統的存儲方式和管理性能來管理物聯網數據無法滿足現在人們的需求。目前,分布式存儲架構已是常見的數據管理方案,其原因有3點:一是使得管理的數據可以具有較好的可擴展性;二是能夠顯著提高系統性能;三是能夠降低企業成本。
該文依據物聯網數據的上述分類來制訂混合型存儲方案。結構化數據通過MySQL分布式數據庫來進行管理,非結構化數據通過分布式文件系統FastDFS結合Redis緩存來進行管理。
3? 數據存儲模型
綜合考慮系統的可靠性、事務處理、緩存策略等關鍵的影響因素,如圖1所示,該文將存儲模型整體分為應用層、服務層及存儲層[4]。
3.1 結構化數據存儲
3.1.1 MySQL分布式存儲
分布式關系數據庫即搭建分布式集群,把單一數據庫里的多條數據按照一定策略劃分,重新放到集群中的不同節點上,再依靠各節點的協同工作來實現數據的存儲與管理。
對于大型的數據系統來說,若單表中保存的記錄數量超過百萬或者更高時,對于讀取和寫入就都會出現很大的困難。此外,集群中每個節點若是都管理同樣的數據,那么理論上這就還是與單庫容量相比并無不同,還是難以真正實現海量數據的高性能管理。
3.1.2 存儲架構設計
隨著數據采集節點和數據訪問客戶端的日益增加,如果只有一臺應用服務器就難以容納廣大的數據流量,且常常會出現單點故障。此時就需要增加服務器的數量,并通過Nginx在數據流量的入口做負載均衡,這樣能夠使數據流量可以被放到不同的服務器來進行處理,就可以很好地解決上述問題。不過也要考慮到海量數據日益擴張,倘若數據還是在單庫上進行讀取和寫入的話,很容易出現性能瓶頸。為了解決出現的性能瓶頸,對數據庫的讀取和寫入操作進行了分離,通過主數據庫進行寫操作,通過從數據庫進行讀操作。數據庫之間則是通過binlog實現相互的同步。讀寫性能問題可以在很大程度上得以解決。而對于部分讀取非常多,而寫入卻非常少的數據,該文使用了Redis緩存[5],且通過緩存失效機制,可以避免偶爾會出現的Redis和MySQL之間存在不一致的數據的現象[6]。出于更進一步提高性能的目的,結合Mycat分布式數據庫中間件,此中間件可以很好地提升關系數據庫在數據量較大情況下的存儲性能,使得存儲架構靈活、易擴展。
數據寫入的策略是,使用Nginx來反向代理不同客戶端的訪問請求,接著通過加權輪詢計算出當前壓力較小的Tomcat的地址。再通過計算出的地址,將數據放到寫隊列中預備后續的寫入,最后再把數據寫入到Redis里,并通過系統的數據訪問接口也寫入到MySQL中。
讀取數據的過程為,客戶端先在Redis緩存中查找數據,若查找到緩存數據,則對失效時間重置,并且把查到的數據提交至客戶端。若Redis中沒有,再到MySQL中查找。若在MySQL中查詢到,則把查詢到的數據提交至客戶端,同時把數據同步到Redis;如果在MySQL中也沒有查找到所需的數據,就表明該數據并不存在,將此結果反饋給客戶端,讀取流程結束。
3.2 非結構化數據存儲
這里的非結構化數據是文本和圖片等占用空間不大的文件。對于視頻流等特殊格式暫未涉及。物聯網終端設備數據通常單個體量小,文件大小為幾千字節至幾千字節。結合前文非結構化數據特點,對于單個體量較小的非結構化數據,該文選擇了FastDFS。
3.2.1? FastDFS分布式文件系統
FastDFS作為很常用的輕量級分布式文件系統,可以結合Nginx反向代理服務器,并在此基礎上可以在線訪問文件,也就是能夠借助HTTP協議實現對文件系統中的各項數據進行訪問。FastDFS還支持負載均衡、冗余備份,很適合中小文件[7]。
FastDFS通過文件索引策略,可以顯著地縮小元數據需要的存儲空間。它的管理方式是在數據服務器中保存文件,文件保存至數據服務器之后,再返回依據一定的規則而生成的針對于此文件的索引映射信息,并把此映射信息保存至MySQL[3]。
3.2.2 存儲架構設計
考慮到FastDFS存文件的時候都會生成并返回文件的索引信息,當訪問數據時,就得利用此索引信息重新定位文件在FastDFS中的存儲位置,所以這里文件及其在FastDFS中的索引信息所形成的映射,就得通過另外的工具來管理。為了提高性能,使用Redis緩存對原文件及其索引信息的映射進行管理。非結構化數據的存儲架構見圖2。
數據的寫入過程是先把一份數據的副本保存在Redis里,再把數據保存在FastDFS里,等到設置的Redis自動失效時間,Redis中的副本將會被自動地抹去。而在返回文件保存在FastDFS中的索引信息的時候,將該信息在Redis中保存。再進行讀取就可以重新定位文件的位置。
讀FastDFS中管理的數據的方法不唯一。可以使用HTTP請求,并通過Nginx的反向代理,查找到所需的文件。這種方案較為簡單但失去了Redis緩存對于熱點數據的讀取優勢,且難以避免特殊狀況中偶然發生的緩存穿透問題。因此,可以先在Redis中查找數據,如查找到,此時就提交并重新配置緩存失效時間。若在緩存中并沒有查找到數據,則利用Redis中的映射關系,去FastDFS中讀取,并把FastDFS里查找到的相關數據備份至Redis里,并設置數據失效時間。
4? 系統測試
為了測試該文存儲方案與傳統的分布式存儲相比是否更有效降低數據寫入時延,該文基于數據存儲模型,進行了仿真實驗,結果見圖3。
從圖3中可以看出,當數據量較小時,該文方案與傳統分布式存儲方案的時延性能相差不大,隨著任務量的不斷增加,傳統分布式存儲時延增加非常明顯,而該文方案依然具有較好的時延性能。
為進一步驗證該方案的可靠性,將該方案與原生的FastDFS相比較,記錄文件上傳后能夠成功讀取的次數,將讀取的成功率作為該次測試的指標[8]。仿真測試中,依次上傳1 000個、2 000個、3 000個等體積為10 MB的文件,記錄文件成功讀取的次數,并計算成功率。實驗的結果見圖4。
通過圖4可以看出,該方案讀取成功率接近100%,明顯高于常規FastDFS的成功率。
5? 結語
該文研究了物聯網異構數據的基本特征,設計物聯網數據的存儲模型,其中結構化數據通過分布式數據庫進行管理,文本、圖片等小體量非結構化數據通過FastDFS分布式文件系統進行管理。在此基礎上又分別結合了Nginx負載均衡和Redis緩存更加深入地改善了系統性能。最后通過對系統進行性能方面的測試,證明了該方案的可行性。
參考文獻
[1] 李道亮,楊昊.農業物聯網技術研究進展與發展趨勢分析[J].農業機械學報,2018,49(1):1-20.
[2] Phillip A Laplante,Nancy Laplante. The Internet of Things in Healthcare: Potential Applications and Challenges[J].IT Professional Magazine,2016,18(3):2-4.
[3] 甄凱成.面向物聯網應用的數據接入和存儲系統的設計與實現[D].中國科學技術大學,2019.
[4] 許鑫,時雷,何龍,等.基于NoSQL數據庫的農田物聯網云存儲系統設計與實現[J].農業工程學報,2019,35(1):172-179.
[5] Alba Pedro-Zapater,Clemente Rodríguez,Juan Segarra,et al.Ideal and Predictable Hit Ratio for Matrix Transposition in Data Caches[J]. Mathematics,2020,8(2):184-206.
[6] 邱書洋.Redis緩存技術研究及應用[D].鄭州大學,2016.
[7] 石珊.云平臺下基于FastDFS的文件管理系統的研究與實現[D].電子科技大學,2019.
[8] 叢犁,李銳,王華,等.面向工業物聯網的分布式數據存儲分配方案[J].電力信息與通信技術,2020,18(7):52-57.