基于行键盐值的数据查询方法、装置、设备及存储介质与流程

文档序号:22759866发布日期:2020-10-31 09:58阅读:152来源:国知局
基于行键盐值的数据查询方法、装置、设备及存储介质与流程

本发明涉及大数据技术领域,尤其涉及一种基于行键盐值的数据查询方法、装置、设备及存储介质。



背景技术:

hbase是一个分布式的、面向列的开源数据库是一个分布式的和可扩展的大数据仓库,hbase能够融合key/value存储模式带来实时查询的能力,以及通过mapreduce进行离线处理或者批处理的能力,hbase能够在大量的数据中快速查询记录,也可以从中获得综合分析报告。presto是一个分布式的查询引擎,基于内存进行计算,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询数据查询引擎。

在现有技术中,通常基于hbase和presto查询数据,但是当数据达到亿级别或以上时,数据会出现热点问题,资源占用率较高且计算效率较低,从而导致开源prestohbase的查询性能下降。



技术实现要素:

本发明的主要目的在于解决现有技术在查询数据时,计算效率低、资源占用率高导致的查询性能差的问题。

本发明第一方面提供了一种基于行键盐值的数据查询方法,包括:获取数据库中的表数据,并从所述表数据中读取多个数据行键,所述表数据包括多个数据分区;统计所述多个数据分区的数量,得到数据分区数量,根据所述数据分区数量获取多个目标盐值,并根据所述多个目标盐值和所述多个数据行键,获取多个盐值数据行键;根据所述多个盐值数据行键和所述多个数据分区,确定多个目标数据分区;获取目标终端的数据查询请求,并在所述多个目标数据分区中,根据所述数据查询请求和所述多个盐值数据行键,确定起始盐值数据行键对应的数据起始键和终止盐值数据行键对应的数据终止键;将所述数据起始键至所述数据终止键中对应的多个盐值数据行键进行封装,得到盐值数据行键封装列表,所述盐值数据行键封装列表包括所述数据起始键对应的起始盐值数据行键和所述数据终止键对应的终止盐值数据行键;根据所述目标终端的数据查询请求在所述盐值数据行键封装列表中确定目标盐值数据行键,并将所述目标盐值数据行键传输至目标终端。

可选的,在本发明第一方面的第一种实现方式中,所述统计所述多个数据分区的数量,得到数据分区数量,根据所述数据分区数量获取多个目标盐值,并根据所述多个目标盐值和所述多个数据行键,获取多个盐值数据行键包括:统计所述多个数据分区的数量,得到数据分区数量;根据所述数据分区数量设置盐值范围,得到多个盐值选值,盐值选值数量与所述数据分区数量相同,每个盐值选值对应多个初始盐值;为多个初始盐值设置分隔符,得到多个目标盐值;采用随机数算法将所述多个目标盐值随机设置到所述多个数据行键的前缀位置,得到多个盐值数据行键。

可选的,在本发明第一方面的第二种实现方式中,所述根据所述多个盐值数据行键和所述多个数据分区,确定多个目标数据分区包括:依次读取所述多个盐值数据行键中对应的目标盐值,得到多个目标行键盐值;基于所述多个目标行键盐值对所述多个盐值数据行键进行分类,得到多个盐值数据行键类别;将所述多个盐值数据行键类别分配到对应的数据分区中,得到多个目标数据分区。

可选的,在本发明第一方面的第三种实现方式中,所述获取目标终端的数据查询请求,并在所述多个目标数据分区中,根据所述数据查询请求和所述多个盐值数据行键,确定起始盐值数据行键对应的数据起始键和终止盐值数据行键对应的数据终止键包括:获取目标终端的数据查询请求,并从所述多个盐值数据行键中分别读取多个行键头部数据,所述行键头部数据为目标盐值后的首位数字或者字母;基于所述数据查询请求、阿斯克斯编码顺序和所述多个行键头部数据,确定数据起始键和数据终止键。

可选的,在本发明第一方面的第四种实现方式中,所述根据所述目标终端的数据查询请求在所述盐值数据行键封装列表中确定目标盐值数据行键,并将所述目标盐值数据行键传输至目标终端包括:在所述盐值数据行键封装列表中读取封装行键标识;判断所述封装行键标识是否与预置行键标识相匹配;若所述封装行键标识与所述预置行键标识相匹配,则确定目标查询模式;根据所述目标终端的数据查询请求、所述目标查询模式和所述盐值数据行键封装列表,确定目标盐值数据行键,并将所述目标盐值数据行键传输至目标终端。

可选的,在本发明第一方面的第五种实现方式中,所述根据所述目标终端的数据查询请求、所述目标查询模式和所述盐值数据行键封装列表,确定目标盐值数据行键,并将所述目标盐值数据行键传输至目标终端包括:通过所述目标查询模式对所述目标终端的数据查询请求进行谓词解析,得到查询字段名称;从所述盐值数据行键封装列表中读取多个预置数据行键字段名称;将所述查询字段名称与所述多个预置数据行键字段名称进行匹配,得到目标字段名称,根据所述目标字段名称确定目标盐值数据行键,并将所述目标盐值数据行键传输至目标终端。

