![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5d6c7ebbd8da89c7d62d811f30c718b0.png)
HBase简介
Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库。
利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务主要用来存储非结构化和半结构化的松散数据(列存NoSQL数据库)
HBase优点
-
容量大
Hbase单表可以有百亿行、百万列,数据矩阵横向和纵向两个维度所支持的数据量级都非常具有弹性
-
面向列
面向列的存储和权限控制,并支持独立检索,可以动态增加列,即可单独对列进行各方面的操作列式存储,其数据在表中是按照某列存储的,这样在查询只需要少数几个字段的时候,能大大减少读取的数量 -
多版本:
Hbase的每一个列的数据存储有多个Version,比如住址列,可能有多个变更,所以该列可以有多个version -
稀疏性:
为空的列并不占用存储空间,表可以设计的非常稀疏。不必像关系型数据库那样需要预先知道所有列名然后再进行null填充
-
拓展性:
底层依赖HDFS,当磁盘空间不足的时候,只需要动态增加datanode节点服务(机器)就可以了 -
高可靠性:
WAL机制,保证数据写入的时候不会因为集群异常而导致写入数据丢失
Replication机制,保证了在集群出现严重的问题时候,数据不会发生丢失或者损坏Hbase底层使用HDFS,本身也有备份。 -
高性能:
底层的LSM数据结构和RowKey有序排列等架构上的独特设计,使得Hbase写入性能非常高。
Region切分、主键索引、缓存机制使得Hbase在海量数据下具备一定的随机读取性能,该性能针对Rowkey的查询能够到达毫秒级别,LSM树,树形结构,最末端的子节点是以内存的方式进行存储的,内存中的小树会flush到磁盘中(当子节点达到一定阈值以后,会放到磁盘中,且存入的过程会进行实时merge成一个主节点,然后磁盘中的树定期会做merge操作,合并成一棵大树,以优化读性能。)
HBase应用
Hbase是一种NoSQL数据库,这意味着它不像传统的RDBMS数据库那样支持SQL作为查询语言。Hbase是一种分布式存储的数据库,技术上来讲,它更像是分布式存储而不是分布式数据库,它缺少很多RDBMS系统的特性,比如列类型(没有int,string等类型),辅助索引,触发器,和高级查询语言等待。那Hbase有什么特性呢?如下:
什么时候用Hbase? Hbase不适合解决所有的问题:
- 首先数据库量要足够多,如果有十亿及百亿行数据,那么Hbase是一个很好的选项,如果只有几百万行甚至不到的数据量,RDBMS是一个很好的选择。因为数据量小的话,真正能工作的机器量少,剩余的机器都处于空闲的状态
- 其次,如果你不需要辅助索引,静态类型的列,事务等特性,一个已经用RDBMS的系统想要切换到Hbase,则需要重新设计系统。
- 最后,保证硬件资源足够,每个HDFS集群在少于5个节点的时候,都不能表现的很好。因为HDFS默认的复制数量是3,再加上一个NameNode。
- Hbase在单机环境也能运行,但是请在开发环境的时候使用。
内部应用
- 存储业务数据(结构化): 车辆GPs信息,司机点位信息,用户操作信息,设备访问信息。。。
- 存储日志数据(半结构化): 架构监控数据(登录日志,中间件访问日志,推送日志,短信邮件发送记录。。。),业务操作日志信息
- 存储业务附件(非结构化): UDFS系统存储图像,视频,文档等附件信息
不过在公司使用的时候,一般不使用原生的Hbase API,使用原生的API会导致访问不可监控,影响系统稳定性,以致于版本升级的不可控。
数据库分类
数据库类型 | 特性 | 优点 | 缺点 |
---|---|---|---|
关系型数据库 Oracle、 Mysql | 1、关系型数据库,是指采用了关系模型来组织数据的数据库; 2、关系型数据库的最大特点就是事务的一致性; 3、简单来说,关系模型指的就是二维表格模型,而—个关系型数据库就是由二维表格及其之间的联系所组成的—个数据组织。 | 1、容易理解:二维表结构是非常贴近逻辑世界—个概念,关系模型相对网状、层次等其他模型来说更容易理解; 2、使用方便:通用的SQL语言使得操作关系型数据库非常方便; 3、易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不—致的概率; 4、支持SQL,可用于复杂的查询。 | 1、为了维护—致性所付出的巨大代价就是其读写性能比较差; 2、固定的表结构; 3、高并发读写需求; 4、海量数掘的高效率读写; |
非关系型数据库 Redis、 HBase | 1、使用键值对存储数据; 2、分布式; 3、—般不支持ACID特性; 4、非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。 | 1、无需经过sql层的解析,读写性能很高; 2、基于键值对,数据没有耦合性,容易扩展; 3、存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,而关系型数据库则只支持基础类型。 | 1、不提供sql支持 学习和使用成本较高 2、无事务处理,附力加功能b和报表等支持也不好; |
简单的理解:
-
关系型数据库
- 通过表与表的字段管理描述对象与对象的关系。
- 这种表都是基于行存储的 (插入数据的时候,即使没有数据也要插入null),获取数据的时候,即使只获取一个列,也要先查出一行,我们获取数据只需要两个维度即可( id,column)
-
非关系型数据库
-
半结构化–更加灵活
user1={uname:“zs”,age:18}。 -
非结构化
图片,视频
-
HBase和RDBMS
属性 | Hbase | RDBMS |
---|---|---|
数据类型 | 只有字符串 | 丰富的数据类型 |
数据操作 | 增删改查,不支持join | 各种各样的函数与表连接 |
存储模式 | 基于列式存储 | 基于表结构和行式存储 |
数据保护 | 更新后仍然保留旧版本 | 替换 |
可伸缩性 | 轻易增加节点 | 需要中间层,牺牲性能 |
重要概念区分
HDFS: 分布式文件系统
HBase : 分布式数据库
HIVE: 分布式数据仓库
RDBMS:传统数据库