欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

KV項(xiàng)有效性獲取方法以及裝置與流程

文檔序號:12733762閱讀:394來源:國知局
KV項(xiàng)有效性獲取方法以及裝置與流程

本申請涉及存儲(chǔ)領(lǐng)域,特別是涉及一種KV項(xiàng)有效性獲取方法以及裝置。



背景技術(shù):

鍵值存儲(chǔ),即Key-Value存儲(chǔ),簡稱KV存儲(chǔ)。KV存儲(chǔ)是按照索引和文件組合的形式進(jìn)行組織,索引和文件的組合稱為KV項(xiàng)。其中,索引用于標(biāo)識KV項(xiàng),文件用于存儲(chǔ)數(shù)據(jù),KV項(xiàng)的大小可以變化,KV項(xiàng)的大小主要取決于文件的大小。所以,KV存儲(chǔ)適合不涉及過多數(shù)據(jù)關(guān)系業(yè)務(wù)關(guān)系的業(yè)務(wù)數(shù)據(jù),例如,網(wǎng)絡(luò)社交平臺(tái)和電商產(chǎn)生的業(yè)務(wù)數(shù)據(jù),能夠有效減少讀寫磁盤的次數(shù)。

KV項(xiàng)通常存儲(chǔ)在持久化存儲(chǔ)介質(zhì)中。當(dāng)需要對持久化存儲(chǔ)介質(zhì)進(jìn)行垃圾回收時(shí),先將進(jìn)行垃圾回收的存儲(chǔ)空間中的有效KV項(xiàng)遷移到有效的區(qū)域中或者確定進(jìn)行垃圾回收的存儲(chǔ)空間中沒有有效KV項(xiàng)。而要將需要進(jìn)行垃圾回收的存儲(chǔ)空間中有效KV項(xiàng)遷移到有效的區(qū)域,或者,確定需要進(jìn)行垃圾回收的存儲(chǔ)空間中沒有有效KV項(xiàng),都必須首先獲得需要進(jìn)行垃圾回收的存儲(chǔ)空間中的KV項(xiàng)的有效性。

如圖1所示,現(xiàn)有技術(shù)提供了一種KV項(xiàng)有效性獲取方法,將固態(tài)硬盤(Solid State Drives,SSD)中的存儲(chǔ)空間劃分為多個(gè)大小相同的數(shù)據(jù)單元110。每個(gè)KV項(xiàng)使用整數(shù)個(gè)數(shù)據(jù)單元110進(jìn)行存儲(chǔ),即,當(dāng)KV項(xiàng)的大小小于或者等于1個(gè)數(shù)據(jù)單元110的大小時(shí),1個(gè)KV項(xiàng)使用1個(gè)數(shù)據(jù)單元110進(jìn)行存儲(chǔ),當(dāng)KV項(xiàng)的大于1個(gè)數(shù)據(jù)單元110的大小,而小于或者等于2個(gè)數(shù)據(jù)單元110的大小時(shí),1個(gè)KV項(xiàng)使用2個(gè)數(shù)據(jù)單元110進(jìn)行存儲(chǔ),依此類推。在存儲(chǔ)級內(nèi)存(Store Class Memory,SCM)中存儲(chǔ)有位圖(bitmap)120。位圖120包括多個(gè)位121,位圖120中的每個(gè)位120與SSD中的一個(gè)數(shù)據(jù)單元110對應(yīng)。當(dāng)位圖120中的位121的值為“1”(圖中用黑塊進(jìn)行表示)時(shí),表示位121對應(yīng)的數(shù)據(jù)單元110為有效狀態(tài)(圖中用帶條紋的方塊表示),當(dāng)位圖120中的位121的值為“0”(圖中用白塊進(jìn)行表示)時(shí),表示位121對應(yīng)的數(shù)據(jù)單元110為無效狀態(tài)(圖中用帶散點(diǎn)的方塊表示)。如圖1中所示,位圖120中的第1個(gè)位對應(yīng)第1個(gè)數(shù)據(jù)單元110,第2個(gè)位對應(yīng)第2個(gè)數(shù)據(jù)單元110,第3個(gè)位對應(yīng)第3個(gè)數(shù)據(jù)單元110,……。第1個(gè)KV項(xiàng)存儲(chǔ)在第1個(gè)數(shù)據(jù)單元110中,第2個(gè)KV項(xiàng)存儲(chǔ)在第2個(gè)數(shù)據(jù)單元110以及第3個(gè)數(shù)據(jù)單元110中,第3個(gè)KV項(xiàng)存儲(chǔ)在第4個(gè)數(shù)據(jù)單元110中,第4個(gè)KV項(xiàng)存儲(chǔ)在第5個(gè)數(shù)據(jù)單元110、第6個(gè)數(shù)據(jù)單元110以及第7個(gè)KV數(shù)據(jù)單元中,……。第1個(gè)KV項(xiàng)為無效數(shù)據(jù),第2個(gè)KV項(xiàng)為有效數(shù)據(jù),第3個(gè)KV項(xiàng)為無效數(shù)據(jù),第4個(gè)KV項(xiàng)為有效數(shù)據(jù),……。所以,位圖120的第1個(gè)位121被設(shè)置成0,第2個(gè)位121被設(shè)置為1,第3個(gè)位121被設(shè)置為1,第4個(gè)位121被設(shè)置為0,第5個(gè)位121被設(shè)置為1,第6個(gè)位121被設(shè)置為1,第7個(gè)位121被設(shè)置為1,……。通過讀取位圖120中的各個(gè)位121的狀態(tài),就能夠獲知各個(gè)數(shù)據(jù)單元110的有效性。但是,在這種方式中,如果KV項(xiàng)的大小不是剛好為整數(shù)個(gè)塊110的大小時(shí),就會(huì)導(dǎo)致存儲(chǔ)空間被浪費(fèi)。