可选的,在本发明第一方面的第六种实现方式中,在所述获取数据库中的表数据,并从所述表数据中读取多个数据行键,所述表数据包括多个数据分区之前,所述基于行键盐值的数据查询方法还包括:在服务器中设置监听文件和配置文件,其中,当通过所述监听文件检测到数据库或者服务器中发生数据新增、数据删除或者数据修改时,通过所述配置文件实时向服务器集群配置发生更改的数据。

本发明第二方面提供了一种基于行键盐值的数据查询装置,包括:数据行键获取模块,用于获取数据库中的表数据,并从所述表数据中读取多个数据行键,所述表数据包括多个数据分区;盐值行键设置模块,用于统计所述多个数据分区的数量,得到数据分区数量,根据所述数据分区数量获取多个目标盐值,并根据所述多个目标盐值和所述多个数据行键,获取多个盐值数据行键;数据分区设置模块,用于根据所述多个盐值数据行键和所述多个数据分区,确定多个目标数据分区;数据行键选取模块,用于获取目标终端的数据查询请求,并在所述多个目标数据分区中,根据所述数据查询请求和所述多个盐值数据行键,确定起始盐值数据行键对应的数据起始键和终止盐值数据行键对应的数据终止键;行键封装模块,用于将所述数据起始键至所述数据终止键中的对应多个盐值数据行键进行封装,得到盐值数据行键封装列表,所述盐值数据行键封装列表包括所述数据起始键的对应起始盐值数据行键和所述数据终止键对应的终止盐值数据行键;目标数据查询模块,用于根据所述目标终端的数据查询请求在所述盐值数据行键封装列表中确定目标盐值数据行键,并将所述目标盐值数据行键传输至目标终端。

可选的,在本发明第二方面的第一种实现方式中,所述盐值行键设置模块具体用于:统计所述多个数据分区的数量,得到数据分区数量;根据所述数据分区数量设置盐值范围,得到多个盐值选值,盐值选值数量与所述数据分区数量相同,每个盐值选值对应多个初始盐值;为多个初始盐值设置分隔符,得到多个目标盐值;采用随机数算法将所述多个目标盐值随机设置到所述多个数据行键的前缀位置,得到多个盐值数据行键。

可选的,在本发明第二方面的第二种实现方式中,所述数据分区设置模块具体用于:依次读取所述多个盐值数据行键中对应的目标盐值,得到多个目标行键盐值;基于所述多个目标盐值对所述多个盐值数据行键进行分类,得到多个盐值数据行键类别;将所述多个盐值数据行键类别分配到对应的数据分区中,得到多个目标数据分区。

可选的,在本发明第二方面的第三种实现方式中,所述数据行键选取模块具体用于:获取目标终端的数据查询请求,并从所述多个盐值数据行键中分别读取多个行键头部数据,所述行键头部数据为目标盐值后的首位数字或者字母;基于所述数据查询请求、阿斯克斯编码顺序和所述多个行键头部数据,确定数据起始键和数据终止键。

可选的,在本发明第二方面的第四种实现方式中,所述目标数据查询模块具体包括:标识读取单元,用于在所述盐值数据行键封装列表中读取封装行键标识;判断单元,用于判断所述封装行键标识是否与预置行键标识相匹配;查询模式确定单元,若所述封装行键标识与所述预置行键标识相匹配,则用于确定目标查询模式;目标数据选取单元;根据所述目标终端的数据查询请求、所述目标查询模式和所述盐值数据行键封装列表,确定目标盐值数据行键,并将所述目标盐值数据行键传输至目标终端。

可选的,在本发明第二方面的第五种实现方式中,所述目标数据选取单元具体用于:通过所述目标查询模式对所述目标终端的数据查询请求进行谓词解析,得到查询字段名称;从所述盐值数据行键封装列表中读取多个预置数据行键字段名称;将所述查询字段名称与所述多个预置数据行键字段名称进行匹配,得到目标字段名称,根据所述目标字段名称确定目标盐值数据行键,并将所述目标盐值数据行键传输至目标终端。

可选的,在本发明第二方面的第六种实现方式中,所述基于行键盐值的数据查询装置还包括:监听与配置模块,用于在服务器中设置监听文件和配置文件,其中,当通过所述监听文件检测到数据库或者服务器中发生数据新增、数据删除或者数据修改时,用于通过所述配置文件实时向服务器集群配置发生更改的数据。

本发明第三方面提供了一种基于行键盐值的数据查询设备,包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互连;所述至少一个处理器调用所述存储器中的所述指令,以使得所述基于行键盐值的数据查询设备执行上述的基于行键盐值的数据查询方法。

本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的基于行键盐值的数据查询方法。

