在现在很多大型互联网的分布式应用中,针对于高并发和海量数据的存储问题,一种常见的解决方案就是针对mysql/oracle等关系型数据库的,业务拆分,分库分表,这样做虽然能够提高应用的并发处理能力和查询性能,但是也会带来一系列新的问题:
1.单表的事务上升为跨表,跨库甚至分布式的事务;
2.由于数据被切分到不同的表,不同的库中去,多表之间的关联与连接查询变得困难;
3.在查询相关数据时,需要指定路由字段找到对应的库或者对应的表进行查询,较于以往的查询,变得复杂;
4.如果对于系统进行更进一步的扩容和扩展,会变得非常复杂;
基于以上问题的出现,许多应用开始寻找其他比较好的替代方案,hbase和搜索引擎便是其中的两种:
hbase是apache hadoop项目下的一个子项目,能够很好的支持海量数据的存储,能够以更友好,更方便的方式支持表的分区,能够较为方便地扩展系统的并发写入能力.而诸如solr,lucene等搜索引擎技术,则可以解决mysql/oracle分库分表之后产生的多表关联查询问题,以及查询时必须带路由字段的问题.
hbase是一种实时读/写的列存储数据库,本质上就是一张稀疏的大表,用来存储粗粒度的结构化数据(相对于关系型数据库来说),可以通过增加节点来实现系统的扩展,
hbase运行在分布式文件系统hdfs之上,利用它可以在廉价的pc server上搭建大规模的结构化数据存储引擎,
在hbase的组织形式中,每个列属于一个特定的列族,通过行和列来确定一个存储单元,而每个存储单元又可以通过时间戳来区分,
hbase集群中通常包含两种角色,hmaster和hregionserver,当表随着记录的增加而不断变大时,就会分裂成一个一个的region,一个hregionserver可以管理多个region,而hmaster来负责hregionserver的调度及集群状态的监管,使得hbase能够同时在多个节点同时写入,提高了并发写入的性能,
但是,hbase难以支持诸如group by,order by,join等方式的复杂查询,所以在一些特定的应用场景下并不适用;