性能上考虑
一条数据的唯一标识就是 rowkey,而这行数据最终存储到哪一个分区里面,取决于分区(HBase-预分区),如果从性能上考虑 rowkey 优化,应该考虑的是让数据均匀的分布在所有的 region 中,防止数据的倾斜。
设计方案:
- 使用随机数, hash 等
- 字符串反转 10001, 10002 反转成为 10001, 20001
- 拼接字符串 XX0001 -> 1000XX0001
业务上考虑
列族数目
一个列族和一个 Store 对于,如果经常需要跨列族查询,对应就是需要从多个 Store 中取数据,这样对性能开销挺大,建议创建表的时候不要太多列族,一般 2-3 个为主。基本信息放到一个列族,扩展信息放到一个列族,如果还有另外的不常用的附件信息放到第三个列族。
行键设置
根据查询要求设置 key:
- 手机号-日期:
18229955555-20190919
18229955555-20190920
- 日期-姓名缩写-类别: 姓名缩写长度需要保持一致 (填充和截断)
20150230-lisi-category
20150230-zs__-category