本发明提供的技术方案中,获取数据库中的表数据,并从所述表数据中读取多个数据行键,所述表数据包括多个数据分区;统计所述多个数据分区的数量,得到数据分区数量,根据所述数据分区数量获取多个目标盐值,并根据所述多个目标盐值和所述多个数据行键,获取多个盐值数据行键;根据所述多个盐值数据行键和所述多个数据分区,确定多个目标数据分区;获取目标终端的数据查询请求,并在所述多个目标数据分区中,根据所述数据查询请求和所述多个盐值数据行键,确定起始盐值数据行键对应的数据起始键和终止盐值数据行键对应的数据终止键;将所述数据起始键至所述数据终止键中对应的多个盐值数据行键进行封装,得到盐值数据行键封装列表,所述盐值数据行键封装列表包括所述数据起始键对应的起始盐值数据行键和所述数据终止键对应的终止盐值数据行键;根据所述目标终端的数据查询请求在所述盐值数据行键封装列表中确定目标盐值数据行键,并将所述目标盐值数据行键传输至目标终端。本发明实施例中,通过给数据行键加盐值,将数据分散到各个分区,然后打包全部盐值数据行键,最后在盐值数据行键封装列表中查询目标盐值数据行键,解决了在数据分区中出现数据热点的问题,降低了资源占用率、提高了计算效率,从而提升数据查询性能。

附图说明

图1为本发明实施例中基于行键盐值的数据查询方法的一个实施例示意图;

图2为本发明实施例中基于行键盐值的数据查询方法的另一个实施例示意图;

图3为本发明实施例中基于行键盐值的数据查询装置的一个实施例示意图;

图4为本发明实施例中基于行键盐值的数据查询装置的另一个实施例示意图;

图5为本发明实施例中基于行键盐值的数据查询设备的一个实施例示意图。

具体实施方式

本发明实施例提供了一种基于行键盐值的数据查询方法、装置、设备及存储介质,用于通过给数据行键加盐,将数据分散到各个分区,得到多个盐值数据行键和数据起始键和数据终止键,将数据起始键至数据终止键中的对应盐值数据行键打包,得到盐值数据行键封装列表,再根据目查询模式在盐值数据行键封装列表中查询目标盐值数据行键,解决了在数据分区中出现数据热点的问题,降低了资源占用率、提高了计算效率,从而提升数据查询性能。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图1,本发明实施例中基于行键盐值的数据查询方法的一个实施例包括:

101、获取数据库中的表数据,并从表数据中读取多个数据行键,表数据包括多个数据分区;

服务器在数据库中读取包括多个数据分区的表数据,服务器从包括多个数据分区的表数据中读取多个数据行键。

在本实施例中,数据库采用hbase数据库,hbase是一个分布式的、面向列的开源数据库。hbase数据库中的数据为表数据,当表数据随着记录数不断增加而变大后,会逐渐分裂,变为多个数据分区regions,不同的region会被分配给相应的regionserver进行管理。hbase数据库采用keyvalue存储数据,那数据行键rowkey就是keyvalue中的key了,rowkey也是一段二进制码流,最大长度为64kb,内容可以由使用的用户自定义。数据加载时,一般也是根据rowkey的二进制序由小到大进行的,服务器在读取数据库中的表数据之后,从表数据中读取多个数据行键。

可以理解的是,本发明的执行主体可以为基于行键盐值的数据查询装置,还可以是终端或者服务器,具体此处不做限定。本发明实施例以服务器为执行主体为例进行说明。

102、统计多个数据分区的数量,得到数据分区数量,根据数据分区数量获取多个目标盐值,并根据多个目标盐值和多个数据行键,获取多个盐值数据行键;

服务器统计得到数据分区数量,然后服务器根据数据分区数量确定多个用于获取多个盐值数据行键的多个目标盐值。

表数据按照数据行键的不同分散到不同的数据分区中的,不合理的数据行键分配会导致数据热点问题,数据热点问题可以理解为:多个数据行键被分配到同一个数据分区中,大量的数据请求直接访问这个数据分区,从而引起这个数据分区所在的单个服务器超出自身的承受能力,引起性能下降甚至导致该数据分区不可用。

在本实施例中,服务器通过为多个数据行键随机设置不同的盐值作为前缀,得到多个带有不同前缀的数据行键,即多个盐值数据行键,解决数据热点问题。具体解决办法为:服务器给多个数据行键分配一个随机前缀,即盐值,盐值范围内包括的盐值数量与数据分区的数量相同,例如初始分区数量为5个,那么盐值可以设置为a-、b-、c-、d-或者e-,将a-、b-、c-、d-、或者e-随机设置在多个数据行键的前段作为前缀,得到多个盐值数据行键,从而使得多个数据行键和之前排序不同。服务器根据多个盐值数据行键的盐值,将其分配到对应的数据分区中。

103、根据多个盐值数据行键和多个数据分区,确定多个目标数据分区;

