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