HBase行键设计

3分钟了解HBase行键设计

HBase行键需要满足如下原则:

唯一原则:行键对应关系型数据库的唯一键,系统设计之初必须考虑有足够的唯一行键去支持业务的数据量。

长度原则:长度适中,一般从几十到一百字节,建议使用定长,方便从行键提取所需数据,而无须查询出数据内容以节省网络开销。

散列原则:避免递增,否则读写负载都会集中在某个热点分区,降低性能,甚至引起分区服务器过载而宕机。

HBase行键设计技巧

由于HBase不支持二级索引,所以HBase行键作为唯一的也是最有效的索引,需要尽可能多的糅合各种查询条件以提高查询效率,常见的设计技巧有:

反转补齐:对于用来存储实体数据的表,通常将实体ID(如用户ID)反转补齐位数后作为行键的开始,这样首先满足了对该实体数据查询的需求,同时由于反转了实体ID,所以最近产生的实体以及其数据不会落到同一个Region,避免了热点区间的产生。

使用GeoHash:GeoHash算法可以用来将多维数据映射为一维字符串,尤其是基于空间的经纬度数据,空间上靠近的经纬度点映射后的一维字符串在字典顺序上也靠近(当然会有特殊的临界问题)。

OpenTSDB: OpenTSDB是基于HBase的一个存储时序数据的数据库应用,通常用来存储一些系统的监控数据或者系统日志,OpenTSDB的行键设计类似对HBase的行键做了一个二次索引,格式为:

UID___matric___+TimeBase+UID___tag1key___+UID___tag1value___+UID___tag2key___+UID___tag2value___+UID___tagNkey___+UID___tagNvalue___

其行键设计会将所有的监控指标或者需要查询的业务标签均映射到一个等长的UID,然后将监控指标的UID作为行键的开始,这样设计有几个好处:

  1. 因为通常查询监控数据的时候都会选定一个监控指标(如CPU、内存等),这样相同监控指标的数据会相邻存储,提供查询效率。
  2. 将监控指标映射为等长的UID可以减少行键的长度与重复度,减少存储空间,同时可以方便的从行键根据偏移量反向推演出监控指标。
上一篇:Segment Routing


下一篇:未来,你是「透明的」!计算机通过人脑信号预测想法,还原人脑图像准确率高达83%