1)数据模型
数据的存储方式,kv,非结构
2)存储模型
内存+磁盘
3)一致性
强一致性
4)物理模型
分布式
5)读写性能
同步写,副本支持读
6)辅助索引
key有效,bloom
7)故障管理
region移动,
8)压缩
多种压缩算法
gzip,snappy,lz4,bzip2,zstd
9)负载均衡
全局的 ,每5分钟一次
10)原子操作,
increaseAndget等,通过condition传递参数
11)锁
锁region,锁row,锁表。
二)hbase family和column
family 不宜过多 10多个就很多了,名字必须要可打印的字符,越短越好,最好就一个字母
qualifier 个数没有要求,
三)value
(table,rowkey,family,column,timestamp) 决定 value
可以是
sortedMap<RowKey,list<SortedMap<Column,list<Value,Timestamp>>>>
一个list 就是一行记录,元素是famly下的HFile。
4)读写:
每一个HFIle有一个索引块,可以查询,
过程:
在内存中通过二分查找,定为出块,加载块到内存,读取需要的数据。
每次跟新数据都会先提交WAL,然后写入内存,当达到一定数量写入磁盘,这个可以查看我的博客(habse 源码分析)
移除内存后 ,清空不需要的WAL,memestore 是滚动的,在flush过程会启动新的一个memstore,这样不影响写过程,因为memstore 是排序的所以flush过程不需要 排序。读过程不会写WAL,因为对数据没有变化。
数据删除只是标记删除(墓碑删除),flush过程会清楚删除的数据和TTL过期的的数据。
5) 文件合并
小文件定时会合并成大文件(minor compaction),速度快,归并就行,因为本身就是有序的。
major 合并是将一个region中的一个列族,全部重新分割,会去除标记删除的数据。(
major
compaction
),全局变化