面试题答案
一键面试行键设计
可以设计行键为 用户ID + 交易时间(精确到毫秒)+ 交易ID
。例如:12345_20231010153000000_001
,其中12345
是用户ID,20231010153000000
是交易时间(2023年10月10日15点30分0秒0毫秒),001
是交易ID。
对范围查询性能的影响
- 基于用户ID的范围查询:如果要查询某个用户的所有交易记录,由于行键前缀是用户ID,HBase可以利用行键的有序性,快速定位到该用户相关行键的起始位置,然后按顺序扫描,性能较好。
- 基于交易时间的范围查询:如果按交易时间范围查询,由于交易时间在行键中间,不能直接利用行键有序性快速定位。但可以通过预分区,将交易时间按一定规则(如按月、按周)分区,从而提高查询性能。
对单条记录查询性能的影响
单条记录查询时,只要知道完整的行键,HBase可以通过内部的索引结构(如Region Server的MemStore和StoreFile中的索引),快速定位到具体的记录,性能较高。
在高并发读场景下的表现
- 负载均衡:由于行键中用户ID在前,不同用户的请求会分散到不同的Region Server上,实现负载均衡,减少单个Region Server的压力,提高整体的并发读能力。
- 缓存命中率:对于频繁读取的用户,相关数据可能会被缓存(如BlockCache),后续再次读取相同用户的交易记录时,可直接从缓存获取,进一步提高并发读性能。但如果数据分布过于分散,缓存命中率可能会降低。