笔者从一开始接触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设计之道出发,让我们不再徘徊。

参考文献

hbase实践之Rowkey设计之道的更多相关文章

  1. hbase实践之rowkey设计

    rowkey设计的重要性 rowkeys是HBase表设计中唯一重要的一点. rowkey设计要求 唯一性 存储特性 按照字典顺序排序存储 查询特性 由于其存储特性导致查询特性: 查询单个记录: 查定 ...

  2. Hbase 表的Rowkey设计避免数据热点

    一.案例分析 常见避免数据热点问题的处理方式有:加盐.哈希.反转等方法结合预分区使用. 由于目前原数据第一字段为时间戳形式,第二字段为电话号码,直接存储容易引起热点问题,通过加随机列.组合时间戳.字段 ...

  3. Hadoop HBase概念学习系列之RowKey设计(二十九)

    HBase里的RowKey设计,分为随机查询的RowKey设计和连续查询的RowKey设计.

  4. Hbase Rowkey设计

    转自:http://www.bcmeng.com/hbase-rowkey/ 建立Schema Hbase 模式建立或更新可以通过 Hbase shell 工具或者使用Hbase Java API 中 ...

  5. HBase的RowKey设计原则

    HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定 ...

  6. 大数据性能调优之HBase的RowKey设计

    1 概述 HBase是一个分布式的.面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有就是它基于列的而不是基于行的模式. 既然HBase是采用KeyValue ...

  7. HBase Rowkey 设计指南

    为什么Rowkey这么重要 RowKey 到底是什么 我们常说看一张 HBase 表设计的好不好,就看它的 RowKey 设计的好不好.可见 RowKey 在 HBase 中的地位.那么 RowKey ...

  8. Hbase rowkey设计+布隆过滤器+STORE FILE & HFILE结构

    Rowkey设计 Rowkey设计原则 Rowkey设计应遵循以下原则: 1.Rowkey的唯一原则 必须在设计上保证其唯一性.由于在HBase中数据存储是Key-Value形式,若HBase中同一表 ...

  9. HBase之六:HBase的RowKey设计

    数据模型 我们可以将一个表想象成一个大的映射关系,通过行健.行健+时间戳或行键+列(列族:列修饰符),就可以定位特定数据,Hbase是稀疏存储数据的,因此某些列可以是空白的, Row Key Time ...

随机推荐

  1. 使用idea上传项目初始化版本到coding

    1.在coding创建项目 2.使用idea命令控制台初始化本地仓库 3.将代码提交到本地仓库,git add . 或者 git add <filename> 4.将本地仓库文件推送到co ...

  2. DRF图片路径问题的解决方法,网上爬取的图片放到ImageFiled自动带上域名

    由于博客园不支持markdown,推荐下面的url访问 原创url: https://blog.csdn.net/weixin_42495873/article/details/89440437 - ...

  3. Idea打开一个原有的项目常见问题

    无法编译 Java版本不一致 Setting所有涉及java版本的均改为现有版本(例如1.8,里面有的显示8) Project     Modules Library SDKS Project str ...

  4. WUTOJ 1284: Gold Medal(Java)

    1284: Gold Medal 题目   有N个砝码,重量为:3i-1(1<=i<=N),有一块重量为 W 的金牌.现在将金牌放在天平的左边.你需要将砝码放在左边或右边使得天平平衡,如果 ...

  5. [Vue]vue中路由重定向redirect

    1.重定向的地址不需要接收参数 const routes = [ { path: '/', redirect: '/index'}, { path: '/index', component: inde ...

  6. flex应用实例

    代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...

  7. drunk_admin_hacking_challenge靶机之旅?

    注:  只是记录本人玩的时候发现的新奇点  如果你也想玩且看了这篇文章还是不会,请联系gg 靶机下载地址 https://www.vulnhub.com/entry/drunk-admin-web-h ...

  8. KVM之磁盘管理工具qemu-img小结

    基本语法: qemu-img command [command options] 主要参数: info : 查看镜像的信息: create: 创建镜像: check: 检查镜像: convert: 转 ...

  9. Linux下安装php报错:libxml2 not found. Please check your libxml2 installation

    ubuntu/debian: apt-get install libxml2-dev centos/redhat: yum install libxml2-devel

  10. h5 移动端开发自适应 meta name="viewport"的使用总结

    本文系个人理解,可能有误差,仅供参考,谨慎采纳! 布局视口: 系统自带 一般大于屏幕宽度 理想宽度:  设置页面的viewport 的一个宽度,使不同的手机的布局视口宽度尽量接近可视窗口的值: 可视视 ...