服务器在获取多个盐值数据行键之后,可以打散原有的数据分区,将多个盐值数据行键按照盐值数据行键的前缀分配到对应的数据分区中,得到多个目标数据分区。

需要说明的是,盐值数据行键的前缀可以为字母也可以为数字。

例如,数据分区为五个,多个盐值数据行键对应的前缀的范围为从“a-”至“e-”,服务器将盐值数据行键的前缀为“a-”的多个盐值数据行键分配至序列排在第一的数据分区、将盐值数据行键的前缀为“b-”的多个盐值数据行键分配至序列排在第二的数据分区、将盐值数据行键的前缀为“c-”的多个盐值数据行键分配至序列排在第三的数据分区、将盐值数据行键的前缀为“d-”的多个盐值数据行键分配至序列排在第四的数据分区以及将盐值数据行键的前缀为“e-”的多个盐值数据行键分配至序列排在第五的数据分区,从而得到多个目标数据分区。

104、获取目标终端的数据查询请求,并在多个目标数据分区中,根据数据查询请求和多个盐值数据行键,确定起始盐值数据行键对应的数据起始键和终止盐值数据行键对应的数据终止键;

服务器获取目标终端的数据查询请求,并根据数据查询请求和多个盐值数据行键在多个目标数据分区中确定数据起始键和数据终止键,数据起始键为起始盐值数据行键对应的数据键,数据终止键为终止盐值数据行键对应的数据键。

需要说明的是,目标终端的数据查询请求可以同时为多个。

例如,假设目标终端的数据查询请求为“查询a公司的全部职员”,多个盐值行键数据为“a-100xx”,“a-200xx”...“a-n00xx”。服务器在多个目标分区中读取多个盐值数据行键的头部数据,多个盐值数据行键的头部数据分别为“1”,“2”...“n”,服务器根据“查询a公司的全部职员”的数据查询请求,按照阿斯克斯编码的顺序和多个行键头部顺序,在多个盐值行键数据中确定数据起始键为“a-100xx”和数据终止键“a-900xx”。

105、将数据起始键至数据终止键中对应的多个盐值数据行键进行封装,得到盐值数据行键封装列表,盐值数据行键封装列表包括数据起始键对应的起始盐值数据行键和数据终止键对应的终止盐值数据行键;

服务器将数据起始键对应的起始盐值数据行键、数据终止键对应的终止盐值数据行键以及数据起始键至数据终止键中对应的盐值数据行键进行封装,得到盐值数据行键封装列表。

服务器将多个盐值数据行键封装为一个盐值数据行键列表,能够减少服务器和数据库的交互次数,一次查询可以返回多个结果。

例如,目标终端的数据查询请求为“查询a公司的行政职员”和“查询a公司工龄为两年的测试职员”,此时可以将数据起始键看作a公司入职时间最早的职员,将数据终止键看作a公司入职时间最晚的职员,在本实施例中,也可以将数据起始键看作a公司年龄最大的职员,将数据终止键看作a公司年龄最小的职员,本发明实施例不对数据起始键和数据终止键做具体限定。服务器将数据起始键对应的a公司入职时间最早的职员至数据终止键对应的a公司入职时间最晚的职员封装为一个盐值数据行键列表a,服务器能够在盐值数据行键列表a中获取“a公司的行政职员”和“a公司工龄为两年的测试职员”的查询结果。而不需要先在数据库中获取“a公司的行政职员”的查询结果,并将结果返回给目标终端之后再从数据库中获取“a公司工龄为两年的测试职员”的查询结果,并将结果再次返回给目标终端。

106、根据目标终端的数据查询请求在盐值数据行键封装列表中确定目标盐值数据行键,并将目标盐值数据行键传输至目标终端。

服务器在盐值数据行键封装列表中根据目标终端的数据查询请求获取目盐值数据行键,并将目标盐值数据行键传输至目标终端。

例如,目标终端的数据查询请求为“查询a公司的行政职员”和“查询a公司工龄为两年的测试职员”,服务器则通过“查询a公司的行政职员”和“查询a公司工龄为两年的测试职员”的查询请求直接从盐值数据行键列表中获取“a公司的全部职员”和“a公司工龄为两年的测试职员”的目标盐值数据行键,并将“a公司的全部职员”和“a公司工龄为两年的测试职员”的目标盐值数据行键传输至目标终端。

本发明实施例中,通过给数据行键加盐值,将数据分散到各个分区,然后打包全部盐值数据行键,最后在盐值数据行键封装列表中查询目标盐值数据行键,解决了在数据分区中出现数据热点的问题,降低了资源占用率、提高了计算效率,从而提升数据查询性能。

请参阅图2,本发明实施例中基于行键盐值的数据查询方法的另一个实施例包括:

201、在服务器中设置监听文件和配置文件,其中,当通过监听文件检测到数据库或者服务器中发生数据新增、数据删除或者数据修改时,通过配置文件实时向服务器集群配置发生更改的数据。