技術(shù)實(shí)現(xiàn)要素:

本申請?zhí)峁┮环NKV項(xiàng)有效性獲取方法以及裝置,能夠提高存儲(chǔ)空間的利用率。

第一方面,提供了一種KV項(xiàng)有效性獲取方法,包括:

獲取第i個(gè)頁面的起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號,其中,KV項(xiàng)包括索引、數(shù)據(jù)項(xiàng)以及元數(shù)據(jù),所述頁面為讀取單位,所述KV項(xiàng)連續(xù)存儲(chǔ)于部分、一個(gè)或多個(gè)塊中;

根據(jù)所述起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號計(jì)算得到第i個(gè)頁面的KV項(xiàng)的編號范圍;

根據(jù)所述第i個(gè)頁面的KV項(xiàng)的編號查找有效性存儲(chǔ)空間以獲取所述第i個(gè)頁面中的KV項(xiàng)的有效性,其中,所述有效性存儲(chǔ)空間包括多個(gè)與KV項(xiàng)對應(yīng)的存儲(chǔ)單元,所述存儲(chǔ)單元用于存儲(chǔ)對應(yīng)KV項(xiàng)的有效性,所述有效性為有效狀態(tài)或者無效狀態(tài)。

結(jié)合第一方面,本發(fā)明第一方面的第一種可能的實(shí)施方式中,在獲取第i個(gè)頁面的起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號之前,還包括:對KV項(xiàng)進(jìn)行編號,并將KV項(xiàng)的編號存儲(chǔ)到哈希表和/或所述KV項(xiàng)中。

結(jié)合第一方面的第一種可能的實(shí)施方式,本發(fā)明第一方面的第二種可能的實(shí)施方式中,所述方法還包括:在刪除或者更改KV項(xiàng)時(shí),從哈希表和/或需要?jiǎng)h除或者更改的KV項(xiàng)中獲取所述需要?jiǎng)h除或者更改的KV項(xiàng)的編號;根據(jù)所述需要?jiǎng)h除或者更改的KV項(xiàng)的編號在所述有效性存儲(chǔ)單元中查找到對應(yīng)的存儲(chǔ)單元;將所述對應(yīng)的存儲(chǔ)單元標(biāo)記為無效狀態(tài)。

結(jié)合第一方面或第一方面的第一種或第二種可能的實(shí)施方式,本發(fā)明第一方面的第三種可能的實(shí)施方式中,獲取第i個(gè)頁面的起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號具體包括:獲取第i個(gè)頁面的頁面信息以及第i+1個(gè)頁面的頁面信息,其中,第i個(gè)頁面的頁面信息包括第i個(gè)頁面的起始KV項(xiàng)的編號;根據(jù)所述第i個(gè)頁面的頁面信息獲得第i個(gè)頁面的起始KV項(xiàng)的編號;根據(jù)所述第i+1個(gè)頁面的頁面信息獲取第i+1個(gè)頁面的起始KV項(xiàng)的編號,并根據(jù)第i+1個(gè)頁面的起始KV項(xiàng)的編號獲得所述第i個(gè)頁面的結(jié)束KV項(xiàng)的編號;或者,獲取第i-1個(gè)頁面的頁面信息以及第i個(gè)頁面的頁面信息,其中,第i個(gè)頁面的頁面信息包括第i個(gè)頁面的結(jié)束KV項(xiàng)的編號;根據(jù)所述第i個(gè)頁面的頁面信息獲得第i個(gè)頁面的結(jié)束KV項(xiàng)的編號;根據(jù)所述第i-1個(gè)頁面的頁面信息獲取第i-1個(gè)頁面的結(jié)束KV項(xiàng)的編號,并根據(jù)第i-1個(gè)頁面的結(jié)束KV項(xiàng)的編號獲得所述第i個(gè)頁面的開始KV項(xiàng)的編號;或者,獲取第i個(gè)頁面的頁面信息,其中,第i個(gè)頁面的頁面信息包括第i個(gè)頁面的開始和結(jié)束KV項(xiàng)的編號。

