第一章HBase简介
1. HBase即hadoop数据库,HBase是一个分布式的、持久的、强一致性的存储系统,具有近似最优的写性能和出色的读性能。
2. HBase并不是一个列式存储的数据库,但它利用了磁盘上的列式存储格式。传统的列式存储数据库适合实时存取数据的场景,HBase适合键值对的数据存储,或者有序的数据存储。
3. 一行由若干列组成,若干列又构成了一个列族(column family)。列族数量只限于几十,实际上更少。而列的数量没有限制,一个列族里面可以有数百万个列,列值也没有类型和长度的规定。
4. HBase中扩展和负载均衡的基本单元称为region,region本质上是以行键排序的连续存储的区间。一张表初始的时候只有一个region,当插入的表数据增大,region大小超过配置值,从中间键处这个region拆分成两个大致相等的子region。每一个region只能由一台region服务器加载。每台服务器最佳数量差不多是10-1000,但每个region的最佳大小是1GB-2GB。
5. HBase数据存储文件Hfile,HFile中存储的是经过排序的键值映射结构。文件内部由连续的块组成,块的索引信息存储在文件的尾部。每个HFile都有一个块索引,通过二分查找检索信息。
6. 每次更新数据,都会先将数据记录在提交日志(commit log)中,在HBase中这叫做预写日志(write-ahead log,WAL),然后才会将数据写入内存的memstore中。当内存中写入的数据量达到了一定数量,系统就会将这些数据移除内存作为HFile文件刷写到磁盘中。
7. 因为存储文件是不可改变的,所以无法通过移除键值对来简单删除值。可行的办法是做个删除标记(delete marker),使得客户端读不到实际值。
8. 每次读取的数据包括两个部分,即内存中memstore和磁盘上的存储文件。