面试题答案
一键面试设计RowKey需考虑的因素
- 数据分布:
- 均匀性:为避免数据热点,RowKey应设计得能让数据均匀分布在不同RegionServer上。例如,若RowKey以时间戳开头,可能导致新数据都集中在一个RegionServer,可采用哈希前缀等方式打散数据。
- 数据局部性:对于经常一起访问的数据,可在RowKey中体现相关性,让它们存储在相近位置,提升查询效率。
- 查询模式:
- 单条查询:若应用主要是单条记录查询,可将唯一标识作为RowKey,如用户ID,能快速定位数据。
- 范围查询:当涉及范围查询,如按时间范围查数据,可将时间戳设计在RowKey合适位置,便于利用HBase的排序特性进行范围扫描。
- 前缀查询:若经常按前缀查询,如查询某个部门的所有员工数据,可将部门编号作为RowKey前缀。
不同场景下RowKey设计思路举例
- 监控数据场景:
- 场景描述:收集服务器各项指标监控数据,需按时间范围查询某段时间内所有服务器指标,也可能查询某台特定服务器的指标。
- RowKey设计:可采用 “服务器ID + 时间戳” 的方式。如 “server001_1672531200”。对于范围查询,按时间戳范围扫描即可;单条查询特定服务器数据,也可快速定位。
- 电商订单场景:
- 场景描述:查询某个用户的所有订单,或按订单时间范围查询订单。
- RowKey设计:“用户ID + 订单时间戳 + 订单ID”。如 “user123_20231201100001_order001”。这样按用户ID前缀可快速查该用户订单,按时间戳也能进行范围查询。