一种数据库接口的结果集缓存方法

文档序号:6443108阅读:177来源:国知局
专利名称:一种数据库接口的结果集缓存方法
技术领域
本发明涉及一种结果集缓存方法,尤其涉及一种利用数据库接口实现、可以有效降低数据库服务器压力的结果集缓存方法,属于数据库应用技术领域。
背景技术
随着用户群的不断增多,对信息系统的访问也越来越多。数据库的查询量必然会大大增加,而信息系统会随着访问量的增长而变得越来越慢,从而需要投入更多的资金进行软硬件的升级。造成这样的原因是,用户的每次查询请求,信息系统都通过在数据库中进行相应的查找、数据计算等操作,然后将结果返回。查询量增加,信息系统的数据处理量也随之线性增加。为了减轻数据库服务器的访问压力,有人研发了数据库服务器数据缓存技术。该缓存技术的作用是临时存储用户经常访问的数据,缓存中的数据是数据存储源中数据的拷贝,当用户再次访问已经进行了临时存储的数据时便可以直接返回该数据,而无需再从数据库服务器中获取该数据,由此降低数据库服务器的负担。缓存技术的实现不仅需要作为物理介质的硬件,还需要管理缓存的并发访问和过期等策略的软件,因此缓存技术的实现是软硬件共同完成的。目前,为了应对繁重的客户端查询请求,应用开发商专门建立查询服务器来分离这些查询请求。比如一些火车票或飞机票的查票系统,在内部业务上采用Oracle数据库进行处理,而外部使用MySQL的集群作为查询服务器供用户查询。在专利号为ZL 200710013409. 7的中国发明专利中,针对历史性数据、存储后不变化、相同数据多次查询的特点,提供一种能够基于文件系统缓存的数据加速查询方法。该方法是通过将历史查询数据保存,利用历史查询数据作为查询缓存数据进行的加速查询方法。在系统接收用户查询请求之后,先转到查询分析器,查询分析器的主要作用是分析查询条件,规划查询条件等, 然后经过文件缓冲器,分析现有的结果数据文件中是否存在满足当前查询需求,没有则从数据库中进行查询,并将最终的结果文件返回给数据处理器,数据处理器按照最终的查询要求,对数据进行过滤、排序等处理,将结果文件返回上层应用系统。

发明内容
针对现有技术所存在的不足,本发明所要解决的技术问题在于提供一种数据库接口的结果集缓存方法。该方法能够有效减轻数据库的查询压力。为实现上述的发明目的,本发明采用下述的技术方案—种数据库接口的结果集缓存方法,其特征在于创建内存区域,作为缓存存放结果集;在收到查询请求之后,查看缓存中结果集是否存在;如果有结果集且有效,则返回结果集;如果缓存中无结果集或结果集无效,则将查询请求发送给数据库,获取新的查询结果集并将新的查询结果集保存到所述缓存中。
其中较优地,所述作为缓存存放结果集的步骤包括初始化所述缓存的空间;在保存新的结果集时,判断缓存是否已满,如果缓存已满则驱逐缓存中的旧的结果集,如果缓存未满则保存新的结果集。其中较优地,所述驱逐缓存的步骤包括采用直方图的方式选出一定数量的样本;再以缓存比较算法挑选出结果集,驱逐一个结果集。其中较优地,进一步包括以下步骤步骤41,客户端有新的查询请求,查询步骤开始,进入步骤42 ;步骤42,根据步骤41的查询请求,判断要查询的结果集是否在缓存之中,如果在缓存之中,转入步骤43,如果要查询的结果集不在缓存之中,跳转入步骤45 ;步骤43,根据缓存中的结果集判断该结果集是否失效,如果已失效转入步骤44, 如果没有失效直接跳转入步骤45 ;步骤44,将客户端查询请求发送给数据库,查询流程结束;步骤45,将结果集返回给客户端,查询流程结束。其中较优地,还包括以下步骤周期性扫描缓存,驱逐超过缓存失效时间的结果集。其中较优地,所述缓存设定有缓存最大数量,缓存失效时间,缓存比较算法;其中,缓存最大数量是允许存放在缓存中的结果集的最大数量;缓存失效时间是结果集保存在缓存中的最长时间;缓存比较算法是采用一种缓存置换策略决定两条结果集的优先级别的算法。其中较优地,在缓存中,以查询语句作为关键码,结果集作为值,以哈希表的方式保存查询结果的结果集。本发明所提供的结果集缓存方法使用接口端的缓存技术来减少与数据库的交互, 减轻了数据库的压力。在一些对数据一致性要求不高,或者短时间内数据不发生变化并且重复查询比较多的场景下,采用本方法能有效降低成本。


