【发布时间】:2016-06-13 12:03:30
【问题描述】:
我有一个 hbase 表,行键类似于<<timestamp>>_<<user_id>>,其中时间戳为 yyyyMMddHHmm。我关心的是在给定的时间范围内查询用户详细信息。
例如:“201602021310_user1”
HTable table = new HTable(conf, tableName);
Scan s = new Scan();
s.setStartRow("20160202".getBytes());
s.setStopRow("20160303".getBytes());
ResultScanner ss = table.getScanner(s);
List<Result> rs = new ArrayList<Result>();
for(Result r:ss){
rs.add(r);
}
据我了解,由于 Hbase 按字典顺序存储数据,因此不会有任何问题。但是这种实现会导致区域服务器热点。 为了避免热点,(期望cmets)
- 我正在考虑在我的行键中使用 散列前缀。如果是这样,我觉得我的范围扫描将无法正常工作。
- 然后使用过滤,如模糊过滤器。但是我找不到实现范围查询的方法。
据我了解,我可以通过这个实现每月过滤并合并结果。
201602??_??????+20160301_??????+20160302_??????+20160303_??????
实现这一目标的最佳方法是什么? (在支持范围查询的同时消除热点)
【问题讨论】:
标签: hbase