刘 坚 李盛乐 陈晓琳 康 凯 刘珠妹(中国地震局地震研究所地震大地测量重点实验室,武汉 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在写入与读取效率作比对测试,结果表明,该方法在数据存储与查询等性能,特别是在数据量多时,具有显著优势。