Hbase 深入浅出
概述
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
与FUJITSU Cliq等商用大数据产品不同,HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应
特点
- Hbase可以往数据里面insert,也可以update一些数据,但update的实际上也是insert,只是插入一个新的时间戳的一行。delete数据,也是insert,只是insert一行带有delete标记的一行。Hbase的所有操作都是追加插入操作。Hbase是一种日志集数据库。它的存储方式,像是日志文件一样。它是批量大量的往硬盘中写,通常都是以文件形式的读写。这个读写速度,取决于硬盘与机器之间的传输有多快。
- Hbase中数据可以保存许多不同时间戳的版本(即同一数据可以复制许多不同的版本,准许数据冗余,也是优势)。数据按时间排序,因此Hbase特别适合寻找按照时间排序寻找Top n的场景。找出某个人最近浏览的消息,最近写的N篇博客,N种行为等等,因此Hbase在互联网应用非常多。
- Hbase只有主键索引,因此在建模的时候会遇到了问题。例如,在一张表中,很多的列我都想做某种条件的查询。但却只能在主键上建快速查询。
- Hbase是列式数据库,列式数据库的优势在于数据分析。
- Hbase中的数据都是字符串,没有其他类型。
NoSQL数据库
NoSQL 数据库和关系型数据库的设计目的是为了解决不同的问题,NoSQL 数据模型相对简单,它适合应用灵活更强的 IT 系统,不需要预先定义表如构,而且 NoSQL 对数据库性能要求较高,对 PB 级别的数据进行快速的检索,不需要高度的数据一致性及廷迟性的埸景,可以快的跟据 Key-Value 的方式来查看数据。在市埸上有四种NoSQL数据库,分别是:
- 键值存储数据库:Key-Value 的鐽值对,通常用 Hash Table 来实现,这类数据库的查找速度快、简单,易部署,但数据无结构化,如果区部查找会很慢,和应用埸景是内容缓存,快速的检索数据,主要用于大量数据的高访问量负X,也适用于一些日志系统, e.g. Redis, Oracle BDB, Tokyo Cabinet;
- 列存储数据库:以列族 Column Family 式存储,将同一列数据存在一起,鐽的特点是指向了多少个列,这些列是由列族来实现的,它的好处是查找快速,扩展性非常好以便应用海量数据存储和处理,但功能相对局限,对设计要求很特定的要求,非常适合分布式文件系统 e.g. HBase、Cassandra, Accumulo, Riak;
- 文档存储数据库:Key-Value 对应的键值时,Value 为结构化数据,更了解 Value 的内容,数据结构不严格,表结构可变它不需要像关系型数据库一样要预先定义表结构,可以看作他是键值数据库的升级版,文档类型处理得力比较好,但查询能力不高,缺乏统一的查询语法。使用埸景是 Web 应用,,e.g. MongoDB, CouchDB, Couchbase Server ;
- 图形数据库:图结构,它可以提用图结构的算法,比如最佳路线寻址,N度关系查找,使用灵活的图形模型并且能扩展到不同的服务器上,但很多时候要对整个图作计算才能得出需要的信息,这种结构不太适合分布式的集群方案。应用埸景:推荐系统,社交网络和关于结构关系图谱, e.g. Neo4J, Infinite Graph;
NoSQL与RDBMS的区别
NoSQL 与 RDBMS 最大的分别是数据量和读写吞吐量的不同,数据布局和数据访问频率也不同,他们两个应用解决问题的本质也不一样,比如列存储数据库可以快速查找的原因是列族的设计可以在每一次查询中大量减少磁盘 IO 和数据量的访问。NoSQL 数据库很容易支持数据量达 PB 级别的数据,因为它的特性很容易支持分布式水平扩展;但 RDBMS 只能处理 TB+ 级别的数据,如果你的数据场景是要处理很多事务性数据 e.g. 更新和删除,那么还是优先选择关系型数据库 RBDMS,因为NoSQL数据库不太善于频繁的处理数据更新和删除,因为数据是分布在不同的节点上,还有数据是默认有三份副本,如果需要太量的更新操作,那么每台节点上的数据也有一并更新,这太太增加了解决方案的复杂性;NoSQL 遵从 CAP 和 BASE 理论,RDBMS 遵从 ACID 的理论。如果只有上千行和上百万行的数据,则用傅统数据库会比较适合。
Hbase表结构
HBase 是以数据为中心,RDBMS 是以关系为数据,HBase 是 NoSQL 数据库中的列存储数据库,它有以下特点:强一致性读写,自动分片,HBase 通过 Region 分布在集群中,数据增加时,Region 会自动分割并重新分片。RegionServer 自动故障移取,HBase 支持 HDFS 之外的存储文件,HBase 通过 MapReduce 支持大并发处理,HBase 支持以 API 方式访问数据,HBase 以 Bloom Filters 和 Bloom Cache 对大量数据进行查询优化。HBase 适合场景是存在随机读写的埸景,每秒需要在 TB 级别数据上完成数以千计的操作,访问的操作的方式要简单、明确和直接&#