hbase和关系型数据库的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hbase和关系型数据库的区别相关的知识,希望对你有一定的参考价值。

参考技术A Mongodb用于存储非结构化数据,尤其擅长存储json格式的数据。存储的量大概在10亿级别,再往上性能就下降了,除非另外分库。
Hbase是架构在hdfs上的列式存储,擅长rowkey的快速查询,但模糊匹配查询(其实是前模糊或全模糊)不擅长,但存储的量可以达到百亿甚至以上,比mongodb的存储量大多了。
参考技术B HBase与传统关系数据库的区别?
答:主要体现在以下几个方面:1.数据类型。关系数据库采用关系模型,具有丰富的数据类型和储存方式。HBase则采用了更加简单的数据模型,它把数据储存为未经解释的字符串,用户可以把不同格式的结构化数据和非结构化数据都序列化成字符串保存到HBase中,用户需要自己编写程序把字符串解析成不同的数据类型。
2.数据操作。关系数据库中包含了丰富的操作,如插入、删除、更新、查询等,其中会涉及复杂的多表连接,通常是借助多个表之间的主外键关联来实现的。HBase操作则不存在复杂的表与表之间的关系,只有简单的插入、查询、删除、清空等,因为HBase在设计上就避免了复杂的表与表之间的关系,通常只采用单表的主键查询,所以它无法实现像关系数据库中那样的表与表之间的连接操作。
3.存储模式。关系数据库是基于行模式存储的,元祖或行会被连续地存储在磁盘页中。在读取数据时,需要顺序扫描每个元组,然后从中筛选出查询所需要的属性。如果每个元组只有少量属性的值对于查询是有用的,那么基于行模式存储就会浪费许多磁盘空间和内存带宽。HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的,它的优点是:可以降低I/O开销,支持大量并发用户查询,因为仅需要处理可以回答这些查询的列,而不是处理与查询无关的大量数据行;同一个列族中的数据会被一起进行压缩,由于同一列族内的数据相似度较高,因此可以获得较高的数据压缩比。
4.数据索引。关系数据库通常可以针对不同列构建复杂的多个索引,以提高数据访问性能。与关系数据库不同的是,HBase只有一个索引——行键,通过巧妙的设计,HBase中所有访问方法,或者通过行键访问,或者通过行键扫描,从而使整个系统不会慢下来。由于HBase位于Hadoop框架之上,因此可以使用Hadoop
MapReduce来快速、高效地生成索引表。
6.数据维护。在关系数据库中,更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在。而在HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍旧保留。
7.可伸缩性。关系数据库很难实现横向扩展,纵向扩展的空间也比较有限。相反,HBase和BigTable这些分布式数据库就是为了实现灵活的水平扩展而开发的,因此能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩。
但是,相对于关系数据库来说,HBase也有自身的局限性,如HBase不支持事务,因此无法实现跨行的原子性。
注:本来也想来问这个问题,然后复制一下的。结果找不到,只好自己手打了,麻烦复制拿去用的同学点下赞呗。

学习笔记大数据原理与技术 —— HBase大数据数据库


本文 1550字 ,建议阅读 11分钟



1HBase概述

1)简介HBase是基于关系模型建立的分布式数据库。具有高可靠、高性能、面向列、可伸缩等特点。HBase一般运行在HDFS上,主要用来存储非结构化和半结构化的数据。HBase可以通过水平扩展的方式实现大表数据(表的规模可以达到数十亿行以及数百万列)的存储,对大表数据的读写访问可以达到实时级别。

2HBase与关系型数据库的区别

[1] 数据类型:关系型数据库存储结构化数据,HBase数据库可以存储非结构化数据;

[2] 存储模式:关系型数据库基于行模式存储,HBase数据库基于列存储;

[3] 可扩展性:关系型数据库横向扩展性较差,纵向扩展的空间也有限。而HBase无论是行扩展还是列扩展都很方便,其能够便捷地通过增加硬件节点来实现存储空间和性能的扩展。

3HBase的应用场景

[1] 场景一:海量数据(TBPB)且高吞吐量;

