一种基于多形态复合的海量数据快速查询方法与流程

文档序号:19217378发布日期:2019-11-26 01:49阅读:264来源:国知局
一种基于多形态复合的海量数据快速查询方法与流程

本发明属于大数据处理领域,特别是涉及一种基于多形态复合的海量数据快速查询方法。



背景技术:

随着大数据时代的到来,互联网数据呈现爆发式增长。即使是对于传统的企业级应用来说其产生的数据量也在迅猛增长,单张表的数据量达到千万级、后台系统日志达到亿级是非常常见的事情。通常企业对于这些数据有着强烈的查询分析需求,因为海量数据的“知识”存储量是非常大的,若能在这些查询出来的数据上进行数据挖掘分析出其蕴含的“知识”特征,这对于企业的战略、战术是非常有帮助的。所以如何在数据特征复杂、查询条件繁多的情况下对海量数据进行高效的查询是一个值得探讨的话题。

在数据查询处理中,通常使用mysql、oracle、dbase等结构化数据库,对于简单数据及数据量不大的数据库进行查询时,查询速度快、准确性高,但是在大数据量或数据结构复杂的情况下进行查询,查询性能会变得较差。目前,很多系统采用elasticsearch分布式搜索引擎的方式,对于大数据量及数据结构复杂的数据进行查询时速度非常快。但是,如果对简单线性数据的查询也采用elasticsearch搜索引擎方式,则系统开销巨大,存在浪费elasticsearch搜索引擎性能的问题。为进一步提高大数据搜索的综合性能,有的系统将结构化数据库与elasticsearch搜索引擎的非结构化数据存储的各自优势结合起来进行查询,但是也存在这样的问题:如何根据elasticsearch搜索引擎特点将结构化数据库的数据同步至elasticsearch搜索引擎,如何对用户前端的查询请求进行解析,为其选择最优的查询方式。



技术实现要素:

本发明的目的在于;针对现有技术的缺点和不足,提出一种基于多形态复合的海量数据快速查询方法,通过设置查询中间件、拦截器及索引表等,解决了结构化与非结构化数据存储的同步以及优化选择查询方式的问题,提高了大数据量和结构复杂数据的查询效率和准确性,增强了系统数据查询的综合性能。

为实现上述目的,本发明采用的技术方案为:

一种基于多形态复合的海量数据快速查询方法,包括如下步骤:

s1:数据特性识别与预处理,即后台程序对需要处理的数据进行识别,判断数据的类型,对数据进行相应处理后存储于mysql数据库并同步至elasticsearch搜索引擎;在后台程序的数据持久化存储层重写拦截器并设置查询拦截规则,在后台程序与mysql数据库、elasticsearch搜索引擎之间设计一个查询中间件并对查询中间件进行配置;

s2:数据查询处理,即拦截器对查询语句进行拦截并封装,查询中间件解析查询语句和参数,根据查询特征的不同,分别向mysql数据库或elasticsearch搜索引擎发起请求,进行数据查询;

s3:查询数据后处理,即查询中间件对查询结果进行格式化和数据集封装,进一步解析查询结果,将最终结果返回呈现给用户前端。

进一步地,步骤s1中所述数据特性识别与预处理的实施流程如下:

s1.1:通过自动excel解析、数据源导入或/和系统业务自动产生的方式获得需要处理的数据;

s1.2:对待处理的数据进行整体及抽样扫描,根据数据总量和字段的复杂度判断数据的类型;

s1.3:如果数据类型为普通数据,则直接将普通数据存储于mysql数据库并同步至elasticsearch搜索引擎;如果数据类型为复合数据,则将复合数据存储于mysql数据库并同步至elasticsearch搜索引擎,同时在elasticsearch搜索引擎中对复合数据进行预处理;

s1.4:对数据进行更新或删除操作时,后台程序的事务控制层判断数据在mysql数据库和elasticsearch搜索引擎中同时更新或删除成功,才能提交本次数据更新或删除操作,否则进行回滚;

