数据查询方法、装置和服务器与流程

文档序号:20379267发布日期:2020-04-14 19:18阅读:201来源:国知局
数据查询方法、装置和服务器与流程

本发明涉及数据查询技术领域,尤其是涉及一种数据查询方法、装置和服务器。



背景技术:

近年来,随着互联网和信息产业的快速发展,每年产生的数据以指数速度增长,因此如何存储海量数据以及在海量数据中实现低延迟的搜索,成为各个数据企业业务发展的关键。

elasticsearch作为一款高度可扩展的分布式开源搜索引擎,被大量互联网公司使用,目前大多数企业的使用方式是把所有数据存储在单个索引中,当用户查询某个特定数据时,需要从单个索引的全量数据中进行查询,当单个索引中的数据量达到一定量级时,会降低查询数据的性能和效率,无法满足业务需求。



技术实现要素:

有鉴于此,本发明的目的在于提供一种数据查询方法、装置和服务器,减少了数据的搜索范围,避免查询全量数据,进而提高了查询数据的性能和效率。

第一方面,本发明实施例提供了一种数据查询方法,其中,待查询的数据库中设置有多级索引;数据库中预先划分有多个数据分区;每个数据分区对应设置有分区索引;分区索引为多级索引中最低级的索引;多级索引中的每级索引根据该级索引对应的查询字段设置;该方法包括:接收数据查询请求;数据查询请求中包括至少一个目标查询字段;从多级索引中,确定目标查询字段对应的数据分区;从数据分区中获取数据查询请求对应的数据。

进一步的,多级索引中,除最低级的索引以外的级别的索引中,记录有当前级别的索引与当前级别的索引的下一级别的索引之间的索引关系。

进一步的,从多级索引中,确定目标查询字段对应的数据分区的步骤,包括:如果目标查询字段仅包括分区索引对应的查询字段,将目标查询字段对应的分区索引对应的数据分区,确定为目标查询字段对应的数据分区。

进一步的,从多级索引中,确定目标查询字段对应的数据分区的步骤,包括:如果目标查询字段包括除分区索引对应的查询字段以外的查询字段,按照多级索引中各个查询字段对应的索引级别,由高级别到低级别地排列目标查询字段中的查询字段;从目标查询字段中最高级别的查询字段开始,在多级索引中逐级查找目标查询字段中的每个查询字段,将目标查询字段中的每个查询字段均对应的数据分区,确定为目标查询字段对应的数据分区。

进一步的,数据库中预先划分的多个数据分区,通过下述方式划分:从数据库中的数据的各个查询字段中,选择一个查询字段;按照预设的划分粒度,对查询字段进行分段处理,得到多个分段间隔;将数据库中的数据中属于同一分段间隔的数据划分为一个数据分区,得到多个数据分区。

第二方面,本发明实施例提供了一种数据查询装置,其中,待查询的数据库中设置有多级索引;数据库中预先划分有多个数据分区;每个数据分区对应设置有分区索引;分区索引为多级索引中最低级的索引;多级索引中的每级索引根据该级索引对应的查询字段设置;该装置包括:请求接收模块,用于接收数据查询请求;数据查询请求中包括至少一个目标查询字段;数据分区确定模块,用于从多级索引中,确定目标查询字段对应的数据分区;数据获取模块,用于从数据分区中获取数据查询请求对应的数据。

进一步的,该装置的多级索引中,除最低级的索引以外的级别的索引中,记录有当前级别的索引与当前级别的索引的下一级别的索引之间的索引关系。

进一步的,数据分区确定模块包括:如果目标查询字段仅包括分区索引对应的查询字段,将目标查询字段对应的分区索引对应的数据分区,确定为目标查询字段对应的数据分区;如果目标查询字段包括除分区索引对应的查询字段以外的查询字段,按照多级索引中各个查询字段对应的索引级别,由高级别到低级别地排列目标查询字段中的查询字段;从目标查询字段中最高级别的查询字段开始,在多级索引中逐级查找目标查询字段中的每个查询字段,将目标查询字段中的每个查询字段均对应的数据分区,确定为目标查询字段对应的数据分区。

第三方面,本发明实施例提供了一种服务器,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现第一方面任一实施方式的数据查询方法。

第四方面,本发明实施例提供了一种机器可读存储介质,机器可读存储介质存储有机器可执行指令,机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现第一方面任一实施方式的数据查询方法。

本发明实施例带来了以下有益效果:

