專利名稱:緩存交換方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)中的緩存交換技術(shù)領(lǐng)域,具體涉及一種緩存交換方法。
背景技術(shù):
文件與緩存管理是很多軟件系統(tǒng)內(nèi)核的重要組成部分。內(nèi)外存交換一直都是影響這些系統(tǒng)性能的重要瓶頸,其效率高低往往直接決定了一個(gè)軟件系統(tǒng)的性能指標(biāo)。目前公知的緩存交換策略,這里以數(shù)據(jù)庫(kù)管理系統(tǒng)為例簡(jiǎn)單說(shuō)明。數(shù)據(jù)庫(kù)的內(nèi)外存交換是以頁(yè)為單位,其緩存是一個(gè)事先分配的大內(nèi)存塊(內(nèi)部分割成頁(yè))稱為數(shù)據(jù)緩存。 如果訪問(wèn)的數(shù)據(jù)不在數(shù)據(jù)緩存中,則需從外存(即數(shù)據(jù)文件)讀入數(shù)據(jù)緩存,當(dāng)數(shù)據(jù)緩存有空閑頁(yè),則直接讀入數(shù)據(jù)緩存中,否則先把數(shù)據(jù)緩存中一個(gè)長(zhǎng)期不用的頁(yè)交換出去,換出的頁(yè)稱為淘汰頁(yè),并把有更新的淘汰頁(yè)寫(xiě)入外存(刷盤(pán)),然后把待訪問(wèn)數(shù)據(jù)讀入。此外,以數(shù)據(jù)庫(kù)為代表的一些軟件系統(tǒng)中,緩存管理還包含日志模塊,日志有重做日志(REDO LOG)和撤消日志(UNDO LOG)兩種類型,記錄用戶所有的寫(xiě)操作,以及數(shù)據(jù)變化前后的信息,提供系統(tǒng)的備份/恢復(fù)功能,在緩存交換過(guò)程中,當(dāng)需要把有更新的淘汰頁(yè)寫(xiě)入外存時(shí),則同時(shí)要把日志緩存中該淘汰頁(yè)的撤銷日志也寫(xiě)入日志文件。然而,在當(dāng)前的策略下,當(dāng)數(shù)據(jù)緩存滿時(shí),如果用戶進(jìn)行頻繁的寫(xiě)操作,緩存交換會(huì)產(chǎn)生大量零碎的寫(xiě)外存過(guò)程,這會(huì)極大的降低系統(tǒng)性能。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種緩存交換方法,其能消除大量零碎的寫(xiě)外存過(guò)程,并實(shí)現(xiàn)更新的批量刷盤(pán),以及高性能的數(shù)據(jù)訪問(wèn)。本發(fā)明提供了一種緩存交換方法,包括以下步驟(I)接收用戶請(qǐng)求;(2)判斷用戶請(qǐng)求是數(shù)據(jù)訪問(wèn)請(qǐng)求還是數(shù)據(jù)更新請(qǐng)求,若用戶請(qǐng)求是數(shù)據(jù)訪問(wèn)請(qǐng)求,則進(jìn)入步驟(3),若用戶請(qǐng)求是數(shù)據(jù)更新請(qǐng)求,則進(jìn)入步驟(6);(3)判斷數(shù)據(jù)訪問(wèn)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)是否存在于數(shù)據(jù)緩存中,若不是,則判斷數(shù)據(jù)緩存是否已滿,若是,則從數(shù)據(jù)緩存中淘汰一個(gè)數(shù)據(jù)頁(yè);(4)從數(shù)據(jù)訪問(wèn)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)文件中讀入數(shù)據(jù)頁(yè)到數(shù)據(jù)緩存中;(5)對(duì)新讀入數(shù)據(jù)緩存的數(shù)據(jù)頁(yè),利用日志緩存的哈希表索引定位頁(yè)所有的日志記錄控制頭,并根據(jù)日志記錄控制頭和日志緩存的信息將數(shù)據(jù)頁(yè)更新到最新?tīng)顟B(tài);(6)按照數(shù)據(jù)更新請(qǐng)求寫(xiě)數(shù)據(jù)緩存中的數(shù)據(jù)頁(yè);(7)判斷日志緩存是否已滿,若是則用日志緩存的哈希表索引和日志緩存中的重做日志批量更新數(shù)據(jù)文件中的數(shù)據(jù)頁(yè);(8)清空日志緩存的哈希表;(9)清空日志緩存;(10)在日志緩存中插入一條重做日志記錄;
(11)對(duì)每條新產(chǎn)生的重做日志記錄,生成一個(gè)日志記錄控制頭,將日志記錄控制頭按頁(yè)散列插入到日志緩存的哈希表中,以建立哈希索引。本發(fā)明的方法還包括步驟若數(shù)據(jù)訪問(wèn)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)存在于數(shù)據(jù)緩存中,則返回?cái)?shù)據(jù)緩存中數(shù)據(jù)訪問(wèn)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)頁(yè)。本發(fā)明的方法還包括步驟數(shù)據(jù)緩存未滿,則轉(zhuǎn)入從數(shù)據(jù)訪問(wèn)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)文件中讀入數(shù)據(jù)到數(shù)據(jù)緩存中的步驟。判斷日志緩存是否已滿是通過(guò)讀取日志系統(tǒng)結(jié)構(gòu)中的日志緩存空閑地址信息來(lái)實(shí)現(xiàn)。本發(fā)明的方法還包括步驟日志緩存未滿,則轉(zhuǎn)入在日志緩存中插入一條重做日志記錄的步驟。本發(fā)明具有以下的優(yōu)點(diǎn)和有益效果I、在緩存交換時(shí),直接載入新頁(yè)覆蓋淘汰頁(yè),同時(shí)用日志緩存中的重做日志記錄來(lái)保證載入頁(yè)的更新,不再有寫(xiě)外存(數(shù)據(jù)文件)過(guò)程,從而提高了數(shù)據(jù)頁(yè)的載入速度;2、通過(guò)日志緩存與數(shù)據(jù)緩存的配合,把目前公知的緩存交換策略中存在的大量零碎的寫(xiě)外存過(guò)程,轉(zhuǎn)成集中高效的數(shù)據(jù)文件頁(yè)的批量更新,從而提高了數(shù)據(jù)寫(xiě)外存(數(shù)據(jù)文件)的總體效率。
圖I為本發(fā)明的緩存交換方法的流程圖。圖2為本發(fā)明方法所應(yīng)用的系統(tǒng)的架構(gòu)圖。
具體實(shí)施例方式以下首先對(duì)本發(fā)明的技術(shù)用語(yǔ)進(jìn)行解釋和說(shuō)明數(shù)據(jù)文件用于用戶數(shù)據(jù)的永久存放。數(shù)據(jù)緩存用于存放從數(shù)據(jù)文件中載入的數(shù)據(jù)頁(yè),是用戶進(jìn)行數(shù)據(jù)訪問(wèn)的實(shí)際操作對(duì)象。重做日志記錄用戶某次寫(xiě)操作的完備信息,包括寫(xiě)的位置,數(shù)據(jù)的變化等。日志緩存用于存放重做日志記錄的緩存。日志系統(tǒng)結(jié)構(gòu)用于存放日志系統(tǒng)的信息,包括日志緩存首地址,日志緩存大小, 日志緩存空閑地址等信息。日志記錄控制頭存儲(chǔ)于日志緩存的哈希表中,用于存放一條日志記錄的主要信息,包括寫(xiě)操作類型、寫(xiě)操作的目標(biāo)頁(yè)、變化數(shù)據(jù)在日志緩存中存放的位置信息等,每條日志記錄都有一個(gè)唯一的控制頭。日志緩存的哈希表日志記錄的索引,對(duì)每個(gè)日志記錄控制頭,按頁(yè)散列插入哈希表,使系統(tǒng)能定位某頁(yè)的所有更新日志記錄,利用定位的記錄對(duì)載入頁(yè)進(jìn)行更新,以及批量更新數(shù)據(jù)文件頁(yè)。如圖I和圖2所示,本發(fā)明的緩存交換方法包括以下步驟(I)接收用戶請(qǐng)求;(2)判斷用戶請(qǐng)求是數(shù)據(jù)訪問(wèn)請(qǐng)求,還是數(shù)據(jù)更新請(qǐng)求,若用戶請(qǐng)求是數(shù)據(jù)訪問(wèn)請(qǐng)求,則進(jìn)入步驟(3),若用戶請(qǐng)求是數(shù)據(jù)更新請(qǐng)求,則進(jìn)入步驟(9);(3)判斷數(shù)據(jù)訪問(wèn)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)是否存在于數(shù)據(jù)緩存中,若是,則進(jìn)入步驟
(8),否則進(jìn)入步驟(4);(4)判斷數(shù)據(jù)緩存是否已滿,若是,則進(jìn)入步驟(5),否則進(jìn)入步驟(6);(5)從數(shù)據(jù)緩存中淘汰一個(gè)數(shù)據(jù)頁(yè),無(wú)論淘汰頁(yè)是否有更新,都不需寫(xiě)數(shù)據(jù)文件, 直接淘汰;(6)從數(shù)據(jù)訪問(wèn)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)文件中讀入數(shù)據(jù)頁(yè)到數(shù)據(jù)緩存中;(7)對(duì)新讀入數(shù)據(jù)緩存的數(shù)據(jù)頁(yè),利用日志緩存的哈希表索引,定位該頁(yè)所有的日志記錄控制頭,根據(jù)日志記錄控制頭和日志緩存的信息,把數(shù)據(jù)頁(yè)更新到最新?tīng)顟B(tài);(8)返回?cái)?shù)據(jù)緩存中數(shù)據(jù)訪問(wèn)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)頁(yè);(9)按照數(shù)據(jù)更新請(qǐng)求,寫(xiě)數(shù)據(jù)緩存中的數(shù)據(jù)頁(yè);(10)判斷日志緩存是否已滿,若是則進(jìn)入步驟(11),否則進(jìn)入步驟(14),具體而言,是通過(guò)讀取日志系統(tǒng)結(jié)構(gòu)中的日志緩存空閑地址信息來(lái)判斷日志緩存是否已滿;
數(shù)據(jù)頁(yè)
(I I)用日志緩存的哈希表索引和日志緩存中的重做日志批量更新數(shù)據(jù)文件中的
(12)清空日志緩存的哈希表;
(13)清空日志緩存;
(14)在日志緩存中插入一條重做日志記錄;
(15)對(duì)插入的重做日志記錄生成一個(gè)日志記錄控制頭,按日志記錄控制頭按頁(yè)散
列插入到日志緩存的哈希表中,以建立哈希索引。
權(quán)利要求
1.一種緩存交換方法,包括以下步驟(1)接收用戶請(qǐng)求;(2)判斷所述用戶請(qǐng)求是數(shù)據(jù)訪問(wèn)請(qǐng)求還是數(shù)據(jù)更新請(qǐng)求,若所述用戶請(qǐng)求是數(shù)據(jù)訪問(wèn)請(qǐng)求,則進(jìn)入步驟(3),若所述用戶請(qǐng)求是數(shù)據(jù)更新請(qǐng)求,則進(jìn)入步驟(6);(3)判斷所述數(shù)據(jù)訪問(wèn)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)是否存在于數(shù)據(jù)緩存中,若不是,則判斷所述數(shù)據(jù)緩存是否已滿,若是,則從所述數(shù)據(jù)緩存中淘汰一個(gè)數(shù)據(jù)頁(yè);(4)從所述數(shù)據(jù)訪問(wèn)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)文件中讀入數(shù)據(jù)頁(yè)到所述數(shù)據(jù)緩存中;(5)對(duì)新讀入數(shù)據(jù)緩存的數(shù)據(jù)頁(yè),利用所述日志緩存的哈希表索引定位所述頁(yè)所有的日志記錄控制頭,并根據(jù)所述日志記錄控制頭和日志緩存的信息將所述數(shù)據(jù)頁(yè)更新到最新?tīng)顟B(tài);(6)按照所述數(shù)據(jù)更新請(qǐng)求寫(xiě)所述數(shù)據(jù)緩存中的數(shù)據(jù)頁(yè);(7)判斷所述日志緩存是否已滿,若是則用所述日志緩存的哈希表索引和所述日志緩存中的重做日志批量更新所述數(shù)據(jù)文件中的數(shù)據(jù)頁(yè);(8)清空所述日志緩存的哈希表;O)清空所述日志緩存;(10)在所述日志緩存中插入一條重做日志記錄;(11)對(duì)插入的重做日志記錄生成一個(gè)日志記錄控制頭,將所述日志記錄控制頭按頁(yè)散列插入到所述日志緩存的哈希表中,以建立哈希索引。
2.根據(jù)權(quán)利要求I所述的緩存交換方法,其特征在于,還包括步驟若所述數(shù)據(jù)訪問(wèn)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)存在于數(shù)據(jù)緩存中,則返回所述數(shù)據(jù)緩存中所述數(shù)據(jù)訪問(wèn)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)頁(yè)。
3.根據(jù)權(quán)利要求I所述的緩存交換方法,其特征在于,還包括步驟所述數(shù)據(jù)緩存未滿,則轉(zhuǎn)入所述從所述數(shù)據(jù)訪問(wèn)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)文件中讀入數(shù)據(jù)到所述數(shù)據(jù)緩存中的步驟。
4.根據(jù)權(quán)利要求I所述的緩存交換方法,其特征在于,判斷所述日志緩存是否已滿是通過(guò)讀取日志系統(tǒng)結(jié)構(gòu)中的日志緩存空閑地址信息來(lái)實(shí)現(xiàn)。
5.根據(jù)權(quán)利要求I所述的緩存交換方法,其特征在于,還包括步驟所述日志緩存未滿,則轉(zhuǎn)入所述在日志緩存中插入一條重做日志記錄的步驟。
全文摘要
本發(fā)明提供了一種緩存交換方法,包括步驟接收用戶請(qǐng)求,判斷用戶請(qǐng)求是數(shù)據(jù)訪問(wèn)請(qǐng)求還是數(shù)據(jù)更新請(qǐng)求,若用戶請(qǐng)求是數(shù)據(jù)更新請(qǐng)求,則按照數(shù)據(jù)更新請(qǐng)求寫(xiě)數(shù)據(jù)緩存中的數(shù)據(jù)頁(yè),判斷日志緩存是否已滿,若是則用日志緩存的哈希表索引和日志緩存中的重做日志批量更新數(shù)據(jù)文件中的數(shù)據(jù)頁(yè),清空日志緩存的哈希表,清空日志緩存,在日志緩存中插入一條重做日志記錄,對(duì)插入的重做日志記錄生成一個(gè)日志記錄控制頭,將日志記錄控制頭按頁(yè)散列插入到日志緩存的哈希表中,以建立哈希索引。本發(fā)明通過(guò)日志緩存與數(shù)據(jù)緩存配合,消除大量零碎寫(xiě)外存過(guò)程,實(shí)現(xiàn)數(shù)據(jù)文件頁(yè)的批量更新,從而提高系統(tǒng)整體性能。
文檔編號(hào)G06F12/08GK102609364SQ201210032590
公開(kāi)日2012年7月25日 申請(qǐng)日期2012年2月14日 優(yōu)先權(quán)日2012年2月14日
發(fā)明者李晨陽(yáng) 申請(qǐng)人:華中科技大學(xué)