s1.5:根据数据及查询的复杂度,重写拦截器,设置查询拦截规则;

s1.6:在初始化后台程序时,对查询中间件进行整合配置,将查询中间件的服务器地址、端口及其它相关配置信息写入查询中间件配置文件中,同时,在查询中间件配置文件中也写入mysql数据库和elasticsearch搜索引擎的服务器地址、用户名、密码及其它相关配置信息,使得查询中间件可以访问到mysql数据库和elasticsearch搜索引擎。

进一步地,步骤s1.3中所述对复合数据进行预处理的实施流程如下:

s1.3.1:创建复合数据对象的索引表,在索引表所有字段末尾增加一个名称为es_index的字段,用于存储一条记录复合数据预处理后的数据;

s1.3.2:将es_index前所有字段的字段名和字段值进行逐一拼接起来,生成一条包含所述复合数据全部记录信息的文本,再将所述文本存储在es_index字段中;

s1.3.3:对索引表中可以模糊查询的特殊字段,对其字段值添加一些模糊查询不同形式的字段分词。

进一步地,步骤s2中所述数据查询处理的实施流程如下:

s2.1:后台程序接收到用户前端查询请求后,在数据持久化存储层构建sql查询语句;

s2.2:拦截器对数据更新或删除的sql语句不予拦截,直接放行进行相应的操作;拦截器按照拦截规则对sql查询语句进行拦截,并以查询中间件所能接受的参数格式对拦截到的sql查询语句和参数进行格式化封装,将封装好的查询请求发送给查询中间件;

s2.3:采用编译技术构造一张关键词表,将具有深度分页、模糊查询的关键字添加到所述关键词表中;

s2.4:查询中间件获取sql查询语句和参数后,首先对sql查询语句进行扫描解析,在关键词表查找是否包含关键词,然后对sql查询参数进行扫描解析,判断该sql查询的特征,最后根据扫描解析的结果和数据及查询的复杂度,构建一个sql查询请求或es查询请求;

s2.5:如果无法判断数据及查询的复杂度,则对mysql数据库或elasticsearch搜索引擎都发起查询请求,并记录两者的查询时间;如果两者的查询时间差异较大,只需记录一次查询时间并将查询时间最短的查询请求构建成相应的sql查询请求或es查询请求,否则需要记录若干次两者的查询时间,取若干次查询时间的平均值,将平均查询时间最短的查询请求构建成相应的sql查询请求或es查询请求;

s2.6:查询中间件根据构建好的sql查询请求或es查询请求,分别向mysql数据库或elasticsearch搜索引擎发起查询。

进一步地,步骤s3中所述查询数据后处理的实施流程如下:

s3.1:查询中间件从mysql数据库或elasticsearch搜索引擎获得查询数据;

s3.2:查询中间件采用json格式对查询数据进行格式化打包,将打包后的查询数据集封装成网络请求,返回给发出查询请求的后台程序;

s3.3:等待查询结果的拦截器获得查询数据集,取出查询数据并进行解析,转化成业务实体类型数据,返回给业务逻辑控制层;

s3.4:业务逻辑控制层进一步解析业务实体类型的查询数据,将最终查询结果数据返回给用户前端。

进一步地,所述后台程序包括业务逻辑控制层、数据持久化存储层、事务控制层,其中:所述业务逻辑控制层位于用户前端与数据持久化存储层之间,用于对用户具体的操作进行业务逻辑处理,将原始数据抽象出逻辑数据,形成一种业务规则;所述数据持久化存储层,用于将后台程序产生的数据及数据库相关的各种操作数据适时进行持久存储;事务控制层位于数据持久化存储层与mysql数据库或elasticsearch搜索引擎之间,用于对mysql数据库或elasticsearch搜索引擎的操作事务进行控制。

