劉 堅 李盛樂 陳曉琳 康 凱 劉珠妹(中國地震局地震研究所地震大地測量重點實驗室,武漢 430071)
地震大數(shù)據(jù)存儲管理研究
劉 堅 李盛樂 陳曉琳 康 凱 劉珠妹
(中國地震局地震研究所地震大地測量重點實驗室,武漢 430071)
針對目前傳統(tǒng)關系數(shù)據(jù)庫在存儲大數(shù)據(jù)時遇到的諸多挑戰(zhàn),提出了一種基于Hbase的地震大數(shù)據(jù)存儲管理方法。Hbase表是一個分布式多維表,表中的數(shù)據(jù)通過一個行關鍵字(Row Key)、一個列族和一個列名(Columnfamily:column name)以及一個時間戳進行索引和查詢定位。關鍵在設計好Row Key,以方便數(shù)據(jù)查詢并進行數(shù)據(jù)分析。下面以地震觀測數(shù)據(jù)為實例,講述在Hbase的存儲原理和方法。
假設地震業(yè)務數(shù)據(jù)庫中有一Obs觀測數(shù)據(jù)表,如果按照傳統(tǒng)的RDBMS的話,Obs表中的列是不能隨意改變的,比如schema定義了Netid,Stationid,pointid、Intrid、Itemid、value等屬性,Obs表的屬性是不能動態(tài)增加的。如果是Hbase列式存儲數(shù)據(jù)庫,在創(chuàng)建Obs表時,再為它定義一個info列族,Obs的數(shù)據(jù)便可以表示為:info:value=23.4,如果欲增加新的字段屬性,只需要通過添加一個info:newProperty就可以了。
表1 關系數(shù)據(jù)庫表結構
表1是關系數(shù)據(jù)庫定義的Obs表,一旦設計完投入運行,該表的列是固定的,不能動態(tài)改變,并且列值為null值時,因占存儲空間而浪費了這部分空間。表2是在Hbase的NoSQL數(shù)據(jù)庫,Obs表的列可通過列族動態(tài)增加,并且空值列是不存儲的,這樣就節(jié)約了存儲空間,因此Hbase的基于列存儲的數(shù)據(jù)模型就非常適合地震數(shù)據(jù)頻繁擴展的場景。另外,選用Hbase數(shù)據(jù)庫存儲管理數(shù)據(jù),還有另外一個好處就是能自動切分數(shù)據(jù),當Obs表中的數(shù)據(jù)超過某一個閥值時,Hbase就會自動切分數(shù)據(jù),這樣就使查詢具有了伸縮性,再加上Hbase的弱事務性的特性,因此Hbase的數(shù)據(jù)寫入效率非常高。
表2 NoSQL數(shù)據(jù)庫表結構
將兩者針對結構化觀測數(shù)據(jù)的存儲進行效能測試,在關鍵代碼行處添加秒表,記錄執(zhí)行命令時間。數(shù)據(jù)量(條)分別為50,100,1000,10000,100000。每次插入保存完畢把所耗時長(單位:ms)寫入日志文件。連續(xù)多次測試,取平均值。當寫入記錄條數(shù)小于1 000時,可以看出兩者所耗時間差別并不明顯;但隨插入記錄條數(shù)持續(xù)增加,Mysql的插入耗時開始劇增,而Hbase耗時變化幅度相對較小,其存儲性能優(yōu)勢也就顯現(xiàn)出來了。
分別對Hbase-0.94.6和Mysql-5.1.48做10,50,100,200,500,1000次文件寫入試驗,文件大小約為30 KB/個,兩者的二進制文件存儲耗時(單位:ms)性能對比結果顯示,當插入文件數(shù)量越來越多時,Hbase的性能優(yōu)勢顯而易見。
分別對Hbase-0.94.6和Mysql-5.1.48做數(shù)據(jù)量為1 000、2000、10 000、100 000、500 000二者查詢性能測試,結果顯示,Hbase耗時(單位:ms)很少,且幅度變化不大,而Mysql查詢耗時隨數(shù)據(jù)量增長幅度上升變化快。
綜上所述,該種基于Hbase的地震大數(shù)據(jù)存儲方法,并與傳統(tǒng)關系數(shù)據(jù)庫Mysql在寫入與讀取效率作比對測試,結果表明,該方法在數(shù)據(jù)存儲與查詢等性能,特別是在數(shù)據(jù)量多時,具有顯著優(yōu)勢。