总结:HBase的rowkey设计

编程

参考:一篇文章带你快速搞懂HBase RowKey设计

一、RowKey在查询中的作用

HBase中RowKey可以唯一标识一行记录,在HBase中检索数据有以下三种方式:

  1. 通过 get 方式,指定 RowKey 获取唯一一条记录
  2. 通过 scan 方式,设置 startRow 和 stopRow 参数进行范围匹配
  3. 全表扫描,即直接扫描整张表中所有行记录

二、rowkey设计技巧

1、越高频的查询字段排列越靠左

下面根据一个例子分别介绍下根据RowKey进行查询的时候支持的情况。

如果我们RowKey设计为uid+phone+name,那么这种设计可以很好的支持一下的场景:

uid=873969725AND phone=18900000000AND name=zhangsan

uid=873969725AND phone=18900000000

uid=873969725AND phone=189?

uid=873969725

难以支持的场景:

phone=18900000000AND name = zhangsan

phone=18900000000

name=zhangsan

从上面的例子中可以看出,在进行查询的时候,根据RowKey从前向后匹配,所以我们在设计RowKey的时候选择好字段之后,还应该结合我们的实际的高频的查询场景来组合选择的字段,越高频的查询字段排列越靠左

2、长度不宜太长

RowKey是一个二进制码流,可以是任意字符串,最大长度为64kb,实际应用中一般为10-100byte,以byte[]形式保存,一般设计成定长。建议越短越好,不要超过16个字节,原因如下:

  1. 数据的持久化文件HFile中时按照Key-Value存储的,如果RowKey过长,例如超过100byte,那么1000w行的记录,仅RowKey就需占用近1GB的空间。这样会极大影响HFile的存储效率。
  2. MemStore会缓存部分数据到内存中,若RowKey字段过长,内存的有效利用率就会降低,就不能缓存更多的数据,从而降低检索效率。
  3. 目前操作系统都是64位系统,内存8字节对齐,控制在16字节,8字节的整数倍利用了操作系统的最佳特性。

3、散列原则

设计的RowKey应均匀的分布在各个HBase节点上。

4、RowKey字段选择

RowKey字段的选择,遵循的

最基本原则是唯一性,RowKey必须能够唯一的识别一行数据。无论应用的负载特点是什么样,RowKey字段都应该

参考最高频的查询场景。数据库通常都是以如何高效的读取和消费数据为目的,而不是数据存储本身。然后,结合具体的负载特点,再对选取的RowKey字段值进行改造,组合字段场景下需要重点考虑字段的顺序。



 

以上是 总结:HBase的rowkey设计 的全部内容, 来源链接: utcz.com/z/515536.html

回到顶部