本发明实施例提供了一种数据查询方法、装置和服务器,在待查询数据库中设置多级索引,多级索引中的每级索引根据该级索引对应的查询字段设置,数据库中预先划分有多个数据分区,每个数据分区对应设置有分区索引;首先接收数据查询请求,该数据查询请求中包括至少一个目标查询字段;从多级索引中,确定目标查询字段对应的数据分区;从该数据分区中获取数据查询请求对应的数据。该方式中,将数据进行分区,同时设置多级索引,通过查询字段进行数据查询时,可以逐级缩小搜索范围,直接确定数据分区,减少了数据的搜索范围,避免查询全量数据和搜索延迟,进而提高了查询数据的性能和效率。

本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种数据查询方法的流程图;

图2为本发明实施例提供的一种数据分区确定方法的流程图;

图3为本发明实施例提供的一种数据分区划分方法的流程图;

图4为本发明实施例提供的一种数据入库流程图;

图5本发明实施例提供的一种数据查询流程图;

图6为本发明实施例提供的一种数据查询装置的结构示意图;

图7为本发明实施例提供的一种服务器的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

目前有按时间范围切分索引的方案,但只能提高单个时间维度的搜索性能,如果按照其他条件搜索数据也需要搜索全量数据。基于此,本发明实施例提供的一种数据查询方法、装置和服务器,可以减少数据的搜索范围,避免查询全量数据和搜索延迟,进而提高查询数据的性能和效率。

为便于对本实施例进行理解,首先对本发明实施例所公开的一种数据查询方法进行详细介绍。

实施例一:

首先,本发明实施例提供了一种数据查询方法,待查询的数据库中设置有多级索引;数据库中预先划分有多个数据分区;每个数据分区对应设置有分区索引;分区索引为多级索引中最低级的索引;多级索引中的每级索引根据该级索引对应的查询字段设置;如图1所示,该方法包括如下步骤:

步骤s102,接收数据查询请求;数据查询请求中包括至少一个目标查询字段;

具体的,可以是在客户端发出数据查询请求,数据查询服务可以接收数据查询请求,根据数据查询请求中包括的目标查询字段,可以查询多级索引信息中该目标查询字段对应的级别的索引。上述目标查询字段也可以是多个,根据数据查询请求中包括的目标查询字段,可以查询多级索引信息中多个目标查询字段对应的多个级别的索引。

步骤s104,从多级索引中,确定目标查询字段对应的数据分区;

上述多级索引中的信息可以存储在数据库中,比如,可以将多级索引中的信息持久化到数据库mongodb中,也可以存储到诸如redis的缓存中。从多级索引中可以查询出上述目标查询字段对应的该级索引,通过该级索引下记录的分区索引,可以查询得到分区索引对应的数据分区。上述目标数据查询字段可以为多个,从多级索引中可以查询出多个目标查询字段对应的多个对应级别索引,可以确定多个对应级别索引中最低级别的索引,从该最低级别的索引中查询所记录的分区索引,可以得到分区索引对应的数据分区。

步骤s106,从数据分区中获取数据查询请求对应的数据。

上述数据分区通常是根据预先设定的查询字段划分得到的,因此每个数据分区中存储有该预设的查询字段对应的数据;在查询数据时可以通过数据查询请求中的目标查询字段,从数据分区中获取对应的数据。

本发明实施例提供的一种数据查询方法,在待查询数据库中设置多级索引,多级索引中的每级索引根据该级索引对应的查询字段设置,数据库中预先划分有多个数据分区,每个数据分区对应设置有分区索引;首先接收数据查询请求,该数据查询请求中包括至少一个目标查询字段;从多级索引中,确定目标查询字段对应的数据分区;从该数据分区中获取数据查询请求对应的数据。该方式中,将数据进行分区,同时设置多级索引,通过查询字段进行数据查询时,可以逐级缩小搜索范围,直接确定数据分区,减少了数据的搜索范围,避免查询全量数据和搜索延迟,进而提高了查询数据的性能和效率。

进一步的,上述多级索引中,除最低级的索引以外的级别的索引中,记录有当前级别的索引与当前级别的索引的下一级别的索引之间的索引关系。

举例说明,数据按照截获时间进行分区,数据分区对应设置的分区索引可以记录为index_yyyymm,其中yyyy可以是年份,mm可以是月份;例如,截获时间是2019年8月的数据,其分区索引可以记录为index_201908。另外,可以根据数据的上传时间,设置数据的二级索引,二级索引中记录有该上传时间内包含的数据,存储在哪个分区索引中,例如,上传时间为2019年7月所包含的数据,可能存储在截获时间为2019年7月的分区索引中,此时,二级索引与分区索引之间的索引关系的索引记录格式可以是,hctime_201907:[index_201908],当然,2019年7月所包含的数据,也有可能还存储在截获时间为2019年8月的分区索引中,此时,二级索引与分区索引之间的索引关系的索引记录格式可以是,hctime_201907:[index_201907,index_201908]。

