CN102542034B - 一种数据库接口的结果集缓存方法 - Google Patents

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

Info

Publication number
CN102542034B
CN102542034B CN201110439878.1A CN201110439878A CN102542034B CN 102542034 B CN102542034 B CN 102542034B CN 201110439878 A CN201110439878 A CN 201110439878A CN 102542034 B CN102542034 B CN 102542034B
Authority
CN
China
Prior art keywords
result set
buffer memory
database
query
client
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
CN201110439878.1A
Other languages
English (en)
Other versions
CN102542034A (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.)
Beijing Kingbase Information Technologies Co Ltd
Original Assignee
Beijing Kingbase Information 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 Beijing Kingbase Information Technologies Co Ltd filed Critical Beijing Kingbase Information Technologies Co Ltd
Priority to CN201110439878.1A priority Critical patent/CN102542034B/zh
Publication of CN102542034A publication Critical patent/CN102542034A/zh
Application granted granted Critical
Publication of CN102542034B publication Critical patent/CN102542034B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种数据库接口的结果集缓存方法。在该方法中,数据库接口在查询结束后,将查询结果进行缓存。而在收到查询请求之后,先从缓存中查看结果集是否存在,如果发现已有结果集保存在缓存中并且仍然有效,直接将结果集返回给客户端。否则,将查询发送给数据库,获取查询结果集并保存到缓存之中。在一些对数据一致性要求不高,或者短时间内数据不发生变化并且重复查询比较多的场景下,使用该方法减少了与数据库的交互,减轻了数据库的压力。

Description

