系统支持单行事务,进一步实现单行键下存储的数据的 读-修改-写(read-modify-write)序列
单元格的值可以当计数器用,并且支持原子更新,意味着这个计数器可以在一个操作中实现读写,客户端可以基于此实现一个全局强一致的计数器
协处理器(coprocessor): 可以在服务器的地址空间执行来自客户端的代码。用于实现轻量级的批处理作业,或者使用表达式分析或者汇总数据
通过包装器可以将表转换成MapReduce的输入输出目标
1.4.5 实现
数据存储在 存储文件(store file)中,称为HFile
- HFile中的键值是经过排序的
- 文件内部是连续的块,块的索引信息存储在尾部
- HFile被加载到内存中时,索引会优先加载到内存中
- 每个块默认是64KB
每次更新数据的时候发生了什么
- 数据记录到提交日志(commit log),在HBase中称之为 预写日志(write-ahead log, WAL)(存储在HDFS系统上)
- 数据写入内存中的 memstore
- 写入的数据超过阀值,数据被写入HFile
- 数据移出memstore,丢弃提交日志。采用滚动memstore可以实现不阻塞系统读写,即用空的新memstore获取更新数据,将旧的满的memstore转换成一个文件,由于memstore中的数据本来就排序好了,所以存储的时候不用再次排序
当记录被固化到HFile上之后,删除键值对并不是直接删除,而是做个删除标记delete marker。
查询结果是memstore+HFile的数据。
查询的时候用不到WAL,只有服务器内存中的数据在服务器崩溃前没有写入磁盘,而后进行恢复数据时才会用到WAL。
管家机制
HFile过多的时候有管家机制来处理,合并有两种类型:
minor合并:多个小文件合并成一个大文件,由于是多路归并所以速度快
major压缩合并:将region中一个列族的若干个HFile重写为一个新HFile。合并扫描所有键值对,顺序重写所有数据,重写数据的过程中会略过做了删除标记的数据。断言删除此时生效。
master 负责负载均衡,将繁忙服务器中的region移到负载轻的服务器中