进一步的,参见图2所示的数据分区确定方法的流程图,步骤s104,从多级索引中,确定目标查询字段对应的数据分区的步骤,具体实现过程如下:

步骤s201,如果目标查询字段仅包括分区索引对应的查询字段,将目标查询字段对应的分区索引对应的数据分区,确定为目标查询字段对应的数据分区;

举例说明,若分区索引对应的查询字段为数据的截获时间,可以直接查询该截获时间对应的分区索引对应的数据分区,确定该截获时间对应的数据分区;如目标查询字段是截获时间为2019年8月,可以将截获时间为2019年8月对应的分区索引index_201908对应的数据分区,确定为截获时间为2019年8月对应的数据分区。

步骤s202,如果目标查询字段包括除分区索引对应的查询字段以外的查询字段,按照多级索引中各个查询字段对应的索引级别,由高级别到低级别地排列目标查询字段中的查询字段;

步骤s203,从目标查询字段中最高级别的查询字段开始,在多级索引中逐级查找目标查询字段中的每个查询字段,将目标查询字段中的每个查询字段均对应的数据分区,确定为目标查询字段对应的数据分区。

举例说明,待查询的数据库中设置的多级索引为三级索引,分区索引对应的查询字段为截获时间,二级索引对应的查询字段为上传时间,三级索引对应的查询字段为更新时间,目标查询字段包括更新时间2019年6月和上传时间为2019年7月,按照多级索引中各个查询字段对应的索引级别,由高级别到低级别地排列目标查询字段中的查询字段,为更新时间、上传时间、截获时间;从三级索引的查询字段,更新时间开始,查询三级索引中更新时间为2019年6月记录的索引信息,为gxtime201906:[hctime_201907,hctime_201906];查询二级索引的查询字段时,就可以只在hctime_201907和hctime_201906中查询对应的上传时间为2019年7月的索引信息,为hctime_201907:[index_201907,index_201908],将目标查询字段中的两个查询字段,更新时间2019年6月和上传时间为2019年7月,均对应的分区索引ndex_201907和index_201908对应的数据分区,确定为目标查询字段对应的数据分区。

进一步的,参见图3所示的数据分区划分方法的流程图;数据库中预先划分的多个数据分区,通过下述方式划分:

步骤s301,从数据库中的数据的各个查询字段中,选择一个查询字段;

上述数据库包括多种数据特性,可以是时间特性分区,也可以是类别特性等,这种数据特性可以作为查询字段,因此按照数据的特性,数据可以有多个查询字段,可以按照具体的需求选择查询字段。

步骤s302,按照预设的划分粒度,对查询字段进行分段处理,得到多个分段间隔;将数据库中的数据中属于同一分段间隔的数据划分为一个数据分区,得到多个数据分区。

具体实施时,可以选择数据的截获时间为查询字段,对数据进行分区。上述预设的划分粒度可以按照截获时间的月份对查询字段进行分段,比如,将截获时间在2018年1月1日至2019年12月31日内,两年的时间按照月份进行分段,同时将每个分段时间内对应的数据划分为对应的数据分区,进而得到24个数据分区。每个数据分区对应一个分区索引,每个分区索引记录了该数据分区的截获时间。

另外,上述方法在数据查询之前,还包括数据的入库流程,本实施例提供一个具体的数据的入库流程,参见图4所示的数据入库流程图,首先原始数据也就是待查询的数据,通过入库请求存储到数据库中,然后选择数据库中数据的一个查询字段,可以是截获时间,根据该截获时间得到数据应该存放到的es索引,其中包括index_201906、index_201907、index_201908、index_201909等,也就是上述数据分区对应的分区索引;根据数据库中数据的各个查询字段,在数据库中设置多级索引,同时对于另一个查询字段,更新上传时间对应月份的数据可能存在哪些月份的es索引中。将所有的数据分区中的数据存储到对应的分区索引,将数据入库成功的消息返回数据入库服务;再根据数据的各个查询字段,在多级索引中记录当前级别的索引与当前级别的索引的下一级别的索引之间的索引关系,在数据库服务中得到数据的索引信息,将该信息存储或者更新到mongodb数据库中,将入库或更新成功的下消息返回数据入库服务。

