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

鍵值KV存儲(chǔ)方法和裝置與流程

文檔序號(hào):11519695閱讀:191來(lái)源:國(guó)知局
鍵值KV存儲(chǔ)方法和裝置與流程
本發(fā)明實(shí)施例涉及數(shù)據(jù)存儲(chǔ)
技術(shù)領(lǐng)域
,特別涉及一種鍵值kv存儲(chǔ)方法和裝置。
背景技術(shù)
:隨著scm(storageclassmemory,存儲(chǔ)型內(nèi)存)的發(fā)展,scm已逐漸應(yīng)用于kv(keyvlaue,鍵值)存儲(chǔ)中。在使用scm進(jìn)行存儲(chǔ)時(shí),可以使用scm和ssd(solidstatedrives,固態(tài)硬盤(pán))混合存儲(chǔ)。而現(xiàn)有技術(shù)中通常將scm作為ssd的緩存使用,因此這并未充分利用scm的特性,現(xiàn)有的kv存儲(chǔ)的性能較低。技術(shù)實(shí)現(xiàn)要素:為了解決現(xiàn)有技術(shù)中kv存儲(chǔ)的存儲(chǔ)性能低的問(wèn)題,本發(fā)明實(shí)施例提供了一種kv存儲(chǔ)方法和裝置,所述技術(shù)方案如下:第一方面,提供了一種kv存儲(chǔ)方法,該方法包括:在存儲(chǔ)目標(biāo)鍵值kv時(shí),存儲(chǔ)目標(biāo)kv中的值value至存儲(chǔ)型內(nèi)存scm中的不定長(zhǎng)頁(yè)面;更新主索引和映射表,主索引中包括已存儲(chǔ)的kv中的key和邏輯地址之間的映射關(guān)系;映射表中包括已存儲(chǔ)的kv的邏輯地址和物理地址之間的映射關(guān)系;在滿足第一合并條件時(shí),合并不定長(zhǎng)頁(yè)面中的value至scm中的定長(zhǎng)頁(yè)面;更新映射表;在滿足第二合并條件時(shí),合并定長(zhǎng)頁(yè)面中的value至固態(tài)硬盤(pán)ssd中的塊頁(yè)面;再次更新映射表。通過(guò)將目標(biāo)kv中的value存儲(chǔ)至scm中的不定長(zhǎng)頁(yè)面,進(jìn)而在滿足第一合并條件時(shí),將不定長(zhǎng)頁(yè)面中的value合并至scm中的定長(zhǎng)頁(yè)面,并在滿足第二合并條件時(shí),將scm中的定長(zhǎng)頁(yè)面中的value合并至ssd中;也即充分使用scm和ssd進(jìn)行混合存儲(chǔ);解決了現(xiàn)有技術(shù)中kv存儲(chǔ)的性能較低的問(wèn)題,達(dá)到了可以提高kv存儲(chǔ)的性能的效果。在第一種可能的實(shí)現(xiàn)方式中,上述更新映射表的步驟可以包括:獲取目標(biāo)kv的目標(biāo)邏輯地址以及在不定長(zhǎng)頁(yè)面中的目標(biāo)物理地址;獲取映射表中目標(biāo)邏輯地址所對(duì)應(yīng)的初始物理地址;生成物理地址鏈,物理地址鏈中包括目標(biāo)物理地址以及設(shè)置在目標(biāo)物理地址的預(yù)設(shè)位置處的指示信息,預(yù)設(shè)位置包括目標(biāo)物理地址之前或者之后的位置,指示信息用于指向初始物理地址;將映射表中的初始物理地址更新為物理地址鏈。在第二種可能的實(shí)現(xiàn)方式中,在滿足第一合并條件時(shí),合并不定長(zhǎng)頁(yè)面中的value至scm中的定長(zhǎng)頁(yè)面;更新映射表,包括:在物理地址鏈滿足預(yù)設(shè)條件時(shí),將物理地址鏈所指向的物理地址中的value合并至scm中的定長(zhǎng)頁(yè)面;預(yù)設(shè)條件包括:物理地址鏈的長(zhǎng)度達(dá)到預(yù)設(shè)長(zhǎng)度,或者,物理地址鏈所對(duì)應(yīng)的不定長(zhǎng)頁(yè)面的個(gè)數(shù)達(dá)到預(yù)設(shè)個(gè)數(shù)。在第三種可能的實(shí)現(xiàn)方式中,獲取映射表中目標(biāo)邏輯地址所對(duì)應(yīng)的初始物理地址,包括:若映射表中不存在目標(biāo)邏輯地址所對(duì)應(yīng)的物理地址,則將初始物理地址確定為空。在第四種可能的實(shí)現(xiàn)方式中,在滿足第一合并條件時(shí),合并不定長(zhǎng)頁(yè)面中的value至scm中的定長(zhǎng)頁(yè)面;更新映射表,包括:在scm中不定長(zhǎng)頁(yè)面的剩余資源低于第一閾值時(shí),合并不定長(zhǎng)頁(yè)面中的value至scm中的定長(zhǎng)頁(yè)面。在第五種可能的實(shí)現(xiàn)方式中,在滿足第二合并條件時(shí),合并定長(zhǎng)頁(yè)面中的value至ssd中的塊頁(yè)面,包括:在相鄰的定長(zhǎng)頁(yè)面的個(gè)數(shù)達(dá)到預(yù)設(shè)個(gè)數(shù)時(shí),合并預(yù)設(shè)個(gè)數(shù)的定長(zhǎng)頁(yè)面中的value至塊頁(yè)面;相鄰的定長(zhǎng)頁(yè)面是指存儲(chǔ)的value所對(duì)應(yīng)的key的取值連續(xù)的頁(yè)面;或者,在scm中的定長(zhǎng)頁(yè)面的空閑資源低于第二閾值時(shí),合并定長(zhǎng)頁(yè)面中的value至塊頁(yè)面。在第六種可能的實(shí)現(xiàn)方式中,該方法還包括:在存儲(chǔ)目標(biāo)kv中的value至不定長(zhǎng)頁(yè)面之后,更新臨時(shí)索引,臨時(shí)索引中包括已存儲(chǔ)的kv中的key和value在不定長(zhǎng)頁(yè)面中的物理地址之間的映射關(guān)系;更新主索引和映射表,包括:在提交目標(biāo)kv之后,根據(jù)臨時(shí)索引更新主索引和映射表。第二方面,提供了一種kv存儲(chǔ)裝置,該裝置用于實(shí)現(xiàn)第一方面所述的功能。所述功能可以通過(guò)硬件實(shí)現(xiàn),也可以通過(guò)硬件執(zhí)行相應(yīng)的軟件實(shí)現(xiàn)。所述硬件或軟件包括一個(gè)或多個(gè)與上述功能相對(duì)應(yīng)的模塊。本發(fā)明的這些方面或其他方面在以下實(shí)施例的描述中會(huì)更加簡(jiǎn)明易懂。附圖說(shuō)明圖1是本發(fā)明各個(gè)實(shí)施例所涉及的存儲(chǔ)設(shè)備的示意圖。圖2是本發(fā)明一個(gè)實(shí)施例提供的kv存儲(chǔ)方法的方法流程圖。圖3是本發(fā)明一個(gè)實(shí)施例提供的kv存儲(chǔ)方法的方法流程圖。圖4是本發(fā)明一個(gè)實(shí)施例提供的讀取數(shù)據(jù)的方法流程圖。圖5是本發(fā)明一個(gè)實(shí)施例提供的讀取數(shù)據(jù)的方法流程圖。圖6是本發(fā)明一個(gè)實(shí)施例提供的kv存儲(chǔ)裝置的框圖。具體實(shí)施方式為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述。下述各個(gè)實(shí)施例提供的kv存儲(chǔ)方法可以用于存儲(chǔ)設(shè)備中,如圖1所示,該存儲(chǔ)設(shè)備中可以包括accessmethod(接入入口)11、storageengine(存儲(chǔ)引擎)12、dram(dynamicrandomaccessmemory,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器)13、scm14和ssd15。其中:accessmethod11用于提供對(duì)外的kv存儲(chǔ)入口,accessmethod11中包含臨時(shí)索引和主索引。其中,臨時(shí)索引用于索引未commit(提交)的kv,該臨時(shí)索引中包括key與value的物理地址之間的映射關(guān)系;主索引用于索引已commit的kv,該主索引中包括key與value的邏輯地址之間的映射關(guān)系。storageengine12中包括映射表以及頁(yè)面管理器。映射表包括已存儲(chǔ)的kv的邏輯地址和物理地址之間的映射關(guān)系,物理地址用于指向dram13、scm14和ssd15;頁(yè)面管理器用于管理dram13、scm14和ssd15,其用于申請(qǐng)和釋放資源。scm14可以提供三種接口。第一種接口提供類似于內(nèi)存的方式,可以使用字節(jié)尋址,也即可以申請(qǐng)不定長(zhǎng)的頁(yè)面,其由硬件管理;比如,m-type;第二種接口類似于塊設(shè)備的方式,也即申請(qǐng)的頁(yè)面均為定長(zhǎng)如固定為200kb,通常情況下其由軟件管理;比如,s-type;第三種接口是指可以根據(jù)使用需求靈活結(jié)合第一種接口和第二種接口的接口。在下述各個(gè)實(shí)施例中,除特殊說(shuō)明外,下述各個(gè)實(shí)施例中的scm使用第三種接口。請(qǐng)參考圖2,其示出了本發(fā)明一個(gè)實(shí)施例提供的kv存儲(chǔ)方法的流程圖,本實(shí)施例以該kv存儲(chǔ)方法用于圖1所示的存儲(chǔ)設(shè)備中來(lái)舉例說(shuō)明。如圖2所示,該kv存儲(chǔ)方法包括:步驟201,在存儲(chǔ)目標(biāo)kv時(shí),存儲(chǔ)目標(biāo)kv中的value至scm中的不定長(zhǎng)頁(yè)面。用戶需要存儲(chǔ)數(shù)據(jù)至存儲(chǔ)設(shè)備時(shí),用戶可以觸發(fā)數(shù)據(jù)存儲(chǔ)請(qǐng)求,相應(yīng)的,存儲(chǔ)設(shè)備可以接收到該數(shù)據(jù)存儲(chǔ)請(qǐng)求。其中,數(shù)據(jù)存儲(chǔ)請(qǐng)求中攜帶有需要存儲(chǔ)的目標(biāo)kv,其中,目標(biāo)kv可以為一個(gè),也可以為多個(gè),對(duì)此并不做限定。并且,該數(shù)據(jù)存儲(chǔ)請(qǐng)求可以為首次存儲(chǔ)目標(biāo)kv的存儲(chǔ)請(qǐng)求,也可以為更新已有key的value的更新請(qǐng)求,對(duì)此并不做限定。存儲(chǔ)設(shè)備接收到數(shù)據(jù)存儲(chǔ)請(qǐng)求之后,存儲(chǔ)設(shè)備可以根據(jù)目標(biāo)kv中的vlaue的大小在m-type的scm中申請(qǐng)一個(gè)不定長(zhǎng)頁(yè)面。其中,不定長(zhǎng)頁(yè)面的大小大于vlaue的大小,并且通常等于vlaue的大小和數(shù)據(jù)包頭的大小的總和。在申請(qǐng)不定長(zhǎng)頁(yè)面時(shí),存儲(chǔ)設(shè)備可以根據(jù)m-type的scm中各個(gè)存儲(chǔ)地址被寫(xiě)入數(shù)據(jù)的寫(xiě)入次數(shù),在m-type的scm中申請(qǐng)寫(xiě)入次數(shù)滿足預(yù)設(shè)條件的各個(gè)存儲(chǔ)地址,申請(qǐng)到的各個(gè)存儲(chǔ)地址共同組成該不定長(zhǎng)頁(yè)面。其中,預(yù)設(shè)條件包括寫(xiě)入次數(shù)最少,或者,寫(xiě)入次數(shù)小于預(yù)設(shè)次數(shù),本實(shí)施例對(duì)此并不做限定。通過(guò)在申請(qǐng)不定長(zhǎng)頁(yè)面時(shí)申請(qǐng)寫(xiě)入次數(shù)滿足預(yù)設(shè)條件的頁(yè)面,達(dá)到了可以實(shí)現(xiàn)scm的磨損均衡,提高了scm的性能的效果。實(shí)際實(shí)現(xiàn)時(shí),存儲(chǔ)設(shè)備可以通過(guò)頁(yè)面管理器在m-type的scm中申請(qǐng)一個(gè)不定長(zhǎng)頁(yè)面,對(duì)此并不做限定。在存儲(chǔ)設(shè)備申請(qǐng)到不定長(zhǎng)頁(yè)面之后,存儲(chǔ)設(shè)備可以存儲(chǔ)目標(biāo)kv中的value至申請(qǐng)的該不定長(zhǎng)頁(yè)面。步驟202,更新主索引和映射表,主索引中包括已存儲(chǔ)的kv中的key和邏輯地址之間的映射關(guān)系;映射表中包括已存儲(chǔ)的kv的邏輯地址和物理地址之間的映射關(guān)系。在存儲(chǔ)value至不定長(zhǎng)頁(yè)面之后,存儲(chǔ)設(shè)備可以得到臨時(shí)索引,該臨時(shí)索引包括key與不定長(zhǎng)頁(yè)面的物理地址之間的映射關(guān)系??蛇x地,若臨時(shí)索引中已經(jīng)包含該key所對(duì)應(yīng)的映射關(guān)系,則存儲(chǔ)設(shè)備更新已有的映射關(guān)系,而若臨時(shí)索引中未包含該key所對(duì)應(yīng)的映射關(guān)系,則該存儲(chǔ)設(shè)備生成包括該key與不定長(zhǎng)頁(yè)面的物理地址之間的映射關(guān)系,對(duì)此并不做限定。在數(shù)據(jù)commit之后,存儲(chǔ)設(shè)備可以將臨時(shí)索引合并至主索引并更新映射表。本實(shí)施例所說(shuō)的commit是指,當(dāng)批量存儲(chǔ)時(shí),最后一個(gè)kv到來(lái)之后觸發(fā)的動(dòng)作。可選地,存儲(chǔ)設(shè)備更新主索引的步驟可以包括:存儲(chǔ)設(shè)備檢測(cè)主索引中是否包含臨時(shí)索引中的key所對(duì)應(yīng)的映射關(guān)系,若包含,則結(jié)束;而若不包含,則存儲(chǔ)設(shè)備將臨時(shí)索引中的key和該key所對(duì)應(yīng)的目標(biāo)邏輯地址之間的映射關(guān)系添加至主索引。key所對(duì)應(yīng)的目標(biāo)邏輯地址為存儲(chǔ)設(shè)備根據(jù)key的取值分配的地址??蛇x地,存儲(chǔ)設(shè)備可以為多個(gè)key分配同一個(gè)邏輯地址。比如,請(qǐng)參考表1,其示出了key與邏輯地址之間的映射關(guān)系。key的取值邏輯地址0-100邏輯地址1101-200邏輯地址2201-300邏輯地址3表1結(jié)合表1,若目標(biāo)kv的key為89,則存儲(chǔ)設(shè)備為該目標(biāo)kv分配的邏輯地址為邏輯地址1,也就是說(shuō),目標(biāo)kv中的key所對(duì)應(yīng)的目標(biāo)邏輯地址為邏輯地址1。實(shí)際實(shí)現(xiàn)時(shí),存儲(chǔ)設(shè)備更新主索引時(shí)可以通過(guò)cas(compareandswap,比較并交換)技術(shù)來(lái)提高并發(fā)度,在此不再贅述。存儲(chǔ)設(shè)備更新映射表的步驟可以包括:第一,獲取目標(biāo)kv的目標(biāo)邏輯地址以及在不定長(zhǎng)頁(yè)面中的目標(biāo)物理地址。存儲(chǔ)設(shè)備可以根據(jù)主索引獲取該目標(biāo)kv的目標(biāo)邏輯地址,并根據(jù)臨時(shí)索引確定該目標(biāo)kv的目標(biāo)物理地址。第二,獲取映射表中目標(biāo)邏輯地址所對(duì)應(yīng)的初始物理地址。存儲(chǔ)設(shè)備可以查詢映射表中該目標(biāo)邏輯地址所對(duì)應(yīng)的初始物理地址??蛇x地,存儲(chǔ)設(shè)備可以檢測(cè)映射表中是否包含該目標(biāo)邏輯地址和物理地址之間的映射關(guān)系;若不包含,則確認(rèn)初始物理地址為空;而若包含,則獲取映射表中的該目標(biāo)邏輯地址所對(duì)應(yīng)的物理地址,將獲取到的物理地址作為初始物理地址。第三,生成物理地址鏈,物理地址鏈中包括目標(biāo)物理地址以及設(shè)置在目標(biāo)物理地址的預(yù)設(shè)位置處的指示信息,預(yù)設(shè)位置包括目標(biāo)物理地址之前或者之后的位置,指示信息用于指向初始物理地址。以預(yù)設(shè)位置為目標(biāo)物理地址的尾部為例,存儲(chǔ)設(shè)備可以在目標(biāo)物理地址的尾部增加一個(gè)指針,該指針用于指向初始物理地址,將目標(biāo)物理地址和增加的該指針作為物理地址鏈。實(shí)際實(shí)現(xiàn)時(shí),初始物理地址也可以為物理地址鏈。比如,結(jié)合表1,對(duì)于邏輯地址1而言,在存儲(chǔ)key為30的kv之后,映射表中包含有邏輯地址1和key為30的value的物理地址之間的映射關(guān)系;此后,在存儲(chǔ)key為58的kv時(shí),由于映射表中已經(jīng)包含有邏輯地址1所對(duì)應(yīng)的初始物理地址,此時(shí),存儲(chǔ)設(shè)備可以生成包含key為58的value的物理地址以及指針的物理地址鏈。其中該指針指向key為30的value的物理地址。之后,在存儲(chǔ)key為88的kv時(shí),存儲(chǔ)設(shè)備獲取到邏輯地址1所對(duì)應(yīng)的初始物理地址即為一個(gè)物理地址鏈,在此不再贅述。第四,將映射表中的初始物理地址更新為物理地址鏈。此后,存儲(chǔ)設(shè)備即可將映射表中目標(biāo)邏輯地址所對(duì)應(yīng)的初始物理地址更新為物理地址鏈。步驟203,在滿足第一合并條件時(shí),合并不定長(zhǎng)頁(yè)面中的value至scm中的定長(zhǎng)頁(yè)面??蛇x地,本步驟可以包括如下兩種可能的實(shí)現(xiàn)方式。第一種,在物理地址鏈滿足預(yù)設(shè)條件時(shí),將物理地址鏈所指向的物理地址中的value合并至scm中的定長(zhǎng)頁(yè)面;預(yù)設(shè)條件包括:物理地址鏈的長(zhǎng)度達(dá)到預(yù)設(shè)長(zhǎng)度,或者,物理地址鏈所對(duì)應(yīng)的不定長(zhǎng)頁(yè)面的個(gè)數(shù)達(dá)到預(yù)設(shè)個(gè)數(shù)。其中,物理地址鏈所對(duì)應(yīng)的不定長(zhǎng)頁(yè)面的個(gè)數(shù)為包含的指示信息的個(gè)數(shù)+1,在此不再贅述。對(duì)于各個(gè)邏輯地址所對(duì)應(yīng)的物理地址鏈,若某一物理地址鏈滿足預(yù)設(shè)條件,則存儲(chǔ)設(shè)備可以在s-type的scm中申請(qǐng)一個(gè)定長(zhǎng)頁(yè)面,并將物理地址鏈所指示的頁(yè)面中的數(shù)據(jù)合并至該申請(qǐng)的定長(zhǎng)頁(yè)面中??蛇x地,與申請(qǐng)不定長(zhǎng)頁(yè)面類似,在申請(qǐng)定長(zhǎng)頁(yè)面時(shí),存儲(chǔ)設(shè)備可以根據(jù)s-type的scm中各個(gè)存儲(chǔ)地址被寫(xiě)入數(shù)據(jù)的寫(xiě)入次數(shù),在s-type的scm中申請(qǐng)寫(xiě)入次數(shù)滿足預(yù)設(shè)條件的各個(gè)存儲(chǔ)地址,申請(qǐng)到的各個(gè)存儲(chǔ)地址共同組成該不定長(zhǎng)頁(yè)面。在此不再贅述。需要說(shuō)明的是,若一個(gè)定長(zhǎng)頁(yè)面中無(wú)法存儲(chǔ)物理地址鏈所對(duì)應(yīng)的全部物理地址中的value,則此時(shí),存儲(chǔ)設(shè)備還可以繼續(xù)申請(qǐng)定長(zhǎng)頁(yè)面,將剩余的value存儲(chǔ)至繼續(xù)申請(qǐng)的定長(zhǎng)頁(yè)面中;或者,存儲(chǔ)設(shè)備還可以將已經(jīng)申請(qǐng)的定長(zhǎng)頁(yè)面中存儲(chǔ)的value合并至ssd的塊頁(yè)面中,并將剩余的value繼續(xù)存儲(chǔ)至已經(jīng)申請(qǐng)的定長(zhǎng)頁(yè)面,本實(shí)施例在此不再贅述。第二種,在scm中不定長(zhǎng)頁(yè)面的剩余資源低于第一閾值時(shí),合并不定長(zhǎng)頁(yè)面中的value至scm中的定長(zhǎng)頁(yè)面。在第二種可能的實(shí)現(xiàn)中,當(dāng)m-type的scm的剩余資源低于第一閾值時(shí),若此后繼續(xù)有新的kv需要寫(xiě)入,則此時(shí)kv可能無(wú)法寫(xiě)入,因此,為了保證后續(xù)kv能夠正常寫(xiě)入,存儲(chǔ)設(shè)備可以將不定長(zhǎng)頁(yè)面中的數(shù)據(jù)合并至申請(qǐng)的定長(zhǎng)頁(yè)面中。其中,存儲(chǔ)設(shè)備申請(qǐng)定長(zhǎng)頁(yè)面的申請(qǐng)方式與第一種實(shí)現(xiàn)方式類似,在此不再贅述。其中,第一閾值為存儲(chǔ)設(shè)備中預(yù)先設(shè)定的數(shù)值,對(duì)此并不做限定。步驟204,更新映射表。在將不定長(zhǎng)頁(yè)面中的value合并至定長(zhǎng)頁(yè)面之后,由于value的存儲(chǔ)位置發(fā)生變化,因此,存儲(chǔ)設(shè)備可以將映射表中指向合并前的不定長(zhǎng)頁(yè)面的物理地址更新為指向合并后的定長(zhǎng)頁(yè)面的物理地址,在此不再贅述。步驟205,在滿足第二合并條件時(shí),合并定長(zhǎng)頁(yè)面中的value至ssd中的塊頁(yè)面。本步驟可以包括如下兩種可能的實(shí)現(xiàn)方式。第一種,在相鄰的定長(zhǎng)頁(yè)面的個(gè)數(shù)達(dá)到預(yù)設(shè)個(gè)數(shù)時(shí),合并預(yù)設(shè)個(gè)數(shù)的定長(zhǎng)頁(yè)面中的數(shù)據(jù)至塊頁(yè)面。其中,相鄰的定長(zhǎng)頁(yè)面是指存儲(chǔ)的vlaue是取值范圍相鄰的key所對(duì)應(yīng)的value的定長(zhǎng)頁(yè)面。比如,仍然以表1中邏輯地址與key的映射關(guān)系為例,若定長(zhǎng)頁(yè)面中存儲(chǔ)有邏輯地址1所對(duì)應(yīng)key的value,另一定長(zhǎng)頁(yè)面中存儲(chǔ)有邏輯地址2所對(duì)應(yīng)的key的value,則由于邏輯地址1所對(duì)應(yīng)的key的范圍與邏輯地址2所對(duì)應(yīng)的key的范圍連續(xù),因此,這兩個(gè)定長(zhǎng)頁(yè)面即為相鄰頁(yè)面。預(yù)設(shè)個(gè)數(shù)是系統(tǒng)默認(rèn)的數(shù)值,在此不再贅述。合并定長(zhǎng)頁(yè)面中的數(shù)據(jù)至ssd中的塊頁(yè)面的步驟可以包括:存儲(chǔ)設(shè)備在ssd中申請(qǐng)一個(gè)塊頁(yè)面,合并定長(zhǎng)頁(yè)面中的數(shù)據(jù)至申請(qǐng)的塊頁(yè)面。其中,塊頁(yè)面的大小依賴于ssd的特性,并根據(jù)ssd暴露的級(jí)別來(lái)確定,比如,當(dāng)ssd暴露channel級(jí)別時(shí),塊頁(yè)面通常為幾m到幾十m,對(duì)此并不做限定。并且,存儲(chǔ)設(shè)備申請(qǐng)塊頁(yè)面的申請(qǐng)方式與在m-type和s-type中申請(qǐng)不定長(zhǎng)頁(yè)面和申請(qǐng)定長(zhǎng)頁(yè)面的申請(qǐng)方式類似,均可以申請(qǐng)寫(xiě)入次數(shù)滿足預(yù)設(shè)條件的塊頁(yè)面,進(jìn)而達(dá)到磨損均衡的效果。第二種,在scm中的定長(zhǎng)頁(yè)面的空閑資源低于第二閾值時(shí),合并定長(zhǎng)頁(yè)面中的數(shù)據(jù)至塊頁(yè)面。在第二種可能的實(shí)現(xiàn)方式中,在scm中的定長(zhǎng)頁(yè)面的空閑資源低于第二閾值時(shí),則說(shuō)明此后在合并不定長(zhǎng)頁(yè)面中的數(shù)據(jù)至s-type的scm中的定長(zhǎng)頁(yè)面時(shí),可能會(huì)因?yàn)閟-type的scm中的剩余資源不足而導(dǎo)致無(wú)法存儲(chǔ),此時(shí),為了釋放部分s-type的scm中的資源進(jìn)而保證之后數(shù)據(jù)的正常存儲(chǔ),存儲(chǔ)設(shè)備可以合并定長(zhǎng)頁(yè)面中的數(shù)據(jù)至塊頁(yè)面,在此不再贅述。其中,第二閾值為存儲(chǔ)設(shè)備預(yù)先設(shè)定的數(shù)值,對(duì)此并不做限定。步驟206,再次更新映射表。此后,存儲(chǔ)設(shè)備可以再次更新映射表,并將映射表中指向合并前的定長(zhǎng)頁(yè)面的物理地址更新為指向ssd中的塊頁(yè)面的物理地址,在此不再贅述。綜上所述,本實(shí)施例提供的kv存儲(chǔ)方法,通過(guò)將目標(biāo)kv中的value存儲(chǔ)至scm中的不定長(zhǎng)頁(yè)面,進(jìn)而在滿足第一合并條件時(shí),將不定長(zhǎng)頁(yè)面中的value合并至scm中的定長(zhǎng)頁(yè)面,并在滿足第二合并條件時(shí),將scm中的定長(zhǎng)頁(yè)面中的value合并至ssd中;也即充分使用scm和ssd進(jìn)行混合存儲(chǔ);解決了現(xiàn)有技術(shù)中kv存儲(chǔ)的性能較低的問(wèn)題,達(dá)到了可以提高kv存儲(chǔ)的性能的效果。由于可以通過(guò)映射表來(lái)實(shí)現(xiàn)對(duì)ssd的管理,而無(wú)需使用現(xiàn)有的ftl(flashtranslationlayer,閃存轉(zhuǎn)換層),這就提高了對(duì)ssd管理的效率,也即提高了kv存儲(chǔ)的性能。同時(shí),由于ssd的寫(xiě)入是以塊為單位,因此可以通過(guò)erase接口直接實(shí)現(xiàn)對(duì)塊進(jìn)行擦除,而無(wú)需后臺(tái)進(jìn)行垃圾回收,進(jìn)一步提高了kv存儲(chǔ)的性能。此外,通過(guò)暴露ssd中的塊頁(yè)面的更多信息,可以實(shí)現(xiàn)壞塊屏蔽,保證了數(shù)據(jù)存儲(chǔ)的安全。在一個(gè)示例性實(shí)施例中,請(qǐng)參考圖3,其示出了kv存儲(chǔ)時(shí)存儲(chǔ)設(shè)備中的各個(gè)部分交互的方法流程圖。如圖3所示,該kv存儲(chǔ)的方法包括:(1)、accessmehtod接收數(shù)據(jù)存儲(chǔ)請(qǐng)求。(2)、accessmehtod觸發(fā)storageengine在m-type的scm中申請(qǐng)不定長(zhǎng)頁(yè)面。(3)、storageengine在m-type的scm中根據(jù)數(shù)據(jù)寫(xiě)入次數(shù)申請(qǐng)寫(xiě)入次數(shù)最少的不定長(zhǎng)頁(yè)面。(4)、storageengine返回頁(yè)面申請(qǐng)成功消息至accessmehtod。(5)、accessmehtod觸發(fā)storageengine存儲(chǔ)value至不定長(zhǎng)頁(yè)面。(6)、storageengine寫(xiě)入value至scm中的不定長(zhǎng)頁(yè)面。(7)、storageengine返回寫(xiě)入成功消息至accessmehtod。(8)、accessmehtod觸發(fā)storageengine更新臨時(shí)索引。(9)、storageengine將臨時(shí)索引寫(xiě)入至dram。(10)、storageengine返回寫(xiě)入成功消息至accessmehtod。(11)、accessmehtod在數(shù)據(jù)存儲(chǔ)請(qǐng)求commit時(shí)觸發(fā)storageengine將臨時(shí)索引合并至主索引。(12)、storageengine更新m-type的scm的主索引以及映射表。(13)、storageengine返回更新成功消息至accessmehtod。(14)、storageengine在滿足第一合并條件時(shí),在s-type的scm中根據(jù)數(shù)據(jù)寫(xiě)入次數(shù)申請(qǐng)寫(xiě)入次數(shù)最少的定長(zhǎng)頁(yè)面。(15)、storageengine將不定長(zhǎng)頁(yè)面中的value合并至定長(zhǎng)頁(yè)面,更新映射表。(16)、storageengine在滿足第二合并條件時(shí),在ssd中根據(jù)數(shù)據(jù)寫(xiě)入次數(shù)申請(qǐng)寫(xiě)入次數(shù)最少塊頁(yè)面。(17)、storageengine將不定長(zhǎng)頁(yè)面中的value合并至ssd中。(18)、storageengine更新映射表。在上述各個(gè)實(shí)施例中,當(dāng)需要讀取數(shù)據(jù)時(shí),請(qǐng)參考圖4,該方法包括:步驟401,接收讀請(qǐng)求,讀請(qǐng)求中攜帶有需要查詢的key。步驟402,檢測(cè)內(nèi)存中是否包含key所對(duì)應(yīng)的value。由于在讀取物理地址中的value至內(nèi)存之后,并不會(huì)馬上刪除內(nèi)存中的value,因此為了提高數(shù)據(jù)讀取效率,存儲(chǔ)設(shè)備可以檢測(cè)內(nèi)存中是否包含需要查詢的key所對(duì)應(yīng)的value??蛇x地,本步驟為可選步驟,實(shí)際實(shí)現(xiàn)時(shí),存儲(chǔ)設(shè)備還可以直接執(zhí)行步驟404,對(duì)此并不做限定。步驟403,若包含,則直接返回內(nèi)存中的value。步驟404,若不包含,則在主索引中查詢key所對(duì)應(yīng)的邏輯地址。步驟405,在映射表中查詢邏輯地址所對(duì)應(yīng)的物理地址。步驟406,讀取查詢到的物理地址中的value至內(nèi)存,并返回內(nèi)存中的該value。在一個(gè)示例性例子中,請(qǐng)參考圖5,其示出了存儲(chǔ)設(shè)備中的各部分交互時(shí)讀取數(shù)據(jù)的流程圖。如圖5所示,該數(shù)據(jù)讀取方法包括:(1)、accessmethod接收讀請(qǐng)求,讀請(qǐng)求中包含key。(2)、accessmethod觸發(fā)storageengine檢測(cè)dram中是否包含key所對(duì)應(yīng)的value。(3)、在dram中包含key所對(duì)應(yīng)的value時(shí),storageengine返回value至accessmethod。(4)、在dram中不包含key所對(duì)應(yīng)的value時(shí),storageengine返回查詢失敗消息至accessmethod。(5)、accessmethod觸發(fā)storageengine根據(jù)讀請(qǐng)求中的key查詢value的邏輯地址。(6)、storageengine在主索引中查詢key所對(duì)應(yīng)邏輯地址。(7)、storageengine根據(jù)映射表查詢邏輯地址所對(duì)應(yīng)的物理地址。(8)、storageengine讀取查詢到的物理地址中的value至dram。(9)、storageengine返回內(nèi)存中的value。請(qǐng)參考圖6,其示出了本發(fā)明一個(gè)實(shí)施例提供的kv存儲(chǔ)裝置的框圖,如圖6所示,該kv存儲(chǔ)裝置包括:存儲(chǔ)單元610、更新單元620和合并單元630。其中,存儲(chǔ)單元610,用于執(zhí)行上述步驟201;更新單元620,用于執(zhí)行上述步驟202、步驟204和步驟206合并單元630,用于執(zhí)行上述步驟203和步驟205。綜上所述,本實(shí)施例提供的kv存儲(chǔ)裝置,通過(guò)將目標(biāo)kv中的value存儲(chǔ)至scm中的不定長(zhǎng)頁(yè)面,進(jìn)而在滿足第一合并條件時(shí),將不定長(zhǎng)頁(yè)面中的value合并至scm中的定長(zhǎng)頁(yè)面,并在滿足第二合并條件時(shí),將scm中的定長(zhǎng)頁(yè)面中的value合并至ssd中;也即充分使用scm和ssd進(jìn)行混合存儲(chǔ);解決了現(xiàn)有技術(shù)中kv存儲(chǔ)的性能較低的問(wèn)題,達(dá)到了可以提高kv存儲(chǔ)的性能的效果。由于可以通過(guò)映射表來(lái)實(shí)現(xiàn)對(duì)ssd的管理,而無(wú)需使用現(xiàn)有的ftl(flashtranslationlayer,閃存轉(zhuǎn)換層),這就提高了對(duì)ssd管理的效率,也即提高了kv存儲(chǔ)的性能。同時(shí),由于ssd的寫(xiě)入是以塊為單位,因此可以通過(guò)erase接口直接實(shí)現(xiàn)對(duì)塊進(jìn)行擦除,而無(wú)需后臺(tái)進(jìn)行垃圾回收,進(jìn)一步提高了kv存儲(chǔ)的性能。此外,通過(guò)暴露ssd中的塊頁(yè)面的更多信息,可以實(shí)現(xiàn)壞塊屏蔽,保證了數(shù)據(jù)存儲(chǔ)的安全。需要說(shuō)明的是,對(duì)于前述的各方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說(shuō)明書(shū)中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。盡管在此結(jié)合各實(shí)施例對(duì)本發(fā)明進(jìn)行了描述,然而,在實(shí)施所要求保護(hù)的本發(fā)明過(guò)程中,本領(lǐng)域技術(shù)人員通過(guò)查看所述附圖、公開(kāi)內(nèi)容、以及所附權(quán)利要求書(shū),可理解并實(shí)現(xiàn)所述公開(kāi)實(shí)施例的其他變化。在權(quán)利要求中,“包括”(comprising)一詞不排除其他組成部分或步驟,“一”或“一個(gè)”不排除多個(gè)的情況。單個(gè)處理器或其他單元可以實(shí)現(xiàn)權(quán)利要求中列舉的若干項(xiàng)功能。相互不同的從屬權(quán)利要求中記載了某些措施,但這并不表示這些措施不能組合起來(lái)產(chǎn)生良好的效果。本領(lǐng)域技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、服務(wù)器(設(shè)備)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤(pán)存儲(chǔ)器、cd-rom、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。計(jì)算機(jī)程序存儲(chǔ)/分布在合適的介質(zhì)中,與其它硬件一起提供或作為硬件的一部分,也可以采用其他分布形式,如通過(guò)internet或其它有線或無(wú)線電信系統(tǒng)。本發(fā)明是參照本發(fā)明實(shí)施例的方法、服務(wù)器(設(shè)備)和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。盡管結(jié)合具體特征及其實(shí)施例對(duì)本發(fā)明進(jìn)行了描述,顯而易見(jiàn)的,在不脫離本發(fā)明的精神和范圍的情況下,可對(duì)其進(jìn)行各種修改和組合。相應(yīng)地,本說(shuō)明書(shū)和附圖僅僅是所附權(quán)利要求所界定的本發(fā)明的示例性說(shuō)明,且視為已覆蓋本發(fā)明范圍內(nèi)的任意和所有修改、變化、組合或等同物。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。當(dāng)前第1頁(yè)12
當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
宜兰市| 乌拉特前旗| 方城县| 嘉兴市| 喀喇| 嵊州市| 富民县| 雷波县| 海盐县| 怀来县| 伊宁市| 盖州市| 句容市| 桦川县| 承德县| 墨江| 怀集县| 昌乐县| 寿光市| 板桥市| 禹州市| 唐山市| 赤壁市| 武胜县| 井陉县| 宣恩县| 那曲县| 虹口区| 罗源县| 敦煌市| 乌兰县| 西贡区| 文安县| 和田县| 保靖县| 兴安盟| 天峨县| 锡林浩特市| 民丰县| 秭归县| 来宾市|