Skip to content

行键如何设计

理解 HFILE 的数据布局

每个Cell在物理文件中存储时,包含:行、列族/列限定、时间戳、值,这些存储内容被称作KeyValue。

KeyValue在存储到文件时:

  1. 先按行键排序;
  2. 当一行有多个单元格时按列键排序;
  3. 最后按照版本排序;

用户设计表时,应该在 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 项目就是通过协处理器实现。

通过Solar和HBase集成