什么是HBase?HBase(HadoopDatabase)是Apache的Hadoop项目的一个子项目。它是一个分布式的、面向列的开源数据库,就像Bigtable使用谷歌文件系统(GFS)提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。为什么要使用HBase?HBase不同于一般的关系型数据库。是适合非结构化数据存储的数据库。HBase是介于MapEntry(key&value)和DBRow之间的一种数据存储方式,有点类似于它是基于流行的Memcache,但它不仅仅是简单的key对应一个value,还可以存储数据结构多个属性根据你的需要,但是没有传统数据库表那么多的关联,这就是所谓的松散数据。简单的说,你在HBase中创建的表可以看作是一张大表,这张表的属性可以根据需要动态增加。HBase中的表之间没有关联查询。你只需要告诉你的数据存储在HBase表中的是哪些列族,你不需要指定它的具体类型:char、varchar、int、tinyint、text等。但是你需要知道HBase确实不包括交易等功能。ApacheHBase与GoogleBigtable非常相似,因为一行有一个可选的键和任意数量的列。表格存储松散,因此用户可以为行定义各种列。这样的功能在大型项目中非常实用,可以简化设计和升级的成本。HBase与传统RDBMS的区别应用场景有时候了解一个软件产品最好的方式就是看它是如何使用的。它解决了什么问题以及这些解决方案如何适应更大的应用程序架构可以告诉你很多。由于HBase有许多公共生产部署,我们可以做到这一点。本节将详细介绍人们成功使用HBase的一些使用场景。注意:不要认为HBase只能解决这些用例来限制自己。它是一项新兴技术,基于使用场景的创新正在推动系统的发展。如果您有新想法并且认为可以从HBase提供的功能中获益,请尝试一下。社区很乐意帮助您并从您的经验中学习。这就是开源软件的精神。互联网搜索应用程序BigTable及其模拟HBase为此类文档存储库提供存储。BigTable提供行级访问,因此爬虫可以插入和更新单个文档。通过基于BigTable的MapReduce计算可以高效生成搜索索引。捕获增量数据数据通常是一个长流,累积到现有数据库以供将来使用,例如分析、处理和服务。许多HBase使用场景都属于这一类——使用HBase作为数据存储,从各种来源捕获增量数据。例如,这样的数据源可能是网络爬虫(我们讨论的互联网搜索应用问题),可能是记录用户看了什么广告,看了多长时间的广告表现数据,也可能是记录各种参数的时间序列数据.对于半结构化或非结构化数据,HBase适用于数据结构字段不够确定或杂乱难于按概念抽取的数据。例如,当业务开发需要存储用户邮箱、电话、地址信息时,需要关闭RDBMS进行维护,而HBase则支持动态添加。记录非常稀疏的RDBMS行具有固定数量的列,为空列浪费存储空间。HBase值为null的列不会被存储,节省空间,提高读性能。多版本数据根据Rowkey和Columnkey所定位的Value可以有任意多个版本值。因此,对于需要存储变更历史记录的数据,使用HBase是非常方便的。比如user表的地址会发生变化。业务中一般只需要最新的值,但有时可能需要查询历史值。数据量大当数据量变大,RDBMS数据库无法支撑时,就会出现读写分离策略。一个Master负责写操作,多个Slave负责读操作,服务器成本翻倍。压力越来越大,师父已经支撑不住了。这时候就需要对数据库进行划分,将关联性不大的数据单独部署。有些连接查询不能使用,需要中间层。随着数据量的进一步增加,一个表中的记录越来越多,查询变得很慢,所以我们不得不对表进行分表,比如按ID取模分到多个表中,以减少表中的记录数一张桌子。任何经历过这些事情的人都知道这个过程是多么令人沮丧。使用HBase简单,只需添加机器,HBase会自动拆分和水平扩展,与Hadoop的无缝集成保证了其数据可靠性(HDFS)和海量数据分析(MapReduce)的高性能。【本文为专栏作者“朱国立”原创稿件,转载请通过作者微信公众号“开发者圆桌”联系授权】点此查看本作者更多好文
