Hbase 本身是数据库, 本身就是为了存储数据, 因此了解其存储原理对我们是很有必要的, 这样我们才能更好的使用 Hbase.
首先才能存储模式开始, Hbase 的存储模式与传统型的存储模式有什么区别.
行式存储与列式存储
列式存储 (Columnar or column-based) 是相对于传统关系型数据库的行式存储 (Row-basedstorage) 来说的. 简单来说两者的区别就是如何组织表
行式存储以一系列的行来存储一个表, 一行一行的进行存储
列式存储以一系列的列来存储一个表, 一个列一个列的进行存储
image
image
image
行式存储与列式存储的应用环境
如果需要关系查询, 那么行式存储很好
行式存储最大的优点是关系之间的解决方案, 表与表之间很大的关联关系并且数据量不大, 那么行式存储就是很好的选择. 记住因为它的线性扩展性不高, 需要保证数据量不能特别大, 控制在千万级与以下.
如果数据量非常大, 使用列式存储
在大数据, 利于压缩和扩展的肯定要选择列式存储, 如果事务使用率不高, 那么也最好使用列式存储, 随机更新更些行的频率不高, 也可以使用列式存储
Hbase 的列族式存储
列族就是多个数据列的组合, 列族式可以说是表的 schema 的一部分, 而列不是. Hbase 可以说是列簇数据库, 在创建表的时候要指定列族, 而不需要指定具体的列.
Hbase Table 组成:
Table = rowkey + family + column + timestamp + value
数据存储模式:
(Table, rowkey , family , column , timestamp) -> Value
Hbase 列数据默认可以保存 3 个版本, 不过可以设置该属于保存几个版本.
Hbase 数据存储原型
HBase 是一个稀疏的, 分布式, 持久, 多维, 排序的映射, 它以行键 (row key), 列键(column key) 和时间戳 (timestamp) 为索引.
Hbase 在存储数据的时候, 有两个 SortedMap, 首先按照 rowkey 进行字典排序, 然后再对 Column 进行字典排序.
image
这张图可以看到其存储排序是先由 rowkey 排序, 然后按列的名称进行排序
image
最后
Hbase 作为 NoSQL 数据库和传统型数据库有相似的地方, 但也有很大的差别, Hbase 更多的是为了扩展性和性能考虑, 弱化了事务, 一起带着全新的思维来学习 Hbase 吧
参考
几张图看懂列式存储
Hbase 模式设计介绍 https://zhuanlan.zhihu.com/p/36235199
Hbase 存储原理剖析 https://www.imooc.com/learn/996
来源: http://www.jianshu.com/p/9d373efcc336