結(jié)合第一方面或第一方面的第一種至第三種可能的實(shí)施方式中的任意一種,本發(fā)明第一方面的第四種可能的實(shí)施方式中,所述有效性存儲(chǔ)空間為位圖,所述位圖中的位的序號與KV項(xiàng)的編號對應(yīng),所述位圖中的位的值用于表示對應(yīng)的KV項(xiàng)的有效性。

結(jié)合第一方面或第一方面的第一種至第四種可能的實(shí)施方式中的任意一種,本發(fā)明第一方面的第五種可能的實(shí)施方式中,所述頁面信息還包括第i個(gè)頁面的起始KV項(xiàng)的偏移量,所述根據(jù)所述第i個(gè)頁面的KV項(xiàng)的編號查找有效性存儲(chǔ)空間以獲取所述第i個(gè)頁面中的KV項(xiàng)的有效性之后,還包括:根據(jù)第i個(gè)頁面的起始KV項(xiàng)的偏移量查找到第i個(gè)頁面的起始KV項(xiàng)的地址,并進(jìn)而找到第i個(gè)頁面中有效性為有效狀態(tài)的KV項(xiàng)的地址;將第i個(gè)頁面中有效性為有效狀態(tài)的KV項(xiàng)拷貝到有效數(shù)據(jù)區(qū)域。

第二方面,提供了一種KV項(xiàng)有效性獲取裝置,包括:獲取模塊、計(jì)算模塊以及查找模塊,所述獲取模塊用于獲取第i個(gè)頁面的起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號,其中,KV項(xiàng)包括索引、數(shù)據(jù)項(xiàng)以及元數(shù)據(jù),所述頁面為讀取單位,所述KV項(xiàng)連續(xù)存儲(chǔ)于部分、一個(gè)或多個(gè)塊中;所述計(jì)算模塊用于根據(jù)所述起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號計(jì)算得到第i個(gè)頁面的KV項(xiàng)的編號的范圍;所述查找模塊用于根據(jù)所述第i個(gè)頁面的KV項(xiàng)的編號查找有效性存儲(chǔ)空間以獲取所述第i個(gè)頁面中的KV項(xiàng)的有效性,其中,所述有效性存儲(chǔ)空間包括多個(gè)與KV項(xiàng)對應(yīng)的存儲(chǔ)單元,所述存儲(chǔ)單元用于存儲(chǔ)對應(yīng)KV項(xiàng)的有效性,所述有效性為有效狀態(tài)或者無效狀態(tài)。

結(jié)合第二方面,本發(fā)明第二方面的第一種可能的實(shí)施方式中,所述裝置還包括存儲(chǔ)模塊,所述存儲(chǔ)模塊用于對KV項(xiàng)進(jìn)行編號,并將KV項(xiàng)的編號存儲(chǔ)到哈希表和/或所述KV項(xiàng)中。

結(jié)合第二方面的第一種可能的實(shí)施方式,本發(fā)明第二方面的第二種可能的實(shí)施方式中,所述裝置還包括標(biāo)記模塊,所述獲取模塊用于在刪除或者更改KV項(xiàng)時(shí),從哈希表和/或需要?jiǎng)h除或者更改的KV項(xiàng)中獲取所述需要?jiǎng)h除或者更改的KV項(xiàng)的編號;所述查找模塊用于根據(jù)所述需要?jiǎng)h除或者更改的KV項(xiàng)的編號在所述有效性存儲(chǔ)單元中查找到對應(yīng)的存儲(chǔ)單元;所述標(biāo)記模塊用于將所述對應(yīng)的存儲(chǔ)單元標(biāo)記為無效狀態(tài)。

結(jié)合第二方面或第二方面的第一種或第二種可能的實(shí)施方式,本發(fā)明第二方面的第三種可能的實(shí)施方式中,所述獲取模塊具體用于獲取第i個(gè)頁面的頁面信息以及第i+1個(gè)頁面的頁面信息,其中,第i個(gè)頁面的頁面信息包括第i個(gè)頁面的起始KV項(xiàng)的編號;根據(jù)所述第i個(gè)頁面的頁面信息獲得第i個(gè)頁面的起始KV項(xiàng)的編號;根據(jù)所述第i+1個(gè)頁面的頁面信息獲取第i+1個(gè)頁面的起始KV項(xiàng)的編號,并根據(jù)第i+1個(gè)頁面的起始KV項(xiàng)的編號獲得所述第i個(gè)頁面的結(jié)束KV項(xiàng)的編號;或者,獲取第i-1個(gè)頁面的頁面信息以及第i個(gè)頁面的頁面信息,其中,第i個(gè)頁面的頁面信息包括第i個(gè)頁面的結(jié)束KV項(xiàng)的編號;根據(jù)所述第i個(gè)頁面的頁面信息獲得第i個(gè)頁面的結(jié)束KV項(xiàng)的編號;根據(jù)所述第i-1個(gè)頁面的頁面信息獲取第i-1個(gè)頁面的結(jié)束KV項(xiàng)的編號,并根據(jù)第i-1個(gè)頁面的結(jié)束KV項(xiàng)的編號獲得所述第i個(gè)頁面的開始KV項(xiàng)的編號;或者,獲取第i個(gè)頁面的頁面信息,其中,第i個(gè)頁面的頁面信息包括第i個(gè)頁面的開始和結(jié)束KV項(xiàng)的編號。