服务器在为服务器本身配置监听文件和配置文件,服务器通过监听文件能够监听到数据库中或者服务器中数据发生的变化,服务器通过配置文件能够向服务器集群配置变化后的数据。当服务器通过监听文件监听到数据库中或者服务器中的数据发生新增、删除或者修改时,服务器通过配置文件实时向服务器集群配置发生更改的数据。

202、获取数据库中的表数据,并从表数据中读取多个数据行键,表数据包括多个数据分区;

服务器在数据库中读取包括多个数据分区的表数据,服务器从包括多个数据分区的表数据中读取多个数据行键。

在本实施例中,数据库采用hbase数据库,hbase是一个分布式的、面向列的开源数据库。hbase数据库中的数据为表数据,当表数据随着记录数不断增加而变大后,会逐渐分裂,变为多个数据分区regions,不同的region会被分配给相应的regionserver进行管理。hbase数据库采用keyvalue存储数据,那数据行键rowkey就是keyvalue中的key了,rowkey也是一段二进制码流,最大长度为64kb,内容可以由使用的用户自定义。数据加载时,一般也是根据rowkey的二进制序由小到大进行的,服务器在读取数据库中的表数据之后,从表数据中读取多个数据行键。

203、统计多个数据分区的数量,得到数据分区数量,根据数据分区数量获取多个目标盐值,并根据多个目标盐值和多个数据行键,获取多个盐值数据行键;

服务器统计得到数据分区数量,然后服务器根据数据分区数量确定多个用于获取多个盐值数据行键的多个目标盐值。

表数据按照数据行键的不同分散到不同的数据分区中的,不合理的数据行键分配会导致数据热点问题,数据热点问题可以理解为:多个数据行键被分配到同一个数据分区中,大量的数据请求直接访问这个数据分区,从而引起这个数据分区所在的单个服务器超出自身的承受能力,引起性能下降甚至导致该数据分区不可用。

在本实施例中,服务器通过为多个数据行键随机设置不同的盐值作为前缀,得到多个带有不同前缀的数据行键,即多个盐值数据行键,解决数据热点问题。具体解决办法为:服务器给多个数据行键分配一个随机前缀,即盐值,盐值范围内包括的盐值数量与数据分区的数量相同,例如初始分区数量为5个,那么盐值可以设置为a-、b-、c-、d-或者e-,将a-、b-、c-、d-、或者e-随机设置在多个数据行键的前段作为前缀,得到多个盐值数据行键,从而使得多个数据行键和之前排序不同。服务器根据多个盐值数据行键的盐值,将其分配到对应的数据分区中。

具体的,服务器首先统计多个数据分区的数量,得到数据分区数量,服务器在获取数据分区数量之后,设置盐值的取值范围,并根据盐值的取值范围确定多个对应多个初始盐值的盐值选值;若想使多个初始盐值生效,还需要为初始盐值设置分隔符,服务器为多个初始盐值设置分隔符,得到多个目标盐值。服务器最后采用随机数算法将多个目标盐值随机分配到多个数据行键的前缀位置,从而得到多个盐值数据行键。

需要说明的是,采用随机数算法能够将多个目标盐值进行均匀的分配,从而在后期的目标数据分区中,能够将多个盐值数据行键均匀的分配到多个目标数据分区中。盐值的选值数量与数据分区的数量相同,比如,数据分区的数量为5个,盐值的选值数量也为5个,每个盐值选值对应多个初始盐值。例如,盐值选值为1时,对应的初始盐值可以为1000个,也可以为20000个。

例如,假设服务器统计得到的数据分区数量为5,服务器根据数据分区数量5设置盐值的取值范围为1-5,盐值选值的数量为5个,每个盐值选值对应多个初始盐值,则有多个初始盐值a、多个初始盐值b、多个初始盐值c、多个初始盐值d和多个初始盐值e,服务器为多个初始盐值设置分隔符“-”,得到多个目标盐值a-、多个目标盐值b-、多个目标盐值c-、多个目标盐值d-和多个目标盐值e-,将多个目标盐值a-、多个目标盐值b-、多个目标盐值c-、多个目标盐值d-和多个目标盐值e-随机分配到多个数据行键的头部位置,作为前缀,从而得到多个盐值数据行键。

204、根据多个盐值数据行键和多个数据分区,确定多个目标数据分区;

服务器在获取多个盐值数据行键之后,可以打散原有的数据分区,将多个盐值数据行键按照盐值数据行键的前缀分配到对应的数据分区中,得到多个目标数据分区。

需要说明的是,盐值数据行键的前缀可以为字母也可以为数字。

