数据库
首页 > 数据库> > HBase技术原理(nosql)

HBase技术原理(nosql)

作者:互联网

  NoSQL数据库 关系型数据库与NoSQL数据库的主要区别 CAP理论和BASE原则 HBase概述 HBase与关系数据库的对比 HBase应用场景 HBase数据模型 HBase表结构 行存储和列存储的比较 HBase架构 HBase架构介绍 HFile文件格式 Region定位(1) Region定位(2) 用户读写数据过程 Flush机制 Compaction机制(1) Compaction机制(2) Region拆分 其他流程 HBase性能优化-行键 HBase性能优化-预分区 HBase性能优化-表热点现象 HBase常用操作 DDL操作(1) DDL操作(2) 权限管理 NoSQL数据库
  1. 键值存储数据库
  2. 列存储数据库
  3. 文档数据库
  4. 图数据库
  关系型数据库与NoSQL数据库的主要区别

 

 

  CAP理论和BASE原则
  1. 一致性
  2. 可用性
  3. 分区容错性
  1. 基本可用
  2. 软状态
  3. 最终一致性
  HBase概述
  1. 适合于存储大表数据(表的规模可以达到数十亿行以及数百行列),并且对大表数据的读,写
  2. 访问可以达到实时级别。
  3. 利用Hadoop HDFS作为其文件存储系统,提供实时读写的分布式数据库系统。
  4. 利用Zookeeper作为协同服务。
  HBase与关系数据库的对比
  1. 数据索引:关系数据库通常可以针对不同列构建复杂的多个索引,以提高数据访问性能。HBase只有一个索引,即行键。通过巧妙的设计,HBase中的所有访问方法,或者通过行键访问,后者通过行键扫描,从而使得整个系统不会慢下来。
  2. 数据维护:在关系数据库中,更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在。而在HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留。
  3. 可伸缩性:关系数据库很难实现横向扩展,纵向国战的空间也比较有限。相反,HBase和BigTable这些分布式数据库就是为了实现灵活的水平扩展而开发的,能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩。
  HBase应用场景

 

 

  HBase数据模型
  1. 一个表可以有上亿行,上百行列
  2. 面向列(族)的存储和权限控制,列(族)兜里检索
  3. 表结构稀疏,行和列的交叉点被称为cell,表的行键也是一段字节数组
  4. 所有的表都必须有主键,表是按key排序的

 

 

  HBase表结构

 

 

  行存储和列存储的比较
  1. 优点:有利于增加/修改整行记录等操作;有利于整行数据的读取操作。
  2. 单列查询时,会读取一些不必要的数据。
  1. 优点:有利于面向单列数据的读取/统计等操作。
  2. 缺点:整行读取时,可能需要多次I/O操作。

 

 

HBase架构

 

 

  HBase架构介绍
  1. 包含访问HBase的接口,并维护Cache来加快对HBase的访问
  1. 主要负责表和region的管理工作
  1. 主要负责相应用户的I/O请求,向HDFS中读/写数据
  2. 管理了一系列HRegin对象,每个HRegin由多个store组成
  HFile文件格式
  1. Data Block:保存table中的数据
  2. Meta Block:保存用户自定义的key-value对
  3. file Info:HFile的元信息
  4. Data Block Index:Data Block的索引
  5. Trailer:这一段是定长的,保存了每一段的偏移量。
  Region定位(1)

 

 

Region定位(2)   用户读写数据过程   Flush机制
  1. MemStore到达HBase.hregion.memstore.flush.size(默认128MB),所有Memstore触发FLush。
  2. 当MemStore的内存用量比例到达HBase.regionserver.global.me mstore.upp -erlimit的指定大小时,触发Flush。Flush的顺序基于Memstore内存用量大小的倒序,直到MemStore内存用量小于HBase.regionserver.global.memstore.lowerlimiit.
  3. 当wal的日志数量超过HBase.regionserver.max.logs,MemStore就会FLush到磁盘,降低WAL中的日志数量。最“老”的MemStore会第一个被Flush,直到日志数量小于HBase.regionserver.max.logs。
  4. HBase定期Flush MemStore:默认周期为1小时,确保MemStore不会长时间没有持久化。
  5. 手动执行Flush。
  Compaction机制(1) Compaction机制(2)
  1. MemStore Flush
  2. 后台线程周期性检查
  3. 手动触发
  Region拆分
  1. constantsizeregionsplitpolicy
  2. increasingtoupperboundregionsplitpolicy
  3. steppingsplitpolicy
  4. delimitedkeyprefixregionsplitpolicy
  5. disabledregionsplitpolicy
  其他流程
  1. Region拆分更多处于提高性能的目的,但Region合并更多出于维护系统的目的。
  1. 一种预写日志。
  2. 用户更新的数据必须先写入日志后,才能写入MemStore缓存。
  3. 知道MemStore缓存内容对应的日志已经写入磁盘,该缓存内容才能被Flush到磁盘。
  HBase性能优化-行键   HBase性能优化-预分区
  1. 通过在创建表语句中指定行键的前缀界限来指定预分区
  2. create 'person','info1','info2',SPLITS=>['1000','2000','3000','4000']
  1. HexStringSplit适用于采用十六进制的字符串作为前缀的行键
  2. DecimalStringSplit适用于采用十进制数字字符串作为前缀的行键
  3. UniformSplit则适用于前缀完全随机的行键。
  HBase性能优化-表热点现象
  1. 预分区:让表中的数据可以均衡的分散在集群中
  2. 加盐:RowKey的前面增加随机数
  3. 反转:反转固定长度或者数字格式的行键,可以使得行键中经常改变的部分(最没有意义的部分)放在前面。
  HBase常用操作
  1. hbase>status
  2. hbase>status 'simple'
  3. hbase>status 'summary'
  4. hbase>status 'detailed'
  1. hbase>help
  DDL操作(1)
  1. hbase>list
  1. hbase>describe 'tablename'
  1. create<table>,{NAME=><family> [VERSIONS=><version>...]}
  1. hbase>alter 't1',NAME=> 'f1',VERSIONS=>5
  DDL操作(2)
  1. put <table>,<rowkey>,<family:column>,<value>,<timestamp>
  1. get<table>,<rowkey>,[<family:column>,...]
  1. scan <table>,{COLUMNS=>[<family:column>,...],LIMIT=>num}
  1. delete<table>,<rowkey>,<family:column>,<timestamp>
  1. truncate<table>(慎用)
  权限管理
  1. grant <user> <permissions> <table> <column family> <column qualifier>
  2. 权限用R,W,X,C,A这5个字母表示,其对应关系为READ('R'),WRITE('w'),EXEC('x'),CREATE('C'),ADMIN('A')
  1. user_permission<table>
  1. revoke <user> <table> <column family> <column qualifier>


标签:存储,nosql,行键,Region,MemStore,原理,HBase,数据
来源: https://www.cnblogs.com/06080410z/p/16529283.html