[發(fā)明專利]基于EsgynDB數(shù)據(jù)庫的預(yù)編譯語句緩存系統(tǒng)及方法在審
| 申請?zhí)枺?/td> | 202010410996.9 | 申請日: | 2020-05-15 |
| 公開(公告)號: | CN111625550A | 公開(公告)日: | 2020-09-04 |
| 發(fā)明(設(shè)計)人: | 徐愷華;馬晟辰;徐韡欣 | 申請(專利權(quán))人: | 貴州易鯨捷信息技術(shù)有限公司 |
| 主分類號: | G06F16/242 | 分類號: | G06F16/242;G06F16/2453;G06F16/2455;G06F12/123 |
| 代理公司: | 成都中炬新匯知識產(chǎn)權(quán)代理有限公司 51279 | 代理人: | 羅韜 |
| 地址: | 550000 貴州省貴陽市貴陽綜*** | 國省代碼: | 貴州;52 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 基于 esgyndb 數(shù)據(jù)庫 預(yù)編 語句 緩存 系統(tǒng) 方法 | ||
本發(fā)明公開了一種基于EsgynDB數(shù)據(jù)庫的預(yù)編譯語句緩存系統(tǒng)及方法,屬一種預(yù)編譯語句緩存系統(tǒng),包括Add緩存模塊,Add緩存模塊用于在預(yù)編譯語句對象入列時,記錄當前預(yù)編譯語句對象的入列時間;Add緩存模塊還用于將預(yù)編譯語句對象從LRU鏈表的中間位置插入,當語句對象被第二次命中后,將該語句對象移動到LRU鏈表的頭部;從LRU鏈表的尾部開始掃描隊列中的已有語句對象。從而不僅可及時將此類語句對象淘汰出隊列,亦可降低鏈表隊列掃描的時間;并且采用將預(yù)編譯語句對象從LRU鏈表的中間插入的方式,可避免偶發(fā)性的語句命中而直接被加入LRU鏈表頭部,且將可能頻繁使用的語句對象“擠”到了LRU鏈表的后面,從而改善LRU算法會出現(xiàn)“緩存污染”問題。
技術(shù)領(lǐng)域
本發(fā)明涉及一種預(yù)編譯語句緩存方法,更具體的說,本發(fā)明主要涉及一種基于EsgynDB數(shù)據(jù)庫的預(yù)編譯語句緩存系統(tǒng)及方法。
背景技術(shù)
現(xiàn)有市場上比較流行的數(shù)據(jù)庫比如Oracle以及MySQL均提供自己的預(yù)編譯語句緩存池功能,或者通過各種第三方的組件比如dbcp等間接提供該功能。具體實現(xiàn)的技術(shù)方案為在客戶端維護一個固定長度的隊列,將編譯后的語句信息緩存在該隊列中,若隊列已滿,最新的預(yù)編譯語句想要加入則淘汰掉原隊列中已存在的語句。這個隊列通常采用最近最少使用算法,也就是LRU(Least Recently Used)隊列。該算法的思路是,當需要替換原隊列中存在的語句時,選擇未使用時間最長的對象淘汰出去。基本的數(shù)據(jù)結(jié)構(gòu)為一個雙向鏈表來實現(xiàn):即將新數(shù)據(jù)插入到鏈表頭部,每當緩存命中(即緩存數(shù)據(jù)被訪問),則將數(shù)據(jù)移到鏈表頭部,當鏈表滿的時候,則將鏈表尾部的數(shù)據(jù)丟棄。但該方法仍有缺陷,因為鏈表的訪問只能逐個進行,無法在O(1)的時間里判斷緩存是否存在。因此會額外增加一個Hash表的數(shù)據(jù)結(jié)構(gòu)來優(yōu)化,具體需預(yù)先設(shè)置 LRU 的容量,如果存儲滿了,可以通過 O(1) 的時間淘汰掉雙向鏈表的尾部,每次新增和訪問數(shù)據(jù),都可以通過 O(1)的效率把新的節(jié)點增加到對頭,或者把已經(jīng)存在的節(jié)點移動到隊頭,而通過HashMap可以在常數(shù)時間內(nèi)判斷Key是否存在而不用遍歷鏈表。在多數(shù)情況下,SQL執(zhí)行之后,在Cache中HitCount為0但并沒有被淘汰只是其位置從可能會非常靠后,真正要淘汰這個語句可能需要經(jīng)過漫長的過程而不能夠被young gc回收。其次,簡單的LRU算法會出現(xiàn)“緩存污染”問題。主要是當存在熱點的語句時,LRU的效率很好,但偶發(fā)性的,周期性的批量操作可能會導(dǎo)致LRU命中率下降。因為偶發(fā)性的語句直接加入鏈表頭部,但實際上短期內(nèi)只會被調(diào)用一次,反而將可能頻繁使用的語句“擠”到了隊列的后面。因此有必要針對此類數(shù)據(jù)庫的緩存方法做進一步的研究和改進。
發(fā)明內(nèi)容
本發(fā)明的目的之一在于針對上述不足,提供一種基于EsgynDB數(shù)據(jù)庫的預(yù)編譯語句緩存系統(tǒng)及方法,以期望解決現(xiàn)有技術(shù)中緩存中存在時間過長且HitCount為0的語句對象不能被及時淘汰,占用過多緩存資源,且LRU算法易出現(xiàn)“緩存污染”等技術(shù)問題。
為解決上述的技術(shù)問題,本發(fā)明采用以下技術(shù)方案:
本發(fā)明一方面提供了一種基于EsgynDB數(shù)據(jù)庫的預(yù)編譯語句緩存系統(tǒng),所述的系統(tǒng)包括Add緩存模塊,所述Add緩存模塊用于在預(yù)編譯語句對象入列時,記錄當前預(yù)編譯語句對象的入列時間。所述Add緩存模塊還用于將預(yù)編譯語句對象從LRU鏈表的中間位置插入,當語句對象被第二次命中后,將該語句對象移動到LRU鏈表的頭部。從LRU鏈表的尾部開始掃描隊列中的已有語句對象,當發(fā)現(xiàn)隊列中HitCount為0的語句對象,且隊列中的存在時間超過了預(yù)定義的時間閾值,則將該語句對象淘汰出隊列。
本發(fā)明另一方面提供了一種與上述系統(tǒng)對應(yīng)的方法,該方法包括如下步驟:
預(yù)編譯語句對象入列時,記錄當前預(yù)編譯語句對象的入列時間。
從LRU鏈表的尾部開始掃描隊列中的已有語句對象,當發(fā)現(xiàn)隊列中HitCount為0的語句對象,且隊列中的存在時間超過了預(yù)定義的時間閾值,則將該語句對象淘汰出隊列。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于貴州易鯨捷信息技術(shù)有限公司,未經(jīng)貴州易鯨捷信息技術(shù)有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202010410996.9/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 數(shù)據(jù)庫
- 數(shù)據(jù)庫管理系統(tǒng)及數(shù)據(jù)庫
- 數(shù)據(jù)庫構(gòu)筑裝置、數(shù)據(jù)庫檢索裝置、數(shù)據(jù)庫裝置、數(shù)據(jù)庫構(gòu)筑方法、以及數(shù)據(jù)庫檢索方法
- 數(shù)據(jù)庫和數(shù)據(jù)庫處理方法
- 數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)庫更新方法、數(shù)據(jù)庫以及數(shù)據(jù)庫更新程序
- 容器數(shù)據(jù)庫
- 數(shù)據(jù)庫同步方法及數(shù)據(jù)庫
- 一種MongoDB數(shù)據(jù)庫對象復(fù)制延遲監(jiān)控方法和裝置
- 數(shù)據(jù)分布式存儲方法、裝置、電子設(shè)備及存儲介質(zhì)
- 數(shù)據(jù)庫語句執(zhí)行方法及裝置
- 基于MU-MIMO的預(yù)編碼指示方法及裝置、控制方法
- 一種快速實現(xiàn)預(yù)編碼的方法及裝置
- 一種分布式預(yù)編譯的結(jié)果發(fā)布方法及系統(tǒng)
- 預(yù)編碼矩陣碼本的生成方法及裝置
- 在MIMO系統(tǒng)中基于矩陣分解的預(yù)編碼方法和設(shè)備
- 預(yù)編碼矩陣碼本的生成方法及裝置
- 上行預(yù)編碼信息發(fā)送方法、預(yù)編碼方法、基站及終端
- 一種確定預(yù)編碼矩陣的方法、系統(tǒng)和設(shè)備
- 用于數(shù)據(jù)傳輸?shù)姆椒ā⒀b置和系統(tǒng)
- 一種面向智慧鋼鐵的大規(guī)模MIMO混合預(yù)編碼方法及裝置