結(jié)合第二方面或第二方面的第一種至第三種可能的實(shí)施方式中的任意一種,本發(fā)明第二方面的第四種可能的實(shí)施方式中,所述有效性存儲(chǔ)空間為位圖,所述位圖中的位的序號與KV項(xiàng)的編號對應(yīng),所述位圖中的位的值用于表示對應(yīng)的KV項(xiàng)的有效性。

結(jié)合第二方面或第二方面的第一種至第四種可能的實(shí)施方式中的任意一種,本發(fā)明第二方面的第五種可能的實(shí)施方式中,所述頁面信息還包括第i個(gè)頁面的起始KV項(xiàng)的偏移量,所述裝置還包括查址模塊以及拷貝模塊,所述查址模塊用于根據(jù)第i個(gè)頁面的起始KV項(xiàng)的偏移量查找到第i個(gè)頁面的起始KV項(xiàng)的地址,并進(jìn)而找到第i個(gè)頁面中有效性為有效狀態(tài)的KV項(xiàng)的地址;所述拷貝模塊用于將第i個(gè)頁面中有效性為有效狀態(tài)的KV項(xiàng)拷貝到有效數(shù)據(jù)區(qū)域。

通過上述方案,一方面,在第i個(gè)頁面中的KV項(xiàng)連續(xù)存儲(chǔ),并且對第i個(gè)頁面中的KV項(xiàng)進(jìn)行了編號,另一方面,在有效性存儲(chǔ)空間中的對應(yīng)的存儲(chǔ)單元存儲(chǔ)了第i個(gè)頁面的KV項(xiàng)的有效性。所以,能夠通過獲取第i個(gè)頁面的起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號計(jì)算得到第i個(gè)頁面的KV項(xiàng)的編號,并根據(jù)第i個(gè)頁面的KV項(xiàng)的編號查找對應(yīng)的存儲(chǔ)單元,從而獲得第i個(gè)頁面的KV項(xiàng)的有效性。

附圖說明

圖1是現(xiàn)有技術(shù)中通過位圖與SSD中塊的映射關(guān)系的示意圖;

圖2是本發(fā)明提供的一種KV項(xiàng)有效性獲取方法的流程圖;

圖3a是本發(fā)明提供的一種KV項(xiàng)有效性獲取方法中KV項(xiàng)的編號的存儲(chǔ)方式一的示意圖;

圖3b是本發(fā)明提供的一種KV項(xiàng)有效性獲取方法中KV項(xiàng)的編號的存儲(chǔ)方式二的示意圖;

圖3c是本發(fā)明提供的一種KV項(xiàng)有效性獲取方法中KV項(xiàng)的編號的存儲(chǔ)方式三的示意圖;

圖4是本發(fā)明提供的一種KV項(xiàng)有效性獲取方法中通過位圖查找到KV項(xiàng)的有效性的示意圖;

圖5是本發(fā)明提供的一種KV項(xiàng)有效性獲取裝置的結(jié)構(gòu)示意圖。

具體實(shí)施方式

需要說明的是,在本發(fā)明實(shí)施例中使用的術(shù)語是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本發(fā)明。在本發(fā)明實(shí)施例和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”指兩者中的至少一種,例如“A和/或B”包括單獨(dú)A、單獨(dú)B、A和B三種情況。如無特別聲明,“A、B和/或C”包括單獨(dú)A、單獨(dú)B、單獨(dú)C,以及以上A、B、C的任意組合。

參考圖2,圖2是本發(fā)明提供的一種KV項(xiàng)有效性獲取方法的流程圖。本實(shí)施方式的KV項(xiàng)有效性獲取方法包括:

210:對KV項(xiàng)進(jìn)行編號,并將KV項(xiàng)的編號存儲(chǔ)到哈希表和/或KV項(xiàng)中。

