Hbase学习笔记
数据模型
基本概念
- row:每一行都有一个唯一的rowkey,对应多个列以及列的值,一张表中的row是按照rowkey进行排序的
- column:hbase不同于常见的关系型数据库,其多了一个列族的概念,在定义一张hbase的表时,需要定义列族,一个列族中可以有多个列,列族中的列可以动态添加
- timestamp:在向表中添加列的值时,会附带一个时间戳timestamp,这个时间戳可以由系统来指定,也可以人为指定,一行的指定列中可以存在多个值,因此hbase支持多版本,及同一个列可以有多个值
- 单元格:(rowkey,column,type,timestamp,value)代表一个单元格,type是操作类型,比如put/delete,hbase是一个kv数据库,key是(rowkey,column,type,timestamp),value就是value
多维,稀疏,有序
- 多维:hbase这个kv数据库的key由多个维度组成,比如rowkey,column
- 稀疏:hbase中的一行可能只有一个列有值,如果这种情况发生在关系型数据库中,那么存储多个null值,而hbase则不需要存储这些null值
- 有序:hbase会将整个表进行分片存储,相同的列族的数据存放在一起,每个分片中首先按照rowkey从小到大排序,然后按照column从小到大排序,然后timestamp从大到小排序,即某个列最新的值排在前面
行式存储vs列式存储vs列族式存储
行式存储
同一行的数据存储在一起
优点
适用于需要获取一整行的情况
缺点
不适用于只需要获取少量几行的情况,因为这种情况下会将涉及的行的数据全部读取出来
列式村粗
将同一列的数据连续存储
优点
- 适用于只读取少量列的情况
- 因为同一列的数据具有相同的数据类型,因此可以进行压缩
缺点
不适用于读取整行的情况,因为需要读取多列
列族式
介于行式和列式之间,当每个列都是一个列族时,此时就是列式存储;当只有一个列族时,此时就是行式存储
结构模型
每个region中包含多个store,每个store用来存储一个列族中的数据
每个store中有一个memstore和多个hfile,首先将数据写入到memstore,超过阈值刷写到磁盘生成一个hfile,hfile满足一定条件会进行合并(一般框架设计涉及到写磁盘都会优先写入到内存中)
长处
- 存储大量数据
- 存储大量稀疏数据
- 扩展方便,加新的regionserver
- 写性能好
- 支持数据过期,设置了ttl,自动清理过期数据
短处
- 不支持复杂的聚合
- 本身不支持二级索引
- 本身不支持跨行事务,只支持单行事务
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。