HBase 如何设计 rowkey?

Johngo学长 HBase 134
  • RowKey⻓度原则
    Rowkey是一个二进制码流,Rowkey的⻓度被很多开发者建议说设计在10~100个字节,不过建议是越短越 好,不要超过16个字节。
    原因如下:
    • 数据的持久化文件HFile中是按照KeyValue存储的,如果Rowkey过⻓比如100个字节,1000万列数据光Rowkey就要占用100*1000万=10亿个字节,将近1G数据,这会极大影响HFile的存储效率;
    • MemStore将缓存部分数据到内存,如果Rowkey字段过⻓内存的有效利用率会降低,系统将无法缓存更多的数据,这会降低检索效率。因此Rowkey的字节⻓度越短越好。
    • 目前操作系统是都是64位系统,内存8字节对⻬。控制在16个字节,8字节的整数倍利用操作系统的最佳 特性。
  • RowKey散列原则
    如果Rowkey是按时间戳的方式递增,不要将时间放在二进制码的前面,建议将Rowkey的高位作为散列字 段,由程序循环生成,低位放时间字段,这样将提高数据均衡分布在每个Regionserver实现负载均衡的几 率。如果没有散列字段,首字段直接是时间信息将产生所有新数据都在一个RegionServer上堆积的热点现 象,这样在做数据检索的时候负载将会集中在个别RegionServer,降低查询效率。
  • RowKey唯一原则
    必须在设计上保证其唯一性。

回复

共1条回复 我来回复
  • 迷失技术de小猪
    迷失技术de小猪
    稍等伙伴们,思考简介中~
    评论
    • RowKey⻓度原则
      Rowkey是一个二进制码流,Rowkey的⻓度被很多开发者建议说设计在10~100个字节,不过建议是越短越 好,不要超过16个字节。
      原因如下:
      • 数据的持久化文件HFile中是按照KeyValue存储的,如果Rowkey过⻓比如100个字节,1000万列数据光Rowkey就要占用100*1000万=10亿个字节,将近1G数据,这会极大影响HFile的存储效率;
      • MemStore将缓存部分数据到内存,如果Rowkey字段过⻓内存的有效利用率会降低,系统将无法缓存更多的数据,这会降低检索效率。因此Rowkey的字节⻓度越短越好。
      • 目前操作系统是都是64位系统,内存8字节对⻬。控制在16个字节,8字节的整数倍利用操作系统的最佳 特性。
    • RowKey散列原则
      如果Rowkey是按时间戳的方式递增,不要将时间放在二进制码的前面,建议将Rowkey的高位作为散列字 段,由程序循环生成,低位放时间字段,这样将提高数据均衡分布在每个Regionserver实现负载均衡的几 率。如果没有散列字段,首字段直接是时间信息将产生所有新数据都在一个RegionServer上堆积的热点现 象,这样在做数据检索的时候负载将会集中在个别RegionServer,降低查询效率。
    • RowKey唯一原则
      必须在设计上保证其唯一性。
    1个月前 0条评论
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载