两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種文件訪問方法

文檔序號:6622999閱讀:179來源:國知局
一種文件訪問方法
【專利摘要】本發(fā)明提供了一種文件訪問方法,用于在Flash數(shù)據(jù)庫中進(jìn)行索引,該方法包括:對AVL樹索引結(jié)點(diǎn)進(jìn)行更新時,在日志緩存產(chǎn)生緩存日志;當(dāng)日志緩存被寫滿時,以結(jié)點(diǎn)日志組為單位進(jìn)行組合,將緩存的日志寫入日志存儲區(qū);建立結(jié)點(diǎn)日志查找表,記錄結(jié)點(diǎn)和日志所在Flash頁之間的映射關(guān)系;對結(jié)點(diǎn)進(jìn)行日志整合并寫入到結(jié)點(diǎn)邏輯區(qū)中。本發(fā)明減少數(shù)據(jù)庫更新時寫NAND?Flash的次數(shù),保證索引的更新效率。
【專利說明】一種文件訪問方法

【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明涉及文件訪問方法,特別涉及一種嵌入式系統(tǒng)的數(shù)據(jù)庫文件索引方法。

【背景技術(shù)】
[0002] NAND Flash存儲器已廣泛應(yīng)用于各類嵌入式系統(tǒng),具有讀寫性能高、非易失性、低 功耗、高密度和良好的抗震性等優(yōu)勢。在用于環(huán)境在線分析的嵌入式設(shè)備中,一般采用NAND 來存儲傳感器網(wǎng)絡(luò)所感測的指標(biāo)信息。同時,一些嵌入式系統(tǒng)如實(shí)時環(huán)境監(jiān)測系統(tǒng)需要感 測和存儲大量的數(shù)據(jù),數(shù)據(jù)庫作為一種高效的數(shù)據(jù)管理工具,在嵌入式系統(tǒng)中使用數(shù)據(jù)庫 將成為一種趨勢。
[0003] 目前成熟的數(shù)據(jù)庫都是應(yīng)用于磁盤存儲系統(tǒng),大部分?jǐn)?shù)據(jù)庫采用樹形索引結(jié)構(gòu), 以減少數(shù)據(jù)庫文件更新和檢索時對磁盤的訪問,然而,NAND Flash讀寫以頁為單位,寫入前 必須先進(jìn)行擦除。如果直接將傳統(tǒng)磁盤的樹索引結(jié)構(gòu)應(yīng)用于NAND Flash,對于數(shù)據(jù)庫大量 的細(xì)粒度文件更新,必須擦除索引所在的塊然后重新寫入,導(dǎo)致數(shù)據(jù)庫文件的更新效率低。
[0004] 因此,針對相關(guān)技術(shù)中所存在的上述問題,目前尚未提出有效的解決方案。


【發(fā)明內(nèi)容】

