一種資料庫接口的結果集緩存方法
2023-07-30 10:14:41 3
專利名稱:一種資料庫接口的結果集緩存方法
技術領域:
本發明涉及一種結果集緩存方法,尤其涉及一種利用資料庫接口實現、可以有效降低資料庫伺服器壓力的結果集緩存方法,屬於資料庫應用技術領域。
背景技術:
隨著用戶群的不斷增多,對信息系統的訪問也越來越多。資料庫的查詢量必然會大大增加,而信息系統會隨著訪問量的增長而變得越來越慢,從而需要投入更多的資金進行軟硬體的升級。造成這樣的原因是,用戶的每次查詢請求,信息系統都通過在資料庫中進行相應的查找、數據計算等操作,然後將結果返回。查詢量增加,信息系統的數據處理量也隨之線性增加。為了減輕資料庫伺服器的訪問壓力,有人研發了資料庫伺服器數據緩存技術。該緩存技術的作用是臨時存儲用戶經常訪問的數據,緩存中的數據是數據存儲源中數據的拷貝,當用戶再次訪問已經進行了臨時存儲的數據時便可以直接返回該數據,而無需再從資料庫伺服器中獲取該數據,由此降低資料庫伺服器的負擔。緩存技術的實現不僅需要作為物理介質的硬體,還需要管理緩存的並發訪問和過期等策略的軟體,因此緩存技術的實現是軟硬體共同完成的。目前,為了應對繁重的客戶端查詢請求,應用開發商專門建立查詢伺服器來分離這些查詢請求。比如一些火車票或飛機票的查票系統,在內部業務上採用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日
發明者劉淼, 曾文旌, 李健, 白芸, 羅樂, 趙平仲 申請人:北京人大金倉信息技術股份有限公司