进一步地,所述查询中间件用于对用户前端的查询请求进行分析处理,为其选择最优的查询方式,再对查询结果数据进行解析,向用户前端返回最终的查询结果。

进一步地,所述mysql数据库与elasticsearch搜索引擎进行数据同步的方式为采用logstash同步工具实现结构化和非结构化数据存储的同步。

本发明与现有技术相比,具有如下优点与有益效果:

1.在后台程序与mysql数据库、elasticsearch搜索引擎之间设计一个查询中间件,对sql查询语句进行扫描解析,根据数据及查询的复杂度不同分别生成sql查询请求或es查询请求,为每一次查询请求选择最优的查询方式,大大提高了查询效率,减少了数据查询的系统开销,增强了系统查询的综合性能;

2.通过构建复合数据的索引表及关键词表,进一步标引全文数据文本以及能产生深度分页、模糊查询的关键字,同时设置拦截器,配置拦截规则,对用户前端的查询请求进行分类处理、精确拦截,进一步提高了数据查询的速度和准确性;

3.采用logstash同步工具,结合复合数据索引表的构建,有效实现了结构化数据到非结构化数据的同步存储。

附图说明

图1为一种基于多形态复合的海量数据快速查询方法流程图;

图2为本发明中复合数据查询处理方案的整体架构示意图;

图3为本发明中数据同步架构的示意图;

图4为本发明在数据对象中增加字段的示意图;

图5为本发明对数据对象进行预处理的流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

实施例

如图1至5所示,一种基于多形态复合的海量数据快速查询方法,包括如下步骤:

s1:数据特性识别与预处理,即后台程序对需要处理的数据进行识别,判断数据的类型,对数据进行相应处理后存储于mysql数据库并同步至elasticsearch搜索引擎;在后台程序的数据持久化存储层重写拦截器并设置查询拦截规则,在后台程序与mysql数据库、elasticsearch搜索引擎之间设计一个查询中间件并对查询中间件进行配置;

s2:数据查询处理,即拦截器对查询语句进行拦截并封装,查询中间件解析查询语句和参数,根据查询特征的不同,分别向mysql数据库或elasticsearch搜索引擎发起请求,进行数据查询;

s3:查询数据后处理,即查询中间件对查询结果进行格式化和数据集封装,进一步解析查询结果,将最终结果返回呈现给用户前端。

上述实现中,数据查询主要是考虑数据量和结构差异。对不同的数据结构进行特性识别,采用最高效率的算法设计,对于简单线性的数据通常采用最基本的sql+普通索引查询,而对复合数据受到其自身设计的限制,结构化数据库在千万级数据上进行查询时可能会存在性能问题,因此引入elasticsearch(简写为es)搜索引擎来弥补在某些查询条件下结构化数据库的性能缺陷,并且设计一个查询中间件来分析和转发sql语句的查询。

将mysql中存储的数据完全同步到elasticsearch中,当用户前端有查询请求到达时,后台程序通过数据持久化存储框架构建sql查询。当sql查询构建好后,不直接向数据库发起查询,而是将查询发送到查询中间件,由中间件对查询进行分析。对于简单的查询则直接向mysql数据库发起查询,对于较为复杂的查询(如同时包含左右模糊的查询)则向elasticsearch发起查询请求,最后将得到的查询结果格式化处理后返回给后台程序。

由于elasticsearch采取的非结构化的数据存储,所以针对结构化mysql数据库的数据同步要根据elasticsearch引擎的特点进行设计,以便能更好的发挥其快速搜索的优势。其次,整个方案另一个核心步骤在于如何对前端的查询请求进行分析,为其选择最优的查询方式。虽然elasticsearch搜索引擎查询速度相当迅速,但其开销巨大,对于查询结果只有1、2条的简单查询请求来说使用elasticsearch存在资源的浪费。所以不能单纯地将所有查询请求都发给elasticsearch来查询。

