CN103064960B - 数据库查询方法及设备 - Google Patents

数据库查询方法及设备 Download PDF

Info

Publication number
CN103064960B
CN103064960B CN201210590531.1A CN201210590531A CN103064960B CN 103064960 B CN103064960 B CN 103064960B CN 201210590531 A CN201210590531 A CN 201210590531A CN 103064960 B CN103064960 B CN 103064960B
Authority
CN
China
Prior art keywords
order
sql query
query
query result
sql
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201210590531.1A
Other languages
English (en)
Other versions
CN103064960A (zh
Inventor
黄靖东
张宇
杨上德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Huawei Cloud Computing Technology Co ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201210590531.1A priority Critical patent/CN103064960B/zh
Publication of CN103064960A publication Critical patent/CN103064960A/zh
Application granted granted Critical
Publication of CN103064960B publication Critical patent/CN103064960B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例提供一种数据库查询方法及设备,该数据库查询方法包括:第一业务进程向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息;第一业务进程接收数据库服务器返回的、用以指示SQL查询命令对应的查询结果缓存有效的指示消息,向缓存管理进程发送SQL查询命令;缓存管理进程根据SQL查询命令从存储器获取第一查询结果,将第一查询结果返回给第一业务进程。本实施例提供的数据库查询方法及设备,实现了缓存查询结果的内存的共享,避免了为每个业务进程分配内存以及对每个内存进行独立操作造成的资源浪费,提高了数据查询的有效性。

Description

数据库查询方法及设备
技术领域
本发明实施例涉及通信技术,尤其涉及一种数据库查询方法及设备。
背景技术
在电信、电子商务和企业等领域的数据库应用系统中,数据库客户端一般是通过向数据库服务器发送SQL(Structured Query Language,结构查询语言)查询命令,从数据库服务器获取查询结果。对于同一SQL查询命令,数据库服务器可能会被执行很多次,造成了不必要的资源浪费。
为了解决上述技术问题,现有技术提出了一种SQL result cache(SQL查询结果缓存)机制,当该SQL result cache机制开启时,执行SQL查询任务的进程在第一次从数据库服务器获取查询结果之后,会先申请内存空间作为SQL result cache,然后把查询结果缓存到SQL result cache中。以后该进程再进行相同的SQL查询时,直接从SQL result cache获取查询结果。但是,现有技术只能在同一访问源(单进程)上进行SQL查询结果的共享,在数据库客户端多访问源(多进程)场景下,需要为每个进程都分配相应的内存,而且各进程以及各进程分别对应的内存互不相干,造成内存的大量消耗。
发明内容
本发明实施例提供一种数据库查询方法及设备,以实现缓存查询结果的内存的共享,提高数据查询的有效性。
第一方面,本发明实施例提供一种数据库查询方法,包括:
第一业务进程向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息;
所述第一业务进程接收所述数据库服务器返回的、用以指示所述SQL查询命令对应的查询结果缓存有效的指示消息,向缓存管理进程发送所述SQL查询命令;
所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,将所述第一查询结果返回给所述第一业务进程。
在第一种可能的实现方式中,所述第一业务进程向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息之前,所述方法还包括:
第二业务进程向所述数据库服务器发送所述携带有所述SQL查询命令的第二查询请求消息;
所述第二业务进程接收所述数据库服务器返回的、根据所述SQL查询命令查询到的所述第一查询结果,将所述有SQL查询命令和所述第一查询结果发送给所述缓存管理进程;
所述缓存管理进程将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系。
结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述缓存管理进程建立所述SQL查询命令与所述第一查询结果的对应关系,包括:
所述缓存管理进程对所述SQL查询命令进行哈希处理生成哈希值,将所述哈希值与链表对应存储在所述存储器中,其中,所述链表中记录有所述SQL查询命令与所述第一查询结果的存储地址的对应关系;
所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,包括:
所述缓存管理对所述SQL查询命令进行哈希处理生成所述哈希值,根据所述哈希值从所述存储器中确定链表,根据所述SQL查询命令从所述链表中确定所述第一查询结果的存储地址,根据所述存储地址从所述存储器中获取所述第一查询结果。
结合第一方面的第一种可能的实现方式,在第三种可能的实现方式中,所述缓存管理进程将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系之后,所述方法还包括:
所述缓存管理进程若判断获知所述存储器中还存储有所述SQL查询命令对应的第二查询结果,且没有业务进程读取所述第二查询结果,则将所述第二查询结果删除,并释放存储器中用于存储所述第二查询结果的存储空间。
第二方面,本发明实施例提供一种数据库查询方法,包括:
接收数据库客户端装置的第一业务进程发送的携带有结构查询语言SQL查询命令的第一查询请求消息;
判断所述SQL查询命令对应的查询结果缓存是否有效,若是,则向所述数据库客户端装置的第一业务进程发送用于指示所述SQL查询命令对应的查询结果缓存有效的指示消息,以使得所述数据库客户端装置的第一业务进程向所述数据库客户端装置的缓存管理进程发送所述SQL查询命令,所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,将所述第一查询结果返回给所述第一业务进程。
在第一种可能的实现方式中,所述接收数据库客户端装置的第一业务进程发送的携带有结构查询语言SQL查询命令的查询请求消息之前,所述方法还包括:
接收所述数据库客户端装置的第二业务进程发送的携带有所述SQL查询命令的第二查询请求消息;
判断所述SQL查询命令对应的查询结果缓存是否有效,若否,则根据所述SQL查询命令查询到所述第一查询结果,将所述第一查询结果返回给所述数据库客户端装置的第二业务进程,以使所述第二业务进程将所述第一查询结果发送给所述缓存管理进程,所述缓存管理进程将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系。
结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述判断所述SQL查询命令对应的查询结果缓存是否有效,包括:
若所述SQL查询命令所查询的数据库的数据库改变序列号的值没有发生变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的数据库的数据库改变序列号的值发生变化,所述SQL查询命令所查询的表的表改变序列号的值没有发生变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的数据库的数据库改变序列号和所述SQL查询命令所查询的表的表改变序列号的值发生变化,所述SQL查询命令所查询的列的列改变序列号的值没有变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的列的列改变序列号的值发生变化,则所述SQL查询命令对应的查询结果缓存无效。
结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述方法还包括:
接收数据修改指令,将所述数据修改指令对应的数据库的表的列的内容进行修改,将修改的数据库的数据库改变序列号、修改的表的表改变序列号和修改的列的列改变序列号的值分别加1。
第三方面,本发明实施例提供一种数据库客户端装置,包括:第一业务进程单元和缓存管理进程单元;
所述第一业务进程单元,用于向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息,接收所述数据库服务器返回的、用以指示所述SQL查询命令对应的查询结果缓存有效的指示消息,向缓存管理进程单元发送所述SQL查询命令;
所述缓存管理进程单元,用于根据所述SQL查询命令从存储器获取第一查询结果,将所述第一查询结果返回给所述第一业务进程单元。
在第一种可能的实现方式中,所述数据库客户端装置,还包括:
第二业务进程单元,用于向所述数据库服务器发送所述携带有所述SQL查询命令的第二查询请求消息,接收所述数据库服务器返回的、根据所述SQL查询命令查询到的所述第一查询结果,将所述有SQL查询命令和所述第一查询结果发送给所述缓存管理进程单元;
所述缓存管理进程单元,还用于将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系。
结合第三方面的第一种可能的实现方式,在第二种可能的实现方式中,所述缓存管理进程单元,还用于对所述SQL查询命令进行哈希处理生成哈希值,将所述哈希值与链表对应存储在所述存储器中,其中,所述链表中记录有所述SQL查询命令与所述第一查询结果的存储地址的对应关系;对所述SQL查询命令进行哈希处理生成所述哈希值,根据所述哈希值从所述存储器中确定链表,根据所述SQL查询命令从所述链表中确定所述第一查询结果的存储地址,根据所述存储地址从所述存储器中获取所述第一查询结果。
结合第三方面的第一种可能的实现方式,在第三种可能的实现方式中,所述缓存管理进程单元,还用于若判断获知所述存储器中还存储有所述SQL查询命令对应的第二查询结果,且没有业务进程读取所述第二查询结果,则将所述第二查询结果删除,并释放存储器中用于存储所述第二查询结果的存储空间。
第四方面,本发明实施例提供一种数据库服务器,包括:
接收单元,用于接收数据库客户端装置的第一业务进程发送的携带有结构查询语言SQL查询命令的第一查询请求消息;
处理单元,用于判断所述SQL查询命令对应的查询结果缓存是否有效,若是,则向所述数据库客户端装置的业务进程发送用于指示所述SQL查询命令对应的查询结果缓存有效的指示消息,以使得所述数据库客户端装置的第一业务进程向所述数据库客户端装置的缓存管理进程发送所述SQL查询命令,所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,将所述第一查询结果返回给所述第一业务进程。
在第一种可能的实现方式中,所述接收单元,还用于接收所述数据库客户端装置的第二业务进程发送的携带有所述SQL查询命令的第二查询请求消息;
所述处理单元,还用于判断所述SQL查询命令对应的查询结果缓存是否有效,若否,则根据所述SQL查询命令查询到所述第一查询结果,将所述第一查询结果返回给所述数据库客户端装置的第二业务进程,以使所述第二业务进程将所述第一查询结果发送给所述缓存管理进程,所述缓存管理进程将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系。
结合第四方面或第四方面的第一种可能的实现方式,在第二种可能的实现方式中,所述处理单元,还用于若所述SQL查询命令所查询的数据库的数据库改变序列号的值没有发生变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的数据库的数据库改变序列号的值发生变化,所述SQL查询命令所查询的表的表改变序列号的值没有发生变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的数据库的数据库改变序列号和所述SQL查询命令所查询的表的表改变序列号的值发生变化,所述SQL查询命令所查询的列的列改变序列号的值没有变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的列的列改变序列号的值发生变化,则所述SQL查询命令对应的查询结果缓存无效。
结合第四方面的第四种可能的实现方式,在第三种可能的实现方式中,所述接收单元,还用于接收数据修改指令;
所述处理单元,还用于将所述数据修改指令对应的数据库的表的列的内容进行修改,将修改的数据库的数据库改变序列号、修改的表的表改变序列号和修改的列的列改变序列号的值分别加1。
第五方面,本发明实施例提供一种用于数据库客户端的计算机节点,包括:处理器,通信接口,存储器和总线:
其中所述处理器、所述通信接口和所述存储器通过所述总线完成相互间的通信;
所述通信接口,用于向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息,接收所述数据库服务器返回的、用以指示所述SQL查询命令对应的查询结果缓存有效的指示消息;
所述存储器,用于存储指令和第一查询结果;
所述处理器被配置为执行存储在所述存储器中的指令,其中,所述处理器被配置为用于调用第一业务进程通过所述通信接口向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息,接收所述数据库服务器返回的、用以指示所述SQL查询命令对应的查询结果缓存有效的指示消息,向缓存管理进程发送所述SQL查询命令;调用所述缓存管理进程根据所述SQL查询命令从所述存储器获取所述第一查询结果,将所述第一查询结果返回给所述第一业务进程。
第六方面,本发明实施例提供一种数据库服务器,包括:处理器,通信接口,存储器和总线:
其中所述处理器、所述通信接口和所述存储器通过所述总线完成相互间的通信;
所述通信接口,用于接收数据库客户端装置的第一业务进程发送的携带有结构查询语言SQL查询命令的第一查询请求消息;向所述数据库客户端装置的业务进程发送用于指示所述SQL查询命令对应的查询结果缓存有效的指示消息;
所述存储器,用于存储指令;
所述处理器被配置为执行存储在所述存储器中的指令,其中,所述处理器被配置为用于判断所述SQL查询命令对应的查询结果缓存是否有效,若是,则通过所述通信接口向所述数据库客户端装置的业务进程发送用于指示所述SQL查询命令对应的查询结果缓存有效的指示消息,以使得所述数据库客户端装置的第一业务进程向所述数据库客户端装置的缓存管理进程发送所述SQL查询命令,所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,将所述第一查询结果返回给所述第一业务进程。
由上述技术方案可知,本发明实施例提供的数据库查询方法及设备,数据库客户端装置的第一业务进程向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息,接收数据库服务器返回的、用以指示SQL查询命令对应的查询结果缓存有效的指示消息,向缓存管理进程发送SQL查询命令,缓存管理进程根据SQL查询命令从存储器获取第一查询结果,将第一查询结果返回给第一业务进程。通过缓存管理进程的设置,实现了缓存查询结果的内存的共享,多个的业务进程均可以通过缓存管理进程对缓存的查询结果进行访问,避免了为每个业务进程分配内存以及对每个内存进行独立操作造成的资源浪费。而且,数据库服务器在接收到查询请求消息时判断SQL查询命令对应的查询结果缓存是否有效,在有效时指示数据库客户端装置读取自己缓存查询结果,提高了数据查询的有效性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的第一种数据库查询方法流程图;
图2为本发明实施例提供的第二种数据库查询方法流程图;
图3为本发明实施例提供的第三种数据库查询方法流程图;
图4为本发明实施例提供的第四种数据库查询方法流程图;
图5为本发明实施例提供的第一种数据库查询信令图;
图6为本发明实施例提供的第二种数据库查询信令图;
图7为本发明实施例提供的第三种数据库查询信令图;
图8为本发明实施例提供的第一种数据库客户端装置结构示意图;
图9为本发明实施例提供的第二种数据库客户端装置结构示意图;
图10为本发明实施例提供的第一种数据库服务器结构示意图;
图11为本发明实施例提供的用于数据库客户端的计算机节点结构示意图;
图12为本发明实施例提供的第二种数据库服务器结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的第一种数据库查询方法流程图。如图1所示,本实施例提供的数据库查询方法具体可以应用于对数据库的查询过程,该数据库具体为SQL数据库。通常,SQL数据库设置在数据库服务器中作为服务器,例如个人电脑、笔记本电脑、平板电脑或智能手机等终端设备中可以设置数据库客户端,该数据库客户端的可以通过应用程序或中间件等方式来实现。本实施例提供的数据库查询方法可以通过数据库客户端装置来执行,该数据库客户端装置可以设置在上述终端设备中,也可以单独设置。
本实施例提供的数据库查询方法具体包括:
步骤C10、第一业务进程向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息;
步骤C20、所述第一业务进程接收所述数据库服务器返回的、用以指示所述SQL查询命令对应的查询结果缓存有效的指示消息,向缓存管理进程发送所述SQL查询命令;
步骤C30、所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,将所述第一查询结果返回给所述第一业务进程。
具体地,数据库客户端装置开启SQL result cache机制,用户在通过数据库客户端装置对数据库服务器进行访问时,数据库客户端装置通过创建业务进程来执行相应的数据库查询任务,业务进程的数量可以为多个,每个业务进程之间不进行通信。在数据库客户端装置首次执行数据库查询任务时,创建一个缓存管理进程,业务进程可以与该缓存管理进程建立连接以实现通信,所建立的连接例如可以为UNIX Socket(套接字)连接,建立UNIX Socket连接所需要的文件路径可以由环境变量指定,或者为TCP(TransmissionControl Protocol,传输控制协议)Socket连接,IP地址为127.0.0.1,端口可以由环境变量指定。
用户通过数据库客户端装置对数据库服务器中的数据库进行查询,向数据库客户端装置输入查询参数,第一业务进程根据用户的输入执行该数据库查询任务,向数据库服务器发送第一查询请求消息,该第一查询请求消息中携带有SQL查询命令,SQL查询命令中具体可以包括SQL语句和SQL参数。数据库服务器接收该第一查询请求消息,判断该SQL查询命令对应的查询结果缓存是否有效。若数据库服务器之前没有处理过该SQL查询命令,则该SQL查询命令对应的查询结果缓存无效,或者该SQL查询命令所查询的内容与上次访问相比有所改变时,该SQL查询命令对应的查询结果缓存无效。若该SQL查询命令所查询的内容与上次访问相比没有改变,则该SQL查询命令对应的查询结果缓存有效。在实际应用中,数据库服务器可以设置与SQL查询命令对应的标志位,以记录该SQL查询命令对应的查询结果缓存是否有效,例如,有效时,标志位为1,无效时,标志位为0。SQL查询命令与标识位的对应关系形成结构体对象,可以通过但不限于数组或链表等形式对该结构体对象进行记录。
若数据库服务器判断获知该SQL查询命令对应的查询结果缓存有效,说明数据库客户端装置中缓存有该SQL查询命令对应的查询结果,且该查询结果有效,则向数据库客户端装置的第一业务进程返回指示该SQL查询命令对应的查询结果缓存有效的指示消息,第一业务进程向缓存管理进程发送SQL查询命令。缓存管理进程从存储器中获取缓存的SQL查询命令对应的第一查询结果,将该第一查询结果返回给第一业务进程,以完成数据查询。存储器具体可以为内存,存储器中缓存的该第一查询结果具体为该第一业务进程或者其他业务进程之前通过向数据库服务器发送该SQL查询命令获取的查询结果。
本实施例提供的数据库查询方法,数据库客户端装置的第一业务进程向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息,接收数据库服务器返回的、用以指示SQL查询命令对应的查询结果缓存有效的指示消息,向缓存管理进程发送SQL查询命令,缓存管理进程根据SQL查询命令从存储器获取第一查询结果,将第一查询结果返回给第一业务进程。通过缓存管理进程的设置,实现了缓存查询结果的内存的共享,多个的业务进程均可以通过缓存管理进程对缓存的查询结果进行访问,避免了为每个业务进程分配内存以及对每个内存进行独立操作造成的资源浪费。而且,数据库服务器在接收到查询请求消息时判断SQL查询命令对应的查询结果缓存是否有效,在有效时指示数据库客户端装置读取自己缓存查询结果,提高了数据查询的有效性。
图2为本发明实施例提供的第二种数据库查询方法流程图。如图2所示,在本实施例中,步骤C10,所述第一业务进程向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息之前,所述方法还包括:
步骤C40、第二业务进程向所述数据库服务器发送所述携带有所述SQL查询命令的第二查询请求消息;
步骤C50,所述第二业务进程接收所述数据库服务器返回的、根据所述SQL查询命令查询到的所述第一查询结果,将所述有SQL查询命令和所述第一查询结果发送给所述缓存管理进程;
步骤C60,所述缓存管理进程将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系。
具体地,第二业务进程与第一业务进程可以为同一进程,也可以为不同进程。第二业务进程向数据库服务器发送第二查询请求消息,该第二查询请求消息中携带有该SQL查询命令。若数据库服务器之前没有处理过该SQL查询命令,则该SQL查询命令不具有对应的标志位,该SQL查询命令对应的查询结果缓存无效,数据库服务器处理该SQL查询命令,得到该第一查询结果,将第一查询结果返回给该第二业务进程。第二业务进程将该第一查询结果发送给缓存管理进程,缓存管理进程为该第一查询结果分配内存,将该第一查询结果缓存,并建立该SQL查询命令与第一查询结果的对应关系。
或者,数据库服务器之前处理过该SQL查询命令,并向数据库客户端装置返回了一个第二查询结果,数据库客户端装置中缓存该第二查询结果。在这之后,发生了改变该SQL查询命令所查询的内容的事务,导致该SQL查询命令的查询结果也发生改变。此时,可以将该SQL查询命令对应的标志位设置为0,以指示SQL查询命令对应的查询结果缓存无效。即使数据库客户端装置中缓存有第二查询结果,但是数据库服务器处理该SQL查询命令,得到第一查询结果,并将该第一查询结果返回给第二业务进程,第二业务进程将该第一查询结果发送给缓存管理进程,缓存管理进程为该第一查询结果分配内存,将该第一查询结果缓存,并建立该SQL查询命令与第一查询结果的对应关系。数据库服务器将该SQL查询命令对应的标志位设置为1,以指示SQL查询命令对应的查询结果缓存有效。
数据库客户端装置每次的数据库查询过程都向数据库服务器发送查询请求消息,数据库服务器通过判断SQL查询命令对应的查询结果缓存是否有效,在SQL查询命令对应的查询结果发生变化时,及时地向数据库客户端装置反馈最新的查询结果,数据库客户端装的存储器中缓存的也是最新的查询结果,提高了数据库查询的准确性。
在本实施例中,步骤C60,所述缓存管理进程建立所述SQL查询命令与所述第一查询结果的对应关系,具体可以包括:
所述缓存管理进程对所述SQL查询命令进行哈希处理生成哈希值,将所述哈希值与链表对应存储在所述存储器中,其中,所述链表中记录有所述SQL查询命令与所述第一查询结果的存储地址的对应关系;
相应地,步骤C30,所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,具体可以包括:
所述缓存管理对所述SQL查询命令进行哈希处理生成所述哈希值,根据所述哈希值从所述存储器中确定链表,根据所述SQL查询命令从所述链表中确定所述第一查询结果的存储地址,根据所述存储地址从所述存储器中获取所述第一查询结果。
具体地,缓存管理进程将该第一查询结果存储到存储器中,该第一查询结果具有一存储地址,可以将SQL查询命令和该存储地址对应存储在链表中。缓存管理进程可以对SQL查询命令中的SQL语句和SQL参数进行哈希处理得到哈希值,建立哈希值与该链表的对应关系并,存储在存储器中。在实际应用中,不同的SQL查询命令的哈希值可能相同,则在同一个哈希值对应的链表中可能记录了一组或多组SQL查询命令与存储地址的对应关系。则相应地,缓存管理进程在从存储器中获取该第一查询结果时,可以首选根据哈希值从存储器中获取链表,在根据SQL查询命令从该链表中获取相应的存储地址,并从存储器的该存储地址中读取该第一查询结果。缓存管理进程也可以将该第一查询结果的存储地址返回给第一业务进程,第一业务进程根据该存储地址从存储器获得该第一查询结果。
在本实施例中,步骤C60,所述缓存管理进程将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系之后,所述方法还包括:
步骤C70,所述缓存管理进程若判断获知所述存储器中还存储有所述SQL查询命令对应的第二查询结果,且没有业务进程读取所述第二查询结果,则将所述第二查询结果删除,并释放存储器中用于存储所述第二查询结果的存储空间。
具体地,若数据库客户端装置还有业务进程在访问存储器中缓存的第二查询结果,则缓存管理进程不对该第二查询结果进行处理。若没有业务进程对该第二查询结果进行访问了,则缓存管理进程将该第二查询结果从存储器中删除,释放存储器中用于存储所述第二查询结果的存储空间,并将该SQL查询命令与该第二查询结果的对应关系撤销。
图3为本发明实施例提供的第三种数据库查询方法流程图。如图3所示,本实施例提供的数据库查询方法具体可以与本发明任意实施例提供的应用于数据库客户端装置的方法配合实现,具体实现过程在此不再赘述。本实施例提供的数据库查询方法可以通过数据库服务器来执行,数据库服务器中设置有数据库,该数据库具体为SQL数据库。
本实施例提供的数据库查询方法具体包括:
步骤S10、接收数据库客户端装置的第一业务进程发送的携带有结构查询语言SQL查询命令的第一查询请求消息;
步骤S20、判断所述SQL查询命令对应的查询结果缓存是否有效,若是,则向所述数据库客户端装置的第一业务进程发送用于指示所述SQL查询命令对应的查询结果缓存有效的指示消息,以使得所述数据库客户端装置的第一业务进程向所述数据库客户端装置的缓存管理进程发送所述SQL查询命令,所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,将所述第一查询结果返回给所述第一业务进程。
本实施例提供的数据库查询方法,数据库服务器接收数据库客户端装置的第一业务进程发送的携带有结构查询语言SQL查询命令的第一查询请求消息,判断SQL查询命令对应的查询结果缓存是否有效,若是,则向数据库客户端装置的第一业务进程发送用于指示SQL查询命令对应的查询结果缓存有效的指示消息,以使得数据库客户端装置的第一业务进程向数据库客户端装置的缓存管理进程发送SQL查询命令,缓存管理进程根据SQL查询命令从存储器获取第一查询结果,将第一查询结果返回给第一业务进程。通过缓存管理进程的设置,实现了缓存查询结果的内存的共享,多个的业务进程均可以通过缓存管理进程对缓存的查询结果进行访问,避免了为每个业务进程分配内存以及对每个内存进行独立操作造成的资源浪费。而且,数据库服务器在接收到查询请求消息时判断SQL查询命令对应的查询结果缓存是否有效,在有效时指示数据库客户端装置读取自己缓存查询结果,提高了数据查询的有效性。
图4为本发明实施例提供的第四种数据库查询方法流程图。如图4所示,在本实施例中,步骤S10,所述接收数据库客户端装置的第一业务进程发送的携带有结构查询语言SQL查询命令的查询请求消息之前,所述方法还可以包括:
步骤S30、接收所述数据库客户端装置的第二业务进程发送的携带有所述SQL查询命令的第二查询请求消息;
步骤S40、判断所述SQL查询命令对应的查询结果缓存是否有效,若否,则根据所述SQL查询命令查询到所述第一查询结果,将所述第一查询结果返回给所述数据库客户端装置的第二业务进程,以使所述第二业务进程将所述第一查询结果发送给所述缓存管理进程,所述缓存管理进程将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系。
数据库服务器判断SQL查询命令对应的查询结果缓存是否有效的方式可以有多种,例如可以设置与SQL查询命令对应的标志位,以记录该SQL查询命令对应的查询结果缓存是否有效,例如,有效时,标志位为1,无效时,标志位为0。SQL查询命令与标识位的对应关系形成结构体对象,可以通过但不限于数组或链表等形式对该结构体对象进行记录。
数据库服务器中可以设置有多个数据库,每个数据块中设置有多个表,每个表中设置有多个列。数据库服务器在第一次处理该SQL查询命令,可以为该SQL查询命令所对应的数据库、表和列分别注册数据库改变序列号(Database Change Number,简称DCN)、表改变序列号(Table ChangeNumber,TCN)和列改变序列号(Column Change Number,CCN)。改变数据库、表或列的事务提交后,相应将上述序列号的值改变,例如执行加1操作。因此,还可以根据DCN、TCN和CCN的变化情况判断SQL查询命令对应的查询结果缓存是否有效。
在本实施例中,所述判断所述SQL查询命令对应的查询结果缓存是否有效,具体可以包括:
若所述SQL查询命令所查询的数据库的数据库改变序列号的值没有发生变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的数据库的数据库改变序列号的值发生变化,所述SQL查询命令所查询的表的表改变序列号的值没有发生变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的数据库的数据库改变序列号和所述SQL查询命令所查询的表的表改变序列号的值发生变化,所述SQL查询命令所查询的列的列改变序列号的值没有变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的列的列改变序列号的值发生变化,则所述SQL查询命令对应的查询结果缓存无效。
在实际应用过程中,可以在数据库的系统表sysdatabases,systables, syscolumns分别增加DCN,TCN和CCN。可以首先检查当前系统的DCN与 上次查询时是否相同,若相同,则表明SQL查询命令对应的查询结果缓存有 效,若不相同,则检查当前系统的TCN和上次查询时是否相同,若相同,则 表明SQL查询命令对应的查询结果缓存有效,若不相同,则检查当前系统的 CCN和上次查询时是否相同,若相同,则表明SQL查询命令对应的查询结果 缓存有效,若不相同,则表明SQL查询命令对应的查询结果缓存无效。
在本实施例中,所述方法还可以包括:
步骤S50、接收数据修改指令,将所述数据修改指令对应的数据库的表的列的内容进行修改,将修改的数据库的数据库改变序列号、修改的表的表改变序列号和修改的列的列改变序列号的值分别加1。
具体地,数据修改指令可以是数据库客户端装置发送的,也可以是在数据库服务器数据更新或管理过程中发送的,用以改变数据库中的数据。
图5为本发明实施例提供的第一种数据库查询信令图,以下结合图5,对本发明实施例提供的数据库查询方法进行详细说明。
数据库客户端装置开启SQL result cache功能,首次通过业务进程1执行一个SQL查询任务,数据库客户端装置创建一个缓存管理进程,业务进程1和缓存管理进程建立连接;
步骤1、缓存管理进程初始化完成之后,向业务进程1返回确认信息;
步骤2、业务进程1根据当前的IP地址和一随机数生成一个客户端ID作为数据库服务器区分不同数据库客户端的方法,然后向数据库服务器发送SQL查询请求消息,其中,SQL查询请求消息携带有SQL查询命令;
步骤3、数据库服务器中没有SQL查询命令对应的标志位,也没有注册的DCN、TCN和CCN,则注册DCN、TCN和CCN,按照正常流程处理SQL查询命令,得到SQL查询结果;
步骤4、数据库服务器向数据库客户端装置的业务进程1返回SQL查询结果;
步骤5、业务进程1将SQL查询结果发送给缓存管理进程;
步骤6、缓存管理进程分配内存缓存该SQL查询结果;
步骤7、缓存管理进程向业务进程1发送SQL result cache已经建立的确认信息;
步骤8、业务进程1向数据库服务器发送SQL result cache建立成功的消息;
步骤9、数据库服务器记录下该SQL查询命令对应的标志位为1。
图6为本发明实施例提供的第二种数据库查询信令图,以下结合图6,对本发明实施例提供的数据库查询方法进行详细说明。
步骤1、数据库客户端装置的业务进程2向数据库服务器发送SQL查询请求消息,其中,SQL查询请求消息携带有与图5所示实施例相同的SQL查询命令;
步骤2、数据库服务器检查该SQL查询命令对应的标志位为1,比较当前系统的DCN、TCN和CCN和上次访问时的DCN、TCN和CCN,发现SQL查询结果无变化,向业务进程2发送通知消息,以通知业务进程2直接从存储器中取SQL查询结果;
步骤3、业务进程2向缓存管理进程发SQL查询命令;
步骤4、缓存管理进程根据SQL查询命令从存储器读取SQL查询结果;
步骤5、缓存管理进程将SQL查询结果返回给业务进程2。
图7为本发明实施例提供的第三种数据库查询信令图,以下结合图7,对本发明实施例提供的数据库查询方法进行详细说明。
步骤1、数据库客户端装置的业务进程3向数据库服务器发送SQL查询请求消息,其中,SQL查询请求消息携带有与图5所示实施例相同的SQL查询命令;
步骤2、数据库服务器检查该SQL查询命令对应的标志位为1,比较当前系统的DCN、TCN和CCN和上次访问时的DCN、TCN和CCN,发现SQL查询结果发生变化,记录该SQL查询命令对应的标志位为0,按照正常流程处理SQL查询命令,得到SQL查询结果;
步骤3、数据库服务器向数据库客户端装置的业务进程3返回SQL查询结果;
步骤4、业务进程3将SQL查询结果发送给缓存管理进程;
步骤5、缓存管理进程分配内存缓存该SQL查询结果;
步骤6、缓存管理进程向业务进程3发送SQL result cache已经建立的确认信息;
步骤7、业务进程3向数据库服务器发送SQL result cache建立成功的消息;
步骤8、数据库服务器记录下该SQL查询命令对应的标志位为1。
值得注意的是,业务进程1、业务进程2和业务进程3可以为不同的进程,也可以为同一进程。
图8为本发明实施例提供的第一种数据库客户端装置结构示意图。如图8所示,本实施例提供的数据库客户端装置具体可以实现本发明任意实施例提供的应用于数据库客户端装置的方法的各个步骤,具体实现过程在此不再赘述。本实施例提供的数据库客户端装置具体包括:第一业务进程单元11和缓存管理进程单元12;
所述第一业务进程单元11,用于向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息,接收所述数据库服务器返回的、用以指示所述SQL查询命令对应的查询结果缓存有效的指示消息,向缓存管理进程单元12发送所述SQL查询命令;
所述缓存管理进程单元12,用于根据所述SQL查询命令从存储器获取第一查询结果,将所述第一查询结果返回给所述第一业务进程单元11。
具体地,第一业务进程单元11中运行有第一业务进程,缓存管理进程单元12中运行有缓存管理进程。
本实施例提供的数据库客户端装置,通过缓存管理进程的设置,实现了缓存查询结果的内存的共享,多个的业务进程均可以通过缓存管理进程对缓存的查询结果进行访问,避免了为每个业务进程分配内存以及对每个内存进行独立操作造成的资源浪费。而且,数据库服务器在接收到查询请求消息时判断SQL查询命令对应的查询结果缓存是否有效,在有效时指示数据库客户端装置读取自己缓存查询结果,提高了数据查询的有效性。
图9为本发明实施例提供的第二种数据库客户端装置结构示意图。如图9所示,在本实施例中,所述数据库客户端装置还可以包括:
第二业务进程单元13,用于向所述数据库服务器发送所述携带有所述SQL查询命令的第二查询请求消息,接收所述数据库服务器返回的、根据所述SQL查询命令查询到的所述第一查询结果,将所述有SQL查询命令和所述第一查询结果发送给所述缓存管理进程单元12;
相应地,所述缓存管理进程单元12,还用于将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系。
在本实施例中,所述缓存管理进程单元12,还用于对所述SQL查询命令进行哈希处理生成哈希值,将所述哈希值与链表对应存储在所述存储器中,其中,所述链表中记录有所述SQL查询命令与所述第一查询结果的存储地址的对应关系;对所述SQL查询命令进行哈希处理生成所述哈希值,根据所述哈希值从所述存储器中确定链表,根据所述SQL查询命令从所述链表中确定所述第一查询结果的存储地址,根据所述存储地址从所述存储器中获取所述第一查询结果。
在本实施例中,所述缓存管理进程单元12,还用于若判断获知所述存储器中还存储有所述SQL查询命令对应的第二查询结果,且没有业务进程读取所述第二查询结果,则将所述第二查询结果删除,并释放存储器中用于存储所述第二查询结果的存储空间。
图10为本发明实施例提供的第一种数据库服务器结构示意图。如图10所示,本实施例提供的数据库服务器具体可以实现本发明任意实施例提供的应用于数据库服务器的方法的各个步骤,具体实现过程在此不再赘述。本实施例提供的数据库服务器具体包括:
接收单元21,用于接收数据库客户端装置的第一业务进程发送的携带有结构查询语言SQL查询命令的第一查询请求消息;
处理单元22,用于判断所述SQL查询命令对应的查询结果缓存是否有效,若是,则向所述数据库客户端装置的业务进程发送用于指示所述SQL查询命令对应的查询结果缓存有效的指示消息,以使得所述数据库客户端装置的第一业务进程向所述数据库客户端装置的缓存管理进程发送所述SQL查询命令,所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,将所述第一查询结果返回给所述第一业务进程。
本实施例提供的数据库服务器,接收单元21接收数据库客户端装置的第一业务进程发送的携带有结构查询语言SQL查询命令的第一查询请求消息,处理单元22判断SQL查询命令对应的查询结果缓存是否有效,若是,则向数据库客户端装置的第一业务进程发送用于指示SQL查询命令对应的查询结果缓存有效的指示消息,以使得数据库客户端装置的第一业务进程向数据库客户端装置的缓存管理进程发送SQL查询命令,缓存管理进程根据SQL查询命令从存储器获取第一查询结果,将第一查询结果返回给第一业务进程。通过缓存管理进程的设置,实现了缓存查询结果的内存的共享,多个的业务进程均可以通过缓存管理进程对缓存的查询结果进行访问,避免了为每个业务进程分配内存以及对每个内存进行独立操作造成的资源浪费。而且,数据库服务器在接收到查询请求消息时判断SQL查询命令对应的查询结果缓存是否有效,在有效时指示数据库客户端装置读取自己缓存查询结果,提高了数据查询的有效性。
在本实施例中,所述接收单元21,还用于接收所述数据库客户端装置的第二业务进程发送的携带有所述SQL查询命令的第二查询请求消息;
所述处理单元22,还用于判断所述SQL查询命令对应的查询结果缓存是否有效,若否,则根据所述SQL查询命令查询到所述第一查询结果,将所述第一查询结果返回给所述数据库客户端装置的第二业务进程,以使所述第二业务进程将所述第一查询结果发送给所述缓存管理进程,所述缓存管理进程将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系。
在本实施例中,所述处理单元22,还用于若所述SQL查询命令所查询的数据库的数据库改变序列号的值没有发生变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的数据库的数据库改变序列号的值发生变化,所述SQL查询命令所查询的表的表改变序列号的值没有发生变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的数据库的数据库改变序列号和所述SQL查询命令所查询的表的表改变序列号的值发生变化,所述SQL查询命令所查询的列的列改变序列号的值没有变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的列的列改变序列号的值发生变化,则所述SQL查询命令对应的查询结果缓存无效。
在本实施例中,所述接收单元21,还用于接收数据修改指令;
所述处理单元22,还用于将所述数据修改指令对应的数据库的表的列的内容进行修改,将修改的数据库的数据库改变序列号、修改的表的表改变序列号和修改的列的列改变序列号的值分别加1。
图11为本发明实施例提供的用于数据库客户端的计算机节点结构示意图。如图11所示,本实施例提供的用于数据库客户端的计算机节点700具体可以实现本发明任意实施例提供的应用于数据库客户端装置的方法的各个步骤,具体实现过程在此不再赘述。本实施例提供的用于数据库客户端的计算机节点700具体包括:处理器710,通信接口720,存储器730和通信总线740:其中所述处理器710、所述通信接口720和所述存储器730通过所述通信总线740完成相互间的通信;所述通信接口720,用于向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息,接收所述数据库服务器返回的、用以指示所述SQL查询命令对应的查询结果缓存有效的指示消息;所述存储器730,用于存储指令和第一查询结果;所述处理器710被配置为执行存储在所述存储器730中的指令,其中,所述处理器710被配置为用于调用第一业务进程通过所述通信接口720向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息,接收所述数据库服务器返回的、用以指示所述SQL查询命令对应的查询结果缓存有效的指示消息,向缓存管理进程发送所述SQL查询命令;调用所述缓存管理进程根据所述SQL查询命令从所述存储器获取所述第一查询结果,将所述第一查询结果返回给所述第一业务进程。
图12为本发明实施例提供的第二种数据库服务器结构示意图。如图12所示,本实施例提供的数据库服务器800具体可以实现本发明任意实施例提供的应用于数据库服务器的方法的各个步骤,具体实现过程在此不再赘述。本实施例提供的数据库服务器800具体包括:处理器810,通信接口820,存储器830和通信总线840:其中所述处理器810、所述通信接口820和所述存储器830通过所述通信总线840完成相互间的通信;所述通信接口820,用于接收数据库客户端装置的第一业务进程发送的携带有结构查询语言SQL查询命令的第一查询请求消息;向所述数据库客户端装置的业务进程发送用于指示所述SQL查询命令对应的查询结果缓存有效的指示消息;所述存储器830,用于存储指令;所述处理器810被配置为执行存储在所述存储器830中的指令,其中,所述处理器810被配置为用于判断所述SQL查询命令对应的查询结果缓存是否有效,若是,则通过所述通信接口向所述数据库客户端装置的业务进程发送用于指示所述SQL查询命令对应的查询结果缓存有效的指示消息,以使得所述数据库客户端装置的第一业务进程向所述数据库客户端装置的缓存管理进程发送所述SQL查询命令,所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,将所述第一查询结果返回给所述第一业务进程。
本发明实施例提供的数据库查询方法及设备,对于含有大量查询结果的SQL,可以显著降低网络开销,加快SQL查询的速度。对于含有order by,group by,distinct的SQL,可以显著降低服务端的CPU开销,加快SQL查询的速度。实现了不同访问源所执行的SQL查询任务可以共享查询结果,减少了查询结果的内存占用和缓存的更新次数。SQL查询命令对应的查询结果缓存的有效性检测是通过数据库客户端装置向数据库服务器请求检测的,能够保证从缓存中读取的数据是实时有效的。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (12)

1.一种数据库查询方法,其特征在于,包括:
第一业务进程向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息;
所述第一业务进程接收所述数据库服务器返回的、用以指示所述SQL查询命令对应的查询结果缓存有效的指示消息,向缓存管理进程发送所述SQL查询命令,其中,若所述数据库服务器之前没有处理过所述SQL查询命令,则所述SQL查询命令对应的查询结果缓存无效,或者所述SQL查询命令所查询的内容与上次访问相比有所改变时,所述SQL查询命令对应的查询结果缓存无效;若所述SQL查询命令所查询的内容与上次访问相比没有改变,则所述SQL查询命令对应的查询结果缓存有效;
所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,将所述第一查询结果返回给所述第一业务进程;
进一步地,所述第一业务进程向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息之前,所述方法还包括:
第二业务进程向所述数据库服务器发送所述携带有所述SQL查询命令的第二查询请求消息;
所述第二业务进程接收所述数据库服务器返回的、根据所述SQL查询命令查询到的所述第一查询结果,将所述SQL查询命令和所述第一查询结果发送给所述缓存管理进程;
所述缓存管理进程将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系。
2.根据权利要求1所述的数据库查询方法,其特征在于,所述缓存管理进程建立所述SQL查询命令与所述第一查询结果的对应关系,包括:
所述缓存管理进程对所述SQL查询命令进行哈希处理生成哈希值,将所述哈希值与链表对应存储在所述存储器中,其中,所述链表中记录有所述SQL查询命令与所述第一查询结果的存储地址的对应关系;
所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,包括:
所述缓存管理对所述SQL查询命令进行哈希处理生成所述哈希值,根据 所述哈希值从所述存储器中确定链表,根据所述SQL查询命令从所述链表中确定所述第一查询结果的存储地址,根据所述存储地址从所述存储器中获取所述第一查询结果。
3.根据权利要求1所述的数据库查询方法,其特征在于,所述缓存管理进程将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系之后,所述方法还包括:
所述缓存管理进程若判断获知所述存储器中还存储有所述SQL查询命令对应的第二查询结果,且没有业务进程读取所述第二查询结果,则将所述第二查询结果删除,并释放存储器中用于存储所述第二查询结果的存储空间。
4.一种数据库查询方法,其特征在于,包括:
接收数据库客户端装置的第一业务进程发送的携带有结构查询语言SQL查询命令的第一查询请求消息;
判断所述SQL查询命令对应的查询结果缓存是否有效,若是,则向所述数据库客户端装置的第一业务进程发送用于指示所述SQL查询命令对应的查询结果缓存有效的指示消息,以使得所述数据库客户端装置的第一业务进程向所述数据库客户端装置的缓存管理进程发送所述SQL查询命令,所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,将所述第一查询结果返回给所述第一业务进程,其中,若之前没有处理过所述SQL查询命令,则所述SQL查询命令对应的查询结果缓存无效,或者所述SQL查询命令所查询的内容与上次访问相比有所改变时,所述SQL查询命令对应的查询结果缓存无效;若所述SQL查询命令所查询的内容与上次访问相比没有改变,则所述SQL查询命令对应的查询结果缓存有效;
进一步地,所述接收数据库客户端装置的第一业务进程发送的携带有结构查询语言SQL查询命令的查询请求消息之前,所述方法还包括:
接收所述数据库客户端装置的第二业务进程发送的携带有所述SQL查询命令的第二查询请求消息;
判断所述SQL查询命令对应的查询结果缓存是否有效,若否,则根据所述SQL查询命令查询到所述第一查询结果,将所述第一查询结果返回给所述数据库客户端装置的第二业务进程,以使所述第二业务进程将所述第一查询结果发送给所述缓存管理进程,所述缓存管理进程将所述第一查询结果存储 到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系。
5.根据权利要求4所述的数据库查询方法,其特征在于,所述判断所述SQL查询命令对应的查询结果缓存是否有效,包括:
若所述SQL查询命令所查询的数据库的数据库改变序列号的值没有发生变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的数据库的数据库改变序列号的值发生变化,所述SQL查询命令所查询的表的表改变序列号的值没有发生变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的数据库的数据库改变序列号和所述SQL查询命令所查询的表的表改变序列号的值发生变化,所述SQL查询命令所查询的列的列改变序列号的值没有变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的列的列改变序列号的值发生变化,则所述SQL查询命令对应的查询结果缓存无效。
6.根据权利要求5所述的数据库查询方法,其特征在于,所述方法还包括:
接收数据修改指令,将所述数据修改指令对应的数据库的表的列的内容进行修改,将修改的数据库的数据库改变序列号、修改的表的表改变序列号和修改的列的列改变序列号的值分别加1。
7.一种数据库客户端装置,其特征在于,包括:第一业务进程单元和缓存管理进程单元;
所述第一业务进程单元,用于向数据库服务器发送携带有结构查询语言SQL查询命令的第一查询请求消息,接收所述数据库服务器返回的、用以指示所述SQL查询命令对应的查询结果缓存有效的指示消息,向缓存管理进程单元发送所述SQL查询命令,其中,若所述数据库服务器之前没有处理过所述SQL查询命令,则所述SQL查询命令对应的查询结果缓存无效,或者所述SQL查询命令所查询的内容与上次访问相比有所改变时,所述SQL查询命令对应的查询结果缓存无效;若所述SQL查询命令所查询的内容与上次访问相比没有改变,则所述SQL查询命令对应的查询结果缓存有效;
所述缓存管理进程单元,用于根据所述SQL查询命令从存储器获取第一 查询结果,将所述第一查询结果返回给所述第一业务进程单元;
进一步地,还包括:
第二业务进程单元,用于向所述数据库服务器发送所述携带有所述SQL查询命令的第二查询请求消息,接收所述数据库服务器返回的、根据所述SQL查询命令查询到的所述第一查询结果,将所述SQL查询命令和所述第一查询结果发送给所述缓存管理进程单元;
所述缓存管理进程单元,还用于将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系。
8.根据权利要求7所述的数据库客户端装置,其特征在于:
所述缓存管理进程单元,还用于对所述SQL查询命令进行哈希处理生成哈希值,将所述哈希值与链表对应存储在所述存储器中,其中,所述链表中记录有所述SQL查询命令与所述第一查询结果的存储地址的对应关系;对所述SQL查询命令进行哈希处理生成所述哈希值,根据所述哈希值从所述存储器中确定链表,根据所述SQL查询命令从所述链表中确定所述第一查询结果的存储地址,根据所述存储地址从所述存储器中获取所述第一查询结果。
9.根据权利要求7所述的数据库客户端装置,其特征在于:
所述缓存管理进程单元,还用于若判断获知所述存储器中还存储有所述SQL查询命令对应的第二查询结果,且没有业务进程读取所述第二查询结果,则将所述第二查询结果删除,并释放存储器中用于存储所述第二查询结果的存储空间。
10.一种数据库服务器,其特征在于,包括:
接收单元,用于接收数据库客户端装置的第一业务进程发送的携带有结构查询语言SQL查询命令的第一查询请求消息;
处理单元,用于判断所述SQL查询命令对应的查询结果缓存是否有效,若是,则向所述数据库客户端装置的业务进程发送用于指示所述SQL查询命令对应的查询结果缓存有效的指示消息,以使得所述数据库客户端装置的第一业务进程向所述数据库客户端装置的缓存管理进程发送所述SQL查询命令,所述缓存管理进程根据所述SQL查询命令从存储器获取第一查询结果,将所述第一查询结果返回给所述第一业务进程,其中,若之前没有处理过所述SQL查询命令,则所述SQL查询命令对应的查询结果缓存无效,或者所 述SQL查询命令所查询的内容与上次访问相比有所改变时,所述SQL查询命令对应的查询结果缓存无效;若所述SQL查询命令所查询的内容与上次访问相比没有改变,则所述SQL查询命令对应的查询结果缓存有效;
所述接收单元,还用于接收所述数据库客户端装置的第二业务进程发送的携带有所述SQL查询命令的第二查询请求消息;
所述处理单元,还用于判断所述SQL查询命令对应的查询结果缓存是否有效,若否,则根据所述SQL查询命令查询到所述第一查询结果,将所述第一查询结果返回给所述数据库客户端装置的第二业务进程,以使所述第二业务进程将所述第一查询结果发送给所述缓存管理进程,所述缓存管理进程将所述第一查询结果存储到所述存储器,建立所述SQL查询命令与所述第一查询结果的对应关系。
11.根据权利要求10所述的数据库服务器,其特征在于:
所述处理单元,还用于若所述SQL查询命令所查询的数据库的数据库改变序列号的值没有发生变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的数据库的数据库改变序列号的值发生变化,所述SQL查询命令所查询的表的表改变序列号的值没有发生变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的数据库的数据库改变序列号和所述SQL查询命令所查询的表的表改变序列号的值发生变化,所述SQL查询命令所查询的列的列改变序列号的值没有变化,则所述SQL查询命令对应的查询结果缓存有效;或者,
若所述SQL查询命令所查询的列的列改变序列号的值发生变化,则所述SQL查询命令对应的查询结果缓存无效。
12.根据权利要求11所述的数据库服务器,其特征在于:
所述接收单元,还用于接收数据修改指令;
所述处理单元,还用于将所述数据修改指令对应的数据库的表的列的内容进行修改,将修改的数据库的数据库改变序列号、修改的表的表改变序列号和修改的列的列改变序列号的值分别加1。
CN201210590531.1A 2012-12-31 2012-12-31 数据库查询方法及设备 Active CN103064960B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210590531.1A CN103064960B (zh) 2012-12-31 2012-12-31 数据库查询方法及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210590531.1A CN103064960B (zh) 2012-12-31 2012-12-31 数据库查询方法及设备

Publications (2)

Publication Number Publication Date
CN103064960A CN103064960A (zh) 2013-04-24
CN103064960B true CN103064960B (zh) 2016-09-07

Family

ID=48107590

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210590531.1A Active CN103064960B (zh) 2012-12-31 2012-12-31 数据库查询方法及设备

Country Status (1)

Country Link
CN (1) CN103064960B (zh)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103729471B (zh) * 2014-01-21 2017-03-08 华为软件技术有限公司 数据库查询方法和装置
CN104050284B (zh) * 2014-06-27 2017-11-10 北京思特奇信息技术股份有限公司 一种基于单进程的数据异步查询方法及系统
CN105574010B (zh) * 2014-10-13 2020-06-02 阿里巴巴集团控股有限公司 数据查询方法及装置
CN105512222A (zh) * 2015-11-30 2016-04-20 中国建设银行股份有限公司 数据查询方法及系统和数据读取方法及系统
CN107025240A (zh) * 2016-02-01 2017-08-08 国家超级计算深圳中心(深圳云计算中心) 一种语义网络中本体查询的缓存方法及系统
CN107229623B (zh) * 2016-03-23 2020-11-03 泰康保险集团股份有限公司 数据查询处理方法及装置
CN106095775A (zh) * 2016-05-24 2016-11-09 中国银行股份有限公司 一种实现数据查询或导出的方法及系统
CN106557562A (zh) * 2016-11-14 2017-04-05 天津南大通用数据技术股份有限公司 一种单机数据库数据的查询方法及装置
CN106815010B (zh) * 2016-12-09 2021-01-01 武汉斗鱼网络科技有限公司 一种操作数据库的方法及装置
CN107133326A (zh) * 2017-05-05 2017-09-05 广州千淘信息技术有限公司 一种异步数据库及其数据处理方法
CN108932284B (zh) * 2018-05-22 2020-11-24 中国银行股份有限公司 通用逻辑调度方法、电子设备及可读存储介质
CN109508344B (zh) * 2018-09-29 2024-03-12 中国平安人寿保险股份有限公司 业务数据查询方法、装置、电子设备及存储介质
CN109815351B (zh) * 2018-12-27 2020-11-24 深圳云天励飞技术有限公司 信息查询方法及相关产品
CN110716960B (zh) * 2019-10-22 2022-07-15 北京锐安科技有限公司 一种数据库查询方法、装置、设备及存储介质
CN112486966A (zh) * 2020-11-26 2021-03-12 中国国家铁路集团有限公司 一种过期数据清理方法、装置和电子设备
CN114356929A (zh) * 2021-12-31 2022-04-15 山东浪潮科学研究院有限公司 一种基于sql缓存的分布式数据处理方法
CN117785930A (zh) * 2022-09-21 2024-03-29 华为云计算技术有限公司 一种数据查询方法和云服务系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6321235B1 (en) * 1998-09-29 2001-11-20 International Business Machines Corporation Global caching and sharing of SQL statements in a heterogeneous application environment
CN102163195A (zh) * 2010-02-22 2011-08-24 北京东方通科技股份有限公司 一种基于分布式、异构数据库统一视图的查询优化方法
CN102436443A (zh) * 2010-09-29 2012-05-02 上海粱江通信系统股份有限公司 一种提升基于数据库业务系统处理性能的方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8495056B2 (en) * 2009-09-21 2013-07-23 At&T Intellectual Property I, L.P. System and method for caching database reports

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6321235B1 (en) * 1998-09-29 2001-11-20 International Business Machines Corporation Global caching and sharing of SQL statements in a heterogeneous application environment
CN102163195A (zh) * 2010-02-22 2011-08-24 北京东方通科技股份有限公司 一种基于分布式、异构数据库统一视图的查询优化方法
CN102436443A (zh) * 2010-09-29 2012-05-02 上海粱江通信系统股份有限公司 一种提升基于数据库业务系统处理性能的方法

Also Published As

Publication number Publication date
CN103064960A (zh) 2013-04-24

Similar Documents

Publication Publication Date Title
CN103064960B (zh) 数据库查询方法及设备
CN110032571B (zh) 业务流程处理方法、装置、存储介质及计算设备
CN110049087A (zh) 一种联盟链的可信度验证方法、系统、装置及设备
CN110096396B (zh) 分组测试的控制方法、分布式应用系统及存储介质
CN106815218A (zh) 数据库访问方法、装置和数据库系统
CN108509523A (zh) 区块链数据的结构化处理方法、设备及可读存储介质
CN105933408A (zh) 一种Redis通用中间件的实现方法及装置
CN109993524A (zh) 卡券管理方法、装置、设备及计算机可读存储介质
US11347808B1 (en) Dynamically-adaptive bloom-filter
CN110557284A (zh) 基于客户端网关的数据聚合方法及装置
CN109669718A (zh) 系统权限配置方法、装置、设备及存储介质
CN106101055A (zh) 一种多数据库的数据访问方法及其系统和代理服务器
US10212286B2 (en) System and method for allocation and management of shared virtual numbers
CN107026879A (zh) 一种数据缓存方法及后台应用系统
CN109960904A (zh) 业务系统管理方法、管理服务器、用户终端和管理系统
CN106921721A (zh) 一种服务器、会话管理方法和系统
CN109873839A (zh) 数据访问的方法、服务器与分布式系统
CN110769063B (zh) 智能驾驶虚拟仿真云平台的客户端连接状态管理系统
CN108111325A (zh) 一种资源分配方法及装置
CN112866421A (zh) 基于分布式缓存以及nsq的智能合约运行方法及装置
CN112733001A (zh) 获取订阅信息的方法、装置和电子设备
CN105224541B (zh) 数据的唯一性控制方法、信息存储方法及装置
CN106210156A (zh) 解析任务的处理方法、装置及服务器
CN111770211B (zh) 一种snat方法、装置、电子设备及存储介质
CN111708594A (zh) 页面渲染方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220208

Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Patentee after: Huawei Cloud Computing Technology Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20221213

Address after: 518129 Huawei Headquarters Office Building 101, Wankecheng Community, Bantian Street, Longgang District, Shenzhen, Guangdong

Patentee after: Shenzhen Huawei Cloud Computing Technology Co.,Ltd.

Address before: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Patentee before: Huawei Cloud Computing Technology Co.,Ltd.