劉 堅 李盛樂 戴 苗 陳曉琳 康 凱 劉珠妹 郭啟倩
1 中國地震局地震研究所(地震大地測量重點實驗室),武漢市洪山側路40號,430071
2 湖北省地震局地震監測預報中心,武漢市洪山側路40號,430071
地震數據存放于關系數據庫,而傳統關系二維表存儲數據無法應對大數據帶來的挑戰,比如表鏈接運算的性能瓶頸、表數據底層存儲導致的讀寫瓶頸。另外,大數據的存儲是開展機器學習、挖掘、分析預測等應用的前提和基礎[1],因此,為使用戶能高效地進行大數據處理,提出一種基于Hbase(hadoop database)的地震大數據存儲方法[2]。
NoSQL與RDBMS完全不同,它是非關系數據庫,是一種基于鍵值對的高并發、高性能、高可用性數據庫系統。從數據模型角度,它主要可分為鍵值、列式、文檔和圖形等4 種基本數據模型[3]。如今,NoSQL數據庫主要用于解決高并發數據庫讀寫、海量大數據的存儲等問題。相比于關系數據庫,NoSQL 水平方向可擴展性強,更適合存儲非結構化數據。NoSQL 數據庫的典型產品有Hbase、Dynamo、Redis、Bigtable、CouchDB、MongoDB和Neo4J等[4]。其中,Hbase是基于Hadoop架構的一款查找迅速、可擴展性強、支持大數據存儲的數據庫管理工具。
Hbase為列式數據模型,有兩個重要專有名詞——Column Family和Row Key。Column Family中文名為“列族”,它是由列關鍵字組成的集合;Row Key 可以看作是RDBMS 中表的主鍵[5]。Hbase有以下特征與優勢:1)高可擴展性,真正意義上的線性水平擴展;2)高性能,支持并提供高并發讀寫訪問;3)高可用性,提供容錯等功能;4)模式自由;5)能簡易備份;6)具有簡單應用程序接口;7)最終一致性;8)支持海量數據;9)可通過網絡訪問;10)兼具SQL 與NoSQL數據庫的優勢。
Hbase表是一個分布式多維表,表中的數據通過一個行關鍵字(Row Key)、一個列族和一個列名(Columnfamily:column name)以及一個時間戳進行索引和查詢定位[6-7]。其關鍵在于設計好Row Key,以方便數據查詢和數據分析。下面以地震觀測數據為例,講述基于Hbase的存儲原理和方法。
地震信息的業務邏輯是通過臺網(Netid)、臺站(Stationid)、測點(Pointid)、儀器(Intrid)、測項(Itemid)、采樣率(Samplerate)、產品類別(Protype)和時間戳(Timestamp)進行查詢的。假設地震業務數據庫中有一Obs觀測數據表,按照傳統的RDBMS,Obs表中的列是不能隨意改變的,比如Schema定義了Netid、Stationid、Pointid、Intrid、Itemid、Value等屬性,Obs表的屬性是不能動態增加的。對于Hbase列式存儲數據庫,在創建Obs表時,再為它定義一個info列族,Obs的數據便可以表示為info:value=23.4。如果要增加新的字段屬性,只需要通過添加一個info:new-Property就可以了。因此,如果采用傳統關系數據庫存儲將非常復雜,且會造成一些為空值(null)的存儲浪費。而Hbase就不會出現該問題,列存儲的每一個列單元如果是空值,則不占用存儲空間。下面通過一張關系庫表和一張非關系庫表結構來介紹二者的聯系與區別(表1、表2)。
表1是關系數據庫定義的表Obs,一旦設計完投入運行,表的列是固定的,不能動態改變,并且列值為null時,會占存儲空間。表2為Hbase的NoSQL數據庫,Obs表的列可通過列族動態增加,并且空值列是不存儲的,這樣就節約了存儲空間,因此Hbase的基于列存儲數據模型非常適合地震數據頻繁擴展的場景。另外,選用Hbase數據庫存儲管理數據,還能自動切分數據,當Obs表中的數據超過某一個閥值時,Hbase就會自動切分數據,使查詢具有伸縮性。再加上Hbase的弱事務性,使得Hbase的數據寫入效率非常高。

表1 關系數據庫表結構Tab.1 Table structure of relational database

表2 Nosql數據庫表結構Tab.2 Table structure of not only sql database
Row Key 是類似關系數據庫中的主鍵,在Hbase中的存儲也是根據Row Key 來排序的。另外,Hbase不支持條件查詢和Order by等查詢方式,故Row Key的設計要根據應用系統的查詢需求而定。
根據上述地震業務需求,觀測數據表Obs的Row Key可以由以下幾個部分構成:<Netid><Stationid><Pointid><Intrid><Itemid><Samplerate><Timestamp><Protype>,當要查詢某個臺網某個時間段數據時,就可以指定起始Row Key為<Netid><Timestamp.MIN_VALUE>,終止Row Key為<Netid><Timestamp.MAX_VALUE>。其他各種組合需求,比如要查詢某個自然測點數據、某臺儀器的數據、某個學科數據、某個測項分量數據等,都可以非常高效地檢索出來。
從數據結構角度,地震數據可劃分為兩類:觀測產生的結構化數據和文件、圖像等非結構化數據。
2.2.1 結構化數據存儲
地震典型的普通結構化數據就是前兆存放在Oracle數據庫和測震存放在MySQL 數據庫的關系型觀測數據,主要包括前兆各學科(形變、重力、GNSS、地下流體、地電、地磁等)和測震學(地震目錄、觀測報告、事件波形、連續波形等)數據。這些觀測數據,分別從前兆Oracle庫、測震MySQL庫讀取出來,通過上述存儲方法存儲至Hbase設計的Obs表中進行統一存儲管理。
Hbase表數據插入或更新通過Put方法實現,單條Put調用HTable.put(Put)方法。如要批量Put,可將一組Put操作放入一個List中,然后調用HTable.put(List<Put>)。下面是將觀測數據寫入Hbase表的Java語言代碼:

