面试题答案
一键面试- 行键设计:
- 按范围扫描考虑:行键应设计为能使相关数据在物理存储上尽量连续。例如,如果业务数据有时间序列特征,以时间戳作为行键前缀,这样按时间范围扫描时,相关数据可以高效获取。如以
YYYYMMDDHHMMSS
格式的时间戳作为前缀,后续可以接上业务标识等。 - 随机读单个行考虑:行键应能唯一标识每一行数据,并且尽量简短,减少存储开销。同时,为避免热点问题,可对行键进行适当的散列。例如,如果业务标识是数字ID,可以在前面加上一个散列值,如
hash(ID) + ID
,这样能让数据更均匀地分布在集群中,提升随机读性能。
- 按范围扫描考虑:行键应设计为能使相关数据在物理存储上尽量连续。例如,如果业务数据有时间序列特征,以时间戳作为行键前缀,这样按时间范围扫描时,相关数据可以高效获取。如以
- 列族设计:
- 尽量减少列族数量,因为HBase中每个列族在底层以不同的Store来存储。过多列族会增加存储和管理开销。将经常一起读取的列放在同一个列族中。例如,如果业务中有一些属性总是在按行键范围扫描或随机读单个行时一起被获取,就将这些列归为一个列族。同时,要注意列族的设计要符合数据的逻辑关系,避免将逻辑上不相关的列放入同一列族。