这两天要写一个方案,某单位想建一个中心数据库,汇聚各业务系统数据,以及各种网上抓取的预报数据。我设想是用HBase。
主要考虑点是:
1、开源
2、支持海量数据
该单位的数据量增长按规划还是很大的,大约每天20GB+。关系型数据库就不考虑了。RDBMS本质上是单机系统,拿mysql来说吧,主从复制,读写分离玩得很溜,但毕竟不是分布式数据库,数据量还是要受限于单台机器的容量。当然mysql有所谓分布式集群,但估计就是个解决方案,用一个个单机版的mysql来凑成一堆分布式。
其他分布式数据库吧,什么ES啦,mongodb啦,也有很多,我相信也是极好的,但须知,当今大数据时代,其实发端于google的三篇论文,mapreduce,分布式文件系统,以及bigtable。这是一套全新的分布式计算模型,相比于传统的分布式计算模型有三大优势:首先,它简化了传统的分布式计算理论,降低了技术实现的难度,可以进行实际的应用。其次,它可以应用在廉价的计算设备上,只需增加计算设备的数量就可以提升整体的计算能力,应用成本十分低廉。最后,它被Google应用在Google的计算中心,取得了很好的效果,有了实际应用的证明。但google公司没有将自己的产品开源,因此各大软件公司就根据开始利用Google的分布式计算模型搭建自己的分布式计算系统,其中Hadoop + HDFS + HBase就是其中的佼佼者,并由于其开源特性,成为事实上的分布式计算系统的国际标准。
所以,如果要学习大数据,为什么不用hadoop呢?
而且,就这个客户来看,我认为他们的实际情况也适合应用hbse。因为预报业务的要素非常多,比如气温气压,波向波高,等等。从设计的角度看,要素就是一个个字段。而HBase恰恰是一款面向列存储的数据库。这种特点,在一次只查找几个字段的情况下,效率比按行存储的数据库不知道高到哪里去了。而且它还支持动态增加列。
ES,基于lucene。lucene十多年我就听说过了,一个有名的全文搜索引擎。表现在ES,就是它会自动创建许多索引。索引多,查找快,但插入慢,而且数据量膨胀。如果不是所有数据都用于查找、分析,为啥要用ES呢?
当然,这么多的分布式数据,没有一款是十全十美的,可以普适所有的情况,只看合不合用。我认为,当前这个客户的情况,比较适合用HBase。当然,我自己也想学。
附录:
四、中心数据库建设方案
采用 Hadoop系分布式、面向列存储数据库HBase。
1、开源数据库
2、分布式数据库,由Master和RegionServer两部分组成,类似于HDFS中的NameNode与DataNode的角色,Master负责管理调度,RegionServer负责存储数据。在Hbase中,表被分割成多个更小的块然后分散的存储在不同的Regions,存放Regions的地方叫RegionServer。在RegionServer出现意外宕机时,Master会负责该RegionServer上的Region进行迁移,这个过程是极其短暂的,保障了服务的高可用性。
3、数据面向列存储,有别于关系型数据库的按行存储
4、NoSql数据库
5、稀疏存储,不同于传统关系型数据库,HBase在列数据为空的情况下,不会占用存储空间
6、强读写一致性,有别于一般的分布式数据库的“最终一致性”,适合高速的计算聚合
7、只有简单的字符类型,类型处理工作由用户自行进行
8、默认基于HDFS
1、支持海量数据,适合存储PB级别、记录数百亿级的海量数据
2、高可用,规避了单点故障
3、高性能,分布式架构,缓存机制,加上NoSql没有昂贵的关系范式约束和事务一致性限制,提供了特别高效的写入操作;读取也能达到亿级数据中毫秒级别的相应速度
4、易扩展,数据量累计到一定程度(可配置),HBase系统会自动对数据进行水平切分,并分配不同的服务器来管理这些数据。同时可以简单通过增加服务器的方式来扩大容量。这个动态扩容过程无需停机,完全实现动态无缝无宕机扩容。
5、数据按列存储,使得水平分割表非常容易;并且同一列的数据结构相似,存储压缩效率高;支持动态创建列
6、基于廉价PC服务器,低成本
1、不适合数据量比较少的场景。如果有十亿及百亿行数据,Hbase是一个很好的选项,如果只有几百万行甚至不到的数据量,RDBMS是一个很好的选择。
2、需要足够的硬件资源,每个HDFS集群在少于5个节点的时候,都不能表现的很好。但服务器可以使用廉价的PC服务器。
3、不支持SQL。但可以结合HIVE使用,以支持支持 JOIN、GROUP 等 SQL 查询语法。
综合考虑HBase的技术特点和优缺点,尤其是HBase是一个面向列存储的数据库,使得HBase作为预报业务方面的数据仓库有着天然的优势。众多周知,预报业务要素众多,可分为气象、水文、水质等几个大类,每个大类都包含许多要素,例如气象的要素就有气温、气压、风、云、降水、能见度和空气湿度等等,大大小小,要素可能达数十项之多。如果映射为数据库的表,这些要素都是一个个的列(字段)。HBase作为面向列存储的数据库:
1、从众多列的表中,指定若干列进行查找的情况下,效率远高于按行存储的数据库
2、支持动态增加列,给预报业务带来灵活性