hbase实践之Rowkey设计之道
笔者从一开始接触hbase就在思考rowkey设计,希望rowkey设计得好,能够支持查询的需求。使用hbase一段时间后,再去总结一些hbase的设计方法,无外乎以下几种:
- reverse
- salt
- hash
本质上都是避免热点问题。那么如何根据查询场景设计rowkey?rowkey设计之道是什么?
rowkey设计之道

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


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

rowkey的设计,主要是根据查询的需求来设计。
- 收集各种查询需求与时延要求
- 解决最主要的矛盾:最高频查询场景是什么?
- 其他的查询场景和频度?
接下来进一步细化:如各种查询中是否多维查询?等等

梳理数据的特点,可以将理论与实践更好的结合。如果不知道数据的分布特点,仅仅根据字段的情况来设计rowkey,会出现这种情况:
我们根据省份这个字段进行hash,将数据分散到不同的region,但问题是我们的用户很可能就是集中在某几个省份,像江浙沪这种经济发达的大省,这种rowkey的设计,就是忽略了数据分布的特点,造成了热点问题。其他忽略数据分布的特点,还容易造成数据分析过程中的数据倾斜问题。
所以在rowkey设计中要注意数据的分布特点,同时考虑数据的生命周期。
rowkey索引设计
二级索引

组合索引


rowkey索引设计,是rowkey设计之术。
小结
rowkey设计之术,只见树木不见森林,很容易让人迷茫。从rowkey设计之道出发,让我们不再徘徊。
参考文献
hbase实践之Rowkey设计之道的更多相关文章
- hbase实践之rowkey设计
rowkey设计的重要性 rowkeys是HBase表设计中唯一重要的一点. rowkey设计要求 唯一性 存储特性 按照字典顺序排序存储 查询特性 由于其存储特性导致查询特性: 查询单个记录: 查定 ...
- Hbase 表的Rowkey设计避免数据热点
一.案例分析 常见避免数据热点问题的处理方式有:加盐.哈希.反转等方法结合预分区使用. 由于目前原数据第一字段为时间戳形式,第二字段为电话号码,直接存储容易引起热点问题,通过加随机列.组合时间戳.字段 ...
- Hadoop HBase概念学习系列之RowKey设计(二十九)
HBase里的RowKey设计,分为随机查询的RowKey设计和连续查询的RowKey设计.
- Hbase Rowkey设计
转自:http://www.bcmeng.com/hbase-rowkey/ 建立Schema Hbase 模式建立或更新可以通过 Hbase shell 工具或者使用Hbase Java API 中 ...
- HBase的RowKey设计原则
HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定 ...
- 大数据性能调优之HBase的RowKey设计
1 概述 HBase是一个分布式的.面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有就是它基于列的而不是基于行的模式. 既然HBase是采用KeyValue ...
- HBase Rowkey 设计指南
为什么Rowkey这么重要 RowKey 到底是什么 我们常说看一张 HBase 表设计的好不好,就看它的 RowKey 设计的好不好.可见 RowKey 在 HBase 中的地位.那么 RowKey ...
- Hbase rowkey设计+布隆过滤器+STORE FILE & HFILE结构
Rowkey设计 Rowkey设计原则 Rowkey设计应遵循以下原则: 1.Rowkey的唯一原则 必须在设计上保证其唯一性.由于在HBase中数据存储是Key-Value形式,若HBase中同一表 ...
- HBase之六:HBase的RowKey设计
数据模型 我们可以将一个表想象成一个大的映射关系,通过行健.行健+时间戳或行键+列(列族:列修饰符),就可以定位特定数据,Hbase是稀疏存储数据的,因此某些列可以是空白的, Row Key Time ...
随机推荐
- vue+element-ui 实现table单元格点击编辑,并且按上下左右键单元格之间切换
通过我的测试我发现两个两种方法来编辑单元格的内容 第一种点击编辑: 我是给td里添加一个input,将值赋值给input,当失去焦点的时候将input的值付给td原来的内容,然后将input删除, 代 ...
- [转帖]超能课堂(199) 接口渐趋统一,USB4又如何能引领变革?
https://www.expreview.com/70414.html 接口协议真复杂.. 9月3日,USB IF正式公布了USB4(你没看错,就是USB4,没有空格)的技术规格.USB-IF表示, ...
- 【转】sql server迁移到mysql
SQL Server转换为MySQL工具,用了一下 感觉蛮不错的. 下载地址:https://www.jb51.net/softs/209207.html#downintro2 分享上来,同时也以便记 ...
- [tensorflow] 入门day1-数据整理与展示
tensorflow真是一个我绕不开的坑(苍天饶过谁.jpg) 其实tensorflow1和2的差别挺大的,暂时从1入坑,2的话之后简单过一下. tf2中更改的函数(供参考):https://docs ...
- LC 33. Search in Rotated Sorted Array
问题描述 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. ...
- Kubernetes对Pod调度指定Node以及Node的Taint 和 Toleration
由于博客园不支持markdown,推荐以下url阅读: 原创url:https://blog.csdn.net/weixin_42495873/article/details/103364868 ## ...
- 1187: 零起点学算法94——今年暑假不AC(Java)
1187:零起点学算法94--今年暑假不AC Time Limit: 1 Sec Memory Limit: 32 MB 64bit IO Format: %lld Description " ...
- [eclipse]UML之AmaterasUML 插件
软件体系结构分析软件设计模式要求给出相应设计模式源码对应的UML类图,在此之前我安装过一种UML插件,可以自动生成一个源码包对应的UML类图,但是重装过系统,所以软件包括eclipse都重新下载了新的 ...
- java之集合那些事
集合概述: 集合和数组都可以保存多个对象,但是数组的长度不可变,集合可以保存数量变化的数据.java中的集合类主要由两个接口派生出,Collection和Map Collection接口和Iterat ...
- jq使用ajax请求,返回状态 canceled错误
在使用jq,ajax请求时出现该错误 原因:button按钮类型为type=submit ,script中又自定用botton按钮点击提交ajax,造成冲突. 解决方法:button按钮类型改为 ty ...