Rowkey 长度
Rowkey 是一个二进制码流,建议越短越好,一般不超过 16 个字节,主要是出于以下的考虑:
数据的持久化文件 HFile 中是按照 KeyValue 存储的,即你写入的数据可能是一个 RowKey 对应多个列族,多个列,但是实际的存储是每个列都会对应 Rowkey 写一遍,即这一条数据有多少个列,就会存储多少遍 Rowkey,这会极大影响 HFile 的存储效率
MemStore 和 BlockCache 都会将缓存部分数据到内存,如果 Rowkey 字段过长内存的有效利用率会降低,系统将无法缓存更多的数据,这会降低检索效率。
目前操作系统一般都是 64 位系统,内存 8 字节对齐。控制在 16 个字节,8 字节的整数倍,利用操作系统的最佳特性。
Rowkey 散列设计
HBase 的 Rowkey 是按照字典序排列的,而数据分布在 RegionServer 上的方式是做高位哈希,所以如果我们的 Rowkey 首位存在大量重复的值那么很可能会出现数据倾斜问题,关于数据倾斜的问题下面会详细说明,总之,原则上就是Rowkey 的首位尽量为散列。
常访问的数据放到一起
对于需要批量获取的数据,比如某一天的数据,可以把一整天的数据存储在一起,即把 rowkey 的高位设计为时间戳,这样在读数据的时候就可以指定 Start RowKey 和 End RowKey 做一个 scan 操作,因为高位相同的 Rowkey 会存储在一起,所以这样读是一个顺序读的过程,会比较高效。但是这样有一个很明显的问题,违背了上一条Rowkey 散列设计原则,很可能会出现数据倾斜问题。所以说没有最好的设计,具体如何权衡就得看实际业务场景了
更多关于大数据培训的问题,欢迎咨询千锋教育在线名师,如果想要了解我们的师资、课程、项目实操的话可以点击咨询课程顾问,获取试听资格来试听我们的课程,在线零距离接触千锋教育大咖名师,让你轻松从入门到精通。