进一步地,步骤s1中所述数据特性识别与预处理的实施流程如下:

s1.1:通过自动excel解析、数据源导入或/和系统业务自动产生的方式获得需要处理的数据;

s1.2:对待处理的数据进行整体及抽样扫描,根据数据总量和字段的复杂度判断数据的类型;

s1.3:如果数据类型为普通数据,则直接将普通数据存储于mysql数据库并同步至elasticsearch搜索引擎;如果数据类型为复合数据,则将复合数据存储于mysql数据库并同步至elasticsearch搜索引擎,同时在elasticsearch搜索引擎中对复合数据进行预处理;

s1.4:对数据进行更新或删除操作时,后台程序的事务控制层判断数据在mysql数据库和elasticsearch搜索引擎中同时更新或删除成功,才能提交本次数据更新或删除操作,否则进行回滚;

s1.5:根据数据及查询的复杂度,重写拦截器,设置查询拦截规则;

s1.6:在初始化后台程序时,对查询中间件进行整合配置,将查询中间件的服务器地址、端口及其它相关配置信息写入查询中间件配置文件中,同时,在查询中间件配置文件中也写入mysql数据库和elasticsearch搜索引擎的服务器地址、用户名、密码及其它相关配置信息,使得查询中间件可以访问到mysql数据库和elasticsearch搜索引擎。

上述步骤中,对待处理的数据进行整体及抽样扫描后输出到stream管道流中,将普通数据同步至elasticsearch搜索引擎时,无需为其在elasticsearch搜索引擎建立索引表。

由于logstash数据同步工具只能进行全量同步和增量同步操作,无法进行更新和删除的同步,因此,采用步骤s1.4的方法实现数据的更新和删除。

进一步地,步骤s1.3中所述对复合数据进行预处理的实施流程如下:

s1.3.1:创建复合数据对象的索引表,在索引表所有字段末尾增加一个名称为es_index的字段,用于存储一条记录复合数据预处理后的数据;

s1.3.2:将es_index前所有字段的字段名和字段值进行逐一拼接起来,生成一条包含所述复合数据全部记录信息的文本,再将所述文本存储在es_index字段中;

s1.3.3:对索引表中可以模糊查询的特殊字段,对其字段值添加一些模糊查询不同形式的字段分词。

上述步骤中,当es_index字段存储了复合数据全部记录信息的文本后,当对复合数据进行简单的查询时,就可以在这个新的字段内进行。对字段进行拼接的具体方式如表1所示。

表1对字段进行拼接的示例表

上述步骤s1.3.3中对特殊字段,如手机号、银行卡号、邮箱等类型可以标识用户信息的字段,由于可以在上面做模糊查询,所以还要对这些字段做进一步的分词处理。如手机号码可以分出前三位、尾号等。经过处理后的最终数据格式如表2所示。

表2模糊查询字段进行分词处理的示例表

进一步地,步骤s2中所述数据查询处理的实施流程如下:

s2.1:后台程序接收到用户前端查询请求后,在数据持久化存储层构建sql查询语句;

s2.2:拦截器对数据更新或删除的sql语句不予拦截,直接放行进行相应的操作;拦截器按照拦截规则对sql查询语句进行拦截,并以查询中间件所能接受的参数格式对拦截到的sql查询语句和参数进行格式化封装,将封装好的查询请求发送给查询中间件;

s2.3:采用编译技术构造一张关键词表,将具有深度分页、模糊查询的关键字添加到所述关键词表中;

s2.4:查询中间件获取sql查询语句和参数后,首先对sql查询语句进行扫描解析,在关键词表查找是否包含关键词,然后对sql查询参数进行扫描解析,判断该sql查询的特征,最后根据扫描解析的结果和数据及查询的复杂度,构建一个sql查询请求或es查询请求;

