数据库结果集缓存方法及设备与流程

文档序号:12008928阅读:183来源:国知局
数据库结果集缓存方法及设备与流程
本发明实施例涉及通信技术,尤其涉及一种数据库结果集缓存方法及设备。

背景技术:
目前,在数据库实际应用环境中,为了快速响应用户的查询请求,常使用结果集缓存技术,结果集缓存的原理是接收到相同的查询请求时,利用之前的查询结果响应当前的查询请求,而不是直接对原始数据进行处理。结果集缓存技术使数据库的查询性能有很大的提升,可以有更少的物理读写和更快的响应时间。结果集缓存主要用于存储数据表连接、聚集或排序等耗时操作的结果,以快速得到结果。现有技术中,是根据结构化查询语言(StructuredQueryLanguage,简称:SQL)查询语句来做结果集缓存的,如果一个SQL查询语句是以select开始的,则数据库服务器将把与该SQL文本的散列键值对应的查询结果缓存在缓存区中,每个缓存区都与一个SQL文本的散列键值对应,在应用结果集缓存之前,数据库服务器不会对SQL文本做任何处理,也就是说,若两个SQL查询语句只相差一个字符,这两个SQL查询语句也将使用缓存的不同结果集。然而,实际应用中,对原始的数据表进行更新有时是不可避免的,若原始的数据表发生了更新,会导致之前缓存的结果集不可用,当接收到相同的查询请求时,需要耗费中央处理器(CentralProcessingUnit,简称:CPU)重新执行整个查询过程,以生成新的结果集。