其中,上述的索引信息更新的过程,举例说明,上传时间2019年7月的索引信息记录为hctime_201907:[index_201907],表示上传时间在2019年7月的数据保存在名为index_201907的es索引里,如果上传时间在2019年7月的数据还有可能保存在名为index_201908的es索引中,那么需要将index_201908添加到上传时间2019年7月的索引信息中,更新为:hctime_201907:[index_201907,index_201908],表示上传时间为2019年7月的数据保存在index_201907和index_201908的两个es索引中,在查询阶段查询上传时间为2019年7月的数据的时候,就会指定查询这两个es索引。

进一步的,本实施例提供一个具体的数据查询流程,参见图5所示的数据查询流程图,通过客户端发送查询请求,根据请求参数(相当于目标查询字段)查询mongodb数据库中的索引信息,向数据查询服务返回索引信息,按照索引信息对应的es索引,获取待查询数据可能存在的es索引(相当于分区索引),向数据查询服务返回查询到的es数据(相当于数据分区中对应的数据),然后直接查询这些es索引即可。

实施例二:

本发明实施例提供了一种数据查询装置,其中,待查询的数据库中设置有多级索引;数据库中预先划分有多个数据分区;每个数据分区对应设置有分区索引;分区索引为多级索引中最低级的索引;多级索引中的每级索引根据该级索引对应的查询字段设置;如图6所示,该装置包括:

请求接收模块61,用于接收数据查询请求;数据查询请求中包括至少一个目标查询字段;

数据分区确定模块62,用于从多级索引中,确定目标查询字段对应的数据分区;

数据获取模块63,用于从数据分区中获取数据查询请求对应的数据。

进一步的,上述装置还用于,多级索引中,除最低级的索引以外的级别的索引中,记录有当前级别的索引与当前级别的索引的下一级别的索引之间的索引关系。

进一步的,上述数据分区确定模块还用于,如果目标查询字段仅包括分区索引对应的查询字段,将目标查询字段对应的分区索引对应的数据分区,确定为目标查询字段对应的数据分区;如果目标查询字段包括除分区索引对应的查询字段以外的查询字段,按照多级索引中各个查询字段对应的索引级别,由高级别到低级别地排列目标查询字段中的查询字段;从目标查询字段中最高级别的查询字段开始,在多级索引中逐级查找目标查询字段中的每个查询字段,将目标查询字段中的每个查询字段均对应的数据分区,确定为目标查询字段对应的数据分区。

进一步的,上述数据库中预先划分的多个数据分区,通过下述方式划分:从数据库中的数据的各个查询字段中,选择一个查询字段;按照预设的划分粒度,对查询字段进行分段处理,得到多个分段间隔;将数据库中的数据中属于同一分段间隔的数据划分为一个数据分区,得到多个数据分区。

本发明实施例提供的一种数据查询装置,在待查询数据库中设置多级索引,多级索引中的每级索引根据该级索引对应的查询字段设置,数据库中预先划分有多个数据分区,每个数据分区对应设置有分区索引;首先接收数据查询请求,该数据查询请求中包括至少一个目标查询字段;从多级索引中,确定目标查询字段对应的数据分区;从该数据分区中获取数据查询请求对应的数据。该方式中,将数据进行分区,同时设置多级索引,通过查询字段进行数据查询时,可以逐级缩小搜索范围,直接确定数据分区,减少了数据的搜索范围,避免查询全量数据和搜索延迟,进而提高了查询数据的性能和效率。

本发明实施例提供的数据查询装置,与上述实施例提供的数据查询方法具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。

本发明实施例还提供了一种服务器,参见图7所示,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现上述数据查询方法。

进一步地,图7所示的服务器还包括总线132和通信接口133,处理器130、通信接口133和存储器131通过总线132连接。

其中,存储器131可能包含高速随机存取存储器(ram,randomaccessmemory),也可能还包括非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。通过至少一个通信接口133(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线132可以是isa总线、pci总线或eisa总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

处理器130可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器130中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器130可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digitalsignalprocessing,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现成可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器131,处理器130读取存储器131中的信息,结合其硬件完成前述实施例的方法的步骤。

本发明实施例还提供了一种机器可读存储介质,该机器可读存储介质存储有机器可执行指令,该机器可执行指令在被处理器调用和执行时,该机器可执行指令促使处理器实现上述数据查询方法,具体实现可参见方法实施例,在此不再赘述。

本发明实施例所提供的数据查询方法、装置和服务器的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

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

另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

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

在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

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