笔者从一开始接触hbase就在思考rowkey设计,希望rowkey设计得好,能够支持查询的需求。使用hbase一段时间后,再去总结一些hbase的设计方法,无外乎以下几种:

  • reverse
  • salt
  • hash

本质上都是避免热点问题。那么如何根据查询场景设计rowkey?rowkey设计之道是什么?

rowkey设计之道

hbase通过分治策略将数据分散到1-N个Region中,以满足业务的读写需求,合理的分配是关键,这就涉及rowkey的设计。


抛开缓存,只从rowke的角度来考虑读写,如果追求读取高效,则希望查询时的数据是相对集中的,扫描范围比较小;如果写入比较大,更多的是靠集群的性能来支撑,对负载均衡要求比较高,也就是要最大化发挥集群的性能。


rowkey的设计,主要是根据查询的需求来设计。

  1. 收集各种查询需求与时延要求
  2. 解决最主要的矛盾:最高频查询场景是什么?
  3. 其他的查询场景和频度?

接下来进一步细化:如各种查询中是否多维查询?等等


梳理数据的特点,可以将理论与实践更好的结合。如果不知道数据的分布特点,仅仅根据字段的情况来设计rowkey,会出现这种情况:

我们根据省份这个字段进行hash,将数据分散到不同的region,但问题是我们的用户很可能就是集中在某几个省份,像江浙沪这种经济发达的大省,这种rowkey的设计,就是忽略了数据分布的特点,造成了热点问题。其他忽略数据分布的特点,还容易造成数据分析过程中的数据倾斜问题。

所以在rowkey设计中要注意数据的分布特点,同时考虑数据的生命周期。

rowkey索引设计

二级索引

组合索引

rowkey索引设计,是rowkey设计之术。

小结

rowkey设计之术,只见树木不见森林,很容易让人迷茫。从rowkey设计之道出发,让我们不再徘徊。

参考文献

最新文章

  1. c#线程间操作UI-Invoke和BeginInvoke
  2. 像Maven一样构建java项目的目录,更好的管理java工程的源码
  3. python 内置函数和函数装饰器
  4. 使用ssh正向连接、反向连接、做socks代理的方法
  5. 外部引用JavaScript文件乱码问题
  6. 弱类型变量原理探究(转载 http://www.csdn.net/article/2014-09-15/2821685-exploring-of-the-php)
  7. php可变变量
  8. [转]一个基于完成端口的TCP Server Framework,浅析IOCP
  9. 第四届CCF软件能力认证(CSP2015) 第五题(最小花费)题解
  10. Java Web学习笔记-Servlet不是线程安全的
  11. 办理滑铁卢大学(本科)学历认证『微信171922772』UW学位证成绩单使馆认证University of Waterloo
  12. UnityShader实现物体被遮挡描边
  13. oracle数据库备份和恢复
  14. ubuntu16.04 npm安装
  15. 微信支付---公众号支付和H5支付区别
  16. 使用TidCookieManager得到cookie
  17. Java环境编写
  18. 【Android】amr播放
  19. Python爬虫进阶四之PySpider的用法
  20. HAProxy安装及简单配置

热门文章

  1. 1、2 建立list(RestController),并postman测试
  2. [转帖]详解oracle数据库唯一主键SYS_GUID()
  3. 【LOJ】#3020. 「CQOI2017」小 Q 的表格
  4. 针对Quizii的基本抓包实验(Fiddler)
  5. 通过getAdaptiveExtension生成的动态类
  6. 附录:ARM 手册 词汇表
  7. java——数据类型和运算符
  8. MySQL 子查询(四)子查询的优化、将子查询重写为连接
  9. Entity framework 意外删除了表,如何在不影响其它表的情况下恢复回来
  10. Abp 领域事件简单实践 <二>