System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 基于查询大数据量结果集实时数据统计的性能优化方法技术_技高网

基于查询大数据量结果集实时数据统计的性能优化方法技术

技术编号:40440473 阅读:5 留言:0更新日期:2024-02-22 23:03
本发明专利技术的技术方案是提供了一种基于查询大数据量结果集实时数据统计的性能优化方法,依据在MySQL数据库进行预聚合分表查询所提供的思路,结合ElasticSearch在聚合查询方面优异的性能表现,将用户根据关键字进行多字段聚合查询的请求处理者从MySQL转变为ElasticSearch。本发明专利技术提出在ElasticSearch中进行分索引查询,通过待聚合字段的排列组合,创建所有对应聚合类型的预聚合结果存放表,然后根据预聚合结果存放表的表结构在ElasticSearch中构建对应的Mapping和索引,在索引中导入文档,ElasticSearch将索引中的文档通过分词器提取出各个词项并建立倒排索引,保存词项和文档实体之间的对应关系,加快聚合查询的速度。

【技术实现步骤摘要】

本专利技术涉及对查询大量结果集实时统计分析方面的数据优化方法,具体涉及一种分表es聚合分页查询方法。


技术介绍

1、在写操作频率较低的业务下,mysql大数据量表的聚合查询能够通过建立合适的联合索引优化查询速度,但实际工作中的复杂聚合查询业务使得查询sql语句往往使用不上索引,比如like%keyword%group by yyy,zzz的形式就会导致查询sql语句全表扫描,查询速度缓慢。

2、可以将mysql大数据量表根据聚合字段的排列组合构建多个子表,预先将根据某种聚合字段组合后的聚合数据导入子表,用户根据具体聚合字段排列类型直接定位到某个子表查询数据。但这种方法只是暂时缓解查询速度缓慢的问题,随着时间流逝,每个子表中的数据不断增加,并且每个子表数据量的差距会越来越大,造成数据倾斜问题,也会导致查询速度缓慢。

3、elasticsearch是一个分布式、restful风格的搜索和数据分析引擎,它的查询速度极快,能够应对各种复杂聚合业务的场景,现在很多企业和团队都在使用elasticsearch。但在大数据量实际业务中,通过elasticsearch实时查询再聚合的方法对于需要快速响应的系统来说也是不理想的。


技术实现思路

1、本专利技术要解决的技术问题是:现有通过mysql进行聚合查询和通过elasticsearch实时查询再聚合的方法,在600万条数据量下平均响应时间均在300ms以上,并且即使是通过elasticsearch实时查询再聚合的方法,在缓存失效的情况下平均响应时间也可能在秒级以上。

2、为了解决上述技术问题,本专利技术的技术方案是提供了一种基于查询大数据量结果集实时数据统计的性能优化方法,其特征在于,包括以下步骤:

3、步骤1、创建存储多种不同聚合类型的mysql数据库表;

4、步骤2、通过定时任务服务每隔一段时间从源业务数据表中根据不同聚合类型进行聚合查询计算,在备份并清空每张聚合数据结果表之后,将最新的聚合结果导入到对应的聚合数据结果表中;

5、步骤3、在elasticsearch中创建与每张聚合数据结果表相对应的mapping和索引,作为存储mysql向elasticsearch导入数据的容器,其中:

6、elasticsearch中的文档存储实际的数据记录,mysql数据库表中的一条记录对应一个文档,并且mysql数据库表的主键与文档id一一对应的,则:索引为用于存储和搜索文档的数据结构,mapping用于定义索引中文档的字段类型、属性和相关设置的过程,描述文档的结构和属性;

7、步骤4、javaapi构建查询条件进行查询,具体包括以下步骤:

8、步骤401、服务提供带有聚合类型参数的查询统计接口,查询调用者调用该查询统计接口时提供相关查询参数,该查询参数包括查询的关键字keyword、查询统计的elasticsearch模型type、具体的分页相关参数page_size和page_no、查询结果的排序需求sortstr;

9、步骤402、查询调用者在前端选择聚合字段,然后发起聚合查询请求,服务接受聚合查询请求后,进行查询参数的相关安全合理性检查,通过检查后,进入下一步;

10、步骤403、基于查询参数构造查询elasticsearch的查询参数对象searchsourcebuilder;

11、步骤404、将查询参数对象searchsourcebuilder设置到elasticsearch的查询请求对象searchrequest上,同时设置具体的查询索引

12、步骤405、发送查询请求到elasticsearch,elasticsearch将查询结果集作为searchresponse的对象返回;

13、步骤406、将elasticsearch返回的searchresponse数据结构进行解析和数据提取,将其json形式的数据集,解析成为java的list对象,并将处理后的结果组装到自定义的标准回复对象,返回查询调用者。

14、优选地,步骤1中,创建存储多种不同聚合类型的mysql数据库表时,根据具体业务需求进行分析,得到若干需要在查询时聚合的字段后,对这些字段进行排列组合,创建所述mysql数据库表,每个mysql数据库表中包含必须的字段以及排列组合生成的聚合字段。

