本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種基于Flash的數(shù)據(jù)緩存方法及裝置。
背景技術(shù):
目前,在采用Flash(Flash Memory,閃存)存儲(chǔ)連續(xù)的大數(shù)據(jù)時(shí),首先將大數(shù)據(jù)暫存/緩存在Flash的緩沖塊(Cache塊)上,然后在Cache塊寫滿數(shù)據(jù)時(shí),通過(guò)Switch交換操作將Cache塊的數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)塊(Data塊),以實(shí)現(xiàn)大數(shù)據(jù)的快速寫入。
由于在連續(xù)的大數(shù)據(jù)的寫入過(guò)程中,往往需要更新與大數(shù)據(jù)相關(guān)的系統(tǒng)數(shù)據(jù)(即小數(shù)據(jù)),進(jìn)而導(dǎo)致大數(shù)據(jù)寫入過(guò)程中回寫的產(chǎn)生。例如,邏輯地址為L(zhǎng)gBlk5的Cache塊有256個(gè)頁(yè),在采用該Cache塊緩存大數(shù)據(jù)過(guò)程中,如果在該Cache塊未寫滿256頁(yè)比如在緩存至第200頁(yè)的位置時(shí),需要更新與大數(shù)據(jù)相關(guān)的小數(shù)據(jù),此時(shí)回寫第0頁(yè)的位置、即小數(shù)據(jù)的緩存位置。由于Cache塊的第0頁(yè)已經(jīng)被更新,原Cache塊上的數(shù)據(jù)已非最新數(shù)據(jù),Cache塊的數(shù)據(jù)不能直接Switch至Data塊,導(dǎo)致后續(xù)寫入該Cache塊的大數(shù)據(jù),需要存入Random塊中,等到要將Cache塊上的數(shù)據(jù)Merge至Data塊時(shí),需將Cache塊上未產(chǎn)生回寫的緩存頁(yè)的大數(shù)據(jù),搬移至數(shù)據(jù)塊(Data塊),會(huì)帶來(lái)大量時(shí)間開(kāi)銷。
但是,由于搬移操作的耗時(shí)較長(zhǎng),并且在小數(shù)據(jù)的緩存位置位于緩存塊的中間時(shí)可能需要數(shù)次搬移操作,造成大數(shù)據(jù)緩存的速度低,進(jìn)而導(dǎo)致閃存數(shù)據(jù)存儲(chǔ)的效率低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種基于閃存的數(shù)據(jù)緩存方法及裝置,旨在解決現(xiàn)有閃存寫入連續(xù)的大數(shù)據(jù)時(shí)由于小數(shù)據(jù)的回寫而造成數(shù)據(jù)存儲(chǔ)效率低的技術(shù)問(wèn)題。
為實(shí)現(xiàn)上述目的,本發(fā)明提供的一種基于閃存的數(shù)據(jù)緩存方法,所述基于閃存的數(shù)據(jù)緩存方法包括以下步驟:
在連續(xù)的大數(shù)據(jù)緩存至所述閃存的一級(jí)緩存塊的過(guò)程中,實(shí)時(shí)檢測(cè)當(dāng)前是否存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù);
在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),將所述小數(shù)據(jù)緩存至所述閃存的二級(jí)緩存塊;
在所述小數(shù)據(jù)緩存完成時(shí),繼續(xù)緩存所述大數(shù)據(jù)至所述一級(jí)緩存塊。
優(yōu)選地,所述在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),將所述小數(shù)據(jù)緩存至所述閃存的二級(jí)緩存塊的步驟包括:
在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),確定所述二級(jí)緩存塊中是否存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù);
在所述二級(jí)緩存塊中存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),基于當(dāng)前的所述小數(shù)據(jù)更新所述二級(jí)緩存塊中與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)。
優(yōu)選地,所述繼續(xù)緩存所述大數(shù)據(jù)至所述一級(jí)緩存塊的步驟之后,所述基于閃存的數(shù)據(jù)緩存方法還包括:
在所述二級(jí)緩存塊的數(shù)據(jù)量超過(guò)第一預(yù)設(shè)容量時(shí),確定所述數(shù)據(jù)塊是否處于空閑狀態(tài);
在所述數(shù)據(jù)塊處于空閑狀態(tài)時(shí),將所述二級(jí)緩存塊中的數(shù)據(jù)存儲(chǔ)至所述閃存的數(shù)據(jù)塊。
優(yōu)選地,所述繼續(xù)緩存所述大數(shù)據(jù)至所述一級(jí)緩存塊的步驟之后,所述基于閃存的數(shù)據(jù)緩存方法還包括:
在所述一級(jí)緩存塊的數(shù)據(jù)量超過(guò)第二預(yù)設(shè)容量時(shí),將所述一級(jí)緩存塊的數(shù)據(jù)存儲(chǔ)至所述閃存的數(shù)據(jù)塊。
優(yōu)選地,所述小數(shù)據(jù)至少包括以下之一:所述大數(shù)據(jù)的格式信息、所述大數(shù)據(jù)占用扇區(qū)的數(shù)量、所述大數(shù)據(jù)的數(shù)據(jù)量和所述大數(shù)據(jù)的緩存時(shí)間。
此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種基于閃存的數(shù)據(jù)緩存裝置,所述基于閃存的數(shù)據(jù)緩存裝置包括:
檢測(cè)模塊,用于在連續(xù)的大數(shù)據(jù)緩存至所述閃存的一級(jí)緩存塊的過(guò)程中,實(shí)時(shí)檢測(cè)當(dāng)前是否存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù);
第一緩存模塊,用于在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),將所述小數(shù)據(jù)緩存至所述閃存的二級(jí)緩存塊;
第二緩存模塊,用于在所述小數(shù)據(jù)緩存完成時(shí),繼續(xù)緩存所述大數(shù)據(jù)至所述一級(jí)緩存塊。
優(yōu)選地,所述第一緩存模塊包括:
確定單元,用于在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),確定所述二級(jí)緩存塊中是否存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù);
更新單元,用于在所述二級(jí)緩存塊中存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),基于當(dāng)前的所述小數(shù)據(jù)更新所述二級(jí)緩存塊中與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)。
優(yōu)選地,所述數(shù)據(jù)緩存裝置還包括:
確定模塊,用于在所述二級(jí)緩存塊的數(shù)據(jù)量超過(guò)第一預(yù)設(shè)容量時(shí),確定所述數(shù)據(jù)塊是否處于空閑狀態(tài);
第一存儲(chǔ)模塊,用于在所述數(shù)據(jù)塊處于空閑狀態(tài)時(shí),將所述二級(jí)緩存塊中的數(shù)據(jù)存儲(chǔ)至所述閃存的數(shù)據(jù)塊。
優(yōu)選地,所述數(shù)據(jù)緩存裝置還包括:
第二存儲(chǔ)模塊,用于在所述一級(jí)緩存塊的數(shù)據(jù)量超過(guò)第二預(yù)設(shè)容量時(shí),將所述一級(jí)緩存塊的數(shù)據(jù)存儲(chǔ)至所述閃存的數(shù)據(jù)塊。
優(yōu)選地,所述小數(shù)據(jù)至少包括以下之一:所述大數(shù)據(jù)的格式信息、所述大數(shù)據(jù)占用扇區(qū)的數(shù)量、所述大數(shù)據(jù)的數(shù)據(jù)量和所述大數(shù)據(jù)的緩存時(shí)間。
本發(fā)明通過(guò)在連續(xù)的大數(shù)據(jù)緩存至所述閃存的一級(jí)緩存塊的過(guò)程中,實(shí)時(shí)檢測(cè)當(dāng)前是否存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù),接著在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),將所述小數(shù)據(jù)緩存至所述閃存的二級(jí)緩存塊,而后在所述小數(shù)據(jù)緩存完成時(shí),繼續(xù)緩存所述大數(shù)據(jù)至所述一級(jí)緩存塊,實(shí)現(xiàn)了將小數(shù)據(jù)緩存至閃存的二級(jí)緩存塊后繼續(xù)緩存大數(shù)據(jù),降低了小數(shù)據(jù)回寫時(shí)對(duì)大數(shù)據(jù)寫入效率的影響,大大提高了采用閃存存儲(chǔ)連續(xù)大數(shù)據(jù)的速度以及效率。
附圖說(shuō)明
圖1為本發(fā)明基于閃存的數(shù)據(jù)緩存方法第一實(shí)施例的流程示意圖;
圖2為本發(fā)明基于閃存的數(shù)據(jù)緩存方法第二實(shí)施例中將所述小數(shù)據(jù)緩存至所述閃存的二級(jí)緩存塊步驟的細(xì)化流程示意圖;
圖3為本發(fā)明基于閃存的數(shù)據(jù)緩存方法第三實(shí)施例的流程示意圖;
圖4為本發(fā)明基于閃存的數(shù)據(jù)緩存裝置第一實(shí)施例的功能模塊示意圖;
圖5為本發(fā)明基于閃存的數(shù)據(jù)緩存裝置第二實(shí)施例中第一緩存模塊的細(xì)化功能模塊示意圖;
圖6為本發(fā)明基于閃存的數(shù)據(jù)緩存裝置第三實(shí)施例的功能模塊示意圖。
本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說(shuō)明。
具體實(shí)施方式
應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提供一種基于閃存的數(shù)據(jù)緩存方法。參照?qǐng)D1,圖1為本發(fā)明基于閃存的數(shù)據(jù)緩存方法第一實(shí)施例的流程示意圖。
在本實(shí)施例中,該基于閃存的數(shù)據(jù)緩存方法包括:
步驟S10,在將連續(xù)的大數(shù)據(jù)緩存至所述閃存的一級(jí)緩存塊的過(guò)程中,實(shí)時(shí)檢測(cè)當(dāng)前是否存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù);
其中,小數(shù)據(jù)包括:所述大數(shù)據(jù)的格式信息、所述大數(shù)據(jù)占用扇區(qū)的數(shù)量、所述大數(shù)據(jù)的數(shù)據(jù)量、所述大數(shù)據(jù)的緩存時(shí)間等系統(tǒng)數(shù)據(jù)。本實(shí)施例中,在將連續(xù)的大數(shù)據(jù)緩存至Flash的Cache塊的過(guò)程中,實(shí)時(shí)檢測(cè)是否生成了與該大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù),即實(shí)時(shí)檢測(cè)是否生成了該大數(shù)據(jù)的數(shù)據(jù)量、格式信息、占用扇區(qū)的數(shù)量及緩存時(shí)間等系統(tǒng)數(shù)據(jù),進(jìn)而確定當(dāng)前是否存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)。
步驟S20,在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),將所述小數(shù)據(jù)緩存至所述閃存的二級(jí)緩存塊;
在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),即實(shí)時(shí)檢測(cè)系統(tǒng)生成了該大數(shù)據(jù)的數(shù)據(jù)量、格式信息、占用扇區(qū)的數(shù)量及緩存時(shí)間等系統(tǒng)數(shù)據(jù)時(shí),將所述小數(shù)據(jù)緩存至所述閃存的二級(jí)緩存塊,其中,該二級(jí)緩存塊為專門用于存儲(chǔ)大數(shù)據(jù)相關(guān)的系統(tǒng)數(shù)據(jù)(小數(shù)據(jù))的一級(jí)緩存塊。
步驟S30,在所述小數(shù)據(jù)緩存完成時(shí),繼續(xù)緩存所述大數(shù)據(jù)至所述一級(jí)緩存塊。
在所述小數(shù)據(jù)完成緩存至閃存的二級(jí)緩存塊時(shí),繼續(xù)緩存所述大數(shù)據(jù)至所述一級(jí)緩存塊。例如,連續(xù)的大數(shù)據(jù)的Cache塊的邏輯地址LgBlk5、二級(jí)緩存塊的邏輯地址為L(zhǎng)gBlk100,LgBlk100這個(gè)區(qū)域緩存的都是小數(shù)據(jù)或者文件系統(tǒng)的數(shù)據(jù),在系統(tǒng)生成了該大數(shù)據(jù)對(duì)應(yīng)的小數(shù)據(jù)時(shí),將小數(shù)據(jù)緩存至該二級(jí)緩存塊,然后在小數(shù)據(jù)完成緩存至LgBlk100對(duì)應(yīng)的二級(jí)緩存塊時(shí),繼續(xù)緩存連續(xù)的大數(shù)據(jù)至邏輯地址為L(zhǎng)gBlk5的Cache塊。
進(jìn)一步地,在一實(shí)施例中,在步驟S30之后,該基于閃存的數(shù)據(jù)緩存方法還包括:在所述一級(jí)緩存塊的數(shù)據(jù)量超過(guò)第二預(yù)設(shè)容量時(shí),將所述一級(jí)緩存塊的數(shù)據(jù)存儲(chǔ)至所述閃存的數(shù)據(jù)塊。
本實(shí)施例中,在一級(jí)緩存塊的數(shù)據(jù)量超過(guò)第二預(yù)設(shè)容量時(shí),Cache塊無(wú)法再寫入更多的數(shù)據(jù)即Cache塊已寫滿數(shù)據(jù),直接將Cache塊與Data塊做Switch Merge,即將所述一級(jí)緩存塊的數(shù)據(jù)交換至所述閃存的數(shù)據(jù)塊,由于Switch Merge即數(shù)據(jù)交換的效率遠(yuǎn)高于Full-Merge(全合并)或搬移,因此能夠大大提高閃存數(shù)據(jù)存儲(chǔ)的速度以及效率。
本實(shí)施例中,通過(guò)在連續(xù)的大數(shù)據(jù)緩存至所述閃存的一級(jí)緩存塊的過(guò)程中,實(shí)時(shí)檢測(cè)當(dāng)前是否存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù),接著在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),將所述小數(shù)據(jù)緩存至所述閃存的二級(jí)緩存塊,而后在所述小數(shù)據(jù)緩存完成時(shí),繼續(xù)緩存所述大數(shù)據(jù)至所述一級(jí)緩存塊,實(shí)現(xiàn)了將小數(shù)據(jù)緩存至閃存的二級(jí)緩存塊后繼續(xù)緩存大數(shù)據(jù),降低了小數(shù)據(jù)回寫時(shí)對(duì)大數(shù)據(jù)寫入效率的影響,大大提高了采用閃存存儲(chǔ)連續(xù)大數(shù)據(jù)的速度以及效率。
基于第一實(shí)施例提出本發(fā)明基于閃存的數(shù)據(jù)緩存方法的第二實(shí)施例,參照?qǐng)D2,在本實(shí)施例中,步驟S20包括:
步驟S21,在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),確定所述二級(jí)緩存塊中是否存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù);
由于在大數(shù)據(jù)開(kāi)始寫入Cache塊時(shí),都會(huì)產(chǎn)生大數(shù)據(jù)相關(guān)的系統(tǒng)數(shù)據(jù)即小數(shù)據(jù),若二級(jí)緩存塊中已存儲(chǔ)有與所述小數(shù)據(jù)相關(guān)的小數(shù)據(jù),則直接更新二級(jí)緩存塊中已存儲(chǔ)有與所述小數(shù)據(jù)相關(guān)的小數(shù)據(jù)即可實(shí)現(xiàn)小數(shù)據(jù)的緩存,并能夠避免小數(shù)據(jù)的重復(fù)緩存以節(jié)約二級(jí)緩存塊的存儲(chǔ)空間。因此,在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),首先確定所述二級(jí)緩存塊中是否存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)。
步驟S22,在所述二級(jí)緩存塊中存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),基于當(dāng)前的所述小數(shù)據(jù)更新所述二級(jí)緩存塊中與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)。
本實(shí)施例中,在所述二級(jí)緩存塊中存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的數(shù)據(jù)時(shí),直接基于當(dāng)前的與大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)更新所述二級(jí)緩存塊中與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù),例如,在小數(shù)據(jù)包括大數(shù)據(jù)的緩存時(shí)間時(shí),直接更新二級(jí)緩存塊中存儲(chǔ)的該大數(shù)據(jù)的緩存時(shí)間,進(jìn)而能夠節(jié)約二級(jí)緩存塊的存儲(chǔ)空間。
本實(shí)施例中,在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),確定所述二級(jí)緩存塊中是否存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù),而后在所述二級(jí)緩存塊中存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),基于當(dāng)前的所述小數(shù)據(jù)更新所述二級(jí)緩存塊中與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù),實(shí)現(xiàn)了更新二級(jí)緩存塊中與大數(shù)據(jù)關(guān)聯(lián)的數(shù)據(jù),進(jìn)而節(jié)約了二級(jí)緩存塊的存儲(chǔ)空間,進(jìn)一步提高了采用閃存存儲(chǔ)連續(xù)大數(shù)據(jù)的速度以及效率。
基于第一實(shí)施例提出本發(fā)明基于閃存的數(shù)據(jù)緩存方法的第三實(shí)施例,參照?qǐng)D3,在本實(shí)施例中,在步驟S30之后,該基于閃存的數(shù)據(jù)緩存方法還包括:
步驟S40,在所述二級(jí)緩存塊的數(shù)據(jù)量超過(guò)第一預(yù)設(shè)容量時(shí),確定所述數(shù)據(jù)塊是否處于空閑狀態(tài);
容易理解,F(xiàn)lash的資源是有限的,因此二級(jí)緩存塊也不可能無(wú)限大,本實(shí)施例中二級(jí)緩存塊能夠存儲(chǔ)的數(shù)據(jù)量的為第一預(yù)設(shè)容量或者稍大于第一預(yù)設(shè)容量,其中,該第一預(yù)設(shè)容量可以在Flash出廠時(shí)設(shè)置,也可以由用戶進(jìn)行自行設(shè)定,比如第一預(yù)設(shè)容量可以設(shè)置為100頁(yè)等。在二級(jí)緩存塊的數(shù)據(jù)量超過(guò)第一預(yù)設(shè)容量時(shí),需要將二級(jí)緩存塊中存儲(chǔ)的數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)塊,為了提高數(shù)據(jù)存儲(chǔ)的速度與效率,本實(shí)施例中在數(shù)據(jù)塊處于空閑狀態(tài)時(shí),將二級(jí)緩存塊中存儲(chǔ)的數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)塊,因此,需要首先確定數(shù)據(jù)塊是否處于空閑狀態(tài)。
步驟S50,在所述數(shù)據(jù)塊處于空閑狀態(tài)時(shí),將所述二級(jí)緩存塊中的數(shù)據(jù)存儲(chǔ)至所述閃存的數(shù)據(jù)塊。
在數(shù)據(jù)塊處于空閑狀態(tài)時(shí),利用Flash進(jìn)行數(shù)據(jù)傳輸?shù)腎dle(空閑)時(shí)間,比如二個(gè)大文件(大數(shù)據(jù))之間的間隔,將所述二級(jí)緩存塊中的數(shù)據(jù)存儲(chǔ)至所述閃存的數(shù)據(jù)塊,以實(shí)現(xiàn)二級(jí)緩存塊的空閑回收,保證將二級(jí)緩存塊的數(shù)據(jù)更新到Data塊上,具體地,根據(jù)實(shí)際的Cache塊的情形進(jìn)行Merge操作,但是該Merge操作是在Flash數(shù)據(jù)傳輸?shù)目臻e時(shí)進(jìn)行的,因此不會(huì)影響Flash寫入大數(shù)據(jù)的速度及效率。
本實(shí)施例中,在所述二級(jí)緩存塊的數(shù)據(jù)量超過(guò)第一預(yù)設(shè)容量時(shí),確定所述數(shù)據(jù)塊是否處于空閑狀態(tài),而后在所述數(shù)據(jù)塊處于空閑狀態(tài)時(shí),將所述二級(jí)緩存塊中的數(shù)據(jù)存儲(chǔ)至所述閃存的數(shù)據(jù)塊,實(shí)現(xiàn)了在Flash數(shù)據(jù)傳輸?shù)目臻e時(shí)將二級(jí)緩存塊中的數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)塊,并不會(huì)影響Flash寫入大數(shù)據(jù)的速度及效率,進(jìn)一步提高了采用閃存存儲(chǔ)連續(xù)大數(shù)據(jù)的速度以及效率。
本發(fā)明進(jìn)一步提供一種基于閃存的數(shù)據(jù)緩存裝置。參照?qǐng)D4,圖4為本發(fā)明基于閃存的數(shù)據(jù)緩存裝置第二實(shí)施例的功能模塊示意圖。
在本實(shí)施例中,該基于閃存的數(shù)據(jù)緩存裝置包括:
檢測(cè)模塊10,用于在連續(xù)的大數(shù)據(jù)緩存至所述閃存的一級(jí)緩存塊的過(guò)程中,實(shí)時(shí)檢測(cè)當(dāng)前是否存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù);
其中,小數(shù)據(jù)包括:所述大數(shù)據(jù)的格式信息、所述大數(shù)據(jù)占用扇區(qū)的數(shù)量、所述大數(shù)據(jù)的數(shù)據(jù)量、所述大數(shù)據(jù)的緩存時(shí)間等系統(tǒng)數(shù)據(jù)。本實(shí)施例中,在將連續(xù)的大數(shù)據(jù)緩存至Flash的Cache塊的過(guò)程中,檢測(cè)模塊10實(shí)時(shí)檢測(cè)是否生成了與該大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù),即實(shí)時(shí)檢測(cè)是否生成了該大數(shù)據(jù)的數(shù)據(jù)量、格式信息、占用扇區(qū)的數(shù)量及緩存時(shí)間等系統(tǒng)數(shù)據(jù),進(jìn)而確定當(dāng)前是否存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)。
第一緩存模塊20,用于在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),將所述小數(shù)據(jù)緩存至所述閃存的二級(jí)緩存塊;
在檢測(cè)模塊10檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),即實(shí)時(shí)檢測(cè)系統(tǒng)生成了該大數(shù)據(jù)的數(shù)據(jù)量、格式信息、占用扇區(qū)的數(shù)量及緩存時(shí)間等系統(tǒng)數(shù)據(jù)時(shí),第一緩存模塊20將所述小數(shù)據(jù)緩存至所述閃存的二級(jí)緩存塊,其中,該二級(jí)緩存塊為專門用于存儲(chǔ)大數(shù)據(jù)相關(guān)的系統(tǒng)數(shù)據(jù)(小數(shù)據(jù))的一級(jí)緩存塊。
第二緩存模塊30,用于在所述小數(shù)據(jù)緩存完成時(shí),繼續(xù)緩存所述大數(shù)據(jù)至所述一級(jí)緩存塊。
在所述小數(shù)據(jù)完成緩存至閃存的二級(jí)緩存塊時(shí),第二緩存模塊30繼續(xù)緩存所述大數(shù)據(jù)至所述一級(jí)緩存塊。例如,連續(xù)的大數(shù)據(jù)的Cache塊的邏輯地址LgBlk5、二級(jí)緩存塊的邏輯地址為L(zhǎng)gBlk100,LgBlk100這個(gè)區(qū)域緩存的都是小數(shù)據(jù)或者文件系統(tǒng)的數(shù)據(jù),在系統(tǒng)生成了該大數(shù)據(jù)對(duì)應(yīng)的小數(shù)據(jù)時(shí),將小數(shù)據(jù)緩存至該二級(jí)緩存塊,然后在小數(shù)據(jù)完成緩存至LgBlk100對(duì)應(yīng)的二級(jí)緩存塊時(shí),繼續(xù)緩存連續(xù)的大數(shù)據(jù)至邏輯地址為L(zhǎng)gBlk5的Cache塊。
進(jìn)一步地,在一實(shí)施例中,數(shù)據(jù)緩存裝置還包括:第二存儲(chǔ)模塊,用于在所述一級(jí)緩存塊的數(shù)據(jù)量超過(guò)第二預(yù)設(shè)容量時(shí),將所述一級(jí)緩存塊的數(shù)據(jù)存儲(chǔ)至所述閃存的數(shù)據(jù)塊。
本實(shí)施例中,在一級(jí)緩存塊的數(shù)據(jù)量超過(guò)第二預(yù)設(shè)容量時(shí),Cache塊無(wú)法再寫入更多的數(shù)據(jù)即Cache塊已寫滿數(shù)據(jù),第二存儲(chǔ)模塊直接將Cache塊與Data塊做Switch Merge,即將所述一級(jí)緩存塊的數(shù)據(jù)交換至所述閃存的數(shù)據(jù)塊,由于Switch Merge即數(shù)據(jù)交換的效率遠(yuǎn)高于Full-Merge(全合并)或搬移,因此能夠大大提高閃存數(shù)據(jù)存儲(chǔ)的速度以及效率。
本實(shí)施例中,通過(guò)在連續(xù)的大數(shù)據(jù)緩存至所述閃存的一級(jí)緩存塊的過(guò)程中,檢測(cè)模塊10實(shí)時(shí)檢測(cè)當(dāng)前是否存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù),接著在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),第一緩存模塊20將所述小數(shù)據(jù)緩存至所述閃存的二級(jí)緩存塊,而后在所述小數(shù)據(jù)緩存完成時(shí),第二緩存模塊30繼續(xù)緩存所述大數(shù)據(jù)至所述一級(jí)緩存塊,實(shí)現(xiàn)了將小數(shù)據(jù)緩存至閃存的二級(jí)緩存塊后繼續(xù)緩存大數(shù)據(jù),降低了小數(shù)據(jù)回寫時(shí)對(duì)大數(shù)據(jù)寫入效率的影響,大大提高了采用閃存存儲(chǔ)連續(xù)大數(shù)據(jù)的速度以及效率。
基于第一實(shí)施例提出本發(fā)明基于閃存的數(shù)據(jù)緩存裝置的第二實(shí)施例,參照?qǐng)D5,在本實(shí)施例中,第一緩存模塊20包括:
確定單元21,用于在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),確定所述二級(jí)緩存塊中是否存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù);
由于在大數(shù)據(jù)開(kāi)始寫入Cache塊時(shí),都會(huì)產(chǎn)生大數(shù)據(jù)相關(guān)的系統(tǒng)數(shù)據(jù)即小數(shù)據(jù),若二級(jí)緩存塊中已存儲(chǔ)有與所述小數(shù)據(jù)相關(guān)的小數(shù)據(jù),則直接更新二級(jí)緩存塊中已存儲(chǔ)有與所述小數(shù)據(jù)相關(guān)的小數(shù)據(jù)即可實(shí)現(xiàn)小數(shù)據(jù)的緩存,并能夠避免小數(shù)據(jù)的重復(fù)緩存以節(jié)約二級(jí)緩存塊的存儲(chǔ)空間。因此,在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),首先通過(guò)確定單元21確定所述二級(jí)緩存塊中是否存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)。
更新單元22,用于在所述二級(jí)緩存塊中存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的數(shù)據(jù)時(shí),基于當(dāng)前的所述小數(shù)據(jù)更新所述二級(jí)緩存塊中與所述大數(shù)據(jù)關(guān)聯(lián)的數(shù)據(jù)。
本實(shí)施例中,在所述二級(jí)緩存塊中存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的數(shù)據(jù)時(shí),更新單元22直接基于當(dāng)前的與大數(shù)據(jù)關(guān)聯(lián)的所述小數(shù)據(jù)更新所述二級(jí)緩存塊中與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù),例如,在小數(shù)據(jù)包括大數(shù)據(jù)的緩存時(shí)間時(shí),直接更新二級(jí)緩存塊中存儲(chǔ)的該大數(shù)據(jù)的緩存時(shí)間,進(jìn)而能夠節(jié)約二級(jí)緩存塊的存儲(chǔ)空間。
本實(shí)施例中,在檢測(cè)到當(dāng)前存在與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),確定單元21確定所述二級(jí)緩存塊中是否存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù),而后在所述二級(jí)緩存塊中存儲(chǔ)有與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù)時(shí),更新單元22基于當(dāng)前的所述小數(shù)據(jù)更新所述二級(jí)緩存塊中與所述大數(shù)據(jù)關(guān)聯(lián)的小數(shù)據(jù),實(shí)現(xiàn)了更新二級(jí)緩存塊中與大數(shù)據(jù)關(guān)聯(lián)的數(shù)據(jù),進(jìn)而節(jié)約了二級(jí)緩存塊的存儲(chǔ)空間,進(jìn)一步提高了采用閃存存儲(chǔ)連續(xù)大數(shù)據(jù)的速度以及效率。
基于第一實(shí)施例提出本發(fā)明基于閃存的數(shù)據(jù)緩存裝置的第三實(shí)施例,參照?qǐng)D6,在本實(shí)施例中,數(shù)據(jù)緩存裝置還包括:
確定模塊40,用于在所述二級(jí)緩存塊的數(shù)據(jù)量超過(guò)第一預(yù)設(shè)容量時(shí),確定所述數(shù)據(jù)塊是否處于空閑狀態(tài);
容易理解,F(xiàn)lash的資源是有限的,因此二級(jí)緩存塊也不可能無(wú)限大,本實(shí)施例中二級(jí)緩存塊能夠存儲(chǔ)的數(shù)據(jù)量的為第一預(yù)設(shè)容量或者稍大于第一預(yù)設(shè)容量,其中,該第一預(yù)設(shè)容量可以在Flash出廠時(shí)設(shè)置,也可以由用戶進(jìn)行自行設(shè)定,比如第一預(yù)設(shè)容量可以設(shè)置為100頁(yè)等。在二級(jí)緩存塊的數(shù)據(jù)量超過(guò)第一預(yù)設(shè)容量時(shí),需要將二級(jí)緩存塊中存儲(chǔ)的數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)塊,為了提高數(shù)據(jù)存儲(chǔ)的速度與效率,本實(shí)施例中在數(shù)據(jù)塊處于空閑狀態(tài)時(shí),將二級(jí)緩存塊中存儲(chǔ)的數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)塊,因此,需要首先通過(guò)確定模塊40確定數(shù)據(jù)塊是否處于空閑狀態(tài)。
第一存儲(chǔ)模塊50,用于在所述數(shù)據(jù)塊處于空閑狀態(tài)時(shí),將所述二級(jí)緩存塊中的數(shù)據(jù)存儲(chǔ)至所述閃存的數(shù)據(jù)塊。
在數(shù)據(jù)塊處于空閑狀態(tài)時(shí),第一存儲(chǔ)模塊50利用Flash進(jìn)行數(shù)據(jù)傳輸?shù)腎dle(空閑)時(shí)間,比如二個(gè)大文件(大數(shù)據(jù))之間的間隔,將所述二級(jí)緩存塊中的數(shù)據(jù)存儲(chǔ)至所述閃存的數(shù)據(jù)塊,以實(shí)現(xiàn)二級(jí)緩存塊的空閑回收,保證將二級(jí)緩存塊的數(shù)據(jù)更新到Data塊上,具體地,根據(jù)實(shí)際的Cache塊的情形進(jìn)行Merge操作,但是該Merge操作是在Flash數(shù)據(jù)傳輸?shù)目臻e時(shí)進(jìn)行的,因此不會(huì)影響Flash寫入大數(shù)據(jù)的速度及效率。
本實(shí)施例中,在所述二級(jí)緩存塊的數(shù)據(jù)量超過(guò)第一預(yù)設(shè)容量時(shí),確定模塊40確定所述數(shù)據(jù)塊是否處于空閑狀態(tài),而后在所述數(shù)據(jù)塊處于空閑狀態(tài)時(shí),第一存儲(chǔ)模塊50將所述二級(jí)緩存塊中的數(shù)據(jù)存儲(chǔ)至所述閃存的數(shù)據(jù)塊,實(shí)現(xiàn)了在Flash數(shù)據(jù)傳輸?shù)目臻e時(shí)將二級(jí)緩存塊中的數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)塊,并不會(huì)影響Flash寫入大數(shù)據(jù)的速度及效率,進(jìn)一步提高了采用閃存存儲(chǔ)連續(xù)大數(shù)據(jù)的速度以及效率。
需要說(shuō)明的是,在本文中,術(shù)語(yǔ)“包括”、“包含”或者其任何其它變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者裝置不僅包括那些要素,而且還包括沒(méi)有明確列出的其它要素,或者是還包括為這種過(guò)程、方法、物品或者裝置所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括該要素的過(guò)程、方法、物品或者裝置中還存在另外的相同要素。
上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實(shí)施例方法可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,空調(diào)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。
以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說(shuō)明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。