基于HBASE的4G流量话单实时查询及分页展示方法
2017-11-14龙凤王凡鲜鹏唐堂
龙凤+王凡+鲜鹏+唐堂
【摘 要】现有大数据集实时查询和分页展示的两种方法存在时延大、适用场景有限等问题,为支撑4G用户海量流量话单的查询,构建对应于大数据表的统计信息索引小表,同时设计一套异步数据页缓存装置,实现对数据服务器查询出的数据的缓存,供用户对后续页面的查询使用,以提高查询和展示效率。
【关键词】HBASE 流量话单 分页展示
中图分类号:TN929 文献标志码:A 文章编号:1006-1010(2017)19-0024-05
Method of Real-time Inquiry and Pagination Display of 4G Traffic Bill Based on HBASE
LONG Feng, WANG Fan, XIAN Peng, TANG Tang
[Abstract] The two methods of existing big data set real-time inquiry and pagination display suffer from large delay and limited application scenario. In order to support the massive 4G user traffic bill inquiry, a small statistical information index table was constructed according to the big data table. A set of asynchronous data page buffer device was designed. Data buffer of data server inquiry output was realized. It can be provided to user to inquire the subsequent page. The efficiency of inquiry and display is enhanced.
[Key words]HBASE traffic bill pagination display
1 引言
隨着4G业务的快速发展,电信运营商计费系统中用户的流量清单飞速增长,目前占到用户清单总存储量的70%以上,在查询用户月流量清单时,需要对超过10万条的结果集进行查询及展示,用户等待时间较长,满意度低。因此本文接下来将介绍一种新的大量数据实时查询及分页展示的方法,提高查询效率,提升用户满意度。
2 分页查询展示方法的现状研究
目前常见的大数据实时查询和分页展示有两种方法:
(1)方法一:客户端发送请求到数据服务器,数据服务器将查询结果返回给客户端,客户端根据获取的数据集进行处理,统计数据集的一些相关信息,然后在前台界面分页展示给用户。该种方法易管理、易维护,技术体系成熟,但是当查询的数据集过大时,超过10万条记录,服务端的查询时间长,网络数据传输量大,用户等待时间长。
(2)方法二:客户端在发送请求到数据服务器时,采用页码索引的方式,每次只发送需要查询的页码给数据服务器,数据服务器根据特定算法,每次根据页码范围进行查询,将查询的结果集返回给客户端。该种方法适用于只展示明细数据、不需要展示统计数据的场景。
3 统计信息索引表和异步数据缓存的技术
原理
本文介绍一种大数据实时查询分页展示的方法,通过建立统计信息索引表和异步数据页缓存装置方式解决现有的数据查询与分页展示方法存在的问题。
在数据查询系统(本文以HBASE数据库为例)中,构建对应于大数据表的统计信息索引小表,并通过相关技术保证统计索引小表与清单大表间的数据实时同步。同时设计一套异步数据页缓存装置,实现对数据服务器查询出的结果集数据的缓存,供用户对后续页面查询使用。从索引统计小表中查询出统计信息,在清单查询填充程序完成初始设定的展示页码缓存容器填充时,HBASE服务器端查询应用程序就可以对客户端展示程序进行结果响应,客户端展示程序在收到返回的报文后,给用户展现统计信息及经过排序后的前几页清单数据。
同时,对完整结果集的查询并行进行,并不断填充到空的页码缓存容器中。当用户需要检索未展示的清单页时,页码索引信息被发送到HBASE服务端查询程序,HBASE服务端查询程序通过算法分析其对应的页码缓存容器是否已填完数据,如完成则从相关页码缓存容器中取出数据,对客户端进行响应,如未完成则等待页码容器被填充。由于采用了异步并行技术,页码容器未填充的概率较低,即使出现,其等待填充的时间也远远小于全量数据查询的时间,故采用本方法后,大大改善了用户在查询大数据清单时的查询展示时间,能提升用户感知及满意度,同时避免了全量查询数据结果集的网络传输。
4 统计信息索引表和异步数据缓存的技术
实现
下面以用户GPRS海量清单实时查询与分页展示的设计为实例进行说明。
4.1 逻辑结构
本方法实现的逻辑与物理结构如图1所示:
步骤1:HBASE服务器端查询程序收到客户端展示程序的请求,根据查询条件检索索引统计小表,获取用户查询结果集的统计信息,如GPRS清单的总条数、总费用、总流量。
步骤2:HBASE服务器端查询程序初始化异步数据缓冲池中的页码缓冲器链表,调用2个查询填充程序对清单数据大表按HBASE的key-value方式进行检索,一个顺序查、一个逆序查。
步骤3:查询填充程序将获得的查询结果不断填充到异步数据缓冲池中对应的页码缓冲器链表上的页码缓冲容器中,一个顺序填充、一个逆序填充。endprint
步骤4:HBASE服务器端查询程序在从索引统计小表中获取结果集统计信息且启动了查询填充程序后,监控其对应的页缓冲链表上,前几个页缓冲容器是否被填满(展示几个页可以通过配置文件配置)。
步骤5:当HBASE服务器端查询程序发现前几个页缓冲容器已经被填满后,HBASE服务器端查询程序读取相关页缓冲容器中的数据,结合前面获得的结果集统计信息,生成XML返回报文对客户端展示程序进行响应,客户端展示程序获取到返回报文后,给用户进行初步展示。
步骤6、7:和HBASE存储程序在对原始清单文件进行解析存储,在向HBASE数据库清单大表存入清单数据时,同时存入统计项信息,两个操作同时成功方认为数据存储成功。
步骤8:索引统计小表同步程序实现清单大表与索引小表的信息同步,在帐期切换时,对索引小表进行合并,合并后一个用户号码只对应一条统计信息,加快了索引小表的检索速度。
步骤9:页码缓冲容器内存回收程序根据配置设定的缓冲失效时间,在失效时间到达时,清理页码缓冲容器链表,释放相关的内存。
4.2 HBASE数据库设计
(1)用户清单索引统计小表历史月HBASE存储格式设计
1)RowKey设计
MSISDN+日期+业务类型;
MSISDN:计费号码;
日期:处理时间字段,精确到天;
业务类型:两位计费业务类型。
2)Column Family设计
一个Column Family、3个column,分别为话单总条数、总流量和总金额。
(2)用户清单索引统计小表当前月HBASE存储格式设计
1)RowKey设计
MSISDN+日期+业务类型;
MSISDN:计费号码;
日期:处理时间字段,精确到天;
业务类型:两位计费业务类型。
2)Column Family设计
一个Column Family、2个column,分别为流量和金额。
该类表存储需要在前台进行展示的统计信息,存储量很小,如用户GPRS的总流量、总条数、总金额,对于历史月的GPRS清单查询,如果是比当期帐期小一月,会在月初由后台同步程序,即图1的步骤8完成统计信息的初始化工作。
(3)用户清单大表HBASE存储格式设计
1)RowKey设计
MSISDN+日期+業务类型;
MSISDN:计费号码;
日期:处理时间字段,精确到天;
业务类型:两位计费业务类型。
2)Column Family设计
一个Column Family、多个column,单条话单整体存入column。
该表为用户清单实际数据的存储表,存储海量的用户清单相关信息,在进行用户清单查询时,如遇到用户清单量非常大时,由HBASE客户端查询程序调度的并发查询子程序实现将结果集异步缓存到数据缓存池中,如步骤3所示。
4.3 HBASE服务器端查询程序设计
HBASE服务器端查询程序根据前端展示程序要求构造,响应前段查询请求时,与客户端展示程序间通过XML报文进行通信
HBASE服务器端查询程序收到客户端展示程序发送的清单查询请求报文后,判断是否为首次查询,如为首次查询则从统计信息索引小表中查询对应用户的统计信息,然后初始化页码缓存容器链表,同时启动2个查询填充进程对HBASE中的清单大表进行并发查询,并发程序从HBASE大表中查询出数据后,将数据放入页码缓存容器链表中,HBASE服务器端程序在从索引统计小表中获取了用户的统计信息后,循环扫描页码缓存容器链表中的前n个容器是否已填满(n的数量可以通过配置文件定义),如都已填满,则产生XML报文进行响应,其响应报文见上述响应报文体,此时所有结果集的页码缓存容器并未填满,两个查询填充程序仍然在顺序和逆序的两个方向上填充页码缓存容器链表,但前台展示程序已经可以给用户进行展示了,大大提升了展示的效率。
当用户点击页码进行展示选择时,展示端程序发送请求报文,报文中的beginpage和endpage不为空,此时HBASE服务器端程序知晓为非首次查询,其到页码数据缓冲池中进行查询,通过传入的页码范围匹配到对应的页码缓存容器,并检查查询填充进程是否已将其所需的页码缓存容器填满,如填满则读取相关数据生成XML报文进行响应,如未填满则继续等待,直到其需要的页码缓冲器全部被填满后,生成XML报文进行响应。由于用户要求展示的内容为全部结果集的片段,且这些片段的填充被2个并行服务器同时进行,用户的请求也是分多次进行且是顺序增长的,其时间间隔足以让并行服务器将页码缓存容器链表填满,故查询效率大大提升,另外用户很可能只浏览结果全集里的很少一部分关注的内容,所以网络传输的数据量也大大降低,上述处理流程结构如图2所示:
4.4 页码缓存容器结构及查询填充程序设计
页码缓存容器是一种内存结构,所有的页码缓存容器串成一个双向链表,其结构如图3所示:
页缓存容器头内存结构包括指向第一个页码缓存器的指针和指向最后一个页码缓存器的指针,正序查询填充程序的填充进度指针及倒序查询填充程序的填充进度指针(其中正序查询填充程序的填充进度指针初始指向第一个页码缓存容器,逆序查询填充程序进度指针初始指向最后一个页码缓存容器),两个查询填充进程从链表的两端对链表的页码缓存容器进行数据填充,其处理流程如图4所示:
4.5 页码缓存容器内存回收程序设计
该程序根据缓存超时时间设定,回收页码缓存容器占用的内存,其处理流程如图5所示。endprint
4.6 HBASE存储程序设计
HBASE存储程序在进行话单存储时,同时向HBASE数据库清单大表与索引统计小表进行插入,类似关系数据库中的表与索引的关系,在HBASE数据库调用HBASE接口存储全量清单数据进清单大表中,在索引统计小表中根据字段过滤存入统计字段数据,索引统计小表占全量清单数据的比重一般控制在5%以内,否则异步展示的效果将打折扣,本例中只有2个字段:流量和金额,其占全量清单数据比重不到1%。
4.7 索引统计小表信息同步程序
当帐期切换时,索引统计小表信息同步程序对上月的索引小表进行处理,实现每个用户号码只对应一条统计信息,提升索引小表查询效率。
5 结论
本文提供了一种大数据实时查询分页展示的方法,通过数据的异步处理技术,使清单数据可以异步按用户需要展示,而统计数据通过小表查询同步展示,节约了查询和展示时间,同时设计了页数据缓存容器装置,降低了数据服务器的访问量,并提升了用户查询与分页展示的速度,特别是在查询分页展示超过上百页或上千页的数据时,具备很高的应用价值。该方法在某省移动公司的业务支撑系统HBASE用户详单数据库中已进行使用,降低了数据服务器的访问负荷,提高了用户的查询效率。
参考文献:
[1] 楊志. 一种实时大数据查询技术——对象分布式查询[J]. 计算机与数字工程, 2015,43(10): 1851-1856.
[2] 涂新莉,刘波,林伟伟. 大数据研究综述[J]. 计算机应用研究, 2014,31(6): 1612-1616.
[3] 卫长安. 大数据环境下数据的查询优化研究[J]. 长治学院学报, 2015,32(5): 56-57.
[4] 蔡志刚,阎洁. 基于缓存框架的Web缓存研究[J]. 计算机教学与教育信息化, 2009,5(31): 8737-8739.
[5] 严霄凤,张德馨. 大数据研究[J]. 计算机技术与发展, 2013,23(4): 168-172.
[6] 万虎,徐远超,孙凤芸,等. 面向大数据应用的众核处理器缓存结构设计[J]. 计算机工程与科学, 2015,37(1): 28-35.
[7] 陈洁,陈冬杰,黄帮明. 基于HBASE的大数据压缩算法的研究[J]. 电脑知识与技术, 2014,10(13): 3146-3147.
[8] 张雄彪. Hibernate数据缓存技术[J]. 湖北第二师范学院学报, 2013,30(8): 69-70.
[9] 张辉,赵郁亮,徐江,等. 基于Oracle数据库海量数据的查询优化研究[J]. 计算机技术与发展, 2012,22(2): 165-167.
[10] 王珊,王会举,覃雄派,等. 架构大数据:挑战、现状与展望[J]. 计算机学报, 2011,34(10): 1741-1752.endprint