[发明专利]基于EsgynDB数据库的预编译语句缓存系统及方法在审
申请号: | 202010410996.9 | 申请日: | 2020-05-15 |
公开(公告)号: | CN111625550A | 公开(公告)日: | 2020-09-04 |
发明(设计)人: | 徐恺华;马晟辰;徐韡欣 | 申请(专利权)人: | 贵州易鲸捷信息技术有限公司 |
主分类号: | G06F16/242 | 分类号: | G06F16/242;G06F16/2453;G06F16/2455;G06F12/123 |
代理公司: | 成都中炬新汇知识产权代理有限公司 51279 | 代理人: | 罗韬 |
地址: | 550000 贵州省贵阳市贵阳综*** | 国省代码: | 贵州;52 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 esgyndb 数据库 预编 语句 缓存 系统 方法 | ||
本发明公开了一种基于EsgynDB数据库的预编译语句缓存系统及方法,属一种预编译语句缓存系统,包括Add缓存模块,Add缓存模块用于在预编译语句对象入列时,记录当前预编译语句对象的入列时间;Add缓存模块还用于将预编译语句对象从LRU链表的中间位置插入,当语句对象被第二次命中后,将该语句对象移动到LRU链表的头部;从LRU链表的尾部开始扫描队列中的已有语句对象。从而不仅可及时将此类语句对象淘汰出队列,亦可降低链表队列扫描的时间;并且采用将预编译语句对象从LRU链表的中间插入的方式,可避免偶发性的语句命中而直接被加入LRU链表头部,且将可能频繁使用的语句对象“挤”到了LRU链表的后面,从而改善LRU算法会出现“缓存污染”问题。
技术领域
本发明涉及一种预编译语句缓存方法,更具体的说,本发明主要涉及一种基于EsgynDB数据库的预编译语句缓存系统及方法。
背景技术
现有市场上比较流行的数据库比如Oracle以及MySQL均提供自己的预编译语句缓存池功能,或者通过各种第三方的组件比如dbcp等间接提供该功能。具体实现的技术方案为在客户端维护一个固定长度的队列,将编译后的语句信息缓存在该队列中,若队列已满,最新的预编译语句想要加入则淘汰掉原队列中已存在的语句。这个队列通常采用最近最少使用算法,也就是LRU(Least Recently Used)队列。该算法的思路是,当需要替换原队列中存在的语句时,选择未使用时间最长的对象淘汰出去。基本的数据结构为一个双向链表来实现:即将新数据插入到链表头部,每当缓存命中(即缓存数据被访问),则将数据移到链表头部,当链表满的时候,则将链表尾部的数据丢弃。但该方法仍有缺陷,因为链表的访问只能逐个进行,无法在O(1)的时间里判断缓存是否存在。因此会额外增加一个Hash表的数据结构来优化,具体需预先设置 LRU 的容量,如果存储满了,可以通过 O(1) 的时间淘汰掉双向链表的尾部,每次新增和访问数据,都可以通过 O(1)的效率把新的节点增加到对头,或者把已经存在的节点移动到队头,而通过HashMap可以在常数时间内判断Key是否存在而不用遍历链表。在多数情况下,SQL执行之后,在Cache中HitCount为0但并没有被淘汰只是其位置从可能会非常靠后,真正要淘汰这个语句可能需要经过漫长的过程而不能够被young gc回收。其次,简单的LRU算法会出现“缓存污染”问题。主要是当存在热点的语句时,LRU的效率很好,但偶发性的,周期性的批量操作可能会导致LRU命中率下降。因为偶发性的语句直接加入链表头部,但实际上短期内只会被调用一次,反而将可能频繁使用的语句“挤”到了队列的后面。因此有必要针对此类数据库的缓存方法做进一步的研究和改进。
发明内容
本发明的目的之一在于针对上述不足,提供一种基于EsgynDB数据库的预编译语句缓存系统及方法,以期望解决现有技术中缓存中存在时间过长且HitCount为0的语句对象不能被及时淘汰,占用过多缓存资源,且LRU算法易出现“缓存污染”等技术问题。
为解决上述的技术问题,本发明采用以下技术方案:
本发明一方面提供了一种基于EsgynDB数据库的预编译语句缓存系统,所述的系统包括Add缓存模块,所述Add缓存模块用于在预编译语句对象入列时,记录当前预编译语句对象的入列时间。所述Add缓存模块还用于将预编译语句对象从LRU链表的中间位置插入,当语句对象被第二次命中后,将该语句对象移动到LRU链表的头部。从LRU链表的尾部开始扫描队列中的已有语句对象,当发现队列中HitCount为0的语句对象,且队列中的存在时间超过了预定义的时间阈值,则将该语句对象淘汰出队列。
本发明另一方面提供了一种与上述系统对应的方法,该方法包括如下步骤:
预编译语句对象入列时,记录当前预编译语句对象的入列时间。
从LRU链表的尾部开始扫描队列中的已有语句对象,当发现队列中HitCount为0的语句对象,且队列中的存在时间超过了预定义的时间阈值,则将该语句对象淘汰出队列。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于贵州易鲸捷信息技术有限公司,未经贵州易鲸捷信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010410996.9/2.html,转载请声明来源钻瓜专利网。