栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

hbase时间范围分页查询优化实践

hbase时间范围分页查询优化实践

生产情况

生产情况介绍

汽车故障码明细数据量大(PB级),明细数据存储在hbase中,早期产品的需求主要是根据查询某车某天的故障情况,所以rowkey的设计规则是:tuid+日期+控制器+故障码编号+时间戳,这样,相安无事。现在需求是,查指定TUID的某段时间的明细数据,时间跨度不超过7天,查询条件精确到秒,接口返回时间不超过1秒。

方案设计

初始方案是,由于无法保障数据在同一个resion中,所以不能用Hbase原生的PageFilter进行过滤scan,考虑构建FilterList, 采用startRow和endRow方式过滤,scan出起始时间当天到截止时间当天的所有的数据,再进行过滤即可,但是该方案有个非常耗时的操作,不是扫描,是扫描后数据的提取

scan.setFilter(filterList);
List list = new ArrayList<>();
ResultScanner scanner = tableInterface.getScanner(scan);
for (Result r : scanner) {
                list.add(r.getRow());
}
优化方案

抛弃新建Arrraylist对象然后数据搬运的耗时操作,原地对scanner进行转换list操作,并进行过滤出需要的时间段的数据

final List filteredList = StreamSupport.stream(
                        resultScanner.spliterator(), Boolean.FALSE)
                        .filter(a -> a.listCells().get(0).getTimestamp() >=beginTimeL && a.listCells().get(0).getTimestamp()<= endTimeL)
                        .collect(Collectors.toList());

根据分页请求,封装pageResponse的分页信息,根据startpage和pagesize找到对应的数据,对pageResponse进行setList,返回给前端,即可,接口响应时间少于1秒。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/714785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号