一种数据库接口的结果集缓存方法
技术领域
本发明涉及一种结果集缓存方法,尤其涉及一种利用数据库接口实现、可以有效降低数据库服务器压力的结果集缓存方法,属于数据库应用技术领域。
背景技术
随着用户群的不断增多,对信息系统的访问也越来越多。数据库的查询量必然会大大增加,而信息系统会随着访问量的增长而变得越来越慢,从而需要投入更多的资金进行软硬件的升级。造成这样的原因是,用户的每次查询请求,信息系统都通过在数据库中进行相应的查找、数据计算等操作,然后将结果返回。查询量增加,信息系统的数据处理量也随之线性增加。
为了减轻数据库服务器的访问压力,有人研发了数据库服务器数据缓存技术。该缓存技术的作用是临时存储用户经常访问的数据,缓存中的数据是数据存储源中数据的拷贝,当用户再次访问已经进行了临时存储的数据时便可以直接返回该数据,而无需再从数据库服务器中获取该数据,由此降低数据库服务器的负担。缓存技术的实现不仅需要作为物理介质的硬件,还需要管理缓存的并发访问和过期等策略的软件,因此缓存技术的实现是软硬件共同完成的。
目前,为了应对繁重的客户端查询请求,应用开发商专门建立查询服务器来分离这些查询请求。比如一些火车票或飞机票的查票系统,在内部业务上采用Oracle数据库进行处理,而外部使用MySQL的集群作为查询服务器供用户查询。在专利号为ZL 200710013409.7的中国发明专利中,针对历史性数据、存储后不变化、相同数据多次查询的特点,提供一种能够基于文件系统缓存的数据加速查询方法。该方法是通过将历史查询数据保存,利用历史查询数据作为查询缓存数据进行的加速查询方法。在系统接收用户查询请求之后,先转到查询分析器,查询分析器的主要作用是分析查询条件,规划查询条件等,然后经过文件缓冲器,分析现有的结果数据文件中是否存在满足当前查询需求,没有则从数据库中进行查询,并将最终的结果文件返回给数据处理器,数据处理器按照最终的查询要求,对数据进行过滤、排序等处理,将结果文件返回上层应用系统。
发明内容
针对现有技术所存在的不足,本发明所要解决的技术问题在于提供一种数据库接口的结果集缓存方法。该方法能够有效减轻数据库的查询压力。
为实现上述的发明目的,本发明采用下述的技术方案:
一种数据库接口的结果集缓存方法,包括如下步骤:
创建内存区域,作为缓存存放结果集;所述结果集在所述缓存中的数量不超过缓存最大数量,保存时间不超过缓存失效时间;
在收到查询请求之后,查看缓存中结果集是否存在;
如果有结果集且有效,则返回结果集;如果缓存中无结果集或结果集无效,则将查询请求发送给数据库,获取新的查询结果集并将新的查询结果集保存到所述缓存中;其中在所述缓存使用过程中,
如果有新的结果集需要保存到所述缓存中,而所述缓存中的结果集数量达到缓存最大数量时,则从所述缓存中驱逐一条结果集,以允许新的结果集被保存到缓存中;其中,从所述缓存中驱逐结果集的步骤包括:
以直方图的方式将缓存分成数目相同的许多段,在每段上随机挑选出一条结果集,组成候选数组,然后通过指定的缓存置换策略从候选数组中挑选出要驱逐的结果集进行驱逐。
其中较优地,周期性扫描所述缓存,从中驱逐超过所述缓存失效时间的结果集;
在一个扫描周期内当结果集已失效并且还未被驱逐的情况下,有相同查询到来时,重新从数据库获取最新的结果集。
其中较优地,进一步包括以下步骤:
步骤31,客户端有新的查询请求,查询步骤开始,进入步骤32;
步骤32,根据步骤31的查询请求,判断要查询的结果集是否在缓存之中,如果在缓存之中,转入步骤33,如果要查询的结果集不在缓存之中,跳转入步骤35;
步骤33,根据缓存中的结果集判断该结果集是否失效,如果已失效转入步骤34,如果没有失效直接跳转入步骤35;
步骤34,将客户端查询请求发送给数据库,查询流程结束;
步骤35,将结果集返回给客户端,查询流程结束。
或者,进一步包括以下步骤:
步骤41,客户端有新的查询请求,查询步骤开始,进入步骤42;
步骤42,根据步骤41的查询请求,判断要查询的结果集是否在缓存之中,如果在缓存之中,转入步骤43,如果要查询的结果集不在缓存之中,跳转入步骤45;
步骤43,根据缓存中的结果集判断该结果集是否失效,如果已失效转入步骤44,如果没有失效直接跳转入步骤46;
步骤44,清除缓存中失效的结果集,进入步骤45;
步骤45,将客户端查询请求发送给数据库,查询流程结束;
步骤46,将结果集返回给客户端,查询流程结束。
其中较优地,在缓存中,以查询语句作为关键码,结果集作为值,以哈希表的方式保存查询结果的结果集。
本发明所提供的结果集缓存方法使用接口端的缓存技术来减少与数据库的交互,减轻了数据库的压力。在一些对数据一致性要求不高,或者短时间内数据不发生变化并且重复查询比较多的场景下,采用本方法能有效降低成本。
附图说明
下面结合附图和具体实施方式对本发明作进一步的详细说明。
图1是本发明中,结果集缓存的保存流程示意图;
图2是本发明中,结果集缓存的扫描流程图;
图3是本发明中,结果集缓存在接受客户端查询请求时的操作流程示意图。
具体实施方式
本发明提供一种数据库接口的结果集缓存方法,数据库接口在查询结束后,将查询结果进行缓存。数据库在收到查询请求之后,先从缓存中查看结果集是否存在,如果发现已有结果集保存在缓存中并且仍然有效,直接将结果集返回给客户端。否则,将查询发送给数据库,获取查询结果集并保存到缓存之中。
下面结合附图和具体实施例对本发明的具体实施步骤作进一步说明,但该实施例并不能理解为对本发明的限定。
通过数据库接口创建一块内存区域用于存放结果集的缓存内容,此时需要设定缓存最大数量、缓存失效时间、缓存比较算法,具体说明如下:
缓存最大数量是允许存放在缓存中的结果集的最大数量,如果有新的结果集需要保存到缓存中,而缓存中的结果集数量达到缓存最大数量时,需要采用缓存驱逐算法从缓存中驱逐一条结果集,以允许新的结果集被保存到缓存中。
缓存失效时间是结果集保存在缓存中的最长时间,如果结果集在缓存中的时间超过缓存失效时间,就认为这个结果集已经失效。数据库接口会启动一个后台线程用于定期扫描缓存,并从中驱逐出超过缓存失效时间的结果集。在结果集已失效并且还未被后台线程驱逐的情况下(在一个扫描周期内),当有相同查询到来时,需要重新从数据库获取到最新的结果集。
缓存比较算法是采用一种缓存置换策略决定2条结果集的优先级别的算法,常用的算法有FIFO(先入先出队列,First Input FirstOutput)、LFU(最不经常使用页置换算法,least frequently used(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,根据缓存中的结果集判断该结果集是否失效,如果已失效转入步骤24,如果没有失效直接跳转入步骤26;
步骤24,根据步骤23清除缓存中失效的结果集;需要说明的是,步骤24并不是此处必需的步骤,因此也可以放到别的步骤之后再进行。
步骤25,将客户端查询请求发送给数据库;
步骤26,将结果集返回给客户端,查询流程结束。
利用本发明所提供的方法,数据库接口在查询结束后,将查询结果进行缓存。而在收到查询请求之后,首先从缓存中查看结果集是否存在,减少了检索时与数据库的直接交互次数,从而减轻了数据库的压力,提高了检索效率,节约了信息系统的资源。在一些对数据一致性要求不高,或者短时间内数据不发生变化并且重复查询比较多的场景下,采用本方法能有效降低成本。
上面对本发明所提供的数据库接口的结果集缓存方法进行了详细的说明。对本领域的一般技术人员而言,在不背离本发明实质精神的前提下对它所做的任何显而易见的改动,都将构成对本发明专利权的侵犯,将承担相应的法律责任。

Claims (5)

1.一种数据库接口的结果集缓存方法,其特征在于包括如下步骤:
创建内存区域,作为缓存存放结果集;所述结果集在所述缓存中的数量不超过缓存最大数量,保存时间不超过缓存失效时间;
在收到查询请求之后,查看缓存中结果集是否存在;
如果有结果集且有效,则返回结果集;如果缓存中无结果集或结果集无效,则将查询请求发送给数据库,获取新的查询结果集并将新的查询结果集保存到所述缓存中;其中在所述缓存使用过程中,
如果有新的结果集需要保存到所述缓存中,而所述缓存中的结果集数量达到缓存最大数量时,则从所述缓存中驱逐一条结果集,以允许新的结果集被保存到缓存中;其中,从所述缓存中驱逐结果集的步骤包括:
以直方图的方式将缓存分成数目相同的许多段,在每段上随机挑选出一条结果集,组成候选数组,然后通过指定的缓存置换策略从候选数组中挑选出要驱逐的结果集进行驱逐。
2.如权利要求1所述的数据库接口的结果集缓存方法,其特征在于还包括以下步骤:
周期性扫描所述缓存,从中驱逐超过所述缓存失效时间的结果集;
在一个扫描周期内当结果集已失效并且还未被驱逐的情况下,有相同查询到来时,重新从数据库获取最新的结果集。
3.如权利要求1所述的数据库接口的结果集缓存方法,其特征在于进一步包括以下步骤:
步骤31,客户端有新的查询请求,查询步骤开始,进入步骤32;
步骤32,根据步骤31的查询请求,判断要查询的结果集是否在缓存之中,如果在缓存之中,转入步骤33,如果要查询的结果集不在缓存之中,跳转入步骤35;
步骤33,根据缓存中的结果集判断该结果集是否失效,如果已失效转入步骤34,如果没有失效直接跳转入步骤35;
步骤34,将客户端查询请求发送给数据库,查询流程结束;
步骤35,将结果集返回给客户端,查询流程结束。
4.如权利要求1所述的数据库接口的结果集缓存方法,其特征在于进一步包括以下步骤:
步骤41,客户端有新的查询请求,查询步骤开始,进入步骤42;
步骤42,根据步骤41的查询请求,判断要查询的结果集是否在缓存之中,如果在缓存之中,转入步骤43,如果要查询的结果集不在缓存之中,跳转入步骤45;
步骤43,根据缓存中的结果集判断该结果集是否失效,如果已失效转入步骤44,如果没有失效直接跳转入步骤46;
步骤44,清除缓存中失效的结果集,进入步骤45;
步骤45,将客户端查询请求发送给数据库,查询流程结束;
步骤46,将结果集返回给客户端,查询流程结束。
5.如权利要求1所述的数据库接口的结果集缓存方法,其特征在于还包括以下步骤:
在所述缓存中,以查询语句作为关键码、结果集作为值、以哈希表的方式保存查询结果的结果集。
CN201110439878.1A 2011-12-23 2011-12-23 一种数据库接口的结果集缓存方法 Active CN102542034B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110439878.1A CN102542034B (zh) 2011-12-23 2011-12-23 一种数据库接口的结果集缓存方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110439878.1A CN102542034B (zh) 2011-12-23 2011-12-23 一种数据库接口的结果集缓存方法

Publications (2)

Publication Number Publication Date
CN102542034A CN102542034A (zh) 2012-07-04
CN102542034B true CN102542034B (zh) 2015-09-09

Family

ID=46348916

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110439878.1A Active CN102542034B (zh) 2011-12-23 2011-12-23 一种数据库接口的结果集缓存方法

Country Status (1)

Country Link
CN (1) CN102542034B (zh)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102968507B (zh) * 2012-12-14 2016-07-20 中国银行股份有限公司 基于缓存表的数据查询方法
CN104035923B (zh) * 2013-03-04 2017-09-01 阿里巴巴集团控股有限公司 查询数据的方法及装置
CN103268343A (zh) * 2013-05-24 2013-08-28 北京京东尚科信息技术有限公司 将关系数据库和缓存透明结合的系统和方法
CN104572737B (zh) * 2013-10-23 2018-01-30 阿里巴巴集团控股有限公司 数据存储辅助方法及系统
CN103678173B (zh) * 2013-12-31 2017-07-04 金蝶软件(中国)有限公司 缓存失效方法和装置
CN105243072A (zh) * 2014-07-11 2016-01-13 北京神州泰岳软件股份有限公司 一种数据库查询方法及系统
CN104156396B (zh) * 2014-07-16 2017-12-01 成都康赛信息技术有限公司 大数据环境下提高数据库性能的方法及系统
CN105306457B (zh) * 2015-09-30 2018-11-20 努比亚技术有限公司 数据缓存装置及方法
CN106656906A (zh) * 2015-10-28 2017-05-10 北京天诚盛业科技有限公司 基于云平台的生物识别系统及其方法
CN105488208B (zh) * 2015-12-11 2019-03-08 北京奇虎科技有限公司 数据查找方法与装置
CN105608197B (zh) * 2015-12-25 2019-09-10 Tcl集团股份有限公司 一种高并发下Memcache数据的获取方法及系统
CN106202254A (zh) * 2016-06-30 2016-12-07 上海斐讯数据通信技术有限公司 一种查询方法及数据查询系统
CN106021615A (zh) * 2016-07-01 2016-10-12 广东小天才科技有限公司 题目搜索优化方法及装置
CN107885743A (zh) * 2016-09-29 2018-04-06 南京途牛科技有限公司 一种基于缓存的航班余位查询方法
CN106599199A (zh) * 2016-12-14 2017-04-26 国云科技股份有限公司 一种数据缓存与同步方法
CN107145549B (zh) * 2017-04-27 2020-01-14 深圳智高点知识产权运营有限公司 一种数据库缓存控制方法以及系统
CN108804447B (zh) * 2017-04-28 2021-05-25 北京京东尚科信息技术有限公司 利用缓存响应数据请求的方法和系统
CN110019263B (zh) * 2017-10-18 2021-08-13 北京京东尚科信息技术有限公司 信息存储方法和装置
CN109241021A (zh) * 2018-09-04 2019-01-18 郑州云海信息技术有限公司 一种文件查询方法、装置、设备及计算机可读存储介质
CN109558445A (zh) * 2018-12-04 2019-04-02 郑州云海信息技术有限公司 一种接口查询方法和可读存储介质
CN110489447B (zh) * 2019-07-16 2022-05-27 招联消费金融有限公司 数据查询方法、装置、计算机设备和存储介质
CN110515990B (zh) * 2019-07-23 2021-10-01 华信永道(北京)科技股份有限公司 数据查询展示方法及查询展示系统
CN110795457B (zh) * 2019-09-24 2023-05-05 苏宁云计算有限公司 数据缓存处理方法、装置、计算机设备和存储介质
CN112559244A (zh) * 2019-09-25 2021-03-26 北京国双科技有限公司 数据处理方法、装置、电子设备和计算机可读介质
CN111190928A (zh) * 2019-12-24 2020-05-22 平安普惠企业管理有限公司 缓存处理方法、装置、计算机设备以及存储介质
CN112395316B (zh) * 2020-11-10 2023-08-29 杭州萤石软件有限公司 一种数据查询方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101154230A (zh) * 2006-09-30 2008-04-02 中兴通讯股份有限公司 一种大数据量分类检索网页的响应方法
CN101576918A (zh) * 2009-06-19 2009-11-11 用友软件股份有限公司 具备负载均衡功能的数据缓存系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101154230A (zh) * 2006-09-30 2008-04-02 中兴通讯股份有限公司 一种大数据量分类检索网页的响应方法
CN101576918A (zh) * 2009-06-19 2009-11-11 用友软件股份有限公司 具备负载均衡功能的数据缓存系统

Also Published As

Publication number Publication date
CN102542034A (zh) 2012-07-04

Similar Documents

Publication Publication Date Title
CN102542034B (zh) 一种数据库接口的结果集缓存方法
CN100468400C (zh) 一种提高搜索信息速度的方法及系统
US9959279B2 (en) Multi-tier caching
CN104899156B (zh) 一种面向大规模社交网络的图数据存储及查询方法
CN102521406B (zh) 海量结构化数据复杂查询任务的分布式查询方法和系统
CN102521405B (zh) 支持高速加载的海量结构化数据存储、查询方法和系统
CN110383261A (zh) 用于多流存储装置的流选择
CN110291518A (zh) 合并树无用单元指标
CN110162528A (zh) 海量大数据检索方法及系统
CN107491523B (zh) 存储数据对象的方法及装置
CN110268399A (zh) 用于维护操作的合并树修改
KR101672901B1 (ko) 분산 파일 시스템에서 소형 파일에 대한 접근성 향상을 위한 캐시 관리 시스템
CN100437590C (zh) 预取对象的方法
CN104850572A (zh) HBase非主键索引构建与查询方法及其系统
US10061517B2 (en) Apparatus and method for data arrangement
CN101404649B (zh) 一种基于cache的数据处理系统及其方法
CN107003814A (zh) 存储系统中的有效元数据
CN108021717B (zh) 一种轻量级嵌入式文件系统的实现方法
CN102012931A (zh) 过滤式缓存方法及其装置、缓存系统
US9262511B2 (en) System and method for indexing streams containing unstructured text data
CN104111898A (zh) 基于多维数据相似性的混合存储系统及数据管理方法
CN106959928A (zh) 一种基于多级缓存结构的流式数据实时处理方法及系统
CN107451071A (zh) 一种缓存置换方法及系统
CN104424119A (zh) 存储空间配置方法和装置
CN108319634A (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