[0005] 為解決上述現(xiàn)有技術(shù)所存在的問題,本發(fā)明提出了一種文件訪問方法,包括:
[0006] 當(dāng)對AVL樹索引結(jié)點(diǎn)進(jìn)行更新時,在日志緩存產(chǎn)生一條緩存日志,將屬于同一結(jié) 點(diǎn)的日志歸為一個結(jié)點(diǎn)日志組;
[0007] 當(dāng)日志緩存被寫滿時,以結(jié)點(diǎn)日志組為單位進(jìn)行組合,將緩存的日志寫入Flash 的日志存儲區(qū);
[0008] 在對經(jīng)過更新操作分散在日志存儲區(qū)多個頁記錄內(nèi)的日志進(jìn)行遍歷之前,在內(nèi)存 中建立結(jié)點(diǎn)日志查找表,記錄結(jié)點(diǎn)和結(jié)點(diǎn)日志所在Flash頁之間的映射關(guān)系;
[0009] 對結(jié)點(diǎn)進(jìn)行日志整合,將日志存儲區(qū)中屬于同一結(jié)點(diǎn)的所有日志解析合并為一個 完整的AVL樹結(jié)點(diǎn),并寫入到結(jié)點(diǎn)邏輯區(qū)中。
[0010] 優(yōu)選地,所述日志存儲區(qū)中索引結(jié)點(diǎn)以日志的方式進(jìn)行存儲,每次以頁長度為單 位進(jìn)行寫入;索引結(jié)點(diǎn)包含日志部分和邏輯部分,索引檢索時通過結(jié)點(diǎn)日志查找表讀取結(jié) 點(diǎn)日志部分,并將日志部分和邏輯部分合并為結(jié)點(diǎn)完整的信息,將最近訪問的索引結(jié)點(diǎn)緩 存在結(jié)點(diǎn)緩存中;當(dāng)結(jié)點(diǎn)緩存滿時,根據(jù)結(jié)點(diǎn)訪問次數(shù)、結(jié)點(diǎn)最近訪問時間和從Flash中讀 取結(jié)點(diǎn)的代價(jià)來替換結(jié)點(diǎn)。
[0011] 優(yōu)選地,所述對AVL樹索引結(jié)點(diǎn)進(jìn)行更新包括結(jié)點(diǎn)內(nèi)關(guān)鍵字或指針的插入、刪除 和修改;
[0012] 對每次結(jié)點(diǎn)的更新產(chǎn)生一條日志,日志格式定義為:{type, node, time, key, dataptr},其中,type表示日志的操作類型;node標(biāo)識該日志屬于哪個結(jié)點(diǎn);time為日志時 間戳;key和dataptr分別表示結(jié)點(diǎn)的關(guān)鍵字和關(guān)鍵字指向的記錄保存位置;
[0013] 所述日志緩存定義Flash頁面整數(shù)倍長度的緩存空間,將屬于同一個結(jié)點(diǎn)的所有 更新日志歸為一個日志組,當(dāng)日志緩存滿時以結(jié)點(diǎn)日志組為單位寫入日志存儲區(qū)。
[0014] 優(yōu)選地,所述日志整合采用滑動窗口的方式進(jìn)行結(jié)點(diǎn)檢索代價(jià)的統(tǒng)計(jì),并結(jié)合收 支平衡策略選擇時機(jī)進(jìn)行日志整合,所述整合包括以下過程:
[0015] 采用滑動窗口的方式進(jìn)行統(tǒng)計(jì)結(jié)點(diǎn)日志檢索代價(jià),若滑動窗口的總長度為《,并等 分為m個子窗口,以w/m步長沿時間軸滑動,每個子窗口統(tǒng)計(jì)結(jié)點(diǎn)的日志檢索代價(jià)為r = Σ Q2 ;
[0016] 其中Q2為路徑上的所有結(jié)點(diǎn)通過結(jié)點(diǎn)日志查找表査出其在日志中的位置的檢索 代價(jià),且Q2 = Σ (qjC) (i = u,其中L為AVL樹的深度,讀取一頁代價(jià)為C, qi為目標(biāo)路徑上 單個結(jié)點(diǎn)的日志頁數(shù)為Q2,則,
[0017] 當(dāng)子窗口統(tǒng)計(jì)時間結(jié)束時,將窗口 w內(nèi)m個子窗口結(jié)點(diǎn)檢索代價(jià)r求和,得到窗口 w內(nèi)結(jié)點(diǎn)的日志檢索總代價(jià)R ;
[0018] 比較結(jié)點(diǎn)的當(dāng)前日志檢索總代價(jià)R和結(jié)點(diǎn)日志整合的開銷M,如果R>M則將該結(jié) 點(diǎn)進(jìn)行日志整合;其中日志整合開銷M = L*C,且Μ是將路徑上L個結(jié)點(diǎn)均整合到結(jié)點(diǎn)邏輯 區(qū),相當(dāng)于寫L個頁的代價(jià),
[0019] 完成結(jié)點(diǎn)整合后,丟棄最早子窗口的統(tǒng)計(jì)信息,將滑動窗口沿時間軸前進(jìn)步長w/ m,繼續(xù)下一個統(tǒng)計(jì)周期。
[0020] 優(yōu)選地,所述結(jié)點(diǎn)緩存最近頻繁訪問的結(jié)點(diǎn),并且結(jié)點(diǎn)緩存大小是固定的,當(dāng)結(jié)點(diǎn) 緩存滿時,采用以下步驟替換結(jié)點(diǎn),包括:
[0021] 將緩存所有的結(jié)點(diǎn)組織成一個鏈表,并且給每一個結(jié)點(diǎn)b賦予一個權(quán)值W,W的計(jì) 算公式為:
[0022] ff = Cb*Cnt(b)/(Tnow-Tlast)
[0023] 其中,Cb為從Flash讀取結(jié)點(diǎn)b的代價(jià);Cnt (b)為結(jié)點(diǎn)b的訪問次數(shù);TnOT為當(dāng)前 時間;Tlast為結(jié)點(diǎn)最近一次的訪問時間,
[0024] 根據(jù)每個結(jié)點(diǎn)的權(quán)值W進(jìn)行排序,當(dāng)結(jié)點(diǎn)緩存滿時,選擇權(quán)值最小的結(jié)點(diǎn)替換出 緩存區(qū)。
[0025] 本發(fā)明相比現(xiàn)有技術(shù),具有以下優(yōu)點(diǎn):
[0026] 減少數(shù)據(jù)庫更新時寫NAND Flash的次數(shù),保證索引的更新效率,和數(shù)據(jù)庫的檢索 性能。

【專利附圖】

【附圖說明】
[0027] 圖1是根據(jù)本發(fā)明實(shí)施例的文件訪問方法的流程圖。

【具體實(shí)施方式】
[0028] 下文與圖示本發(fā)明原理的附圖一起提供對本發(fā)明一個或者多個實(shí)施例的詳細(xì)描 述。結(jié)合這樣的實(shí)施例描述本發(fā)明,但是本發(fā)明不限于任何實(shí)施例。本發(fā)明的范圍僅由權(quán) 利要求書限定,并且本發(fā)明涵蓋諸多替代、修改和等同物。在下文描述中闡述諸多具體細(xì)節(jié) 以便提供對本發(fā)明的透徹理解。出于示例的目的而提供這些細(xì)節(jié),并且無這些具體細(xì)節(jié)中 的一些或者所有細(xì)節(jié)也可以根據(jù)權(quán)利要求書實(shí)現(xiàn)本發(fā)明。
[0029] 本發(fā)明提出一種高效的索引方法,該索引方法能夠減少數(shù)據(jù)庫更新時寫NAND Flash次數(shù),保證索引的更新效率,同時兼顧數(shù)據(jù)庫的檢索性能。圖1是根據(jù)本發(fā)明實(shí)施例 的文件訪問方法流程圖。本發(fā)明首先將數(shù)據(jù)庫索引分為日志緩存、日志存儲區(qū)、結(jié)點(diǎn)邏輯區(qū) 以及結(jié)點(diǎn)緩存4個區(qū)域存儲。
[0030] 日志緩存和結(jié)點(diǎn)緩存位于嵌入式系統(tǒng)內(nèi)存中;日志存儲區(qū)和結(jié)點(diǎn)邏輯區(qū)存儲于嵌 入式系統(tǒng)的Flash中。
[0031] 當(dāng)每次對AVL樹索引結(jié)點(diǎn)進(jìn)行更新時,在日志緩存產(chǎn)生一條緩存日志,并將屬于 同一結(jié)點(diǎn)的日志歸為一個結(jié)點(diǎn)日志組。當(dāng)日志緩存被寫滿時,以結(jié)點(diǎn)日志組為單位進(jìn)行組 合,采用降序最佳適應(yīng)方法將緩存的日志寫入NAND Flash的日志存儲區(qū)。
[0032]日志存儲區(qū)中索引結(jié)點(diǎn)以日志的方式進(jìn)行存儲,每次以頁長度為單位進(jìn)行寫入, 更新效率高。
[0033] 結(jié)點(diǎn)經(jīng)過多次更新操作后,其日志分散在日志存儲區(qū)的多個頁記錄內(nèi),檢索時需 要對所有日志頁進(jìn)行遍歷,導(dǎo)致檢索效率相對較低。因此,本發(fā)明在內(nèi)存中建立結(jié)點(diǎn)日志查 找表,記錄結(jié)點(diǎn)和結(jié)點(diǎn)日志所在Flash頁之間的映射關(guān)系,避免了讀取單個結(jié)點(diǎn)日志而遍 歷日志存儲區(qū),從而提高了索引檢索效率。
[0034] AVL樹的檢索特點(diǎn)是對樹進(jìn)行深度搜索,從葉結(jié)點(diǎn)獲取最后的檢索結(jié)果,共檢索出 L個結(jié)點(diǎn)(i為AVL樹深度)。經(jīng)結(jié)點(diǎn)日志查找表優(yōu)化后,日志方式的結(jié)點(diǎn)檢索代價(jià)取決于這 L個結(jié)點(diǎn)的日志頁總和,也就是這L個結(jié)點(diǎn)被更新的次數(shù)越多,檢索效率越低。因此本發(fā)明 設(shè)計(jì)結(jié)點(diǎn)邏輯區(qū)來進(jìn)行索引存儲。結(jié)點(diǎn)邏輯區(qū)中索引以完整的AVL樹結(jié)點(diǎn)的形式存儲,保 存在一個Flash頁上,本發(fā)明稱該頁為結(jié)點(diǎn)的邏輯頁。在結(jié)點(diǎn)邏輯區(qū)中,索引的檢索代價(jià)僅 為讀取i個結(jié)點(diǎn)的邏輯頁的代價(jià)(i為AVL樹深度)。由于索引采用日志方式更新,本發(fā)明 進(jìn)一步對結(jié)點(diǎn)進(jìn)行日志整合,即將日志存儲區(qū)中屬于同一結(jié)點(diǎn)的所有日志解析合并為一個 完整的AVL樹結(jié)點(diǎn),然后寫入到結(jié)點(diǎn)邏輯區(qū)中,以提高索引的檢索效率。由于日志整合是索 引檢索的額外開銷,通過日志整合方法,權(quán)衡日志整合的開銷和其帶來檢索性能上的提升, 選擇適當(dāng)時機(jī)進(jìn)行日志整合,以提高結(jié)點(diǎn)檢索效率。
[0035] 由于索引結(jié)點(diǎn)包含日志部分和邏輯部分,索引檢索時需要讀取兩部分,通過結(jié)點(diǎn) 日志查找表讀取結(jié)點(diǎn)日志部分,并將日志部分和結(jié)點(diǎn)邏輯部分合并為結(jié)點(diǎn)完整的信息。為 進(jìn)一步提高結(jié)點(diǎn)檢索效率,本發(fā)明設(shè)計(jì)了結(jié)點(diǎn)緩存來緩存最近訪問的索引結(jié)點(diǎn)。當(dāng)結(jié)點(diǎn)緩 存滿時,基于權(quán)值的緩存替換方法,通過權(quán)衡結(jié)點(diǎn)訪問次數(shù)、結(jié)點(diǎn)最近訪問時間和從Flash 中讀取結(jié)點(diǎn)的代價(jià)這3個因素來淘汰結(jié)點(diǎn),減少從Flash讀取未命中結(jié)點(diǎn)的總代價(jià),從而提 高檢索效率。
[0036] 1.索引更新
[0037] 索引結(jié)點(diǎn)的更新包括結(jié)點(diǎn)內(nèi)關(guān)鍵字或指針的插入、刪除和修改等操作,本發(fā)明對 每次結(jié)點(diǎn)的更新產(chǎn)生一條日志,定義日志格式為:{type, node, time, key, dataptr},其中, type表示日志的操作類型;node標(biāo)識該日志屬于哪個結(jié)點(diǎn);time為日志時間戳;key和 dataptr分別表示結(jié)點(diǎn)的關(guān)鍵字和關(guān)鍵字指向的記錄保存位置。對同一個結(jié)點(diǎn)的多次更 新產(chǎn)生多條日志,不同結(jié)點(diǎn)的更新會隨機(jī)交替,如果直接存儲到日志存儲區(qū)則分散在多個 Flash頁面,導(dǎo)致結(jié)點(diǎn)檢索效率下降。因此,日志緩存定義了 Flash頁面整數(shù)倍長度的緩存 空間,將屬于同一個結(jié)點(diǎn)的所有更新日志歸為一個日志組,當(dāng)日志緩存滿時以結(jié)點(diǎn)日志組 為單位寫入日志存儲區(qū),能在提高日志的寫入效率的同時,提高日志存儲區(qū)的査詢效率。
[0038] 當(dāng)日志緩存滿時,將日志從日志緩存寫入日志存儲區(qū)是一個典型的裝箱問題,為 達(dá)到利用最少的頁存儲單個結(jié)點(diǎn)日志組,本發(fā)明采用以下方法進(jìn)行緩存日志的寫入,方法 描述如下:
[0039] 步驟1按照η個結(jié)點(diǎn)日志組的大小降序排序得到序列S = {Sl··· sn},如果單個結(jié) 點(diǎn)日志組大于一頁,將大于部分的日志寫入日志存儲區(qū),剩余部分作為該結(jié)點(diǎn)日志組重新 排序。
[0040] 步驟2取出S中第1個元素 Sl,即最大的日志組,寫入虛擬的Flash頁vp,更新該 虛擬頁剩余容量sp為sp-Si ;
[0041] 步驟3取出S中下一個元素 Si,遍歷已有的虛擬頁vp,查找剩余容量sp大于Si且 sp-Si最小的虛擬頁,將該Si寫入該虛擬頁并更新SP,如果沒有滿足條件的虛擬頁,將該日 志組寫入新的虛擬頁。
[0042] 步驟4重復(fù)步驟3直到sn。
[0043] 步驟5將所有的虛擬頁vp寫入NAND Flash。
[0044] 2.結(jié)點(diǎn)日志查找表
[0045] 為了快速索引結(jié)點(diǎn)日志,避免遍歷整個日志存儲區(qū)讀取單個結(jié)點(diǎn)的日志,本發(fā)明 在內(nèi)存中建立結(jié)點(diǎn)日志查找表,維護(hù)了結(jié)點(diǎn)和日志所在Flash頁面之間的對應(yīng)關(guān)系。
[0046] 結(jié)點(diǎn)日志查找表初始化為一個固定大小的數(shù)組,每個數(shù)組元素維護(hù)一個結(jié)點(diǎn)鏈 表,通過散列映射的方式將結(jié)點(diǎn)映射到數(shù)組的相應(yīng)位置,組成一個結(jié)點(diǎn)鏈表。結(jié)點(diǎn)鏈表上每 個元素都有一個指針指向其日志頁組成的鏈表,如果日志頁中含有同一結(jié)點(diǎn)的日志,則這 些日志頁組成該結(jié)點(diǎn)的日志鏈表。
[0047] 由AVL樹方法可知,插入和刪除只在葉結(jié)點(diǎn)進(jìn)行,所以,AVL樹的檢索都是經(jīng)過一 條從根結(jié)點(diǎn)到葉結(jié)點(diǎn)的路徑,數(shù)據(jù)庫檢索時,必須逐一查找從根結(jié)點(diǎn)到目標(biāo)葉結(jié)點(diǎn)這條路 徑上的所有結(jié)點(diǎn)。設(shè)AVL樹的深度為L,日志存儲區(qū)中所有日志頁總數(shù)為N,讀取一頁代價(jià) 為C,那么不通過結(jié)點(diǎn)日志查找表檢索結(jié)點(diǎn)時需要對路徑上的所有結(jié)點(diǎn)遍歷一次日志存儲 區(qū),設(shè)其檢索代價(jià)為則Q1 = L*N*C。
[0048] 通過結(jié)點(diǎn)日志查找表,該路徑上的所有結(jié)點(diǎn)均可通過散列表査出其在日志中的位 置,設(shè)其檢索代價(jià)為Q2,則Q2 =Σ (qjC) (i = 1_u,其中,qi為目標(biāo)路徑上單個結(jié)點(diǎn)的日志頁 數(shù),顯然Q2〈Q1,所以,結(jié)點(diǎn)日志查找表優(yōu)化了日志存儲區(qū)中結(jié)點(diǎn)的檢索效率。
[0049] 3.結(jié)點(diǎn)邏輯區(qū)和日志整合
[0050] 在結(jié)點(diǎn)邏輯區(qū)進(jìn)行結(jié)點(diǎn)檢索時,同樣AVL樹經(jīng)過一條從根結(jié)點(diǎn)到葉結(jié)點(diǎn)的路徑。 而結(jié)點(diǎn)邏輯區(qū)中結(jié)點(diǎn)以完整AVL樹結(jié)構(gòu)形式存儲,父結(jié)點(diǎn)可直接索引到子結(jié)點(diǎn),設(shè)結(jié)點(diǎn)檢 索代價(jià)為Q3,則Q3 = L*C明顯小于Q2。因此,本發(fā)明提出日志整合方法來整合日志存儲區(qū) 中結(jié)點(diǎn)日志到結(jié)點(diǎn)邏輯區(qū),以提高索引檢索效率,整合后AVL樹所有結(jié)點(diǎn)的分布方式為:
[0051] (1)結(jié)點(diǎn)只存在于日志存儲區(qū);
[0052] (2)結(jié)點(diǎn)只存在于結(jié)點(diǎn)邏輯區(qū);
[0053] (3)結(jié)點(diǎn)經(jīng)過日志存儲區(qū)到結(jié)點(diǎn)邏輯區(qū)的整合后又被更新,即結(jié)點(diǎn)記錄存在于結(jié) 點(diǎn)邏輯區(qū)和日志存儲區(qū)兩者中。
[0054] 方式(1)只發(fā)生在結(jié)點(diǎn)不滿足整合條件,從未被整合進(jìn)入結(jié)點(diǎn)邏輯區(qū),這種結(jié)點(diǎn) 需要檢索日志存儲區(qū);方式(2)發(fā)生于日志剛被從日志存儲區(qū)整合進(jìn)入結(jié)點(diǎn)邏輯區(qū),這種 結(jié)點(diǎn)只需要檢索結(jié)點(diǎn)邏輯區(qū);而方式(3)是日志被整合進(jìn)入結(jié)點(diǎn)邏輯區(qū)后,還對該結(jié)點(diǎn)進(jìn) 行更新操作,需要先從結(jié)點(diǎn)邏輯區(qū)檢索到該結(jié)點(diǎn),再通過結(jié)點(diǎn)日志查找表從日志存儲區(qū)中 檢索結(jié)點(diǎn)更新,獲取最后檢索結(jié)果。顯然,日志整合的目的是將方式⑴和方式(3)均變?yōu)榉?式(2)提高檢索效率,但同時也需要付出整合開銷。
[0055] 日志整合開銷是將路徑上L個結(jié)點(diǎn)均整合到結(jié)點(diǎn)邏輯區(qū),相當(dāng)于寫L個頁的代價(jià), 設(shè)寫一頁的代價(jià)為C,日志整合的開銷為M,則M = L*C。日志整合方法通過權(quán)衡日志整合的 開銷和其帶來檢索性能上的提升,選擇適當(dāng)?shù)臅r機(jī)進(jìn)行日志整合。
[0056] 日志整合方法采用滑動窗口的方式進(jìn)行結(jié)點(diǎn)檢索代價(jià)的統(tǒng)計(jì),并結(jié)合最優(yōu)在線策 略即收支平衡策略選擇合適的時機(jī)進(jìn)行日志整合。描述如下:
[0057] 結(jié)點(diǎn)日志檢索代價(jià)采用滑動窗口的方式進(jìn)行統(tǒng)計(jì),滑動窗口的總長度為w,并等 分為m個子窗口,以w/m步長沿時間軸滑動,每個子窗口統(tǒng)計(jì)結(jié)點(diǎn)的日志檢索代價(jià)為r = Σ Q2 ;
[0058] 當(dāng)子窗口統(tǒng)計(jì)時間結(jié)束時,將窗口 w內(nèi)m個子窗口結(jié)點(diǎn)檢索代價(jià)r求和,得到窗口 w內(nèi)結(jié)點(diǎn)的日志檢索總代價(jià)R = Σ & (i = 1…m);
[0059] 由于日志整合后,結(jié)點(diǎn)檢索不需要再對結(jié)點(diǎn)日志進(jìn)行檢索,因此其收益即為結(jié)點(diǎn) 的日志檢索總代價(jià),日志整合的支出即日志整合開銷,采用收支平衡策略,比較結(jié)點(diǎn)的當(dāng)前 日志檢索總代價(jià)R和結(jié)點(diǎn)日志整合的開銷M,如果R>M則將該結(jié)點(diǎn)進(jìn)行日志整合。
[0060] 完成結(jié)點(diǎn)該次整合后,丟棄最早子窗口的統(tǒng)計(jì)信息,將滑動窗口沿時間軸前進(jìn)w/ m,繼續(xù)下一個統(tǒng)計(jì)周期。
[0061] 4.結(jié)點(diǎn)緩存
[0062] 由于數(shù)據(jù)庫的訪問具有空間聚集性,一段時間內(nèi)數(shù)據(jù)庫對某些索引結(jié)點(diǎn)會進(jìn)行頻 繁訪問或更新,本發(fā)明在內(nèi)存中開辟結(jié)點(diǎn)緩存,暫存這些最近經(jīng)常被訪問的結(jié)點(diǎn),從而提高 了結(jié)點(diǎn)檢索效率。
[0063] 由于結(jié)點(diǎn)緩存大小固定,當(dāng)緩存滿時,需要采用緩存替換方法淘汰其中的某些結(jié) 點(diǎn)。設(shè)在一段時間內(nèi)依次對結(jié)點(diǎn)序列bplv··bn進(jìn)行訪問,其中未能在緩存命中的結(jié)點(diǎn)序列 為b/,b2'…匕'。所以,對該結(jié)點(diǎn)序列的訪問代價(jià)為從NANDFlash讀取所有未能命中結(jié)點(diǎn) 代價(jià)的總和,即:
[0064] Ctotal - Cbl'+Cb2'+... Cbm,
[0065] 其中,〇v表示從NANDFlash讀取結(jié)點(diǎn)b/的代價(jià)。
[0066] 從以上公式可以看出,為了盡量減少結(jié)點(diǎn)序列的訪問代價(jià)Ct(rtal,緩存替換方法應(yīng) 盡量提高結(jié)點(diǎn)的命中率,減少未命中結(jié)點(diǎn)個數(shù),同時選學(xué)從Flash讀取代價(jià)小即〇v小的結(jié) 點(diǎn)替換出緩存。針對緩存結(jié)點(diǎn)替換問題,本發(fā)明提出基于權(quán)值的替換方法。描述如下: [0067] 將緩存所有的結(jié)點(diǎn)組織成一個鏈表,并且給每一個結(jié)點(diǎn)b賦予一個權(quán)值W,W的計(jì) 算公式如下:W = Cb*Cnt(bV(TnOT-Tlast)
[0068] 其中,Cb為從Flash讀取結(jié)點(diǎn)的代價(jià);Cnt (b)為結(jié)點(diǎn)b的訪問次數(shù);TnOT為當(dāng)前時 間;Tlast為結(jié)點(diǎn)最近一次的訪問時間,所以,權(quán)值函數(shù)綜合考慮了結(jié)點(diǎn)的讀取代價(jià)、結(jié)點(diǎn)的 訪問次數(shù)和最近的訪問時間;
[0069] 根據(jù)每個結(jié)點(diǎn)的權(quán)值W進(jìn)行排序,當(dāng)結(jié)點(diǎn)緩存滿時,選擇權(quán)值最小的結(jié)點(diǎn)替換出 緩存區(qū)。
[0070] 因此,該方法替換訪問次數(shù)少和最近沒有訪問的結(jié)點(diǎn),保證了緩存的命中率,同時 淘汰讀取代價(jià)小的結(jié)點(diǎn),減少了整個結(jié)點(diǎn)序列的訪問代價(jià),從而使結(jié)點(diǎn)緩存最大程度提高 結(jié)點(diǎn)的檢索效率。
[0071] 綜上所述,本發(fā)明根據(jù)Flash的讀寫特點(diǎn),提出一種應(yīng)用于NAND Flash數(shù)據(jù)庫的 索引方法。該方法釆用日志記錄索引更新,刪除冗余日志,提高了索引的更新效率。實(shí)驗(yàn)結(jié) 果表明,在檢索和更新效率上有明顯提高。
[0072] 顯然,本領(lǐng)域的技術(shù)人員應(yīng)該理解,上述的本發(fā)明的各模塊或各步驟可以用通用 的計(jì)算系統(tǒng)來實(shí)現(xiàn),它們可以集中在單個的計(jì)算系統(tǒng)上,或者分布在多個計(jì)算系統(tǒng)所組成 的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算系統(tǒng)可執(zhí)行的程序代碼來實(shí)現(xiàn),從而,可以將它們存儲 在存儲系統(tǒng)中由計(jì)算系統(tǒng)來執(zhí)行。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
[0073] 應(yīng)當(dāng)理解的是,本發(fā)明的上述【具體實(shí)施方式】僅僅用于示例性說明或解釋本發(fā)明的 原理,而不構(gòu)成對本發(fā)明的限制。因此,在不偏離本發(fā)明的精神和范圍的情況下所做的任何 修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。此外,本發(fā)明所附權(quán)利要求旨 在涵蓋落入所附權(quán)利要求范圍和邊界、或者這種范圍和邊界的等同形式內(nèi)的全部變化和修 改例。
【權(quán)利要求】
1. 一種文件訪問方法,用于對嵌入式系統(tǒng)NAND Flash數(shù)據(jù)庫文件進(jìn)行索引,其特征在 于,包括: 當(dāng)對AVL樹索引結(jié)點(diǎn)進(jìn)行更新時,在日志緩存產(chǎn)生一條緩存日志,將屬于同一結(jié)點(diǎn)的 日志歸為一個結(jié)點(diǎn)日志組; 當(dāng)日志緩存被寫滿時,以結(jié)點(diǎn)日志組為單位進(jìn)行組合,將緩存的日志寫入Flash的日 志存儲區(qū); 在對經(jīng)過更新操作分散在日志存儲區(qū)多個頁記錄內(nèi)的日志進(jìn)行遍歷之前,在內(nèi)存中建 立結(jié)點(diǎn)日志查找表,記錄結(jié)點(diǎn)和結(jié)點(diǎn)日志所在Flash頁之間的映射關(guān)系; 對結(jié)點(diǎn)進(jìn)行日志整合,將日志存儲區(qū)中屬于同一結(jié)點(diǎn)的所有日志解析合并為一個完整 的AVL樹結(jié)點(diǎn),并寫入到結(jié)點(diǎn)邏輯區(qū)中。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述日志存儲區(qū)中索引結(jié)點(diǎn)以日志的方 式進(jìn)行存儲,每次以頁長度為單位進(jìn)行寫入;索引結(jié)點(diǎn)包含日志部分和邏輯部分,索引檢索 時通過結(jié)點(diǎn)日志查找表讀取結(jié)點(diǎn)日志部分,并將日志部分和邏輯部分合并為結(jié)點(diǎn)完整的信 息,將最近訪問的索引結(jié)點(diǎn)緩存在結(jié)點(diǎn)緩存中;當(dāng)結(jié)點(diǎn)緩存滿時,根據(jù)結(jié)點(diǎn)訪問次數(shù)、結(jié)點(diǎn) 最近訪問時間和從FI ash中讀取結(jié)點(diǎn)的代價(jià)來替換結(jié)點(diǎn)。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述對AVL樹索引結(jié)點(diǎn)進(jìn)行更新包括結(jié)點(diǎn) 內(nèi)關(guān)鍵字或指針的插入、刪除和修改; 對每次結(jié)點(diǎn)的更新產(chǎn)生一條日志,日志格式定義為:{type, node, time, key, dataptr}, 其中,type表示日志的操作類型;node標(biāo)識該日志屬于哪個結(jié)點(diǎn);time為日志時間戳;key 和dataptr分別表示結(jié)點(diǎn)的關(guān)鍵字和關(guān)鍵字指向的記錄保存位置; 所述日志緩存定義Flash頁面整數(shù)倍長度的緩存空間,將屬于同一個結(jié)點(diǎn)的所有更新 日志歸為一個日志組,當(dāng)日志緩存滿時以結(jié)點(diǎn)日志組為單位寫入日志存儲區(qū)。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述日志整合采用滑動窗口的方式進(jìn)行 結(jié)點(diǎn)檢索代價(jià)的統(tǒng)計(jì),并結(jié)合收支平衡策略選擇時機(jī)進(jìn)行日志整合,所述整合包括以下過 程: 采用滑動窗口的方式進(jìn)行統(tǒng)計(jì)結(jié)點(diǎn)日志檢索代價(jià),若滑動窗口的總長度為《,并等分為 m個子窗口,以w/m步長沿時間軸滑動,每個子窗口統(tǒng)計(jì)結(jié)點(diǎn)的日志檢索代價(jià)為r = Σ Q2 ; 其中Q2為路徑上的所有結(jié)點(diǎn)通過結(jié)點(diǎn)日志查找表査出其在日志中的位置的檢索代 價(jià),且Q2 = Σ (qi*C) (i = ,其中L為AVL樹的深度,讀取一頁代價(jià)為C,qi為目標(biāo)路徑上單 個結(jié)點(diǎn)的日志頁數(shù)為Q2,則, 當(dāng)子窗口統(tǒng)計(jì)時間結(jié)束時,將窗口 w內(nèi)m個子窗口結(jié)點(diǎn)檢索代價(jià)r求和,得到窗口 w內(nèi) 結(jié)點(diǎn)的日志檢索總代價(jià)R ; 比較結(jié)點(diǎn)的當(dāng)前日志檢索總代價(jià)R和結(jié)點(diǎn)日志整合的開銷M,如果R>M則將該結(jié)點(diǎn)進(jìn)行 日志整合;其中日志整合開銷M = L*C,且Μ是將路徑上L個結(jié)點(diǎn)均整合到結(jié)點(diǎn)邏輯區(qū),相 當(dāng)于寫L個頁的代價(jià), 完成結(jié)點(diǎn)整合后,丟棄最早子窗口的統(tǒng)計(jì)信息,將滑動窗口沿時間軸前進(jìn)步長w/m,繼 續(xù)下一個統(tǒng)計(jì)周期。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述結(jié)點(diǎn)緩存最近頻繁訪問的結(jié)點(diǎn),并且 結(jié)點(diǎn)緩存大小是固定的,當(dāng)結(jié)點(diǎn)緩存滿時,采用以下步驟替換結(jié)點(diǎn),包括: 將緩存所有的結(jié)點(diǎn)組織成一個鏈表,并且給每一個結(jié)點(diǎn)b賦予一個權(quán)值W,W的計(jì)算公 式為: ff = cb*cnt(b)/(Tnow-Tlast) 其中,Cb為從Flash讀取結(jié)點(diǎn)b的代價(jià);Cnt(b)為結(jié)點(diǎn)b的訪問次數(shù);TnOT為當(dāng)前時間; Tlast為結(jié)點(diǎn)最近一次的訪問時間, 根據(jù)每個結(jié)點(diǎn)的權(quán)值W進(jìn)行排序,當(dāng)結(jié)點(diǎn)緩存滿時,選擇權(quán)值最小的結(jié)點(diǎn)替換出緩存 區(qū)。
【文檔編號】G06F17/30GK104156432SQ201410389987
【公開日】2014年11月19日 申請日期:2014年8月8日 優(yōu)先權(quán)日:2014年8月8日
【發(fā)明者】毛力 申請人:四川九成信息技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
焦作市| 阿拉尔市| 湘阴县| 大余县| 中超| 隆回县| 额敏县| 永新县| 潞西市| 赤壁市| 樟树市| 定结县| 双桥区| 兴隆县| 沙湾县| 麻城市| 荥阳市| 全州县| 古浪县| 长春市| 明星| 边坝县| 富宁县| 平乐县| 大英县| 泽州县| 韩城市| 化州市| 连城县| 宿州市| 原平市| 聂拉木县| 富顺县| 渑池县| 石柱| 稻城县| 山东| 祁阳县| 蒲江县| 甘德县| 西乌珠穆沁旗|