[2] 场景二:需要在海量数据中实现高效的随机读取;

[3] 场景三:性能可伸缩,需要同时处理结构化和非结构化的数据;

[4] 场景四:不需要完全拥有传统关系型数据库所具备的ACID特性。

【注】:ACID特性是指数据库事务正常执行的四个特性,分别指原子性(A)、一致性(C)、独立性(I)和持久性(D)。

 

2HBase架构原理

1HBase的数据模型

[1] 表:HBase采用表的形式存储数据,表由行和列组成;

[2] 行:HBase中的行由行键(Rowkey)和若干列组成。行是通过行键按字段顺序进行排序的,所以行键的设计非常重要,好的行键设计可以将内容相关的行排列到相邻位置便于查找;

[3] 列族:一个表再水平方向上由一个或多个列族组成。一个列族可以由多个列组成,列族在表创建时就需要预先设定好;

[4] 列限定符:列族中添加不同的列限定符可以对数据进行划分定位,列限定符以列族名作为前缀,用“:”连接后缀;

[5] 单元格:一个单元格保存了一个值的多个版本。单元格通过行键、列族和列限定符进定位,每个版本对应一个时间戳;

[6] 时间戳:HBase每个值都会带一个时间戳,时间戳标识了这个值的版本。

2)表和Region:一个HBase集群中维护着多张表,每张表可能包含非常多的行,在单台机器上无法全部存储。HBase会将一张数据表按行键的值范围横向划分为多个子表,实现分布式存储。这些子表,在HBase中被称作“Region”,RegionHBase分布式存储的基本单元。每张表最开始只包含一个Region,随着表中数据不断增大,Region也会在达到一定阈值后增多(即1Region分裂为2Region)。

3HBase的系统架构HBase采用Master / Slave架构,主要角色包括Master服务器(HMaster,管理节点)、Region服务器(HRegionServer,数据节点)、ZooKeeper服务器以及Client客户端。HBase一般以 HDFS作为其底层存储来实现数据的高可用,其本身不具备数据复制的能力。

 

3HBase的读写流程与Compaction

1HBase的读流程

[1] 第一步:客户端发起请求,与ZooKeeper服务器通信获取hbase:meta所在的HRegion Server,记为HRegionServer A

[2] 第二步:访问HRegionServer A中的hbase:meta(记载着各个User Region信息),通过行键查找hbase:meta获取所要读取的Region所在HRegionServer,记为HRegionServer B

[3] 第三步:请求发送到HRegionServer BHRegionServer B会先查询MemStore,如果未查询到目标,则在HFile中查找;

[4] 第四步:查询到数据后返回到客户端。

2HBase的写流程

[1] 第一步:客户端发起请求,与ZooKeeper服务器通信获取hbase:meta所在HRegionServer,记为HRegionServer A

[2] 第二步:客户端访问HRegionServer A中的hbase:meta,通过行键查找hbase:meta获取本次写入操作所涉及的HRegionServer

[3] 第三步:客户端按照RegionServerRegion将数据打包发送到对应的HRegionServerRegionServer将数据写入对应的Region

[4] 第四步:客户端发送完待写数据后,会自动等待请求处理结果,如果客户端没有捕获到任何的异常,则认为所有数据写入成功。如果全部写入失败,或者部分写入失败,客户端能够获知详细的失败Key值列表。

3HBaseCompaction过程:当随着时间的增长,业务数据不断写入到HBase集群中,会导致HFile的数目越来越多。当HFile文件过多时,HBase就会启动一个Compaction的操作,其主要目的是为了减少同一个Region的同一个列族下面的小文件数目,从而提升读取的性能。Compaction主要包括MinorMajor两类。





以上是关于hbase和关系型数据库的区别的主要内容,如果未能解决你的问题,请参考以下文章

Hive和Hbase的区别

Hbase和传统数据库的区别

mongodb,redis,hbase三者的定位和区别

Hive 和 HBase 区别

Hive是啥,Hive与关系型数据库的区别

hbase-shaded-client和hbase-client的区别