s2.5:如果无法判断数据及查询的复杂度,则对mysql数据库或elasticsearch搜索引擎都发起查询请求,并记录两者的查询时间;如果两者的查询时间差异较大,只需记录一次查询时间并将查询时间最短的查询请求构建成相应的sql查询请求或es查询请求,否则需要记录若干次两者的查询时间,取若干次查询时间的平均值,将平均查询时间最短的查询请求构建成相应的sql查询请求或es查询请求;

s2.6:查询中间件根据构建好的sql查询请求或es查询请求,分别向mysql数据库或elasticsearch搜索引擎发起查询。

上述步骤中,常用的数据持久化存储层框架,如hibernate、mybatis都提供了拦截器接口,可以在这些拦截方法中得到生成的sql语句、对sql语句进行修改。因此,考虑在持久化存储层重写生成拦截器,拦截下sql查询语句,将其发送到查询中间件。

查询中间件对传来的sql查询语句进行分析,判断语句的复杂程度,对于简单的、少量数据的查询直接对数据库发起查询请求,对于复杂的、大量数据的查询则向es发起查询请求。对于一些无法判断复杂度和速度的查询,则向数据库和es都发起查询。如果两者查询时间差距较大则下次查询时就直接调用查询时间最短的方法;若两者查询时间差距并不大,应该将两者多次(如20次,排除偶然因素的影响)调用的平均时间记录下来(如表3所示),之后调用平均查询时间最短的方法进行查询。

表3查询时间表

上述步骤s2.2中,对sql查询语句和参数进行格式化封装可以选择构建成restful风格的请求。

上述步骤s2.3中,可根据编译技术的相关知识,构造出一张关键词表将“limit”、“like”、“match”等这些可能产生深度分页、模糊查询的关键字加入进去。

查询中间件获取到sql查询语句和参数后,对sql语句进行扫描,查找其中是否包含关键词表中包含的关键词。之后再对sql参数进行扫描,进一步判断该查询的特征,以应用的分页来说,当分页深度过深时,sql查询可能会存在性能问题。如在mysql的查询中加上“limit200000,20”表示取查询结果从第20万条开始的20条记录,对于这种程度的分页就可能存在性能问题(延迟可能在秒级)。当在扫描sql语句时扫描到“limit”关键词后,又在查询参数中扫描到分页深度为200000,那么就考虑构建一个es查询请求。

进一步地,步骤s3中所述查询数据后处理的实施流程如下:

s3.1:查询中间件从mysql数据库或elasticsearch搜索引擎获得查询数据;

s3.2:查询中间件采用json格式对查询数据进行格式化打包,将打包后的查询数据集封装成网络请求,返回给发出查询请求的后台程序;

s3.3:等待查询结果的拦截器获得查询数据集,取出查询数据并进行解析,转化成业务实体类型数据,返回给业务逻辑控制层;

s3.4:业务逻辑控制层进一步解析业务实体类型的查询数据,将最终查询结果数据返回给用户前端。

进一步地,所述后台程序包括业务逻辑控制层、数据持久化存储层、事务控制层,其中:所述业务逻辑控制层位于用户前端与数据持久化存储层之间,用于对用户具体的操作进行业务逻辑处理,将原始数据抽象出逻辑数据,形成一种业务规则;所述数据持久化存储层,用于将后台程序产生的数据及数据库相关的各种操作数据适时进行持久存储;事务控制层位于数据持久化存储层与mysql数据库或elasticsearch搜索引擎之间,用于对mysql数据库或elasticsearch搜索引擎的操作事务进行控制。

进一步地,所述查询中间件用于对用户前端的查询请求进行分析处理,为其选择最优的查询方式,再对查询结果数据进行解析,向用户前端返回最终的查询结果。

进一步地,所述mysql数据库与elasticsearch搜索引擎进行数据同步的方式为采用logstash同步工具实现结构化和非结构化数据存储的同步。

以上所述仅为本发明的较佳实施例而已,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,皆应属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1