1.5 使用HBase的时机
Hadoop是高性能、高稳定、可管理的大数据应用平台。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System,HDFS)。HDFS具有高容错性,被设计部署在低廉的硬件上,为应用程序访问数据提供了高吞吐量,因而适用于那些有着超大数据集的应用程序。HBase的存储是基于Hadoop的。HBase具有超强的扩展性和大吞吐量,采用的存储方式为Key-Value(键-值)方式,故而即使数据量增大也几乎不会导致查询性能的下降。当然,我们也需要注意HBase的缺点——数据分析是HBase的弱项,因为HBase不支持表关联,所以当我们想实现group by或者order by时,需要编写很多的代码来实现MapReduce。正因为如此,我们才需要更合理地使用HBase。下面是笔者根据自己的工作经验给出的一些使用HBase的建议,希望这些建议对于读者的技术选型有所助益。
1)数据量超千万,可以选择使用HBase。
一般而言,如果单表的数据量只有百万的数量级或者更少,则不建议使用HBase,而应该考虑关系数据库是否能够满足应用的需求;如果单表数据量超过千万或者有十亿、百亿的数量级,并且伴有较高并发的存取应用,则可以考虑使用HBase,这样可以充分利用分布式存储系统的优势。
2)数据分析需求不多,可以选择使用HBase。
虽然说HBase是一个面向列的数据库,但是它与真正的列式存储系统(比如Parquet、Kudu等)又有所区别,再加上自身存储架构的设计,使得HBase并不擅长做数据分析。所以如果业务需求是为了做数据分析,比如做报表,那么不建议使用HBase。
3)实时根据主键查询,可以选择使用HBase。
HBase是一个Key-Value数据库,默认对RowKey做了索引优化,所以即使数据量非常庞大,根据RowKey查询的效率也会很高。但是,如果还需要根据其他条件进行查询,则不建议使用HBase。
4)多表连接查询,不建议使用HBase。
HBase是NoSQL产品中的一种,它也具有NoSQL的缺点,就是不能进行连表查询等操作,也就是说,如果业务场景是需要事务支持、复杂的关联查询,则不建议使用HBase。