請一并參閱圖3a,存儲(chǔ)空間可以分成多個(gè)塊,每個(gè)塊包含多個(gè)頁面310。在一個(gè)頁面310中,可以存儲(chǔ)一個(gè)或者多個(gè)KV項(xiàng)320,或者可以在多個(gè)頁面310中,存儲(chǔ)一個(gè)KV項(xiàng)320,具體由KV項(xiàng)320的大小決定。KV項(xiàng)320在存儲(chǔ)空間的部分、一個(gè)或多個(gè)塊中連續(xù)不間斷存儲(chǔ)。其中,存儲(chǔ)空間可以是SSD等等。可以理解的是,KV項(xiàng)320是存儲(chǔ)在頁面310中的,但是,為了便于表示,圖中將KV項(xiàng)320和頁面310分開進(jìn)行表示。

在將KV項(xiàng)320存儲(chǔ)到存儲(chǔ)空間時(shí),對KV項(xiàng)320按照一定的規(guī)則進(jìn)行編號。其中,編號可以是數(shù)字編號、字母編號等等。例如,對KV項(xiàng)320按照1,2,3……的規(guī)律進(jìn)行編號。KV項(xiàng)320的編號可以存儲(chǔ)在KV項(xiàng)320自身中(如圖3a所示),可以存儲(chǔ)在哈希表340中(如圖3b所示),也可以同時(shí)存儲(chǔ)在哈希表340以及KV項(xiàng)320自身中(如圖3c所示)。其中,哈希表340存儲(chǔ)在SCM或者DRAM中,包括多個(gè)項(xiàng)341,每個(gè)項(xiàng)341與一個(gè)KV項(xiàng)320對應(yīng),KV項(xiàng)320的編號可以存儲(chǔ)到哈希表340對應(yīng)的項(xiàng)341中。此外,還將每個(gè)頁面中的第一個(gè)完整的KV項(xiàng)的編號以及第一個(gè)完整的KV項(xiàng)的偏移地址存儲(chǔ)到頁面信息中。其中,頁面信息存儲(chǔ)在SCM。

SCM中還設(shè)置有有效性存儲(chǔ)空間。在一具體的實(shí)施例中,有效性存儲(chǔ)空間可以是位圖330,位圖330包括多個(gè)位331,位圖330中的位331的序號與KV項(xiàng)320的編號對應(yīng),位圖330中的位331的值用于表示對應(yīng)的KV項(xiàng)320的有效性。KV項(xiàng)320的有效性包括有效狀態(tài)或者無效狀態(tài),當(dāng)位圖330中的位331的值為“1”時(shí),表示對應(yīng)的KV項(xiàng)320的有效性為有效狀態(tài),當(dāng)位圖330中的位331的值為“0”時(shí),表示對應(yīng)的KV項(xiàng)320的有效性為無效狀態(tài)?;蛘?,當(dāng)位圖330中的位331的值為“0”時(shí),表示對應(yīng)的KV項(xiàng)320的有效性為有效狀態(tài),當(dāng)位圖330中的位331的值為“1”時(shí),表示對應(yīng)的KV項(xiàng)320的有效性為無效狀態(tài)。在另一具體的實(shí)施例中,有效性存儲(chǔ)空間可以是存儲(chǔ)空間的一部分,包括多個(gè)字段,每個(gè)字段與一個(gè)KV項(xiàng)320對應(yīng),用于存儲(chǔ)對應(yīng)的KV項(xiàng)320的有效性。當(dāng)字段的值為第一值時(shí),表示對應(yīng)的KV項(xiàng)320的有效性為無效狀態(tài);當(dāng)字段的值為第二值時(shí),表示對應(yīng)的KV項(xiàng)320的有效性為有效狀態(tài)。

220:判斷是否刪除或者更改KV項(xiàng)。

刪除KV項(xiàng)為使被刪除的KV項(xiàng)轉(zhuǎn)化為無效狀態(tài),更改KV項(xiàng)為使原來的KV項(xiàng)處于無效狀態(tài),并將新的KV項(xiàng)寫到新的位置。所以,當(dāng)刪除或者更改了KV項(xiàng)后,原來的KV項(xiàng)都會(huì)處于無效狀態(tài)。判斷是否刪除或者更改KV項(xiàng),如果刪除或者更改了KV項(xiàng),進(jìn)入步驟230;如果沒有刪除或者更改KV項(xiàng),進(jìn)步步驟240。

230:對對應(yīng)的存儲(chǔ)單元標(biāo)記。

