面试题答案
一键面试高表行键设计查询性能考虑因素
- 排序特性:高表通常数据行数多,行键设计要利用HBase按行键字典序存储的特点。例如,若查询经常按时间范围获取数据,可将时间戳作为行键前缀,如
YYYYMMDDHHMMSS_业务ID
。这样能快速定位到特定时间范围内的数据行,因为时间戳有序排列,在进行范围查询时能减少扫描的数据量。 - 散列分布:为避免数据热点,行键应尽量均匀分布。比如对于用户相关的高表,若直接用用户ID作为行键,可能某些热门用户ID开头的数据会集中在少数RegionServer上。可以采用加盐的方式,在用户ID前添加随机数前缀,如
随机数_用户ID
,使数据在集群中更均匀分布,提升整体查询性能。
宽表行键设计查询性能考虑因素
- 关联字段整合:宽表包含大量列族和列,行键要包含与关联查询紧密相关的字段。例如电商订单宽表,若经常根据订单ID和商品ID查询订单详细信息,行键可设计为
订单ID_商品ID
。这样能快速定位到特定订单下特定商品的详细记录,减少不必要的扫描。 - 前缀压缩:由于宽表每行数据量大,行键过长会增加存储开销和查询负担。可以对行键进行前缀压缩。例如,在一个包含多种设备信息的宽表中,设备类型有多种但重复度高,可对设备类型采用字典编码,在行键中用编码值代替完整的设备类型字符串,如设备类型 “手机” 编码为 “01”,行键设计为
01_设备序列号
,从而在保证查询精度的同时减少行键长度,提升查询性能。