下面结合附图和具体实施方式
对本发明作进一步的详细说明。图1是本发明中,结果集缓存的保存流程示意图;图2是本发明中,结果集缓存的扫描流程图;图3是本发明中,结果集缓存在接受客户端查询请求时的操作流程示意图。
具体实施例方式本发明提供一种数据库接口的结果集缓存方法,数据库接口在查询结束后,将查询结果进行缓存。数据库在收到查询请求之后,先从缓存中查看结果集是否存在,如果发现已有结果集保存在缓存中并且仍然有效,直接将结果集返回给客户端。否则,将查询发送给数据库,获取查询结果集并保存到缓存之中。下面结合附图和具体实施例对本发明的具体实施步骤作进一步说明,但该实施例并不能理解为对本发明的限定。通过数据库接口创建一块内存区域用于存放结果集的缓存内容,此时需要设定缓存最大数量、缓存失效时间、缓存比较算法,具体说明如下缓存最大数量是允许存放在缓存中的结果集的最大数量,如果有新的结果集需要保存到缓存中,而缓存中的结果集数量达到缓存最大数量时,需要采用缓存驱逐算法从缓存中驱逐一条结果集,以允许新的结果集被保存到缓存中。缓存失效时间是结果集保存在缓存中的最长时间,如果结果集在缓存中的时间超过缓存失效时间,就认为这个结果集已经失效。数据库接口会启动一个后台线程用于定期扫描缓存,并从中驱逐出超过缓存失效时间的结果集。在结果集已失效并且还未被后台线程驱逐的情况下(在一个扫描周期内),当有相同查询到来时,需要重新从数据库获取到最新的结果集。缓存比较算法是采用一种缓存置换策略决定2条结果集的优先级别的算法,常用的算法有FIFO(先入先出队列,First Input First Output)、LFU(最不经常使用页置换算法,least frequentlyused (LFU) page-replacement algorithm)、LRU(最近最少使用算法, Least RecentlyUsed)。缓存驱逐算法是以直方图的方式将缓存分成数目相同的许多段,在每段上随机挑选出一条结果集,组成候选数组,然后通过指定的缓存置换策略从候选数组中挑选出要驱逐的结果集。当缓存已经存满,而有新的结果集需要保存到缓存中,可以采用直方图的方式选出一定数量的样本,再以缓存驱逐算法从样本中挑选出一条结果集进行驱逐。如图1所示的数据库接口的结果集缓存的保存流程示意图,新结果集保存至缓存的具体过程是这样实现的步骤11,初始化结果集内存空间,作为缓存,转入步骤12 ;其中,结果集内存空间是数据库接口内创建的一块内存区域。步骤12,判断缓存是否已满,如果缓存已满则转入步骤13,如果缓存未满则跳转进入步骤15。步骤13,采用缓存驱逐算法挑选出一定数量的候选数组,进入步骤14 ;其中,缓存驱逐算法采用直方图方式。步骤14,从候选数组中挑选出一条旧结果集进行驱逐;进入步骤15。步骤15,将新结果集保存到缓存,数据库接口的结果集缓存的保存流程结束。数据库接口的结果集缓存的扫描缓存流程如图2所示,在正常情况下,启动后台扫描线程,后台扫描线程周期性的扫描缓存,将在缓存中的时间超过缓存失效时间的结果集驱逐出去。当客户端有新的查询请求时,数据库将查询语句作为关键码(KEY),结果集作为值 (VALUE),以哈希表的方式保存查询结果集;以KEY-VALUE (关键码值)的方式保存到缓存之中。首先从数据库接口的缓存中以查询语句为KEY查看结果集是否存在,如果发现缓存中保存有该查询的结果集,查看结果集在缓存中的时间是否超过缓存失效时间,如果结果集失效,数据库接口重新将查询语句发送给数据库,获取最新结果集并予以保存。更具体地,数据库接口的结果集缓存在接受客户端查询请求时的流程图,如图3 所示,包括如下步骤
步骤21,客户端有新的查询请求,查询步骤开始,进入步骤22 ;步骤22,根据步骤21的查询请求,判断要查询的结果集是否在缓存之中,如果在缓存之中,转入步骤23,如果要查询的结果集不在缓存之中,跳转入步骤25 ;步骤23,根据缓存中的结果集判断该结果集是否失效,如果已失效转入步骤M, 如果没有失效直接跳转入步骤沈;步骤M,根据步骤23清除缓存中失效的结果集;需要说明的是,步骤M并不是此处必需的步骤,因此也可以放到别的步骤之后再进行。步骤25,将客户端查询请求发送给数据库;步骤沈,将结果集返回给客户端,查询流程结束。利用本发明所提供的方法,数据库接口在查询结束后,将查询结果进行缓存。而在收到查询请求之后,首先从缓存中查看结果集是否存在,减少了检索时与数据库的直接交互次数,从而减轻了数据库的压力,提高了检索效率,节约了信息系统的资源。在一些对数据一致性要求不高,或者短时间内数据不发生变化并且重复查询比较多的场景下,采用本方法能有效降低成本。上面对本发明所提供的数据库接口的结果集缓存方法进行了详细的说明。对本领域的一般技术人员而言,在不背离本发明实质精神的前提下对它所做的任何显而易见的改动,都将构成对本发明专利权的侵犯,将承担相应的法律责任。
权利要求
1.一种数据库接口的结果集缓存方法,其特征在于 创建内存区域,作为缓存存放结果集;在收到查询请求之后,查看缓存中结果集是否存在;如果有结果集且有效,则返回结果集;如果缓存中无结果集或结果集无效,则将查询请求发送给数据库,获取新的查询结果集并将新的查询结果集保存到所述缓存中。
2.如权利要求1所述的数据库接口的结果集缓存方法,其特征在于所述作为缓存存放结果集的步骤包括初始化所述缓存的空间;在保存新的结果集时,判断缓存是否已满,如果缓存已满则驱逐缓存中的旧的结果集, 如果缓存未满则保存新的结果集。
3.如权利要求2所述的数据库接口的结果集缓存方法,其特征在于所述驱逐缓存的步骤包括采用直方图的方式选出一定数量的样本; 再以缓存比较算法挑选出结果集,驱逐一个结果集。
4.如权利要求1或2所述的数据库接口的结果集缓存方法,其特征在于进一步包括以下步骤步骤41,客户端有新的查询请求,查询步骤开始,进入步骤42 ; 步骤42,根据步骤41的查询请求,判断要查询的结果集是否在缓存之中,如果在缓存之中,转入步骤43,如果要查询的结果集不在缓存之中,跳转入步骤45 ;步骤43,根据缓存中的结果集判断该结果集是否失效,如果已失效转入步骤44,如果没有失效直接跳转入步骤45 ;步骤44,将客户端查询请求发送给数据库,查询流程结束; 步骤45,将结果集返回给客户端,查询流程结束。
5.如权利要求1或2所述的数据库接口的结果集缓存方法,其特征在于进一步包括以下步骤步骤51,客户端有新的查询请求,查询步骤开始,进入步骤52 ; 步骤52,根据步骤51的查询请求,判断要查询的结果集是否在缓存之中,如果在缓存之中,转入步骤53,如果要查询的结果集不在缓存之中,跳转入步骤55 ;步骤53,根据缓存中的结果集判断该结果集是否失效,如果已失效转入步骤M,如果没有失效直接跳转入步骤56 ;步骤M,清除缓存中失效的结果集,进入步骤55 ; 步骤55,将客户端查询请求发送给数据库,查询流程结束; 步骤56,将结果集返回给客户端,查询流程结束。
6.如权利要求1或2所述的数据库接口的结果集缓存方法,其特征在于还包括以下步骤周期性扫描缓存,驱逐超过缓存失效时间的结果集。
7.如权利要求1所述的数据库接口的结果集缓存方法,其特征在于 所述缓存设定有缓存最大数量,缓存失效时间,缓存比较算法;其中,缓存最大数量是允许存放在缓存中的结果集的最大数量;缓存失效时间是结果集保存在缓存中的最长时间;缓存比较算法是采用一种缓存置换策略决定两条结果集的优先级别的算法。
8.如权利要求1或2所述的数据库接口的结果集缓存方法,其特征在于还包括以下步骤在缓存中,以查询语句作为关键码,结果集作为值,以哈希表的方式保存查询结果的结果集。
全文摘要
本发明公开了一种数据库接口的结果集缓存方法。在该方法中,数据库接口在查询结束后,将查询结果进行缓存。而在收到查询请求之后,先从缓存中查看结果集是否存在,如果发现已有结果集保存在缓存中并且仍然有效,直接将结果集返回给客户端。否则,将查询发送给数据库,获取查询结果集并保存到缓存之中。在一些对数据一致性要求不高,或者短时间内数据不发生变化并且重复查询比较多的场景下,使用该方法减少了与数据库的交互,减轻了数据库的压力。
文档编号G06F17/30GK102542034SQ201110439878
公开日2012年7月4日 申请日期2011年12月23日 优先权日2011年12月23日
发明者刘淼, 曾文旌, 李健, 白芸, 罗乐, 赵平仲 申请人:北京人大金仓信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1