在刪除或者更改KV項(xiàng)時(shí),原來的KV項(xiàng)都會(huì)處于無效狀態(tài),所以,需要對對應(yīng)的存儲(chǔ)單元進(jìn)行標(biāo)記,以將對應(yīng)的存儲(chǔ)單元的有效性從有效狀態(tài)更改為無效狀態(tài)。標(biāo)記時(shí),如果被刪除或者被修改的KV項(xiàng)的編號存儲(chǔ)在自身中,則可以直接從自身中讀取編號,并根據(jù)KV項(xiàng)的編號與有效性存儲(chǔ)單元的對應(yīng)關(guān)系查找到對應(yīng)的存儲(chǔ)單元,并將對應(yīng)的存儲(chǔ)單元標(biāo)記為無效狀態(tài)。如果被刪除或者被修改的KV項(xiàng)的編號存儲(chǔ)在哈希表中,則可以根據(jù)被刪除或者被修改的KV項(xiàng)與哈希表的項(xiàng)的對應(yīng)關(guān)系,查找到對應(yīng)的項(xiàng),并從對應(yīng)的項(xiàng)中讀取被刪除或者被修改的KV項(xiàng)的編號,根據(jù)KV項(xiàng)的編號與有效性存儲(chǔ)單元的對應(yīng)關(guān)系查找到對應(yīng)的存儲(chǔ)單元,并將對應(yīng)的存儲(chǔ)單元標(biāo)記為無效狀態(tài)。

240:獲取第i個(gè)頁面的起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號。

第i個(gè)頁面的起始KV項(xiàng)為第i個(gè)頁面中的第一個(gè)完整的KV項(xiàng)。第i個(gè)頁面的結(jié)束KV項(xiàng)為第i個(gè)頁面中的最后一個(gè)KV項(xiàng),最后一個(gè)KV項(xiàng)可以是完整的KV項(xiàng),也可以是不完整的KV項(xiàng)(即最后一個(gè)KV項(xiàng)的一部分存儲(chǔ)在下一個(gè)頁面中)。

獲取第i個(gè)頁面的起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號的方法為:

(1)在SCM中存儲(chǔ)各個(gè)頁面的頁面信息,其中,第i個(gè)頁面的頁面信息包括第i個(gè)頁面的起始KV項(xiàng)的編號。獲取第i個(gè)頁面的頁面信息,并從第i個(gè)頁面的頁面信息中獲取第i個(gè)頁面的起始KV項(xiàng)的編號。然后,從第i+1個(gè)頁面的頁面信息中獲取第i+1個(gè)頁面的起始KV項(xiàng)的編號。第i+1個(gè)頁面的起始KV項(xiàng)的編號的上一個(gè)編號即為第i個(gè)頁面的結(jié)束KV項(xiàng)的編號。

(2)在SCM中存儲(chǔ)各個(gè)頁面的頁面信息,其中,第i個(gè)頁面的頁面信息包括第i個(gè)頁面的結(jié)束KV項(xiàng)的編號。獲取第i個(gè)頁面的頁面信息,并從第i個(gè)頁面的頁面信息中獲取第i個(gè)頁面的結(jié)束KV項(xiàng)的編號。然后,從第i-1個(gè)頁面的頁面信息中獲取第i-1個(gè)頁面的結(jié)束KV項(xiàng)的編號。第i-1個(gè)頁面的起始KV項(xiàng)的編號的下一個(gè)編號即為第i個(gè)頁面的起始KV項(xiàng)的編號。

(3)在SCM中存儲(chǔ)各個(gè)頁面的頁面信息,其中,第i個(gè)頁面的頁面信息包括第i個(gè)頁面的起始KV項(xiàng)的編號以及第i個(gè)頁面的結(jié)束KV項(xiàng)的編號。獲取第i個(gè)頁面的頁面信息,并從第i個(gè)頁面的頁面信息中獲取第i個(gè)頁面的起始KV項(xiàng)的編號以及第i個(gè)頁面的結(jié)束KV項(xiàng)的編號。

250:根據(jù)起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號計(jì)算得到第i個(gè)頁面的KV項(xiàng)的編號的范圍。

在獲得第i個(gè)頁面的起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號后,根據(jù)編號的規(guī)則就可以計(jì)算出第i個(gè)頁面的KV項(xiàng)的編號。例如,以圖4為例,第1個(gè)頁面310的起始KV項(xiàng)320的編號為0,結(jié)束KV項(xiàng)320的編號為1,且編號的規(guī)律為1,2,3,……,所以,第1個(gè)頁面310的KV項(xiàng)320的編號為0,1。第2個(gè)頁面310的起始KV項(xiàng)320的編號為0,結(jié)束KV項(xiàng)320的編號為1,且編號的規(guī)律為1,2,3,……,所以,第2個(gè)頁面310的KV項(xiàng)320的編號為2,3。

260:根據(jù)第i個(gè)頁面的KV項(xiàng)的編號查找有效性存儲(chǔ)空間以獲取第i個(gè)頁面中的KV項(xiàng)的有效性。

