HBase 的数据模型
Hbase是一个稀疏的长期存储在磁盘上的有序的映射表,因为是稀疏存储,所以同一张表里面的每一行数据都可以有截然不同的列。
数据都是字符串,没有类型
概念视图
- RowKey:行主键, HBase不支持条件查询和Order by等查询,读取记录只能按Row key(及其range)或全表扫描
- Column Family:列族,在表创建时声明,每个Column Family为一个存储单元存储在一个Store中
- Column:列,HBase的每个列都属于一个列族,以列族名为前缀,如列article:title和article:content属于article列族 ,会依照列名排序。列可以动态的增加
- Timestamp:HBase通过row和column确定一份数据,这份数据的值可能有多个版本,不同版本的值按照时间倒序排序,即最新的数据排在最前面,查询时默认返回 最新版本。
- Value:值
存储结构可以理解为:
SortedMap(Rowkey,List(
SortedMap(Column,List(
Value,Timestamp
))
))
特点
- HBase只有很简单的插入,查询,删除,清空等操作,表和表之间是分离的
- 基于列存储的,每个列族都有几个文件保存,不同列族的文件是分离的,后面会提到。
- 确切的来说,HBase的更新操作应该不叫更新,虽然一个主键或列会对应新的版本,但它的旧版本依然会保留
Hbase的适用场景
- 需要对数据进行随机读写操作
- 大数据上高并发操作,比如没秒对PB级数据进行上千次操作
- 只进行非常简单直接的读写访问,查询场景简单
Hbase的基本操作
名称 | 命令表达式 |
创建表 | create '表名称','列簇名称1','列簇名称2'....... |
添加记录 | put '表名称', '行名称','列簇名称:','值' |
查看记录 | get '表名称','行名称' |
查看表中的记录总数 | count '表名称' |
删除记录 | delete '表名',行名称','列簇名称' |
删除表 | ①disable '表名称' ②drop '表名称' |
查看所有记录 | scan '表名称' |
查看某个表某个列中所有数据 | scan '表名称',['列簇名称:'] |
更新记录 | 即重写一遍进行覆盖 |