Hbase简介
- HBase是一个开源的非关系型分布式数据库( NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java。
- HBase是一个分布式存储系统,具有高可靠性、高性能、面向列、可伸缩(增加或减少硬件的数量)的特点。
高可靠:1.底层文件存储采用的是HDFS,具有副本机制。
高性能:1.分布式系统,通过并行度提高性能
2.通过表的切分,实现与store的存储
3. HBase利用Hadoop HDFS作为其文件存储系统
- HBase适合具有如下需求的应用:
- 海量数据( TB、 PB)
- 高吞吐量
- 需要在海量数据中实现高效的随机读取
- 需要很好的性能伸缩能力
- 能够同时处理结构化和非结构化的数据
- 不需要完全拥有传统关系型数据库所具备的ACID特性
Hbase 逻辑模型
- 基本结构
- 表(table) 字符串
- 行(row) 行由行健(rowkey)唯一标识
- 列族(column failmy)行的数据按列族分组cf,创建表的时候定义,不轻易修改
- 列限定符(column qualifier)列里面的数据定位通过列限定符
- 单元(cell)行健,列族和列限定符一起确定一个单元,value
- 时间版本(vesion)单元值有时间版本,用时间戳来标识默认1个。
- 主键(Row Key)
- 用来检索记录的主键。
- 主键为任意字符串,最大长度为64kb,按字典顺序存储,在HBase内部保存为字节数组
- 访问HBase 表中的行,只有三种方式
– 通过单个Row Key访问
– 通过Row Key的range
– 全表扫描
- 列族(Column Family)
- 列族在创建表的时候声明,一个列族可以包含多个列,列中的数据都是以二进制形式存在,没有数据类型。
- 列族是一些列的集合。
- 一个列族所有列成员是有着相同的前缀。比如,列courses:history 和 courses:math都是 列族 courses的成员.冒号(:)是列族的分隔符,用来区分前缀和列名
- 时间戳与存储单元(Timestamp and Cell)
- HBase中通过row和columns确定的为一个存贮单元称为cell。每个 cell都保存着同一份数据的多个版本。
- 在写入数据时,时间戳可以由HBase自动赋值(当前系统时间精确到毫秒),也可以显示赋值。
- 每个cell中,不同版本的数据按照时间的倒序排序。
{row, column, version}元组就是一个HBase中的一个 cell。