在獲得第i個(gè)頁面的KV項(xiàng)后,根據(jù)KV項(xiàng)和有效性存儲(chǔ)空間的對應(yīng)關(guān)系,查找到第i個(gè)頁面中的KV項(xiàng)的有效性。繼續(xù)以圖4為例,第一個(gè)頁面310的KV項(xiàng)320的編號分別為編號0和編號1,所以,第一個(gè)頁面310的KV項(xiàng)320對應(yīng)位圖330的第一個(gè)位331,以及第二個(gè)位331。第一個(gè)位331的值為0(圖中以白塊表示),第二個(gè)位331的值為1(圖中以黑塊表示),所以,查詢位圖331后可以知道,編號為0的KV項(xiàng)320的有效性為無效狀態(tài),編號為1的KV項(xiàng)320的有效性為有效狀態(tài)。

270:判斷第i個(gè)頁面是否具有有效KV項(xiàng)。

如果第i個(gè)頁面不存在有效KV項(xiàng),則指向下一個(gè)頁面,并返回步驟240,如果第i個(gè)頁面存在有效KV項(xiàng),則進(jìn)入步驟280。

280:將第i個(gè)頁面中有效性為有效狀態(tài)的KV項(xiàng)拷貝到有效數(shù)據(jù)區(qū)域。

在一具體的實(shí)施例中,頁面信息還包括第i個(gè)頁面的起始KV項(xiàng)的偏移量。所以,可以根據(jù)第i個(gè)頁面的起始KV項(xiàng)的偏移量查找到第i個(gè)頁面的起始KV項(xiàng)的地址,并進(jìn)而找到第i個(gè)頁面中有效性為有效狀態(tài)的KV項(xiàng)的地址。然后,將第i個(gè)頁面中有效性為有效狀態(tài)的KV項(xiàng)拷貝到有效數(shù)據(jù)區(qū)域。其中,有效數(shù)據(jù)區(qū)域是存儲(chǔ)空間中的一部分存儲(chǔ)區(qū)域且能夠用于從存儲(chǔ)數(shù)據(jù)。

290:進(jìn)行擦除操作。

重復(fù)執(zhí)行步驟240至步驟280,直到需要進(jìn)行垃圾回收的頁面都處理完畢。然后,對需要進(jìn)行垃圾回收的頁面進(jìn)行擦除操作,擦除完成后,這些頁面又可以重新用于存儲(chǔ)數(shù)據(jù)。

可以理解的是,如果只需要對KV項(xiàng)的有效性進(jìn)行標(biāo)記,可以只執(zhí)行步驟210至步驟230。如果只需要根據(jù)標(biāo)記的結(jié)果進(jìn)行垃圾回收,則可以只執(zhí)行步驟240至步驟290。

通過上述方案,一方面,在第i個(gè)頁面中的KV項(xiàng)連續(xù)存儲(chǔ),并且對第i個(gè)頁面中的KV項(xiàng)進(jìn)行了編號,另一方面,在有效性存儲(chǔ)空間中的對應(yīng)的存儲(chǔ)單元存儲(chǔ)了第i個(gè)頁面的KV項(xiàng)的有效性。所以,能夠通過獲取第i個(gè)頁面的起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號計(jì)算得到第i個(gè)頁面的KV項(xiàng)的編號,并根據(jù)第i個(gè)頁面的KV項(xiàng)的編號查找對應(yīng)的存儲(chǔ)單元,從而獲得第i個(gè)頁面的KV項(xiàng)的有效性。

參閱圖5,圖5是本發(fā)明提供的一種KV項(xiàng)有效性獲取裝置的結(jié)構(gòu)示意圖。本實(shí)施例的KV項(xiàng)有效性獲取裝置包括:獲取模塊510、計(jì)算模塊520以及查找模塊530。

所述獲取模塊510用于獲取第i個(gè)頁面的起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號,其中,KV項(xiàng)包括索引、數(shù)據(jù)項(xiàng)以及元數(shù)據(jù),所述頁面為存儲(chǔ)單位,所述KV項(xiàng)連續(xù)存儲(chǔ)于部分、一個(gè)或多個(gè)塊中;

所述計(jì)算模塊520用于根據(jù)所述起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號計(jì)算得到第i個(gè)頁面的KV項(xiàng)的編號范圍;

所述查找模塊530用于根據(jù)所述第i個(gè)頁面的KV項(xiàng)的編號查找有效性存儲(chǔ)空間以獲取所述第i個(gè)頁面中的KV項(xiàng)的有效性,其中,所述有效性存儲(chǔ)空間包括多個(gè)與KV項(xiàng)對應(yīng)的存儲(chǔ)單元,所述存儲(chǔ)單元用于存儲(chǔ)對應(yīng)KV項(xiàng)的有效性,所述有效性為有效狀態(tài)或者無效狀態(tài)。

可選地,所述裝置還包括存儲(chǔ)模塊540,所述存儲(chǔ)模塊540用于對KV項(xiàng)進(jìn)行編號,并將KV項(xiàng)的編號存儲(chǔ)到哈希表和/或所述KV項(xiàng)中。