15、优选地,步骤2中,在java中使用quarz框架搭建所述定时任务服务。

16、优选地,步骤3中,在mapping中设置字段的type属性以及字段的analyzer属性,其中:

17、若字段为聚合字段,那么将字段的type属性设置为keyword;若字段为文本字段,那么将字段的type属性设置为text;若字段为数字或日期字段,那么将字段的type属性设置为对应的数字类型和日期类型;

18、通过设置字段的analyzer属性来指定elasticsearch使用何种分词器对该字段进行有效的分词,提高模糊查询的效率。

19、优选地,步骤3中,若当前字段中涉及较多的中文或者中英文混合,则在设置字段的analyzer属性时,使用ik分词器和pinyin分词器结合的方式设定分词器,包括以下步骤:

20、步骤301、在elasticsearch集群的每个节点目录中安装ik分词器和pinyin分词器的插件;

21、步骤302、重启elasticsearch集群,在kibana控制台配置自定义分词器,自定义分词器的过滤条件结合ik分词的特点以及pinyin分词的特点;

22、步骤303、设置字段的analyzer属性时,将字段的analyzer属性设定为自定义分词器名。

23、优选地,步骤402中,相关安全合理性检查包括以下方面:

24、若查询参数type未传递,或者传递的查询参数type值不存在对应的索引名称,则查询结束;

25、分页相关参数page_size和page_no不合理,参数超过100或者为负数,则查询结束,或者所查询的页码数据超过实际或者对应数据不存在,则查询结束;

26、对查询结果的排序需求sortstr进行检查,sortstr中的字段必须是实际存在的数据字段,并且其字段内容支持排序,如果相应字段不满足排序要求,则查询结束;

27、对请求的权限进行检查,若有权限,则查询结束。

28、优选地,步骤405包括以下步骤:

29、获得resthighlevelclient的缓存实例对象;

30、将步骤404获得的查询请求对象searchrequest绑定到resthighlevelclient,发送请求到elasticsearch的具体索引上;

31、elasticsearch将查询结果集作为searchresponse的对象返回。

32、优本文档来自技高网...

【技术保护点】

1.一种基于查询大数据量结果集实时数据统计的性能优化方法,其特征在于,包括以下步骤:

2.如权利要求1所述的一种基于查询大数据量结果集实时数据统计的性能优化方法,其特征在于,步骤1中,创建存储多种不同聚合类型的MySQL数据库表时,根据具体业务需求进行分析,得到若干需要在查询时聚合的字段后,对这些字段进行排列组合,创建所述MySQL数据库表,每个MySQL数据库表中包含必须的字段以及排列组合生成的聚合字段。

3.如权利要求1所述的一种基于查询大数据量结果集实时数据统计的性能优化方法,其特征在于,步骤2中,在Java中使用Quarz框架搭建所述定时任务服务。

4.如权利要求1所述的一种基于查询大数据量结果集实时数据统计的性能优化方法,其特征在于,步骤3中,在Mapping中设置字段的type属性以及字段的analyzer属性,其中:

5.如权利要求4所述的一种基于查询大数据量结果集实时数据统计的性能优化方法,其特征在于,步骤3中,若当前字段中涉及较多的中文或者中英文混合,则在设置字段的analyzer属性时,使用IK分词器和pinyin分词器结合的方式设定分词器,包括以下步骤:

6.如权利要求4所述的一种基于查询大数据量结果集实时数据统计的性能优化方法,其特征在于,步骤402中,相关安全合理性检查包括以下方面:

7.如权利要求1所述的一种基于查询大数据量结果集实时数据统计的性能优化方法,其特征在于,步骤405包括以下步骤:

8.如权利要求1所述的一种基于查询大数据量结果集实时数据统计的性能优化方法,其特征在于,还包括MySQL与ElasticSearch数据同步的步骤,由Java中的Quarz定时任务框架服务提供MySQL与ElasticSearch的数据同步,具体包括以下内容:

...

【技术特征摘要】

1.一种基于查询大数据量结果集实时数据统计的性能优化方法,其特征在于,包括以下步骤:

2.如权利要求1所述的一种基于查询大数据量结果集实时数据统计的性能优化方法,其特征在于,步骤1中,创建存储多种不同聚合类型的mysql数据库表时,根据具体业务需求进行分析,得到若干需要在查询时聚合的字段后,对这些字段进行排列组合,创建所述mysql数据库表,每个mysql数据库表中包含必须的字段以及排列组合生成的聚合字段。

3.如权利要求1所述的一种基于查询大数据量结果集实时数据统计的性能优化方法,其特征在于,步骤2中,在java中使用quarz框架搭建所述定时任务服务。

4.如权利要求1所述的一种基于查询大数据量结果集实时数据统计的性能优化方法,其特征在于,步骤3中,在mapping中设置字段的type属性以及字段的analyzer属性,其中:

5....

【专利技术属性】
技术研发人员:张伟朱海峰孙建
申请(专利权)人:南京万得资讯科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1