例如,数据分区为五个,多个盐值数据行键对应的前缀的范围为从“a-”至“e-”,服务器将盐值数据行键的前缀为“a-”的多个盐值数据行键分配至序列排在第一的数据分区、将盐值数据行键的前缀为“b-”的多个盐值数据行键分配至序列排在第二的数据分区、将盐值数据行键的前缀为“c-”的多个盐值数据行键分配至序列排在第三的数据分区、将盐值数据行键的前缀为“d-”的多个盐值数据行键分配至序列排在第四的数据分区以及将盐值数据行键的前缀为“e-”的多个盐值数据行键分配至序列排在第五的数据分区,从而得到多个目标数据分区。

具体的,服务器首先依次读取多个盐值数据行键对应的目标盐值,得到多个目标行键盐值;然后服务器根据多个目标行键盐值将多个盐值数据行键分类为与数据分区类别相同的别盐值数据行键类别;最后,服务器分配盐值数据行键类别至对应的数据分区中,从而得到多个目标数据分区。

例如,服务器读取到五个目标行键盐值为目标行键盐值a-、b-、c-、d-和e-,将目标行键盐值为a-的多个盐值数据进行分类统计,得到a-盐值数据行键类别、将目标行键盐值为b-的多个盐值数据进行分类统计,得到b-盐值数据行键类别、将目标行键盐值为c-的多个盐值数据进行分类统计,得到c-盐值数据行键类别、将目标行键盐值为d-的多个盐值数据进行分类统计,得到d-盐值数据行键类别以及将目标行键盐值为e-的多个盐值数据进行分类统计,得到e-盐值数据行键类别;服务器将a-盐值数据行键类别分配至排序在第一的数据分区、将b-盐值数据行键类别分配至排序在第二的数据分区、将c-盐值数据行键类别分配至排序在第三的数据分区、将d-盐值数据行键类别分配至排序在第四的数据分区、以及将e-盐值数据行键类别分配至排序在第五的数据分区,得到目标数据分区a、目标数据分区b、目标数据分区c、目标数据分区d和目标数据分区e。

205、获取目标终端的数据查询请求,并在多个目标数据分区中,根据数据查询请求和多个盐值数据行键,确定起始盐值数据行键对应的数据起始键和终止盐值数据行键对应的数据终止键;

服务器获取目标终端的数据查询请求,并根据数据查询请求和多个盐值数据行键在多个目标数据分区中确定数据起始键和数据终止键,数据起始键为起始盐值数据行键对应的数据键,数据终止键为终止盐值数据行键对应的数据键。

需要说明的是,目标终端的数据查询请求可以同时为多个。

例如,假设目标终端的数据查询请求为“查询a公司的全部职员”,多个盐值行键数据为“a-100xx”,“a-200xx”“a-n00xx”。服务器在多个目标分区中读取多个盐值数据行键的头部数据,多个盐值数据行键的头部数据分别为“1”,“2”“n”,服务器根据“查询a公司的全部职员”的数据查询请求,按照阿斯克斯编码的顺序和多个行键头部顺序,在多个盐值行键数据中确定数据起始键为“a-100xx”和数据终止键“a-900xx”。

具体的,服务器首先获取目标终端的数据查询请求,然后在多个盐值行键中分别读取多个行键头部数据,行键头部数据可以为数字也可以为字母,比如,一个盐值行键数据的格式为“a-100xxx”,行键头部数据为排在盐值“a-”后的首位数字“1”。服务器基于目标终端的数据查询请求,按照阿斯克斯编码的顺序在多个头部行键数据中确定排在第一位的头部行键数据和排在最后一位的行键数据,排在第一位的头部行键数据对应的盐值数据行键为数据起始键,排在最后一位的头部行键数据对应的盐值数据行键为数据终止键。

206、将数据起始键至数据终止键中对应的多个盐值数据行键进行封装,得到盐值数据行键封装列表,盐值数据行键封装列表包括数据起始键对应的起始盐值数据行键和数据终止键对应的终止盐值数据行键;

服务器将数据起始键对应的起始盐值数据行键、数据终止键对应的终止数据行键以及数据起始键至数据终止键中对应的盐值数据行键进行封装,得到盐值数据行键封装列表。

服务器将多个数据行键封装为一个盐值数据行键列表,能够减少服务器和数据库的交互次数,一次查询可以返回多个结果。

例如,目标终端的数据查询请求为“查询a公司的行政职员”和“查询a公司工龄为两年的测试职员”,此时可以将数据起始键看作a公司入职时间最早的职员,将数据终止键看作a公司入职时间最晚的职员,在本实施例中,也可以将数据起始键看作a公司年龄最大的职员,将数据终止键看作a公司年龄最小的职员,本发明实施例不对数据起始键和数据终止键做具体限定。服务器将数据起始键对应的a公司入职时间最早的职员至数据终止键对应的a公司入职时间最晚的职员封装为一个盐值数据行键列表a,服务器能够在盐值数据行键列表a中获取“a公司的行政职员”和“a公司工龄为两年的测试职员”的查询结果。而不需要先在数据库中获取“a公司的行政职员”的查询结果,并将结果返回给目标终端之后再从数据库中获取“a公司工龄为两年的测试职员”的查询结果,并将结果再次返回给目标终端。

