zoukankan      html  css  js  c++  java
  • hbase实践之Rowkey设计之道

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

    • reverse
    • salt
    • hash

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

    rowkey设计之道

    image

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

    image

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

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

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

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

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

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

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

    rowkey索引设计

    二级索引

    image

    组合索引

    image

    image

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

    小结

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

    参考文献

  • 相关阅读:
    jQuery给动态添加的元素绑定事件的方法
    无法加载父级样式或设置IIS的asp站点启用父路径
    ASP.NET MVC 必须设置 ErrorMessageString 或 ErrorMessageResourceName,但不能同时设置二者。
    layer弹窗监控键盘事件
    js 刷新windows.open另一个窗口页面或window.open的页面如何刷新(父页面)上层页面
    jquery提交表单,回调函数
    iis Server Error in '/' Application
    jni&&jvmti&&JMC
    Backpropagation
    k-means-algorithm
  • 原文地址:https://www.cnblogs.com/small-k/p/10016531.html
Copyright © 2011-2022 走看看