2.2.2 非結構化數據存儲
地震非結構化數據存儲時,Hbase有著不可取代的優勢:1)更有效地存儲小文件(小于16 MB);2)提供更高層和更可靠的接口,可以方便實現數據的增、刪、讀、改功能;3)提供失敗自動重試機制,有效地保證數據的一致性。因此,Hadoop 開 發 了HBase 大 對 象LOB(large object storage)存儲功能,方便用戶在HBase中存儲各種類型的大對象。存儲時,LOB Store是列族級別的存儲單元,每個LOB Store可以存儲幾百萬個文件,而LOB Store的底層存儲在LOB File中。讀寫方面,其插入性能提高到200%,插入延時減少90%,讀取的隨機性能可達到200%。
為對比Hbase-0.94.6和MySQL-5.1.48的存儲、查詢等性能指標,由3臺配置相同服務器的Hadoop集群組成分布式文件系統,構成一個邏輯Hbase集群,同時由其中一臺機器單機測試MySQL,測試平臺軟硬件環境如表3所示。

表3 測試環境Tab.3 Testing environment
該測試平臺實現了插入、查詢和顯示等常用功能,并記錄了測試數據和測試日志,為以后進一步的比對測試提供了依據。
將兩者針對結構化觀測數據的存儲進行效能測試,在關鍵代碼處添加秒表,記錄執行命令的時間。數據量(條)分別為50、100、1 000、10 000、100 000,每次插入保存完畢把所耗時長寫入日志文件。連續多次測試,取平均值。如圖1所示,當寫入記錄條數小于1 000時,兩者所耗時間差別并不明顯;隨著插入記錄條數持續增加,MySQL的插入耗時開始劇增,而Hbase耗時變化幅度相對較小。

圖1 結構化數據存儲性能對比Fig.1 Performance comparison for storing structured data
通過反復測試與效率對比發現,觀測數據讀取性能較高情況為:測震連續波形數據,每條記錄保存10min長度數據;前兆分鐘以上采樣率觀測數據,每條記錄保存1h長度數據。
分別對Hbase-0.94.6和MySQL-5.1.48做10、50、100、200、500、1 000 次文件寫入試驗,文件大小約30KB/個,兩者的二進制文件存儲耗時性能對比結果如圖2所示。可以看出,當插入文件數量增加時,Hbase的性能優勢變得更加明顯。

圖2 非結構化數據存儲性能對比Fig.2 Performance comparison for storing unstructured data
分別對Hbase-0.94.6和MySQL-5.1.48做數據量為1 000、2 000、10 000、100 000、500 000的查詢性能測試。從圖3可以看出,Hbase耗時很少,且幅度變化不大,而MySQL 查詢耗時隨數據量的增長上升很快。

圖3 查詢性能比較Fig.3 Performance comparison for query
本文提出一種基于Hbase的地震大數據存儲方法,并與傳統關系數據庫MySQL 在寫入與讀取效率方面作對比測試。結果表明,本文方法在數據存儲與查詢等方面,特別是在數據量多時,具有顯著優勢。為更進一步深入研究,體現本文方法在地震數據存儲與管理方面的優勢,同時為更高層次的應用提供參考,接下來將繼續開展與其他典型關系數據庫的對比測試工作。
致謝:論文寫作、測試環境搭建與性能對比測試過程中,得到山東省地震局王方建研究員、南京云創存儲科技有限公司云應用研發組成員楊震宇、張國慶、賈文周和張乃甜等的大力支持和熱心幫助,在此表示感謝!
[1]李軍,周成虎.地學數據特征分析[J].地理科學,1999,19(2):158-162(Li Jun,Zhou Chenghu.Geoscience Data Analysis[J].Scientia Geographica Sinica,1999,19(2):158-162)
[2]李博強,郝立波,趙玉巖,等.某農業地質調查信息服務系統的設計與實現[J].吉林大學學報:信息科學版,2012,30(5):523-529(Li Boqiang,Hao Libo,Zhao Yuyan,et al.Design and Realization of Information System of Agricultural Geological Survey[J].Journal of Jilin University:Information Science Edition,2012,30(5):523-529)
[3]NoSQL Databases[EB/OL].http://nosqldatabase.org/,2012-10-02
[4]Strauch C.NoSQL Databases[EB/OL].http://www.christ of-strauch.de/nosqldbs.pdf,2012-10-02
[5]Hbase的基本概念[EB/OL].http://blog.csdn.net/szwangdf/article/details/32709261,2014-06-20(Basic Concepts of Hbase[EB/OL].http://blog.csdn.net/szwangdf/article/details/32709261,2014-06-20)
[6]周姚.基于云計算的文本挖掘技術研究[D].長沙:國防科學技術大學,2011(Zhou Yao.Cloud Computing-Based Research on Text Mining Techniques[D].Changsha:Graduate School of National University of Defense Technology,2011)
[7]IHbase[EB/OL].http://github.com/ykulbak/ihbase,2012-10-02