技术实现要素:
本发明实施例提供一种数据库结果集缓存方法及设备,以避免在原始数据表发生改变时,需要重新执行整个执行计划,节省了查询时间。第一方面,本发明实施例提供一种数据库结果集缓存方法,包括:数据库引擎接收数据操纵语言DML语句,所述DML语句用于使所述数据库引擎对原始数据表进行DML操作;所述数据库引擎执行所述DML操作后,若判断获知缓存区中存储有之前对所述原始数据表执行一执行计划而获得的第一最终执行结果以及中间执行结果,则所述数据库引擎唤醒被设置为睡眠状态的所述执行计划,并在所述中间执行结果以及经过DML操作的原始数据表的基础上再次执行所述执行计划,以得到与经过DML操作的原始数据表对应的第二最终执行结果并存储在所述缓存区中。在第一方面的第一种可能的实现方式中,所述数据库引擎唤醒被设置为睡眠状态的所述执行计划,包括:所述数据库引擎立即唤醒被设置为睡眠状态的所述执行计划;或,在满足预设的触发条件时,所述数据库引擎唤醒被设置为睡眠状态的所述执行计划。结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述数据库引擎接收数据操纵语言DML语句之前,还包括:对所述原始数据表执行所述执行计划,获得所述第一最终执行结果以及所述中间执行结果,将所述执行计划的工作状态设置为睡眠状态,并存储在所述缓存区中。根据第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述执行计划包括结构化查询语言SQL查询语句。第二方面,本发明实施例提供一种数据库引擎,包括:接收模块,用于接收数据操纵语言DML语句,所述DML语句用于使所述数据库引擎对原始数据表进行DML操作;处理模块,用于执行所述DML操作后,若判断获知缓存区中存储有之前对所述原始数据表执行一执行计划而获得的第一最终执行结果以及中间执行结果,则唤醒被设置为睡眠状态的所述执行计划,并在所述中间执行结果以及经过DML操作的原始数据表的基础上再次执行所述执行计划,以得到与经过DML操作的原始数据表对应的第二最终执行结果并存储在所述缓存区中。在第二方面的第一种可能的实现方式中,所述处理模块具体用于:立即唤醒被设置为睡眠状态的所述执行计划;或,在满足预设的触发条件时,唤醒被设置为睡眠状态的所述执行计划。结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述处理模块还用于:对所述原始数据表执行所述执行计划,获得所述第一最终执行结果以及所述中间执行结果,将所述执行计划的工作状态设置为睡眠状态,并存储在所述缓存区中。根据第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述执行计划包括结构化查询语言SQL查询语句。本发明实施例提供的数据库结果集缓存方法及设备,通过数据库引擎接收DML语句,对原始数据表进行DML操作;所述数据库引擎执行所述DML操作后,若判断获知缓存区中存储有之前对所述原始数据表执行一执行计划而获得的第一最终执行结果以及中间执行结果,则所述数据库引擎唤醒被设置为睡眠状态的所述执行计划,并在所述中间执行结果以及经过DML操作的原始数据表的基础上再次执行所述执行计划,以得到与经过DML操作的原始数据表对应的第二最终执行结果并存储在所述缓存区中。从而在原始数据表发生改变时,可以不用重新执行整个执行计划,而是在中间执行结果的基础上再次执行所述执行计划,节省了查询时间。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明数据库结果集缓存方法实施例一的流程图;图2为本发明数据库结果集缓存方法实施例二的流程图;图3为本发明数据库结果集缓存方法中客户端的执行计划的示意图;图4为本发明数据库引擎实施例一的结构示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为本发明数据库结果集缓存方法实施例一的流程图。如图1所示,本实施例提供的方法可以包括:S101、数据库引擎接收数据操纵语言(DataManipulationLanguage,简称:DML)语句,所述DML语句用于使所述数据库引擎对原始数据表进行DML操作。DML语句具体可以用于对原始数据表进行更新、插入或删除操作,本实施例以对原始数据表插入一条新记录为例进行说明。数据库引擎在接收到DML语句时,会根据DML语句对原始数据表进行插入操作。S102、所述数据库引擎执行所述DML操作,若判断获知缓存区中存储有之前对所述原始数据表执行一执行计划而获得的第一最终执行结果以及中间执行结果,则所述数据库引擎唤醒被设置为睡眠状态的所述执行计划,并在所述中间执行结果以及经过DML操作的原始数据表的基础上再次执行所述执行计划,以得到与经过DML操作的原始数据表对应的第二最终执行结果并存储在所述缓存区中。可以理解的是,若判断获知缓存区中没有存储之前对所述原始数据表执行一执行计划而获得的第一最终执行结果以及中间执行结果,可以不执行操作。在实际应用过程中,所述数据库引擎唤醒被设置为睡眠状态的所述执行计划可以包括两种方式:第一种方式为所述数据库引擎立即唤醒被设置为睡眠状态的所述执行计划;第二种方式为在满足预设的触发条件时,所述数据库引擎唤醒被设置为睡眠状态的所述执行计划。本实施例不对此进行限制。本实施例提供的数据库结果集缓存方法,通过数据库引擎接收DML语句,对原始数据表进行DML操作;所述数据库引擎执行所述DML操作后,若判断获知缓存区中存储有之前对所述原始数据表执行一执行计划而获得的第一最终执行结果以及中间执行结果,则所述数据库引擎唤醒被设置为睡眠状态的所述执行计划,并在所述中间执行结果以及经过DML操作的原始数据表的基础上再次执行所述执行计划,以得到与经过DML操作的原始数据表对应的第二最终执行结果并存储在所述缓存区中。从而在原始数据表发生改变时,可以不用重新执行整个执行计划,而是在中间执行结果的基础上再次执行所述执行计划,节省了查询时间。图2为本发明数据库结果集缓存方法实施例二的流程图。如图2所示,在上述实施例的基础上,在S101之前,本实施例提供的方法还可以包括:S201、对所述原始数据表执行所述执行计划,获得所述第一最终执行结果以及所述中间执行结果,将所述执行计划的工作状态设置为睡眠状态,并存储在所述缓存区中。具体地,所述执行计划可以包括所述SQL查询语句。在本实施例中,所述执行计划可以包括两种工作状态,运行状态和睡眠状态,数据库引擎在执行完所述执行计划后,会将所述执行计划的工作状态设置为睡眠状态,而不是直接结束所述执行计划,同时由于在缓存区中存储了中间执行结果和第一最终执行结果,因此,若原始数据表发生改变,数据库引擎可以唤醒之前设置为所述睡眠状态的所述执行计划,即,使所述执行计划处于运行状态,并在所述中间执行结果以及改变后的原始数据表的基础上再次执行所述执行计划,以得到与改变后的原始数据表对应的第二最终执行结果并存储在所述缓存区中。本实施例提供的数据库结果集缓存方法,通过在第一次执行所述执行计划时,获得所述第一最终执行结果以及所述中间执行结果,将所述执行计划的工作状态设置为睡眠状态,并存储在所述缓存区中,使得后续若原始数据表发生改变,所述数据库引擎可以唤醒所述执行计划,并在所述中间执行结果及改变后的原始数据表的基础上再次执行所述执行计划,并将得到的第二最终执行结果存储在所述缓存区中,在用户再次发起相同的执行计划时,可以直接从缓存区中获取最终结果,而不用重新执行整个执行计划,节省了查询时间。下面以一个具体的实施例对数据库结果集缓存方法进行详细说明。图3为本发明数据库结果集缓存方法中客户端的执行计划的示意图。如图3所示,在本实施例中,假设执行计划为对索引扫描(customer)表和全表扫描(sales)表进行哈希连接(HashJoin)。本领域技术人员可知,HashJoin包括buildhash和hashjoin两个步骤,其中,buildhash是针对customer表进行的操作,而hashjoin是对customer表和sales表进行的操作。buildhash的结果即为本实施例中所述的中间执行结果,hashjoin的结果即为本实施例中所述的第一最终执行结果,图3中的结果集即为本实施例中所述的第一最终执行结果或第二最终执行结果。假设客户端A第一次发起SQL查询语句,数据库引擎在接收到SQL查询语句后,分析SQL语句文本,检查缓存区中是否存在与该SQL语句文本的散列键值对应的第一最终执行结果,若存在,则数据库引擎从缓存区中取出该第一最终执行结果并返回给客户端A;若不存在,则数据库引擎执行与所述SQL查询语句对应的执行计划,获得所述执行计划的中间执行结果和第一最终执行结果,并将所述执行计划的工作状态设置为睡眠状态,并存储在所述缓存区中,向客户端A返回第一最终执行结果。若客户端B向sales表中插入了一条记录,数据库引擎执行完插入操作后,会判断缓存区中是否存在所述第一最终执行结果以及所述中间执行结果,若存在,则唤醒被设置为睡眠状态的所述执行计划,将该记录上推至HashJoin的节点做hashjoin操作,而不需要重新进行buildhash,也就是说,由于customer表没有改变,即,buildhash的结果没有改变,而由于对sales表进行了插入操作,因此,只需要对customer表和sales表再次执行hashjoin操作,以得到与插入了一条记录的sales表对应的第二最终执行结果并存储在所述缓存区中。若客户端A再次发起了相同的SQL查询语句,则数据库引擎可以直接从缓存区中获取所述第二最终执行结果返回给客户端A。本实施例提供的方法,通过在原始数据表发生变化后,数据库引擎判断缓存区中是否存在相应的第一最终执行结果以及中间执行结果,若存在,则在所述中间执行结果的基础上再次执行所述执行计划,以得到第二最终执行结果,在客户端第二次发起相同的SQL查询语句时,可以直接从缓存区中获取所述第二最终执行结果返回给客户端,节省了查询时间。图4为本发明数据库引擎实施例一的结构示意图。如图4所示,本实施例提供的数据库引擎可以包括:接收模块11,用于接收数据操纵语言DML语句,所述DML语句用于使所述数据库引擎对原始数据表进行DML操作;处理模块12,用于执行所述DML操作后,若判断获知缓存区中存储有之前对所述原始数据表执行一执行计划而获得的第一最终执行结果以及中间执行结果,则唤醒被设置为睡眠状态的所述执行计划,并在所述中间执行结果以及经过DML操作的原始数据表的基础上再次执行所述执行计划,以得到与经过DML操作的原始数据表对应的第二最终执行结果并存储在所述缓存区中。其中,所述处理模块12具体可以用于立即唤醒被设置为睡眠状态的所述执行计划;或,在满足预设的触发条件时,唤醒被设置为睡眠状态的所述执行计划。所述处理模块12还可以用于对所述原始数据表执行所述执行计划,获得所述第一最终执行结果以及所述中间执行结果,将所述执行计划的工作状态设置为睡眠状态,并存储在所述缓存区中。所述执行计划包括结构化查询语言SQL查询语句。本实施例提供的数据库引擎,可用于执行上述方法实施例的技术方案,其原理及技术效果类似,此处不再赘述。本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1