Hbase的rowkey设计原则和列簇设计原则
1. rowkey设计原则
- 长度原则
rokey是一个二进制码流,最大长度64kb, 实际应用中不超过100 字节,建议越短越好,不要超过16个字节。因为数据的持久化文件HFile是按照keyvalue存储的,如果rowkey过长则会影响HFile的存储效率;其次,Memostore将缓存部分数据到内存中,如果rowkey字段过长,内存的有效利用率就会降低,系统不能缓存更多的数据,会降低检索效率。最后,操作系统大多为64位,内存8字节对齐,控制在16个字节,8的倍数会充分利用操作系统的最佳性能。
- 散列原则
高位散列,低位时间字段。避免热点问题。
- 唯一原则
rowkey在设计上保证其唯一性,rowkey是按照字典顺序排序存储的,因此,设计rowkey的时候,要充分考虑利用排序这个特点,将经常读取的数据存储到一块,将最近可能会被访问的数据放到一块。
2. 列簇设计原则
- 建表至少指定一个列簇,但一般不超过三个,最好一个。因为flush和compact是以region为单位,所以某个列簇在flush的时候,它邻近的列簇也会因为关联效应触发flush,最终导致系统产生更多的IO。
- 列簇名称不宜过长,会冗余存储。
- 不同列簇的记录的数量级不易相差太大,相差太大会导致查询效率低下。