行键如何设计¶
理解 HFILE 的数据布局¶
每个Cell在物理文件中存储时,包含:行、列族/列限定、时间戳、值,这些存储内容被称作KeyValue。
KeyValue在存储到文件时:
- 先按行键排序;
- 当一行有多个单元格时按列键排序;
- 最后按照版本排序;
用户设计表时,应该在 RowKey 中保存最关键的信息。 用户查询时,筛选性能:“行列、列键、值”依次下降。
高表和宽表¶
在设计中,HBase更加适合高表。假设设计 rowkey 为\<user-id>-\<message-id>,通过 部分键扫描 可以将,相同user-id的数据一次性获取。
在扩展行键\<user-id>-\<date-id>-\<message-id>,则又多了一个维度可以搜索用户指定时间的数据
时间序列¶
避免使用单一时间序列作为行键。
基于HBase的时间序列DB,OpenTSDB
使用布隆过滤器¶
使用布隆过滤器可以提升get/scan的性能,但是同时也有一定内存消耗。
是否使用布隆过滤器,需要根据表的Cell大小决定。如果Cell很大,那么可以考虑开启过滤器!
实现二级索引¶
通过辅助索引表¶
由客户端完全控制逻辑,但是由于HBase不支持事务,可能出现索引表和主表不一致的场景。此时需要定期修剪索引表。
Indexed-Transactional HBase 项目¶
已经挂了
IHBase项目¶
也挂了
通过协处理器¶
华为主导的 hindex - Secondary Index for HBase 项目就是通过协处理器实现。