207、根据目标终端的数据查询请求在盐值数据行键封装列表中确定目标盐值数据行键,并将目标盐值数据行键传输至目标终端。

服务器在盐值数据行键封装列表中根据目标终端的数据查询请求获取目盐值数据行键,并将目标盐值数据行键传输至目标终端。

例如,目标终端的数据查询请求为“查询a公司的行政职员”和“查询a公司工龄为两年的测试职员”,服务器则通过“查询a公司的行政职员”和“查询a公司工龄为两年的测试职员”的查询请求直接从盐值数据行键列表中获取“a公司的全部职员”和“a公司工龄为两年的测试职员”的目标盐值数据行键,并将“a公司的全部职员”和“a公司工龄为两年的测试职员”的目标盐值数据行键传输至目标终端。

具体的,服务器在盐值数据行键封装列表中读取封装行键标识;然后服务器判断封装行键标识是否与预置行键标识相匹配;如果封装行键标识与预置行键标识相匹配,则确定目标查询模式;最后服务器根据目标终端的数据查询请求、目标查询模式在盐值数据行键封装列表进行查询,从而得到目标盐值数据行键,并将目标盐值数据行键传输至目标终端。

服务器根据目标终端的数据查询请求、目标查询模式在盐值数据行键封装列表进行查询,从而得到目标盐值数据行键的具体过程为:

服务器通过目标查询模式对目标终端的数据查询请求进行维谓词解析,从而得到查询字段名称,服务器再通过盐值数据行键封装列表读取多个预置数据行键字段名称,服务器将查询字段名称与多个预置数据行键名称进行字段名称的匹配,从而得到目标字段名称,目标字段名称对应的盐值数据行键为目标盐值数据行键,服务器将目标盐值数据行键传输至目标终端。

例如,服务器根据盐值数据封装行键封装列表的标识获取到的查询模式为sql数据查询模式,sql查询模式为:select*fromt_eventwhererkin(‘rk1’,‘rk2’);假设目标终端的数据查询请求为“在a公司中查询工龄为两年的测试职员”,盐值行键封装列表为“a公司的全部职员”,服务器采用sql数据查询模式在“a公司的全部职员”的盐值行键封装列表中确定目标数据行键为“工龄为两年的测试职员”,服务器最后将“工龄为两年的测试职员”的目标数据行键传输至目标终端。

本发明实施例中,通过给数据行键加盐值,将数据分散到各个分区,然后打包全部盐值数据行键,最后在盐值数据行键封装列表中查询目标盐值数据行键,解决了在数据分区中出现数据热点的问题,降低了资源占用率、提高了计算效率,从而提升数据查询性能。

上面对本发明实施例中基于行键盐值的数据查询方法进行了描述,下面对本发明实施例中基于行键盐值的数据查询装置进行描述,请参阅图3,本发明实施例中基于行键盐值的数据查询装置一个实施例包括:

数据行键获取模块301,用于获取数据库中的表数据,并从所述表数据中读取多个数据行键,所述表数据包括多个数据分区;

盐值行键设置模块302,用于统计所述多个数据分区的数量,得到数据分区数量,根据所述数据分区数量获取多个目标盐值,并根据所述多个目标盐值和所述多个数据行键,获取多个盐值数据行键;

数据分区设置模块303,用于根据所述多个盐值数据行键和所述多个数据分区,确定多个目标数据分区;

数据行键选取模块304,用于获取目标终端的数据查询请求,并在所述多个目标数据分区中,根据所述数据查询请求和所述多个盐值数据行键,确定起始盐值数据行键对应的数据起始键和终止盐值数据行键对应的数据终止键;

行键封装模块305,用于将所述数据起始键至所述数据终止键中对应的多个盐值数据行键进行封装,得到盐值数据行键封装列表,所述盐值数据行键封装列表包括所述数据起始键对应的起始盐值数据行键和所述数据终止键对应的终止盐值数据行键;

目标数据查询模块306,用于根据所述目标终端的数据查询请求在所述盐值数据行键封装列表中确定目标盐值数据行键,并将所述目标盐值数据行键传输至目标终端。

本发明实施例中,通过给数据行键加盐值,将数据分散到各个分区,然后打包全部盐值数据行键,最后在盐值数据行键封装列表中查询目标盐值数据行键,解决了在数据分区中出现数据热点的问题,降低了资源占用率、提高了计算效率,从而提升数据查询性能。

请参阅图4,本发明实施例中基于行键盐值的数据查询装置的另一个实施例包括:

数据行键获取模块301,用于获取数据库中的表数据,并从所述表数据中读取多个数据行键,所述表数据包括多个数据分区;

盐值行键设置模块302,用于统计所述多个数据分区的数量,得到数据分区数量,根据所述数据分区数量获取多个目标盐值,并根据所述多个目标盐值和所述多个数据行键,获取多个盐值数据行键;

