劉 堅 李盛樂 陳曉琳 康 凱 劉珠妹(中國地震局地震研究所地震大地測量重點實驗室,武漢 430071)
地震大數據存儲管理研究
劉 堅 李盛樂 陳曉琳 康 凱 劉珠妹
(中國地震局地震研究所地震大地測量重點實驗室,武漢 430071)
針對目前傳統關系數據庫在存儲大數據時遇到的諸多挑戰,提出了一種基于Hbase的地震大數據存儲管理方法。Hbase表是一個分布式多維表,表中的數據通過一個行關鍵字(Row Key)、一個列族和一個列名(Columnfamily:column name)以及一個時間戳進行索引和查詢定位。關鍵在設計好Row Key,以方便數據查詢并進行數據分析。下面以地震觀測數據為實例,講述在Hbase的存儲原理和方法。
假設地震業務數據庫中有一Obs觀測數據表,如果按照傳統的RDBMS的話,Obs表中的列是不能隨意改變的,比如schema定義了Netid,Stationid,pointid、Intrid、Itemid、value等屬性,Obs表的屬性是不能動態增加的。如果是Hbase列式存儲數據庫,在創建Obs表時,再為它定義一個info列族,Obs的數據便可以表示為:info:value=23.4,如果欲增加新的字段屬性,只需要通過添加一個info:newProperty就可以了。

表1 關系數據庫表結構
表1是關系數據庫定義的Obs表,一旦設計完投入運行,該表的列是固定的,不能動態改變,并且列值為null值時,因占存儲空間而浪費了這部分空間。表2是在Hbase的NoSQL數據庫,Obs表的列可通過列族動態增加,并且空值列是不存儲的,這樣就節約了存儲空間,因此Hbase的基于列存儲的數據模型就非常適合地震數據頻繁擴展的場景。另外,選用Hbase數據庫存儲管理數據,還有另外一個好處就是能自動切分數據,當Obs表中的數據超過某一個閥值時,Hbase就會自動切分數據,這樣就使查詢具有了伸縮性,再加上Hbase的弱事務性的特性,因此Hbase的數據寫入效率非常高。

表2 NoSQL數據庫表結構
將兩者針對結構化觀測數據的存儲進行效能測試,在關鍵代碼行處添加秒表,記錄執行命令時間。數據量(條)分別為50,100,1000,10000,100000。每次插入保存完畢把所耗時長(單位:ms)寫入日志文件。連續多次測試,取平均值。當寫入記錄條數小于1 000時,可以看出兩者所耗時間差別并不明顯;但隨插入記錄條數持續增加,Mysql的插入耗時開始劇增,而Hbase耗時變化幅度相對較小,其存儲性能優勢也就顯現出來了。
分別對Hbase-0.94.6和Mysql-5.1.48做10,50,100,200,500,1000次文件寫入試驗,文件大小約為30 KB/個,兩者的二進制文件存儲耗時(單位:ms)性能對比結果顯示,當插入文件數量越來越多時,Hbase的性能優勢顯而易見。
分別對Hbase-0.94.6和Mysql-5.1.48做數據量為1 000、2000、10 000、100 000、500 000二者查詢性能測試,結果顯示,Hbase耗時(單位:ms)很少,且幅度變化不大,而Mysql查詢耗時隨數據量增長幅度上升變化快。
綜上所述,該種基于Hbase的地震大數據存儲方法,并與傳統關系數據庫Mysql在寫入與讀取效率作比對測試,結果表明,該方法在數據存儲與查詢等性能,特別是在數據量多時,具有顯著優勢。