可選地,所述裝置還包括標(biāo)記模塊550,所述獲取模塊510用于在刪除或者更改KV項(xiàng)時(shí),從哈希表和/或需要?jiǎng)h除或者更改的KV項(xiàng)中獲取所述需要?jiǎng)h除或者更改的KV項(xiàng)的編號;所述查找模塊530用于根據(jù)所述需要?jiǎng)h除或者更改的KV項(xiàng)的編號在所述有效性存儲(chǔ)單元中查找到對應(yīng)的存儲(chǔ)單元;所述標(biāo)記模塊550用于將所述對應(yīng)的存儲(chǔ)單元標(biāo)記為無效狀態(tài)。

可選地,所述獲取模塊510具體用于獲取第i個(gè)頁面的頁面信息以及第i+1個(gè)頁面的頁面信息,其中,第i個(gè)頁面的頁面信息包括第i個(gè)頁面的起始KV項(xiàng)的編號;根據(jù)所述第i個(gè)頁面的頁面信息獲得第i個(gè)頁面的起始KV項(xiàng)的編號;根據(jù)所述第i+1個(gè)頁面的頁面信息獲取第i+1個(gè)頁面的起始KV項(xiàng)的編號,并根據(jù)第i+1個(gè)頁面的起始KV項(xiàng)的編號獲得所述第i個(gè)頁面的結(jié)束KV項(xiàng)的編號;或者,獲取第i-1個(gè)頁面的頁面信息以及第i個(gè)頁面的頁面信息,其中,第i個(gè)頁面的頁面信息包括第i個(gè)頁面的結(jié)束KV項(xiàng)的編號;根據(jù)所述第i個(gè)頁面的頁面信息獲得第i個(gè)頁面的結(jié)束KV項(xiàng)的編號;根據(jù)所述第i-1個(gè)頁面的頁面信息獲取第i-1個(gè)頁面的結(jié)束KV項(xiàng)的編號,并根據(jù)第i-1個(gè)頁面的結(jié)束KV項(xiàng)的編號獲得所述第i個(gè)頁面的開始KV項(xiàng)的編號;或者,獲取第i個(gè)頁面的頁面信息,其中,第i個(gè)頁面的頁面信息包括第i個(gè)頁面的開始和結(jié)束KV項(xiàng)的編號。

可選地,所述有效性存儲(chǔ)空間為位圖,所述位圖中的位的序號與KV項(xiàng)的編號對應(yīng),所述位圖中的位的值用于表示對應(yīng)的KV項(xiàng)的有效性。

可選地,所述頁面信息還包括第i個(gè)頁面的起始KV項(xiàng)的偏移量,所述裝置還包括查址模塊560以及拷貝模塊570,所述查址模塊560用于根據(jù)第i個(gè)頁面的起始KV項(xiàng)的偏移量查找到第i個(gè)頁面的起始KV項(xiàng)的地址,并進(jìn)而找到第i個(gè)頁面中有效性為有效狀態(tài)的KV項(xiàng)的地址;所述拷貝模塊570用于將第i個(gè)頁面中有效性為有效狀態(tài)的KV項(xiàng)拷貝到有效數(shù)據(jù)區(qū)域。

本實(shí)施例的裝置與圖1所示的方法對應(yīng),具體請參閱圖1以及相關(guān)描述,此處不再展開描述。

通過上述方案,一方面,在第i個(gè)頁面中的KV項(xiàng)連續(xù)存儲(chǔ),并且對第i個(gè)頁面中的KV項(xiàng)進(jìn)行了編號,另一方面,在有效性存儲(chǔ)空間中的對應(yīng)的存儲(chǔ)單元存儲(chǔ)了第i個(gè)頁面的KV項(xiàng)的有效性。所以,能夠通過獲取第i個(gè)頁面的起始KV項(xiàng)的編號以及結(jié)束KV項(xiàng)的編號計(jì)算得到第i個(gè)頁面的KV項(xiàng)的編號,并根據(jù)第i個(gè)頁面的KV項(xiàng)的編號查找對應(yīng)的存儲(chǔ)單元,從而獲得第i個(gè)頁面的KV項(xiàng)的有效性。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
西青区| 濮阳市| 荥阳市| 肥西县| 双柏县| 雅安市| 阿尔山市| 柳州市| 武城县| 和龙市| 大同县| 烟台市| 元谋县| 长寿区| 轮台县| 寻乌县| 石城县| 卢湾区| 乐昌市| 玉林市| 增城市| 石首市| 大渡口区| 洱源县| 即墨市| 静宁县| 南通市| 桂东县| 永康市| 德江县| 南宫市| 同江市| 犍为县| 龙门县| 金塔县| 武城县| 东台市| 四会市| 玛纳斯县| 蕉岭县| 邛崃市|