本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,特別是涉及一種固態(tài)硬盤的緩存控制方法及裝置。
背景技術(shù):
在數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,尤其是分布式存儲(chǔ),需要大批量的讀取文件,如果直接從機(jī)械硬盤讀取則導(dǎo)致消耗時(shí)間過長(zhǎng),因此,現(xiàn)有的方法通常是將機(jī)械硬盤中的數(shù)據(jù)緩存至固態(tài)硬盤中的leveldb數(shù)據(jù)庫,當(dāng)需要讀取時(shí),則直接從固態(tài)硬盤中取出,再通過內(nèi)存進(jìn)行讀取。
由于固態(tài)硬盤的作用是二級(jí)緩存,因此,固態(tài)硬盤的利用率非常重要,如果固態(tài)硬盤中存在著大量的無用的數(shù)據(jù),則當(dāng)需要有新的數(shù)據(jù)緩存時(shí),固態(tài)硬盤的緩存空間不足,由此可見,提高固態(tài)硬盤的利用率非常重要。
在現(xiàn)有技術(shù)中,為了提高固態(tài)硬盤的利用率,通常的方法是為leveldb數(shù)據(jù)庫中的數(shù)據(jù)設(shè)定一個(gè)TTL(Time To Live),來限定了數(shù)據(jù)的生命周期。但是該方案會(huì)有相應(yīng)的弊端,因?yàn)樵诓煌臅r(shí)間段內(nèi)寫入leveldb數(shù)據(jù)庫的數(shù)據(jù)的數(shù)量是不平均的,如果設(shè)定數(shù)據(jù)的TTL則不能充分的利用二級(jí)緩存的存儲(chǔ)空間,因此效率上也會(huì)受到相應(yīng)的影響。舉例說明:如果在time1的時(shí)間段內(nèi),共寫入了99w條小文件數(shù)據(jù),time2的時(shí)間段內(nèi)寫入了1w條小文件數(shù)據(jù)。此時(shí)固態(tài)硬盤的利用率達(dá)到100%,則固態(tài)硬盤不能再作為二級(jí)緩存進(jìn)行數(shù)據(jù)寫入,只有等到time1時(shí)間內(nèi)寫入數(shù)據(jù)的生命期結(jié)束,此時(shí)磁盤的使用率為1%。通過例子可以看出,目前行業(yè)中的解決方案使得固態(tài)硬盤的使用率不能恒定在一定范圍內(nèi),而是上下波動(dòng)嚴(yán)重,嚴(yán)重導(dǎo)致固態(tài)硬盤得不到充分的利用,甚至?xí)霈F(xiàn)磁盤使用率達(dá)到100%。
由此可見,如何保持固態(tài)硬盤使用率的穩(wěn)定性是本領(lǐng)域技術(shù)人員亟待解決地問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種固態(tài)硬盤的緩存控制方法,用于保持固態(tài)硬盤使用率的穩(wěn)定性。
為解決上述技術(shù)問題,本發(fā)明提供一種固態(tài)硬盤的緩存控制方法,包括:
為待緩存文件添加leveldb數(shù)據(jù)庫中的當(dāng)前時(shí)間戳,并以包含有文件號(hào)和文件內(nèi)容的格式插入到所述leveldb數(shù)據(jù)庫中;
將所述leveldb數(shù)據(jù)庫中的數(shù)據(jù)總量加1,將所述leveldb數(shù)據(jù)庫中具有當(dāng)前時(shí)間戳的目標(biāo)累積量加1;
判斷所述目標(biāo)累積量是否大于第一預(yù)定值;
如果所述目標(biāo)累積量大于所述第一預(yù)定值,則插入新的時(shí)間戳,并將所述新的時(shí)間戳作為當(dāng)前時(shí)間戳;
如果所述目標(biāo)累積量不大于所述第一預(yù)定值,則判斷當(dāng)前數(shù)據(jù)總量是否大于第二預(yù)定值;
如果當(dāng)前數(shù)據(jù)總量大于所述第二預(yù)定值,則刪除與最早時(shí)間戳對(duì)應(yīng)的已緩存文件,并更新當(dāng)前數(shù)據(jù)總量;
其中,第二預(yù)定值為所述固態(tài)硬盤首次達(dá)到預(yù)定利用率所對(duì)應(yīng)的數(shù)據(jù)總量。
優(yōu)選地,還包括:記錄當(dāng)前所述leveldb數(shù)據(jù)庫中各時(shí)間戳,以及記錄每個(gè)時(shí)間戳與對(duì)應(yīng)的已緩存文件的對(duì)應(yīng)關(guān)系。
優(yōu)選地,在所述刪除與最早時(shí)間戳對(duì)應(yīng)的已緩存文件,并更新當(dāng)前數(shù)據(jù)總量具體為:
統(tǒng)計(jì)所述最早時(shí)間戳對(duì)應(yīng)的各已緩存文件的讀取次數(shù),篩選出讀取次數(shù)超過預(yù)定次數(shù)的緩存文件,將這些緩存文件的時(shí)間戳更換為當(dāng)前時(shí)間戳;將讀取次數(shù)未超過所述預(yù)定次數(shù)的緩存文件刪除,并更新當(dāng)前數(shù)據(jù)總量。
優(yōu)選地,所述更新當(dāng)前數(shù)據(jù)總量具體包括:
統(tǒng)計(jì)所述讀取次數(shù)未超過所述預(yù)定次數(shù)的緩存文件的數(shù)據(jù)量;
將當(dāng)前數(shù)據(jù)總量減去所述數(shù)據(jù)量;
刪除所述最早時(shí)間戳。
優(yōu)選地,還包括:將當(dāng)前所述leveldb數(shù)據(jù)庫中各時(shí)間戳以及每個(gè)時(shí)間戳與對(duì)應(yīng)的已緩存文件的對(duì)應(yīng)關(guān)系加載至內(nèi)存中。
優(yōu)選地,所述文件號(hào)為原始文件號(hào)對(duì)應(yīng)的哈希取余值。
優(yōu)選地,還包括:當(dāng)接收到刪除請(qǐng)求時(shí),根據(jù)所述刪除請(qǐng)求在所述leveldb數(shù)據(jù)庫中刪除對(duì)應(yīng)的已緩存文件,并更新所述leveldb數(shù)據(jù)庫。
優(yōu)選地,所述預(yù)定利用率為80%。
優(yōu)選地,所述第二預(yù)定值為所述固態(tài)硬盤總量的80%。
為解決上述技術(shù)問題,本發(fā)明提供一種固態(tài)硬盤的緩存控制裝置,包括:
添加單元,用于為待緩存文件添加leveldb數(shù)據(jù)庫中的當(dāng)前時(shí)間戳,并以包含有文件號(hào)和文件內(nèi)容的格式插入到所述leveldb數(shù)據(jù)庫中;
計(jì)算單元,用于將所述leveldb數(shù)據(jù)庫中的數(shù)據(jù)總量加1,將所述leveldb數(shù)據(jù)庫中具有當(dāng)前時(shí)間戳的目標(biāo)累積量加1;
第一判斷單元,用于判斷所述目標(biāo)累積量是否大于第一預(yù)定值;
插入單元,用于如果所述目標(biāo)累積量大于所述第一預(yù)定值,則插入新的時(shí)間戳,并將所述新的時(shí)間戳作為當(dāng)前時(shí)間戳;
第二判斷單元,用于如果所述目標(biāo)累積量不大于所述第一預(yù)定值,則判斷當(dāng)前數(shù)據(jù)總量是否大于第二預(yù)定值;
更新單元,用于如果當(dāng)前數(shù)據(jù)總量大于所述第二預(yù)定值,則刪除與最早時(shí)間戳對(duì)應(yīng)的已緩存文件,并更新當(dāng)前數(shù)據(jù)總量;
其中,第二預(yù)定值為所述固態(tài)硬盤首次達(dá)到預(yù)定利用率所對(duì)應(yīng)的數(shù)據(jù)總量。
本發(fā)明所提供的固態(tài)硬盤的緩存控制方法及裝置,包括:為待緩存文件添加leveldb數(shù)據(jù)庫中的當(dāng)前時(shí)間戳,并以包含有文件號(hào)和文件內(nèi)容的格式插入到leveldb數(shù)據(jù)庫中;將leveldb數(shù)據(jù)庫中的數(shù)據(jù)總量加1,將leveldb數(shù)據(jù)庫中具有當(dāng)前時(shí)間戳的目標(biāo)累積量加1;判斷目標(biāo)累積量是否大于第一預(yù)定值;如果目標(biāo)累積量大于第一預(yù)定值,則插入新的時(shí)間戳,并將新的時(shí)間戳作為當(dāng)前時(shí)間戳;如果目標(biāo)累積量不大于第一預(yù)定值,則判斷當(dāng)前數(shù)據(jù)總量是否大于第二預(yù)定值;如果當(dāng)前數(shù)據(jù)總量大于第二預(yù)定值,則刪除與最早時(shí)間戳對(duì)應(yīng)的已緩存文件,并更新當(dāng)前數(shù)據(jù)總量。很顯然,本方法中刪除已緩存文件并不是由于已緩存文件的生命周期到了,而是由當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)總量決定的,即當(dāng)達(dá)到設(shè)定的第二預(yù)定值時(shí),才需要?jiǎng)h除已緩存文件,并且第二預(yù)定值為固態(tài)硬盤首次達(dá)到預(yù)定利用率所對(duì)應(yīng)的數(shù)據(jù)總量,因此首次刪除已緩存文件由是否達(dá)到固態(tài)硬盤的預(yù)定利用率決定,同時(shí)記錄此時(shí)的數(shù)據(jù)總量作為數(shù)據(jù)總量上限,此后刪除已緩存文件由當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)總量決定。更為重要的是,刪除的是與最早時(shí)間戳對(duì)應(yīng)的已緩存文件,一個(gè)時(shí)間戳對(duì)應(yīng)的已緩存文件是可以設(shè)定的,因此,可以有效保證固態(tài)硬盤的使用率維持在一個(gè)比較平穩(wěn)的水平,不易出現(xiàn)較大的波動(dòng)。另外,多個(gè)已緩存文件可以具有同一個(gè)時(shí)間戳,因此,可以實(shí)現(xiàn)批量刪除,提高緩存的工作效率。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例,下面將對(duì)實(shí)施例中所需要使用的附圖做簡(jiǎn)單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種固態(tài)硬盤的緩存控制方法的流程圖;
圖2為本發(fā)明實(shí)施例提供的一種緩存存儲(chǔ)結(jié)構(gòu)的示意圖;
圖3為本發(fā)明實(shí)施例提供的一種固態(tài)硬盤的緩存控制裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下,所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)范圍。
本發(fā)明的核心是提供一種固態(tài)硬盤的緩存控制方法及裝置。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。
圖1為本發(fā)明實(shí)施例提供的一種固態(tài)硬盤的緩存控制方法的流程圖。如圖1所示,包括:
S10:為待緩存文件添加leveldb數(shù)據(jù)庫中的當(dāng)前時(shí)間戳,并以包含有文件號(hào)和文件內(nèi)容的格式插入到leveldb數(shù)據(jù)庫中。
S11:將leveldb數(shù)據(jù)庫中的數(shù)據(jù)總量加1,將leveldb數(shù)據(jù)庫中具有當(dāng)前時(shí)間戳的目標(biāo)累積量加1。
S12:判斷目標(biāo)累積量是否大于第一預(yù)定值。
如果是,進(jìn)入步驟S13,如果否,進(jìn)入步驟S14。
S13:插入新的時(shí)間戳,并將新的時(shí)間戳作為當(dāng)前時(shí)間戳。
S14:判斷當(dāng)前數(shù)據(jù)總量是否大于第二預(yù)定值。如果是,進(jìn)入步驟S15。
S15:刪除與最早時(shí)間戳對(duì)應(yīng)的已緩存文件,并更新當(dāng)前數(shù)據(jù)總量。
其中,第二預(yù)定值為固態(tài)硬盤首次達(dá)到預(yù)定利用率所對(duì)應(yīng)的數(shù)據(jù)總量。
Leveldb數(shù)據(jù)庫中數(shù)據(jù)是以(key,value)數(shù)據(jù)對(duì)的形式按照key從小到大有序存儲(chǔ)的,本發(fā)明中用文件號(hào)作為key,將文件內(nèi)容作為value。為了便于刪除長(zhǎng)時(shí)間不用的數(shù)據(jù),即老化的數(shù)據(jù),因此我們?cè)诿恳粭l文件插入leveldb數(shù)據(jù)庫時(shí),給該文件加一個(gè)時(shí)間戳??梢岳斫獾氖?,這個(gè)時(shí)間戳只是表明待緩存文件添加至leveldb數(shù)據(jù)庫的時(shí)間信息,另外,不同緩存文件的時(shí)間戳可以相同,也可以不同,即多個(gè)已緩存文件可以具有相同的時(shí)間戳。時(shí)間戳的設(shè)定可以精確到秒,用戶可以根據(jù)自身的存儲(chǔ)情況進(jìn)行精度設(shè)定。
在具體實(shí)施中,具有同一個(gè)時(shí)間戳的文件的數(shù)量稱為累積量,這個(gè)累積量也有上限,即上文所述的第一預(yù)定值。目標(biāo)累積量只是為了區(qū)分當(dāng)前需要統(tǒng)計(jì)的累積量與其余的累積量,并沒有實(shí)質(zhì)性含義。第一預(yù)定值可以根據(jù)實(shí)際情況設(shè)定,可以理解的是,如果設(shè)定的越小,則越能夠保證固態(tài)硬盤的使用率的平穩(wěn)性(因?yàn)?,如果第一預(yù)定值設(shè)定為1000,則到了步驟S15時(shí),就需要?jiǎng)h除1000個(gè)已緩存文件,如果第一預(yù)定值設(shè)定為100,則到了步驟S15時(shí),就需要?jiǎng)h除100個(gè)已緩存文件)。但是第一預(yù)定值也不是越小越好,如果太小,則需要較多的時(shí)間戳,即需要不斷的插入新的時(shí)間戳,導(dǎo)致一次刪除已緩存文件的量較少,需要多次刪除。
因?yàn)橛芯彺嫖募懭耄虼?,?shù)據(jù)總量需要加1,例如,當(dāng)前數(shù)據(jù)總量為9999,則寫入這個(gè)緩存文件后,數(shù)據(jù)總量就會(huì)變?yōu)?0000。如果當(dāng)前時(shí)間戳為201606031556,則該文件的時(shí)間戳就是201606031556??梢岳斫獾氖?,對(duì)于時(shí)間戳201606031556來說,其可能為第一個(gè)時(shí)間戳也可能不是第一個(gè)時(shí)間戳,如果不是第一個(gè)時(shí)間戳,則其前面的時(shí)間戳就是201606031555,201606031554等。多個(gè)緩存文件可以具有相同的時(shí)間戳,例如,時(shí)間戳201606031556對(duì)應(yīng)的文件號(hào)從1001開始,時(shí)間戳201606031555對(duì)應(yīng)的文件號(hào)為1-1000。很顯然,文件號(hào)1-1000的緩存文件具有相同的時(shí)間戳,如果數(shù)據(jù)總量達(dá)到設(shè)定的第二預(yù)定值,則需要?jiǎng)h除一些緩存文件。由于每個(gè)緩存文件都具有一個(gè)時(shí)間戳,如果一個(gè)時(shí)間戳對(duì)應(yīng)的緩存文件,其實(shí)就是批量刪除緩存文件。還以上文的例子繼續(xù)說明,如果時(shí)間戳201606031555為當(dāng)前數(shù)據(jù)庫中最早時(shí)間戳,則刪除最早時(shí)間戳對(duì)應(yīng)的已緩存文件,就是刪除文件號(hào)1-1000的緩存文件。需要說明的是,本發(fā)明中提到的最早時(shí)間戳是相對(duì)的,是當(dāng)前數(shù)據(jù)庫中各個(gè)時(shí)間戳中相對(duì)最早的那個(gè)時(shí)間戳。
由于第二預(yù)定值為固態(tài)硬盤首次達(dá)到預(yù)定利用率所對(duì)應(yīng)的數(shù)據(jù)總量,即可以理解為:首次刪除已緩存文件由是否達(dá)到固態(tài)硬盤的預(yù)定利用率決定,該利用率對(duì)應(yīng)的數(shù)據(jù)總量作為上限即第二預(yù)定值,此后刪除已緩存文件由當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)總量決定,即是否超過第二預(yù)定值決定。
本實(shí)施例提供的固態(tài)硬盤的緩存控制方法,為待緩存文件添加leveldb數(shù)據(jù)庫中的當(dāng)前時(shí)間戳,并以包含有文件號(hào)和文件內(nèi)容的格式插入到leveldb數(shù)據(jù)庫中;將leveldb數(shù)據(jù)庫中的數(shù)據(jù)總量加1,將leveldb數(shù)據(jù)庫中具有當(dāng)前時(shí)間戳的目標(biāo)累積量加1;判斷目標(biāo)累積量是否大于第一預(yù)定值;如果目標(biāo)累積量大于第一預(yù)定值,則插入新的時(shí)間戳,并將新的時(shí)間戳作為當(dāng)前時(shí)間戳;如果目標(biāo)累積量不大于第一預(yù)定值,則判斷當(dāng)前數(shù)據(jù)總量是否大于第二預(yù)定值;如果當(dāng)前數(shù)據(jù)總量大于第二預(yù)定值,則刪除與最早時(shí)間戳對(duì)應(yīng)的已緩存文件,并更新當(dāng)前數(shù)據(jù)總量。很顯然,本方法中刪除已緩存文件并不是由于已緩存文件的生命周期到了,而是由當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)總量決定的,即當(dāng)達(dá)到設(shè)定的第二預(yù)定值時(shí),才需要?jiǎng)h除已緩存文件,并且第二預(yù)定值為固態(tài)硬盤首次達(dá)到預(yù)定利用率所對(duì)應(yīng)的數(shù)據(jù)總量,因此首次刪除已緩存文件由是否達(dá)到固態(tài)硬盤的預(yù)定利用率決定,同時(shí)記錄此時(shí)的數(shù)據(jù)總量作為數(shù)據(jù)總量上限,此后刪除已緩存文件由當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)總量決定。更為重要的是,刪除的是與最早時(shí)間戳對(duì)應(yīng)的已緩存文件,一個(gè)時(shí)間戳對(duì)應(yīng)的已緩存文件是可以設(shè)定的,因此,可以有效保證固態(tài)硬盤的使用率維持在一個(gè)比較平穩(wěn)的水平,不易出現(xiàn)較大的波動(dòng)。另外,多個(gè)已緩存文件可以具有同一個(gè)時(shí)間戳,因此,可以實(shí)現(xiàn)批量刪除,提高緩存的工作效率。
在上述實(shí)施例中,緩存控制過程需要知道同一個(gè)時(shí)間戳的累積量,還需要知道最早時(shí)間戳和當(dāng)前時(shí)間戳。為了便于方便統(tǒng)計(jì),本實(shí)施例中還包括:記錄當(dāng)前l(fā)eveldb數(shù)據(jù)庫中各時(shí)間戳,以及記錄每個(gè)時(shí)間戳與對(duì)應(yīng)的已緩存文件的對(duì)應(yīng)關(guān)系。
圖2為本發(fā)明實(shí)施例提供的一種緩存存儲(chǔ)結(jié)構(gòu)的示意圖。為了本領(lǐng)域技術(shù)人員能夠更加理解本發(fā)明提供的緩存控制方法,給出一種緩存存儲(chǔ)結(jié)構(gòu)的示意圖,見圖2。Inode1、Inode2、Inode3等表示文件號(hào),value1、value2、value3等表示文件內(nèi)容,以(inode,value)作為存儲(chǔ)形式緩存。
在具體實(shí)施中,可采用存儲(chǔ)至數(shù)據(jù)庫的形式記錄當(dāng)前l(fā)eveldb數(shù)據(jù)庫中各時(shí)間戳,以及記錄每個(gè)時(shí)間戳與對(duì)應(yīng)的已緩存文件的對(duì)應(yīng)關(guān)系,即將記錄結(jié)果插入到leveldb數(shù)據(jù)庫。時(shí)間戳與對(duì)應(yīng)的已緩存文件的對(duì)應(yīng)關(guān)系表示為(time+inode,NULL)NULL表示空數(shù)據(jù),沒有實(shí)質(zhì)內(nèi)容,之所采用這樣形式是滿足leveldb數(shù)據(jù)庫的存儲(chǔ)要求。同樣的,當(dāng)前l(fā)eveldb數(shù)據(jù)庫中各時(shí)間戳以(time,NULL)形式插入到leveldb數(shù)據(jù)庫中,leveldb會(huì)根據(jù)time對(duì)其進(jìn)行有序的排列。由于leveldb數(shù)據(jù)庫中的數(shù)據(jù)的存儲(chǔ)是按照key的大小順序有序存儲(chǔ)的。因此以上三類數(shù)據(jù)(time,NULL),(time+inode,NULL)和(inode,value)可以通過添加前綴aa_,bb_,cc_的形式加以區(qū)分和排序,如圖2所示。
在固態(tài)硬盤中的已緩存文件需要被內(nèi)存讀取,如果一個(gè)已緩存文件的讀取頻率較高,但是在緩存控制中,該文件的時(shí)間戳變?yōu)楫?dāng)前l(fā)eveldb數(shù)據(jù)庫中最早時(shí)間戳,如果不加以篩選的話,則這個(gè)讀取次數(shù)較多的已緩存文件就會(huì)被刪除。
為了解決這個(gè)問題,作為優(yōu)選的實(shí)施方式,在刪除與最早時(shí)間戳對(duì)應(yīng)的已緩存文件,并更新當(dāng)前數(shù)據(jù)總量具體為:
統(tǒng)計(jì)最早時(shí)間戳對(duì)應(yīng)的各已緩存文件的讀取次數(shù),篩選出讀取次數(shù)超過預(yù)定次數(shù)的緩存文件,將這些緩存文件的時(shí)間戳更換為當(dāng)前時(shí)間戳;將讀取次數(shù)未超過預(yù)定次數(shù)的緩存文件刪除,并更新當(dāng)前數(shù)據(jù)總量。
例如當(dāng)前最早時(shí)間戳為201606031555,該時(shí)間戳對(duì)應(yīng)1000個(gè)文件,這1000個(gè)文件都有其讀取次數(shù),篩選出讀取次數(shù)大于預(yù)定次數(shù)的文件,例如文件1-文件5,則將文件1-文件5的時(shí)間戳更換為當(dāng)前時(shí)間戳;將文件6-文件1000刪除,并更新當(dāng)前數(shù)據(jù)總量??梢岳斫獾氖牵绻募?-文件5的時(shí)間戳更換為當(dāng)前時(shí)間戳,則還要記錄當(dāng)前時(shí)間戳與文件1-文件5的對(duì)應(yīng)關(guān)系;并且由于文件1-文件5并沒有被真正刪除,而是作為保護(hù)對(duì)象保留下來了,因此,也不影響leveldb數(shù)據(jù)庫的數(shù)據(jù)總量,本實(shí)施例不再贅述。
作為優(yōu)選的實(shí)施方式,更新當(dāng)前數(shù)據(jù)總量具體包括:統(tǒng)計(jì)讀取次數(shù)未超過預(yù)定次數(shù)的緩存文件的數(shù)據(jù)量,將當(dāng)前數(shù)據(jù)總量減去數(shù)據(jù)量,刪除最早時(shí)間戳。
在上述實(shí)施例中,更新當(dāng)前數(shù)據(jù)總量的前提是,將讀取次數(shù)未超過預(yù)定次數(shù)的緩存文件作為刪除對(duì)象,既然這些緩存文件要真正被刪除,因此需要將當(dāng)前數(shù)據(jù)總量減去數(shù)據(jù)量,刪除最早時(shí)間戳。例如,將文件6-文件1000刪除,對(duì)應(yīng)的數(shù)據(jù)量就是955。
作為優(yōu)選地實(shí)施方式,還包括:將當(dāng)前l(fā)eveldb數(shù)據(jù)庫中各時(shí)間戳以及每個(gè)時(shí)間戳與對(duì)應(yīng)的已緩存文件的對(duì)應(yīng)關(guān)系加載至內(nèi)存中。
再具體實(shí)施中,內(nèi)存需要多次讀取leveldb數(shù)據(jù)庫中的文件,將上述信息加載至內(nèi)存中,有利于內(nèi)存快速讀取。具體讀取過程本實(shí)施例不再贅述。
作為優(yōu)選地實(shí)施方式,文件號(hào)為原始文件號(hào)對(duì)應(yīng)的哈希取余值。
由于原始文件號(hào)通常為較長(zhǎng)的數(shù)據(jù)串,如果以數(shù)據(jù)串表示的話,則不方便,本實(shí)施例中取原始文件號(hào)對(duì)應(yīng)的哈希取余值作為各自的文件號(hào),見圖2中得到數(shù)據(jù)結(jié)構(gòu)。。
作為優(yōu)選地實(shí)施方式,還包括:當(dāng)接收到刪除請(qǐng)求時(shí),根據(jù)刪除請(qǐng)求在leveldb數(shù)據(jù)庫中刪除對(duì)應(yīng)的已緩存文件,并更新leveldb數(shù)據(jù)庫。
對(duì)于固態(tài)硬盤來說,不僅包含寫入過程,還包括刪除過程,刪除過程與寫入過程原理相同,具體過程為:根據(jù)刪除請(qǐng)求查找到對(duì)應(yīng)的已緩存文件,刪除該文件,判斷是否刪除成功,如果否,則說明沒有刪除成功,需要重復(fù)上述操作。如果刪除成功,則判斷該文件對(duì)應(yīng)的時(shí)間戳是否為最新時(shí)間戳,如果是最新時(shí)間戳,則判斷該最新時(shí)間戳是對(duì)應(yīng)這一個(gè)文件,如果是,則將最新時(shí)間戳減1作為當(dāng)前時(shí)間戳。如果不是最新時(shí)間戳,則還需要?jiǎng)h除該時(shí)間戳與該文件的對(duì)應(yīng)關(guān)系,并且將leveldb數(shù)據(jù)庫中的數(shù)據(jù)總量減1。
作為優(yōu)選地實(shí)施方式,第一預(yù)定值為1000??梢岳斫獾氖?,第一預(yù)定值為1000只是一種具體的實(shí)施方式,并不代表只有這一種實(shí)施方式。
作為優(yōu)選地實(shí)施方式,預(yù)定利用率為80%。因此,第二預(yù)定值為首次達(dá)到固態(tài)硬盤利用率的80%所對(duì)應(yīng)的數(shù)據(jù)總量。例如,首次達(dá)到固態(tài)硬盤利用率的80%所對(duì)應(yīng)的數(shù)據(jù)總量為10萬個(gè),則第二預(yù)定值就是10萬個(gè)。可以理解的是,預(yù)定利用率為80%只是一種具體的實(shí)施方式,并不代表只有這一種實(shí)施方式。
圖3為本發(fā)明實(shí)施例提供的一種固態(tài)硬盤的緩存控制裝置的結(jié)構(gòu)圖。如圖3所示,固態(tài)硬盤的緩存控制裝置,包括:
添加單元10,用于為待緩存文件添加leveldb數(shù)據(jù)庫中的當(dāng)前時(shí)間戳,并以包含有文件號(hào)和文件內(nèi)容的格式插入到leveldb數(shù)據(jù)庫中。
計(jì)算單元11,用于將leveldb數(shù)據(jù)庫中的數(shù)據(jù)總量加1,將leveldb數(shù)據(jù)庫中具有當(dāng)前時(shí)間戳的目標(biāo)累積量加1。
第一判斷單元12,用于判斷目標(biāo)累積量是否大于第一預(yù)定值。
插入單元13,用于如果目標(biāo)累積量大于第一預(yù)定值,則插入新的時(shí)間戳,并將新的時(shí)間戳作為當(dāng)前時(shí)間戳。
第二判斷單元14,用于如果目標(biāo)累積量不大于第一預(yù)定值,則判斷當(dāng)前數(shù)據(jù)總量是否大于第二預(yù)定值。
更新單元15,用于如果當(dāng)前數(shù)據(jù)總量大于第二預(yù)定值,則刪除與最早時(shí)間戳對(duì)應(yīng)的已緩存文件,并更新當(dāng)前數(shù)據(jù)總量。
其中,第二預(yù)定值為固態(tài)硬盤首次達(dá)到預(yù)定利用率所對(duì)應(yīng)的數(shù)據(jù)總量。
由于裝置部分的實(shí)施例與方法部分的實(shí)施例相互對(duì)應(yīng),因此裝置部分的實(shí)施例請(qǐng)參見方法部分的實(shí)施例的描述,這里暫不贅述。
本實(shí)施例提供的固態(tài)硬盤的緩存控制裝置,包括:添加單元,用于為待緩存文件添加leveldb數(shù)據(jù)庫中的當(dāng)前時(shí)間戳,并以包含有文件號(hào)和文件內(nèi)容的格式插入到所述leveldb數(shù)據(jù)庫中;計(jì)算單元,用于將所述leveldb數(shù)據(jù)庫中的數(shù)據(jù)總量加1,將所述leveldb數(shù)據(jù)庫中具有當(dāng)前時(shí)間戳的目標(biāo)累積量加1;第一判斷單元,用于判斷所述目標(biāo)累積量是否大于第一預(yù)定值;插入單元,用于如果所述目標(biāo)累積量大于所述第一預(yù)定值,則插入新的時(shí)間戳,并將所述新的時(shí)間戳作為當(dāng)前時(shí)間戳;第二判斷單元,用于如果所述目標(biāo)累積量不大于所述第一預(yù)定值,則判斷當(dāng)前數(shù)據(jù)總量是否大于第二預(yù)定值;更新單元,用于如果當(dāng)前數(shù)據(jù)總量大于所述第二預(yù)定值,則刪除與最早時(shí)間戳對(duì)應(yīng)的已緩存文件,并更新當(dāng)前數(shù)據(jù)總量。很顯然,本裝置中刪除已緩存文件并不是由于已緩存文件的生命周期到了,而是由當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)總量決定的,即當(dāng)達(dá)到設(shè)定的第二預(yù)定值時(shí),才需要?jiǎng)h除已緩存文件,更為重要的是,刪除的是與最早時(shí)間戳對(duì)應(yīng)的已緩存文件,一個(gè)時(shí)間戳對(duì)應(yīng)的已緩存文件是可以設(shè)定的,因此,可以有效保證固態(tài)硬盤的使用率維持在一個(gè)比較平穩(wěn)的水平,不易出現(xiàn)較大的波動(dòng)。另外,多個(gè)已緩存文件可以具有同一個(gè)時(shí)間戳,因此,可以實(shí)現(xiàn)批量刪除,提高緩存的工作效率。
以上對(duì)本發(fā)明所提供的固態(tài)硬盤的緩存控制方法及裝置進(jìn)行了詳細(xì)介紹。說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法部分說明即可。應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對(duì)本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。
專業(yè)人員還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。