一种数据库的查询方法及设备
文献发布时间:2023-06-19 11:05:16
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据库的查询方法及设备。
背景技术
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,也是目前流行的高性能存储产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据查询结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
发明内容
本申请的一个目的是提供一种数据库的查询方法及设备,减少查询中对数据库的资源占用,以提高对数据库进行查询的效率。
根据本申请的一个方面,提供了一种数据库的查询方法,其中,所述方法包括:
通过网络应用程序接口获取客户端发送的查询请求,所述查询请求包括目标应用标识、目标应用验证信息及至少一个查询条件;
基于所述目标应用标识对所述目标应用验证信息进行有效性鉴权,
若有效性鉴权成功,则对所述至少一个查询条件进行解析,得到对应的数据查询索引数组和索引优化排序;
根据所述数据查询索引数组,按照所述索引优化排序依序对所述至少一个查询条件中的各个所述查询条件进行数据库查询,得到所述至少一个查询条件对应的查询结果;
对所述至少一个查询条件对应的查询结果进行数据类型转换;
将所述至少一个查询条件对应的转换后的查询结果返回给所述客户端。
进一步地,上述方法中,所述基于所述目标应用标识对所述目标应用验证信息进行有效性鉴权,包括:
预置至少一个应用程序的应用标识与其对应的验证信息之间的映射关系;
在所述映射关系中查询与所述目标应用标识对应的验证信息;
判断所述与所述目标应用标识对应的验证信息与所述目标应用验证信息是否一致,
若一致,则有效性鉴权成功;
若不一致,则有效性鉴权失败。
进一步地,上述方法中,所述方法还包括:
若有效性鉴权成功,通过所述网络应用程序接口将所述查询请求推送至消息队列;
若所述查询请求首次进入所述消息队列或缓存过期,则根据所述应用标识及所述查询请求对应的数据库/表,获取所述数据库/表的数据配置信息和所述数据表的字段配置信息并存储至缓存中,其中,所述所述数据库/表的数据配置信息和所述数据表的字段配置信息均存储在独立的配置数据库中。
进一步地,上述方法中,所述对所述至少一个查询条件进行解析之前,所述方法还包括:
判断所述查询请求对应的数据库的连接查询并发数是否超过预设的查询并发数阈值;
若是,则将所述查询请求返回至所述消息队列继续等待;
若否,则进入对所述至少一个查询条件进行解析的步骤。
进一步地,上述方法中,所述对所述至少一个查询条件进行解析,得到对应的数据查询索引数组和索引优化排序,包括:
对所述至少一个查询条件进行解码处理,并对解码处理后的字符串依序进行序列化和反序列化处理,得到所述至少一个查询条件对应的标准数据结构的字符串;
基于所述至少一个查询条件对应的标准数据结构的字符串,进行第一次遍历查询,查询对应的字段、各所述查询条件的符号类型及查询主体,并根据所述数据库/表的数据配置信息和所述数据表的字段配置信息进行数据主体的类型查询和转换,并初始化包含字段名称、索引类型、查询主体类型的所述数据查询索引数组;
根据所述数据查询索引数组对查询结构进行重新排序,得到所述至少一个查询条件对应的索引优化排序。
进一步地,上述方法中,所述对所述至少一个查询条件对应的查询结果进行数据类型转换,包括:
根据所述数据库内的数据表的字段配置信息对所述查询结果进行数据类型的转换,得到所述至少一个查询条件对应的转换后的查询结果。
进一步地,上述方法中,若所述查询请求存在跨库跨表查询,其中,所述将所述至少一个查询条件对应的转换后的查询结果返回给所述客户端,包括:
将所述至少一个查询条件对应的转换后的查询结果进行拼接,得到拼接查询结果;
将所述拼接查询结果返回给所述客户端。
根据本申请的另一方面,还提供了一种非易失性存储介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行时,使所述处理器实现如上述数据库的查询方法。
根据本申请的另一方面,还提供了一种用于数据库的查询的设备,其中,该设备包括:
一个或多个处理器;
计算机可读介质,用于存储一个或多个计算机可读指令,
当所述一个或多个计算机可读指令被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述数据库的查询方法。
与现有技术相比,本申请中引入了网络应用程序接口,通过所述网络应用程序接口获取客户端发送的查询请求,所述查询请求包括所述目标应用标识、目标应用验证信息及至少一个查询条件;并基于所述目标应用标识对所述目标应用验证信息进行有效性鉴权,若有效性鉴权成功,则对所述至少一个查询条件进行解析,得到对应的数据查询索引数组和索引优化排序;之后,根据所述数据查询索引数组,按照所述索引优化排序依序对所述至少一个查询条件中的各个所述查询条件进行数据库查询,得到所述至少一个查询条件对应的查询结果;对所述至少一个查询条件对应的查询结果进行数据类型转换;将所述至少一个查询条件对应的转换后的查询结果返回给所述客户端,使得本申请通过引入的网络应用程序接口完成对查询请求的有效性鉴权、查询条件的解析、数据库查询及数据转换等,避免了在数据库中进行查询请求的处理,减少了在查询过程中对数据库的资源占用,进一步提高了对数据库进行查询的效率。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种数据库的查询方法的流程示意图;
图2示出根据本申请一个方面的一种数据库的查询方法中的MongoAPI的服务系统的结构图;
图3示出根据本申请一个方面的一种数据库的查询方法中的与应用的鉴权通过请求头Header传递的Header参数示意图;
图4示出根据本申请一个方面的一种数据库的查询方法中的与Mongo查询相关的数据通过URL传递示意图;
图5示出根据本申请一个方面的一种数据库的查询方法中的对数据库的查询流程图;
图6示出根据本申请一个方面的一种数据库的查询方法中的数据库的数据配置信息示意图;
图7示出根据本申请一个方面的一种数据库的查询方法中的位于数据库内的数据表的数据配置信息示意图;
图8示出根据本申请一个方面的一种数据库的查询方法中的数据表的字段配置信息示意图;
图9示出根据本申请一个方面的一种数据库的查询方法中的对查询条件进行解析的流程示意图;
图10示出根据本申请一个方面的一种数据库的查询方法中的各查询条件的符号类型示意图;
图11示出根据本申请一个方面的一种数据库的查询方法中的索引类型示意图;
图12示出根据本申请一个方面的一种数据库的查询方法中的客户端可识别的数据类型示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图1示出根据本申请一个方面的一种数据库的查询方法的流程示意图,适用于MongoDB数据库,其中,所述方法包括步骤S11、步骤S12、步骤S13、步骤S14、步骤S15、步骤S16及步骤S17,具体包括如下步骤:
步骤S11,通过网络应用程序接口获取客户端发送的查询请求,所述查询请求包括所述目标应用标识、目标应用验证信息及至少一个查询条件,即一个查询请求可以同时对应一个或多个查询条件。在此,所述网络应用程序接口可以包括但不限于Mongo应用程序编程接口(Application Programming Interface,API),即MongoAPI。在本申请一优选的实施例中,所述MongoAPI的服务系统的结构如图2所示,在MongoAPI系统中,主要分为3层,数据支撑层、数据接口层及数据应用层;所述数据支撑层包括基础设施层、数据查询引擎和数据配置,其中所述基础设施层主要是mongoDB集群、缓存服务、消息队列等基础服务,所述数据查询引擎主要是数据查询队列管理以及查询相关的数据访问封装、索引优化、跨库跨表查询封装、查询性能监控和告警,所述数据配置主要是对数据库连接配置,数据结构配置,以及查询数据和返回数据转化规则配置管理;所述数据接口层主要是提供数据API的封装以及应用鉴权、应用查询统计;所述数据应用层主要是相关接入的App应用以及运营后台、数据后台等。
本申请中,所述MongoAPI查询接口的封装设计接口的设计遵循RestFull API的思想,查询服务使用http Get查询,与应用的鉴权通过请求头Header传递如图3所示,与Mongo查询相关的数据通过URL传递如图4所示。
本申请中对数据库的查询流程如图5所示,通过网络应用程序接口从客户端获取查询请求,该查询请求中携带该客户端发起查询的目标应用程序的目标应用标识、对该应用程序进行查询的有效性验证的目标应用验证信息及至少一个查询条件,当然,目标应用验证信息可以包括但不限于验证码及令牌Token等。
步骤S12,基于所述目标应用标识对所述目标应用验证信息进行有效性鉴权,以确保该目标应用标识对应的目标应用程序还能够访问数据库。
若有效性鉴权成功,则执行步骤S13对所述至少一个查询条件进行解析,得到对应的数据查询索引数组和索引优化排序。
若有效性鉴权失败,则执行步骤S14向发起查询请求的客户端返回用于指示目标应用标识APP id和目标验证信息Token错误的响应信息,以提示该目标验证信息Token已失效,如图5所示。
在所述步骤S12中,所述基于所述目标应用标识对所述目标应用验证信息进行有效性鉴权,具体包括:
预置至少一个应用程序的应用标识与其对应的验证信息之间的映射关系;比如,与客户端事先约定好可以访问数据库的应用程序的应用标识与访问数据库时的验证信息,并将各个可以访问数据库的应用程序的应用标识与其对应的验证信息进行绑定,形成映射关系,以便访问数据库前对应用程序是否存在访问权限进行有效性验证。比如,在接收到客户端发送过来的查询请求后,在所述映射关系中查询与所述查询请求中的目标应用标识对应的验证信息;并判断查询到的所述与所述目标应用标识对应的验证信息与所述查询请求中携带的所述目标应用验证信息是否一致,若一致,则指示所述目标应用程序对应的目标应用验证信息有效,即有效性鉴权成功;若不一致,则指示所述目标应用程序对应的目标应用验证信息失效,即有效性鉴权失败,实现了对查询请求中携带的目标应用验证信息的有效性验证,以确保后续对数据库进行访问的有效性。
步骤S15,根据所述数据查询索引数组,按照所述索引优化排序依序对所述至少一个查询条件中的各个所述查询条件进行数据库查询,得到所述至少一个查询条件对应的查询结果;
步骤S16,对所述至少一个查询条件对应的查询结果进行数据类型转换;
步骤S17,将所述至少一个查询条件对应的转换后的查询结果返回给所述客户端。
通过上述步骤S11至步骤S17,本申请通过引入的网络应用程序接口完成对查询请求的有效性鉴权、查询条件的解析、数据库查询及数据转换等,避免了在数据库中进行查询请求的处理,减少了在查询过程中对数据库的资源占用,进一步提高了对数据库进行查询的效率。
接着本申请的上述实施例,所述方法还包括:
若有效性鉴权成功,通过所述网络应用程序接口将所述查询请求推送至消息队列;
若所述查询请求首次进入所述消息队列或缓存过期,则根据所述应用标识及所述查询请求对应的数据库/表,获取所述数据库/表的数据配置信息和所述数据表的字段配置信息并存储至缓存中,其中,所述所述数据库/表的数据配置信息和所述数据表的字段配置信息均存储在独立的配置数据库中。
例如,如图5所示,在有效性鉴权成功后,通过所述网络应用程序接口将所述查询请求推送至消息队列(对应图5中的查询队列),并等待所述查询请求的消息处理完成。在所述查询请求进入消息队列后,若所述查询请求首次进入所述消息队列和等待中的缓存过期,则会根据所述查询请求中的应用标识ID、所述查询请求对应请求的数据库data base及数据表collection,获取所述数据库的数据配置信息如图6所示,所述位于数据库内的数据表的数据配置信息如图7所示,及所述数据表的字段配置信息如图8所示,并存储获取的数据配置信息和字段配置信息,将获取的所述数据库/表的数据配置信息和所述数据表的字段配置信息存储进缓存,实现对查询请求中需要请求的数据库/表的数据配置信息及字段配置信息的缓存;并同步发送一条查询统计消息进入统计和监控队列。
接着本申请的上述实施例,所述步骤S13对所述至少一个查询条件进行解析之前,所述方法还包括:
判断所述查询请求对应的数据库的连接查询并发数是否超过预设的查询并发数阈值;
若是,则将所述查询请求返回至所述消息队列继续等待;
若否,则进入对所述至少一个查询条件进行解析的步骤。
例如,在开始基于所述查询请求进行查询处理时,首先判断缓存中当前配置的、与所述查询请求对应的数据库的连接查询并发数是否超过预设的查询并发数阈值,所述连接查询并发数超过预设的查询并发数阈值,则直接消费掉当前查询请求对应的查询消息并将所述查询请求返回至所述消息队列继续等待以通知接口进行超限返回;若连接查询并发数未超过预设的查询并发数阈值,指示查询引擎空闲,即数据库连接空闲,则进入对所述至少一个查询条件进行解析的步骤,实现了在数据查询前,对数据库的查询引擎的空闲与否的判断。
接着本申请的上述实施例,在所述步骤S13中,如图9所示,对所述至少一个查询条件进行解析,得到对应的数据查询索引数组和索引优化排序,具体包括:
对所述至少一个查询条件进行解码处理,并对解码处理后的字符串依序进行序列化和反序列化处理,得到所述至少一个查询条件对应的标准数据结构的字符串;
基于所述至少一个查询条件对应的标准数据结构的字符串,进行第一次遍历查询,查询对应的字段、各所述查询条件的符号类型及查询主体,并根据所述数据库/表的数据配置信息和所述数据表的字段配置信息进行数据主体的类型查询和转换,并初始化包含字段名称、索引类型、查询主体类型的所述数据查询索引数组;
根据所述数据查询索引数组对查询结构进行重新排序,得到所述至少一个查询条件对应的索引优化排序。
例如,由于where条件采用JSON序列化字符串传递,在统一资源定位符(UniformResource Locator,URL)参数传递过程中为了保证数据格式完整性,需要对json序列化后的字符串进行urlEncode编码,其中,即所述查询请求中的至少一个查询条件是经过urlEncode编码的,在接收到所述查询请求后,需要对所述至少一个查询条件进行urlDecode解码处理;又由于mongo的最终查询数据结构是BSON,为了保证数据解析中间不会出现解析问题,会额外做一遍,JSON的序列化和反序列化,即对解码处理后的字符串依序进行序列化和反序列化处理,得到所述至少一个查询条件对应的标准数据结构的字符串,使得BSON通过解析序列化后的JSON字符串(即标准数据结构的字符串)可以从数据库拿到传输的原始数据;然后开始对至少一个查询条件:BSON查询条件进行第一次的遍历检查,判断并查询对应的字段、各所述查询条件的符号类型(如图10所示)及查询主体,并根据所述数据库/表的数据配置信息和所述数据表的字段配置信息进行数据主体的类型查询和转换,并初始化包含字段名称、索引类型(如图11所示)、查询主体类型的所述数据查询索引数组;遍历结束后,根据所述数据查询索引数组对BSON查询结构进行重新排序,得到所述至少一个查询条件对应的索引优化排序,其中,索引优化排序如下:
1、唯一索引,条件主体是值;
2、唯一索引,条件是map;
3、组合索引IDType,条件是值;
4、组合索引IDType,条件是map;
5、时间索引;
6、普通索引。
在索引优化结束后,开始设置查询条数,跳过结果数量,返回字段列表名,排序规则;并设置查询的数据库的当前连接查询并发数+1,设置查询开始时间戳,开始执行查询操作,并根据数据连接的连接超时时间设置查询超时时间,等待查询结果返回。
在数据查询中,如果到达连接超时时间未返回,会直接通知接口返回查询超时,并消费掉当前的查询请求对应的查询消息,并对当前查询的数据库连接查询并发数进行-1,并推送一条超时告警消息进入告警通知消息队列。
在查询结果成功返回时,记录查询耗时,并对当前查询的数据库连接查询并发数进行-1。
接着本申请的上述实施例,所述步骤S16对所述至少一个查询条件对应的查询结果进行数据类型转换,具体包括:
根据所述数据库内的数据表的字段配置信息对所述查询结果进行数据类型的转换,得到所述至少一个查询条件对应的转换后的查询结果。
例如,当查询成功后,成功获取所述至少一个查询条件对应的查询结果,在记录查询耗时,并根据所述数据库内的数据表的字段配置信息(如图8所示)对所述查询结果进行数据类型(如图12所示)的转换,得到所述至少一个查询条件对应的转换后的查询结果,实现了将数据库查询到的查询结果转换为客户端能够识别的数据类型,便于后续客户端对转换后的查询结果的识别。
接着本申请的上述实施例,若所述查询请求存在跨库跨表查询,其中,所述步S17将所述至少一个查询条件对应的转换后的查询结果返回给所述客户端,包括:
将所述至少一个查询条件对应的转换后的查询结果进行拼接,得到拼接查询结果;
将所述拼接查询结果返回给所述客户端。
例如,在数据转换后,需要判断是否存在跨库跨表查询,若存在跨库跨表查询,则需要将所述至少一个查询条件中的各个所述查询条件对应的转换后的查询结果进行拼接,得到拼接查询结果,并将查询请求成功消费得到的拼接查询结果返回给所述网络应用程序接口,并推送查询请求处理成功消息进入查询统计消息队列,最后,通过所述网络应用程序接口将所述拼接查询结果返回给所述客户端,实现对跨库跨表的查询和结果的拼接并返回。
根据本申请的另一方面,还提供了一种非易失性存储介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行时,使所述处理器实现如上述数据库的查询方法。
根据本申请的另一方面,还提供了一种用于数据库的查询的设备,其中,该设备包括:
一个或多个处理器;
计算机可读介质,用于存储一个或多个计算机可读指令,
当所述一个或多个计算机可读指令被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述数据库的查询方法。
在此,所述用于数据库的查询的设备中的各实施例的详细内容,具体可参见上述数据库的查询方法的实施例的对应部分,在此,不再赘述。
综上所述,本申请中引入了网络应用程序接口,通过所述网络应用程序接口获取客户端发送的查询请求,所述查询请求包括所述目标应用标识、目标应用验证信息及至少一个查询条件;并基于所述目标应用标识对所述目标应用验证信息进行有效性鉴权,若有效性鉴权成功,则对所述至少一个查询条件进行解析,得到对应的数据查询索引数组和索引优化排序;之后,根据所述数据查询索引数组,按照所述索引优化排序依序对所述至少一个查询条件中的各个所述查询条件进行数据库查询,得到所述至少一个查询条件对应的查询结果;对所述至少一个查询条件对应的查询结果进行数据类型转换;将所述至少一个查询条件对应的转换后的查询结果返回给所述客户端,使得本申请通过引入的网络应用程序接口完成对查询请求的有效性鉴权、查询条件的解析、数据库查询及数据转换等,避免了在数据库中进行查询请求的处理,减少了在查询过程中对数据库的资源占用,进一步提高了对数据库进行查询的效率。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
- 词汇数据库构建及查询方法、数据库系统、设备及介质
- 一种埋点数据库构建方法、埋点数据库及埋点查询方法