数据分区设置模块303,用于根据所述多个盐值数据行键和所述多个数据分区,确定多个目标数据分区;

数据行键选取模块304,用于获取目标终端的数据查询请求,并在所述多个目标数据分区中,根据所述数据查询请求和所述多个盐值数据行键,确定起始盐值数据行键对应的数据起始键和终止盐值数据行键对应的数据终止键;

行键封装模块305,用于将所述数据起始键至所述数据终止键中对应的多个盐值数据行键进行封装,得到盐值数据行键封装列表,所述盐值数据行键封装列表包括所述数据起始键对应的起始盐值数据行键和所述数据终止键对应的终止盐值数据行键;

目标数据查询模块306,用于根据所述目标终端的数据查询请求在所述盐值数据行键封装列表中确定目标盐值数据行键,并将所述目标盐值数据行键传输至目标终端。

可选的,盐值行键设置模块302还可以具体用于:

统计所述多个数据分区的数量,得到数据分区数量;

根据所述数据分区数量设置盐值范围,得到多个盐值选值,盐值选值数量与数据分区数量相同,每个盐值选值对应多个初始盐值;

为多个初始盐值设置分隔符,得到多个目标盐值;

采用随机数算法将所述多个目标盐值随机设置到所述多个数据行键的前缀位置,得到多个盐值数据行键。

可选的,数据分区设置模块303还可以具体用于:

依次读取所述多个盐值数据行键中对应的目标盐值,得到多个目标行键盐值;

基于所述多个目标行键盐值对所述多个盐值数据行键进行分类,得到多个盐值数据行键类别;

将所述多个盐值数据行键类别分配到对应的数据分区中,得到多个目标数据分区。

可选的,数据行键选取模块304还可以具体用于:

获取目标终端的数据查询请求,并从所述多个盐值数据行键中分别读取多个行键头部数据,所述行键头部数据为目标盐值后的首位数字或者字母;

基于所述数据查询请求、阿斯克斯编码顺序和所述多个行键头部数据,确定数据起始键和数据终止键。

可选的,目标数据查询模块306包括:

标识读取单元3061,用于在所述盐值数据行键封装列表中读取封装行键标识;

判断单元3062,用于判断所述封装行键标识是否与预置行键标识相匹配;

查询模式确定单元3063,若所述封装行键标识与所述预置行键标识相匹配,则用于确定目标查询模式;

目标数据选取单元3064;根据所述目标终端的数据查询请求、所述目标查询模式和所述盐值数据行键封装列表,确定目标盐值数据行键,并将所述目标盐值数据行键传输至目标终端。

可选的,目标数据选取单元3064还可以具体用于:

通过所述目标查询模式对所述目标终端的数据查询请求进行谓词解析,得到查询字段名称;

从所述盐值数据行键封装列表中读取多个预置数据行键字段名称;

将所述查询字段名称与所述多个预置数据行键字段名称进行匹配,得到目标字段名称,根据所述目标字段名称确定目标盐值数据行键,并将所述目标盐值数据行键传输至目标终端。

可选的,基于行键盐值的数据查询装置还包括:

监听与配置模块307,用于在服务器中设置监听文件和配置文件,其中,当通过所述监听文件检测到数据库或者服务器中发生数据新增、数据删除或者数据修改时,用于通过所述配置文件实时向服务器集群配置发生更改的数据。

本发明实施例中,通过给数据行键加盐值,将数据分散到各个分区,然后打包全部盐值数据行键,最后在盐值数据行键封装列表中查询目标盐值数据行键,解决了在数据分区中出现数据热点的问题,降低了资源占用率、提高了计算效率,从而提升数据查询性能。

上面图3和图4从模块化功能实体的角度对本发明实施例中的基于行键盐值的数据查询装置进行详细描述,下面从硬件处理的角度对本发明实施例中基于行键盐值的数据查询设备进行详细描述。

图5是本发明实施例提供的一种基于行键盐值的数据查询设备的结构示意图,该基于行键盐值的数据查询设备500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessingunits,cpu)510(例如,一个或一个以上处理器)和存储器520,一个或一个以上存储应用程序533或数据532的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器520和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对基于行键盐值的数据查询设备500中的一系列指令操作。更进一步地,处理器510可以设置为与存储介质530通信,在基于行键盐值的数据查询设备500上执行存储介质530中的一系列指令操作,以执行所述基于行键盐值的数据查询方法的步骤。

基于行键盐值的数据查询设备500还可以包括一个或一个以上电源540,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口560,和/或,一个或一个以上操作系统531,例如windowsserve,macosx,unix,linux,freebsd等等。本领域技术职员可以理解,图5示出的基于行键盐值的数据查询设备结构并不构成对基于行键盐值的数据查询设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述基于行键盐值的数据查询方法的步骤。

进一步地,所述计算机可用存储介质可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据区块链节点的使用所创建的数据等。

所属领域的技术职员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术职员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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