本發(fā)明涉及存儲(chǔ)
技術(shù)領(lǐng)域:
,尤其涉及鍵值存儲(chǔ)方法、裝置及系統(tǒng)。
背景技術(shù):
:鍵值(英文:key-value,縮寫:KV)存儲(chǔ),是非關(guān)系型數(shù)據(jù)庫(kù)(英文:nostructuredquerylanguage,縮寫:NoSQL)存儲(chǔ)的一種方式,其數(shù)據(jù)按照鍵值對(duì)的形式進(jìn)行組織,索引和存儲(chǔ),具有存儲(chǔ)語(yǔ)義簡(jiǎn)單、存儲(chǔ)系統(tǒng)擴(kuò)展性好、數(shù)據(jù)查詢速度快、數(shù)據(jù)存儲(chǔ)量大的特點(diǎn)。而非易失性存儲(chǔ)標(biāo)準(zhǔn)(英文:non-volatilememoryexpress,縮寫:NVMe)協(xié)議,是目前存儲(chǔ)系統(tǒng)的多種存儲(chǔ)協(xié)議中的一種高效存儲(chǔ)協(xié)議,使用NVMe協(xié)議的存儲(chǔ)系統(tǒng)和使用傳統(tǒng)的小型計(jì)算機(jī)系統(tǒng)接口(英文:smallcomputersysteminterface,縮寫:SCSI)協(xié)議的存儲(chǔ)系統(tǒng)相比,由于減少了通用輸入輸出(英文:input-output,縮寫:IO)調(diào)度層、SCSI上層和SCSI中間層,因此具有IO路徑短、時(shí)延低、并發(fā)處理能力強(qiáng)的特點(diǎn)。若將鍵值存儲(chǔ)和NVMe協(xié)議為代表的這類高效存儲(chǔ)協(xié)議結(jié)合起來(lái),將使得存儲(chǔ)系統(tǒng)同時(shí)具備二者的優(yōu)勢(shì)。然而,目前并沒(méi)有相關(guān)解決方案能夠?qū)崿F(xiàn)鍵值存儲(chǔ)和NVMe協(xié)議這類高效存儲(chǔ)協(xié)議的結(jié)合。技術(shù)實(shí)現(xiàn)要素:本發(fā)明實(shí)施例提供鍵值存儲(chǔ)方法、裝置及系統(tǒng),用于解決現(xiàn)有技術(shù)中無(wú)法實(shí)現(xiàn)鍵值存儲(chǔ)和一些高效存儲(chǔ)協(xié)議(如NVMe協(xié)議)結(jié)合的問(wèn)題。為解決上述問(wèn)題,本發(fā)明實(shí)施例提供如下技術(shù)方案:一方面,本發(fā)明實(shí)施例提供一種鍵值存儲(chǔ)方法,該方法包括:在主機(jī)檢測(cè)到鍵值存儲(chǔ)請(qǐng)求之后,該主機(jī)將該鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼、以及地址信息寫入?yún)f(xié)議定義的字段組成第一存儲(chǔ)請(qǐng)求指令序列,其中,該第一指令碼為根據(jù)該協(xié)議的預(yù)留擴(kuò)展字段定義的指令碼;進(jìn)而,該主機(jī)與該存儲(chǔ)控制器進(jìn)行交互,以使得該存儲(chǔ)控制器獲取該第一存儲(chǔ)請(qǐng)求指令序列。由于本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法將鍵值存儲(chǔ)操作擴(kuò)展到存儲(chǔ)協(xié)議之上,使得主機(jī)可以借助存儲(chǔ)協(xié)議和存儲(chǔ)控制器交互以實(shí)現(xiàn)鍵值存儲(chǔ),無(wú)需在塊層或者文件系統(tǒng)之上進(jìn)行轉(zhuǎn)換以實(shí)現(xiàn)鍵值存儲(chǔ),因此,還降低了存儲(chǔ)系統(tǒng)的IO路徑時(shí)延。在一種可能的設(shè)計(jì)中,該主機(jī)將該鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼、以及地址信息寫入?yún)f(xié)議定義的字段組成第一存儲(chǔ)請(qǐng)求指令序列,包括:該主機(jī)按照協(xié)議定義的字段為第一存儲(chǔ)請(qǐng)求指令序列分配內(nèi)存;該主機(jī)將該鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼、以及地址信息寫入該內(nèi)存;進(jìn)而,該主機(jī)與該存儲(chǔ)控制器進(jìn)行交互(如發(fā)送通知消息等),以使得該存儲(chǔ)控制器獲取該第一存儲(chǔ)請(qǐng)求指令序列,包括:該主機(jī)通知該存儲(chǔ)控制器從該內(nèi)存中讀取該第一存儲(chǔ)請(qǐng)求指令序列。除了上述讓存儲(chǔ)控制器獲取第一存儲(chǔ)請(qǐng)求指令序列該主機(jī)也可以向該存儲(chǔ)控制器直接發(fā)送該第一存儲(chǔ)請(qǐng)求指令序列。其中,主機(jī)通知存儲(chǔ)控制器從內(nèi)存中讀取第一存儲(chǔ)請(qǐng)求指令序列的方式可以節(jié)省存儲(chǔ)控制器的內(nèi)存空間。在一種可能的設(shè)計(jì)中,該鍵值存儲(chǔ)請(qǐng)求包括:寫數(shù)據(jù)請(qǐng)求、或者獲取數(shù)據(jù)請(qǐng)求、或者刪除數(shù)據(jù)請(qǐng)求、或者廢棄數(shù)據(jù)請(qǐng)求;其中,該寫數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵和值存放的地址信息;該獲取數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵存放的地址信息;該刪除數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵存放的地址信息;該廢棄數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵存放的地址信息。當(dāng)然,上述僅是示例性的列舉了一些鍵值存儲(chǔ)請(qǐng)求操作,還可能存在其它的鍵值存儲(chǔ)請(qǐng)求操作,本發(fā)明實(shí)施例對(duì)此不作具體限定。在一些可能的設(shè)計(jì)中,若該鍵值存儲(chǔ)請(qǐng)求為獲取數(shù)據(jù)請(qǐng)求,則在主機(jī)檢測(cè)到鍵值存儲(chǔ)請(qǐng)求之后,在該主機(jī)將該鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼、以及地址信息寫入?yún)f(xié)議定義的字段組成第一存儲(chǔ)請(qǐng)求指令序列之前,還包括:該主機(jī)獲取該獲取數(shù)據(jù)請(qǐng)求所請(qǐng)求的值的長(zhǎng)度;該主機(jī)根據(jù)該值的長(zhǎng)度為該值分配內(nèi)存,以使得在該主機(jī)與該存儲(chǔ)控制器進(jìn)行交互,以使得該存儲(chǔ)控制器獲取該第一存儲(chǔ)請(qǐng)求指令序列之后,該存儲(chǔ)控制器讀數(shù)據(jù)到該主機(jī)為該值分配的內(nèi)存。也就是說(shuō),若該鍵值存儲(chǔ)請(qǐng)求為獲取數(shù)據(jù)請(qǐng)求,則主機(jī)首先需要為值分配內(nèi)存。這樣,存儲(chǔ)控制器從存儲(chǔ)設(shè)備中讀取的數(shù)據(jù)才有相應(yīng)的存儲(chǔ)空間。在一種可能的設(shè)計(jì)中,該主機(jī)獲取該獲取數(shù)據(jù)請(qǐng)求所請(qǐng)求的值的長(zhǎng)度,包括:該主機(jī)將獲取鍵對(duì)應(yīng)的值的長(zhǎng)度的指令碼、以及該鍵存放的地址信息寫入該協(xié)議定義的字段組成第二存儲(chǔ)請(qǐng)求指令序列,其中,該獲取鍵對(duì)應(yīng)的值的長(zhǎng)度的指令碼為根據(jù)該協(xié)議的預(yù)留擴(kuò)展字段定義的指令碼;該主機(jī)與該存儲(chǔ)控制器進(jìn)行交互,以使得該存儲(chǔ)控制器獲取該第二存儲(chǔ)請(qǐng)求指令序列;該主機(jī)接收該存儲(chǔ)控制器發(fā)送的該值的長(zhǎng)度。通過(guò)上述方式,主機(jī)可以獲取到該獲取數(shù)據(jù)請(qǐng)求所請(qǐng)求的值的長(zhǎng)度。在一種可能的設(shè)計(jì)中,該鍵值存儲(chǔ)請(qǐng)求為包含多個(gè)單次鍵值存儲(chǔ)請(qǐng)求的聚合鍵值存儲(chǔ)請(qǐng)求;其中,該鍵值存儲(chǔ)請(qǐng)求攜帶的地址信息通過(guò)聚散表的地址信息進(jìn)行索引,該聚散表中包含該多個(gè)單次鍵值存儲(chǔ)請(qǐng)求中每個(gè)單次鍵值存儲(chǔ)請(qǐng)求攜帶的地址信息。通過(guò)將多個(gè)單次鍵值存儲(chǔ)請(qǐng)求合并成聚合鍵值存儲(chǔ)請(qǐng)求,并將多個(gè)單次鍵值存儲(chǔ)請(qǐng)求中每個(gè)單次鍵值存儲(chǔ)請(qǐng)求攜帶的地址信息通過(guò)聚散表進(jìn)行索引,可以使得在一次鍵值存儲(chǔ)操作流程中同時(shí)完成多個(gè)單次鍵值存儲(chǔ)操作,提高了鍵值存儲(chǔ)的效率。在一種可能的設(shè)計(jì)中,該方法還包括:在該主機(jī)檢測(cè)到非鍵值存儲(chǔ)請(qǐng)求之后,該主機(jī)將該非鍵值存儲(chǔ)請(qǐng)求攜帶的第二指令碼、以及數(shù)據(jù)內(nèi)存指針寫入該協(xié)議定義的字段組成第三存儲(chǔ)請(qǐng)求指令序列,其中,該第二指令碼為該協(xié)議的標(biāo)準(zhǔn)指令碼;該主機(jī)與該存儲(chǔ)控制器進(jìn)行交互,以使得該存儲(chǔ)控制器獲取該第三存儲(chǔ)請(qǐng)求指令序列。本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法中,由于主機(jī)可以借助存儲(chǔ)協(xié)議和存儲(chǔ)控制器交互以實(shí)現(xiàn)非鍵值存儲(chǔ),因此可以在支持鍵值存儲(chǔ)的同時(shí)支持傳統(tǒng)塊設(shè)備存儲(chǔ)。另一方面,本發(fā)明實(shí)施例提供一種鍵值存儲(chǔ)方法,該方法包括:存儲(chǔ)控制器獲取第一存儲(chǔ)請(qǐng)求指令序列,該第一存儲(chǔ)請(qǐng)求指令序列由該主機(jī)將鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼、以及地址信息寫入?yún)f(xié)議定義的字段組成,其中,該第一指令碼為根據(jù)該協(xié)議的預(yù)留擴(kuò)展字段定義的指令碼;該存儲(chǔ)控制器從該第一存儲(chǔ)請(qǐng)求指令序列中分離出該第一指令碼和該地址信息;該存儲(chǔ)控制器根據(jù)該第一指令碼和該地址信息,對(duì)存儲(chǔ)設(shè)備進(jìn)行該第一指令碼對(duì)應(yīng)的操作。由于本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法將鍵值存儲(chǔ)操作擴(kuò)展到存儲(chǔ)協(xié)議之上,使得主機(jī)可以借助存儲(chǔ)協(xié)議和存儲(chǔ)控制器交互以實(shí)現(xiàn)鍵值存儲(chǔ),無(wú)需在塊層或者文件系統(tǒng)之上進(jìn)行轉(zhuǎn)換以實(shí)現(xiàn)鍵值存儲(chǔ),因此降低了存儲(chǔ)系統(tǒng)的IO路徑時(shí)延。在一種可能的設(shè)計(jì)中,該存儲(chǔ)控制器獲取第一存儲(chǔ)請(qǐng)求指令序列,包括:該存儲(chǔ)控制器從主機(jī)按照協(xié)議定義的字段為該第一存儲(chǔ)請(qǐng)求指令序列分配的內(nèi)存中讀取第一存儲(chǔ)請(qǐng)求指令序列。或者,除了上述方法外,存儲(chǔ)控制器也可以直接接收主機(jī)發(fā)送的第一存儲(chǔ)請(qǐng)求指令序列。其中,存儲(chǔ)控制器從主機(jī)按照協(xié)議定義的字段為該第一存儲(chǔ)請(qǐng)求指令序列分配的內(nèi)存中讀取第一存儲(chǔ)請(qǐng)求指令序列的方式可以節(jié)省存儲(chǔ)控制器的內(nèi)存空間。在一種可能的設(shè)計(jì)中,該鍵值存儲(chǔ)請(qǐng)求包括:寫數(shù)據(jù)請(qǐng)求、或者獲取數(shù)據(jù)請(qǐng)求、或者刪除數(shù)據(jù)請(qǐng)求、或者廢棄數(shù)據(jù)請(qǐng)求;其中,該寫數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵和值存放的地址;該獲取數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵存放的地址信息;該刪除數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵存放的地址信息;該廢棄數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵存放的地址信息。當(dāng)然,上述僅是示例性的列舉了一些鍵值存儲(chǔ)請(qǐng)求操作,還可能存在其它的鍵值存儲(chǔ)請(qǐng)求操作,本發(fā)明實(shí)施例對(duì)此不作具體限定。在一種可能的設(shè)計(jì)中,若該鍵值存儲(chǔ)請(qǐng)求為獲取數(shù)據(jù)請(qǐng)求,則在該存儲(chǔ)控制器獲取第一存儲(chǔ)請(qǐng)求指令序列之前,還包括:該存儲(chǔ)控制器獲取該獲取數(shù)據(jù)請(qǐng)求所請(qǐng)求的值的長(zhǎng)度;該存儲(chǔ)控制器向該主機(jī)發(fā)送該值的長(zhǎng)度,以使得該主機(jī)根據(jù)該值的長(zhǎng)度為該值分配內(nèi)存;進(jìn)而,該存儲(chǔ)控制器根據(jù)該第一指令碼和該地址信息,對(duì)存儲(chǔ)設(shè)備進(jìn)行該第一指令碼對(duì)應(yīng)的操作,包括:該存儲(chǔ)控制器根據(jù)該第一指令碼和該地址信息,讀數(shù)據(jù)到該主機(jī)為該值分配的內(nèi)存。也就是說(shuō),若該鍵值存儲(chǔ)請(qǐng)求為獲取數(shù)據(jù)請(qǐng)求,則主機(jī)首先需要為值分配內(nèi)存。這樣,存儲(chǔ)控制器從存儲(chǔ)設(shè)備中讀取的數(shù)據(jù)才有相應(yīng)的存儲(chǔ)空間。在一種可能的設(shè)計(jì)中,該存儲(chǔ)控制器獲取該獲取數(shù)據(jù)請(qǐng)求所請(qǐng)求的值的長(zhǎng)度,包括:該存儲(chǔ)控制器獲取第二存儲(chǔ)請(qǐng)求指令序列,該第二存儲(chǔ)請(qǐng)求指令序列由該主機(jī)將獲取鍵對(duì)應(yīng)的值的長(zhǎng)度的指令碼、以及該鍵存放的地址信息寫入該協(xié)議定義的字段組成,其中,該獲取鍵對(duì)應(yīng)的值的長(zhǎng)度的指令碼為根據(jù)該協(xié)議的預(yù)留擴(kuò)展字段定義的指令碼;該存儲(chǔ)控制器從該第二存儲(chǔ)請(qǐng)求指令序列中分離出該獲取鍵對(duì)應(yīng)的值的長(zhǎng)度的指令碼、以及該鍵存放的地址信息;該存儲(chǔ)控制器根據(jù)該獲取鍵對(duì)應(yīng)的值的長(zhǎng)度的指令碼、以及該鍵存放的地址信息,從該存儲(chǔ)設(shè)備中獲取該值的長(zhǎng)度。其中,存儲(chǔ)控制器獲取第二存儲(chǔ)請(qǐng)求指令序列的方式可參考上述存儲(chǔ)控制器獲取第一存儲(chǔ)請(qǐng)求指令序列的方式,此處不再贅述。通過(guò)上述方式,主機(jī)可以獲取到該獲取數(shù)據(jù)請(qǐng)求所請(qǐng)求的值的長(zhǎng)度。在一種可能的設(shè)計(jì)中,該鍵值存儲(chǔ)請(qǐng)求為包含多個(gè)單次鍵值存儲(chǔ)請(qǐng)求的聚合鍵值存儲(chǔ)請(qǐng)求;其中,該鍵值存儲(chǔ)請(qǐng)求攜帶的地址信息通過(guò)聚散表的地址信息進(jìn)行索引,該聚散表中包含該多個(gè)單次鍵值存儲(chǔ)請(qǐng)求中每個(gè)單次鍵值存儲(chǔ)請(qǐng)求攜帶的地址信息。通過(guò)將多個(gè)單次鍵值存儲(chǔ)請(qǐng)求合并成聚合鍵值存儲(chǔ)請(qǐng)求,并將多個(gè)單次鍵值存儲(chǔ)請(qǐng)求中每個(gè)單次鍵值存儲(chǔ)請(qǐng)求攜帶的地址信息通過(guò)聚散表進(jìn)行索引,可以使得在一次鍵值存儲(chǔ)操作流程中同時(shí)完成多個(gè)單次鍵值存儲(chǔ)操作,提高了鍵值存儲(chǔ)的效率。在一種可能的設(shè)計(jì)中,該方法還包括:該存儲(chǔ)控制器獲取第三存儲(chǔ)請(qǐng)求指令序列,該第三存儲(chǔ)請(qǐng)求指令序列由該主機(jī)將非鍵值存儲(chǔ)請(qǐng)求攜帶的第二指令碼、以及數(shù)據(jù)內(nèi)存指針寫入該協(xié)議定義的字段組成,其中,該第二指令碼為該協(xié)議的標(biāo)準(zhǔn)指令碼;該存儲(chǔ)控制器從該第三存儲(chǔ)請(qǐng)求指令序列中分離出該第二指令碼和該數(shù)據(jù)內(nèi)存指針;該存儲(chǔ)控制器根據(jù)該第二指令碼和該數(shù)據(jù)內(nèi)存指針,對(duì)該存儲(chǔ)設(shè)備進(jìn)行該第二指令碼對(duì)應(yīng)的操作。其中,存儲(chǔ)控制器獲取第三存儲(chǔ)請(qǐng)求指令序列的方式可參考上述存儲(chǔ)控制器獲取第一存儲(chǔ)請(qǐng)求指令序列的方式,此處不再贅述。本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法中,由于主機(jī)可以借助存儲(chǔ)協(xié)議和存儲(chǔ)控制器交互以實(shí)現(xiàn)非鍵值存儲(chǔ),因此可以在支持鍵值存儲(chǔ)的同時(shí)支持傳統(tǒng)塊設(shè)備存儲(chǔ)。又一方面,本發(fā)明實(shí)施例提供一種主機(jī),該主機(jī)包括:處理模塊和通信模塊;該處理模塊,用于在檢測(cè)到鍵值存儲(chǔ)請(qǐng)求之后,將該鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼、以及地址信息寫入?yún)f(xié)議定義的字段組成第一存儲(chǔ)請(qǐng)求指令序列,其中,該第一指令碼為根據(jù)該協(xié)議的預(yù)留擴(kuò)展字段定義的指令碼;該通信模塊,用于與該存儲(chǔ)控制器進(jìn)行交互,以使得該存儲(chǔ)控制器獲取該第一存儲(chǔ)請(qǐng)求指令序列。在一種可能的設(shè)計(jì)中,該處理模塊具體用于:按照協(xié)議定義的字段為第一存儲(chǔ)請(qǐng)求指令序列分配內(nèi)存;將該鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼、以及地址信息寫入該內(nèi)存;該通信模塊具體用于:通知該存儲(chǔ)控制器從該內(nèi)存中讀取該第一存儲(chǔ)請(qǐng)求指令序列;或者,向該存儲(chǔ)控制器發(fā)送該第一存儲(chǔ)請(qǐng)求指令序列。在一種可能的設(shè)計(jì)中,該鍵值存儲(chǔ)請(qǐng)求包括:寫數(shù)據(jù)請(qǐng)求、或者獲取數(shù)據(jù)請(qǐng)求、或者刪除數(shù)據(jù)請(qǐng)求、或者廢棄數(shù)據(jù)請(qǐng)求;其中,該寫數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵和值存放的地址信息;該獲取數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵存放的地址信息;該刪除數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵存放的地址信息;該廢棄數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵存放的地址信息。在一種可能的設(shè)計(jì)中,若該鍵值存儲(chǔ)請(qǐng)求為獲取數(shù)據(jù)請(qǐng)求,則該處理模塊,還用于在檢測(cè)到鍵值存儲(chǔ)請(qǐng)求之后,將該鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼、以及地址信息寫入?yún)f(xié)議定義的字段組成第一存儲(chǔ)請(qǐng)求指令序列之前,獲取該獲取數(shù)據(jù)請(qǐng)求所請(qǐng)求的值的長(zhǎng)度;根據(jù)該值的長(zhǎng)度為該值分配內(nèi)存,以使得在該通信模塊與該存儲(chǔ)控制器進(jìn)行交互,以使得該存儲(chǔ)控制器獲取該第一存儲(chǔ)請(qǐng)求指令序列之后,該存儲(chǔ)控制器讀數(shù)據(jù)到該處理模塊為該值分配的內(nèi)存。在一種可能的設(shè)計(jì)中,該處理模塊具體用于:將獲取鍵對(duì)應(yīng)的值的長(zhǎng)度的指令碼、以及該鍵存放的地址信息寫入該協(xié)議定義的字段組成第二存儲(chǔ)請(qǐng)求指令序列,其中,該獲取鍵對(duì)應(yīng)的值的長(zhǎng)度的指令碼為根據(jù)該協(xié)議的預(yù)留擴(kuò)展字段定義的指令碼;通過(guò)該通信模塊與該存儲(chǔ)控制器進(jìn)行交互,以使得該存儲(chǔ)控制器獲取該第二存儲(chǔ)請(qǐng)求指令序列;通過(guò)該通信模塊接收該存儲(chǔ)控制器發(fā)送的該值的長(zhǎng)度。在一種可能的設(shè)計(jì)中,該鍵值存儲(chǔ)請(qǐng)求為包含多個(gè)單次鍵值存儲(chǔ)請(qǐng)求的聚合鍵值存儲(chǔ)請(qǐng)求;其中,該鍵值存儲(chǔ)請(qǐng)求攜帶的地址信息通過(guò)聚散表的地址信息進(jìn)行索引,該聚散表中包含該多個(gè)單次鍵值存儲(chǔ)請(qǐng)求中每個(gè)單次鍵值存儲(chǔ)請(qǐng)求攜帶的地址信息。在一種可能的設(shè)計(jì)中,該處理模塊,還用于在檢測(cè)到非鍵值存儲(chǔ)請(qǐng)求之后,將該非鍵值存儲(chǔ)請(qǐng)求攜帶的第二指令碼、以及數(shù)據(jù)內(nèi)存指針寫入該協(xié)議定義的字段組成第三存儲(chǔ)請(qǐng)求指令序列,其中,該第二指令碼為該協(xié)議的標(biāo)準(zhǔn)指令碼;該通信模塊,還用于與該存儲(chǔ)控制器進(jìn)行交互,以使得該存儲(chǔ)控制器獲取該第三存儲(chǔ)請(qǐng)求指令序列。由于本發(fā)明實(shí)施例提供的主機(jī)可用于執(zhí)行上述方法實(shí)施例中主機(jī)所執(zhí)行的功能,因此其所能獲得的技術(shù)效果可參考上述方法實(shí)施例中的相關(guān)描述,此處不再贅述。又一方面,本發(fā)明實(shí)施例提供一種存儲(chǔ)控制器,該存儲(chǔ)控制器包括:前端通信模塊、后端通信模塊、處理模塊和控制模塊;該前端通信模塊,用于從主機(jī)獲取第一存儲(chǔ)請(qǐng)求指令序列,該第一存儲(chǔ)請(qǐng)求指令序列由該主機(jī)將鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼、以及地址信息寫入?yún)f(xié)議定義的字段組成,其中,該第一指令碼為根據(jù)該協(xié)議的預(yù)留擴(kuò)展字段定義的指令碼;該處理模塊,用于從該第一存儲(chǔ)請(qǐng)求指令序列中分離出該第一指令碼和該地址信息;該控制模塊,用于根據(jù)該第一指令碼和該地址信息,通過(guò)該后端通信模塊對(duì)存儲(chǔ)設(shè)備進(jìn)行該第一指令碼對(duì)應(yīng)的操作。在一種可能的設(shè)計(jì)中,該前端通信模塊具體用于:從該主機(jī)按照協(xié)議定義的字段為該第一存儲(chǔ)請(qǐng)求指令序列分配的內(nèi)存中讀取該第一存儲(chǔ)請(qǐng)求指令序列;或者,接收該主機(jī)發(fā)送的第一存儲(chǔ)請(qǐng)求指令序列。在一種可能的設(shè)計(jì)中,該鍵值存儲(chǔ)請(qǐng)求包括:寫數(shù)據(jù)請(qǐng)求、或者獲取數(shù)據(jù)請(qǐng)求、或者刪除數(shù)據(jù)請(qǐng)求、或者廢棄數(shù)據(jù)請(qǐng)求;其中,該寫數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵和值存放的地址;該獲取數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵存放的地址信息;該刪除數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵存放的地址信息;該廢棄數(shù)據(jù)請(qǐng)求攜帶的地址信息包括鍵存放的地址信息。在一種可能的設(shè)計(jì)中,若該鍵值存儲(chǔ)請(qǐng)求為獲取數(shù)據(jù)請(qǐng)求,則該處理模塊,還用于在該前端通信模塊獲取第一存儲(chǔ)請(qǐng)求指令序列之前,獲取該獲取數(shù)據(jù)請(qǐng)求所請(qǐng)求的值的長(zhǎng)度;該通信模塊,還用于向該主機(jī)發(fā)送該值的長(zhǎng)度,以使得該主機(jī)根據(jù)該值的長(zhǎng)度為該值分配內(nèi)存;該控制模塊具體用于:根據(jù)該第一指令碼和該地址信息,讀數(shù)據(jù)到該主機(jī)為該值分配的內(nèi)存。在一種可能的設(shè)計(jì)中,該處理模塊具體用于:通過(guò)該前端通信模塊獲取第二存儲(chǔ)請(qǐng)求指令序列,該第二存儲(chǔ)請(qǐng)求指令序列由該主機(jī)將獲取鍵對(duì)應(yīng)的值的長(zhǎng)度的指令碼、以及該鍵存放的地址信息寫入該協(xié)議定義的字段組成,其中,該獲取鍵對(duì)應(yīng)的值的長(zhǎng)度的指令碼為根據(jù)該協(xié)議的預(yù)留擴(kuò)展字段定義的指令碼;從該第二存儲(chǔ)請(qǐng)求指令序列中分離出該獲取鍵對(duì)應(yīng)的值的長(zhǎng)度的指令碼、以及該鍵存放的地址信息;根據(jù)該獲取鍵對(duì)應(yīng)的值的長(zhǎng)度的指令碼、以及該鍵存放的地址信息,通過(guò)該控制模塊和該后端通信模塊從該存儲(chǔ)設(shè)備中獲取該值的長(zhǎng)度。在一種可能的設(shè)計(jì)中,該鍵值存儲(chǔ)請(qǐng)求為包含多個(gè)單次鍵值存儲(chǔ)請(qǐng)求的聚合鍵值存儲(chǔ)請(qǐng)求;其中,該鍵值存儲(chǔ)請(qǐng)求攜帶的地址信息通過(guò)聚散表的地址信息進(jìn)行索引,其中,該聚散表中包含該多個(gè)單次鍵值存儲(chǔ)請(qǐng)求中每個(gè)單次鍵值存儲(chǔ)請(qǐng)求攜帶的地址信息。在一種可能的設(shè)計(jì)中,該前端通信模塊,還用于從該主機(jī)獲取第三存儲(chǔ)請(qǐng)求指令序列,該第三存儲(chǔ)請(qǐng)求指令序列由該主機(jī)將非鍵值存儲(chǔ)請(qǐng)求攜帶的第二指令碼、以及數(shù)據(jù)內(nèi)存指針寫入該協(xié)議定義的字段組成,其中,該第二指令碼為該協(xié)議的標(biāo)準(zhǔn)指令碼;該處理模塊,還用于從該第三存儲(chǔ)請(qǐng)求指令序列中分離出該第二指令碼和該數(shù)據(jù)內(nèi)存指針;該控制模塊,還用于根據(jù)該第二指令碼和該數(shù)據(jù)內(nèi)存指針,通過(guò)該后端通信模塊對(duì)該存儲(chǔ)設(shè)備進(jìn)行該第二指令碼對(duì)應(yīng)的操作。由于本發(fā)明實(shí)施例提供的存儲(chǔ)控制器可用于執(zhí)行上述方法實(shí)施例中存儲(chǔ)控制器所執(zhí)行的功能,因此其所能獲得的技術(shù)效果可參考上述方法實(shí)施例中的相關(guān)描述,此處不再贅述?;谏鲜龈鞣矫妫环N可能的設(shè)計(jì)中,上述各方面任一方面中所述的協(xié)議包括非易失性存儲(chǔ)標(biāo)準(zhǔn)NVMe協(xié)議;其中,該NVMe協(xié)議定義0-63字節(jié)為存儲(chǔ)請(qǐng)求指令序列的字段。由于本發(fā)明實(shí)施例可以將鍵值存儲(chǔ)和NVMe協(xié)議這類高效存儲(chǔ)協(xié)議結(jié)合起來(lái),因此可以使得存儲(chǔ)系統(tǒng)同時(shí)具備鍵值存儲(chǔ)存儲(chǔ)語(yǔ)義簡(jiǎn)單、存儲(chǔ)系統(tǒng)擴(kuò)展性好、數(shù)據(jù)查詢速度快、數(shù)據(jù)存儲(chǔ)量大的優(yōu)勢(shì),以及NVMe協(xié)議IO路徑短、時(shí)延低、并發(fā)處理能力強(qiáng)的優(yōu)勢(shì)?;谏鲜龈鞣矫?,一種可能的設(shè)計(jì)中,上述各方面任一方面中所述的協(xié)議包括小型計(jì)算機(jī)系統(tǒng)接口SCSI協(xié)議。由于SCSI協(xié)議為通用的存儲(chǔ)協(xié)議,因此將鍵值存儲(chǔ)與SCSI協(xié)議結(jié)合起來(lái),更具有通用性。當(dāng)然,上述的協(xié)議還可以為其它存儲(chǔ)協(xié)議,本發(fā)明實(shí)施例對(duì)此不作具體限定?;谏鲜龈鞣矫?,一種可能的設(shè)計(jì)中,上述各方面任一方面中所述的指令序列的形式可以是隊(duì)列,也可以是數(shù)據(jù)包等其它形式,本發(fā)明實(shí)施例對(duì)此不作具體限定。又一方面,本發(fā)明實(shí)施例提供了一種主機(jī),該主機(jī)可以實(shí)現(xiàn)上述方法實(shí)施例中主機(jī)所執(zhí)行的功能,該功能可以通過(guò)硬件實(shí)現(xiàn),也可以通過(guò)硬件執(zhí)行相應(yīng)的軟件實(shí)現(xiàn)。該硬件或軟件包括一個(gè)或多個(gè)上述功能相應(yīng)的模塊。在一種可能的設(shè)計(jì)中,該主機(jī)的結(jié)構(gòu)中包括處理器和通信接口,該處理器被配置為支持該主機(jī)執(zhí)行上述方法中相應(yīng)的功能。該通信接口用于支持該主機(jī)與其他網(wǎng)元之間的通信。該主機(jī)還可以包括存儲(chǔ)器,該存儲(chǔ)器用于與處理器耦合,其保存該主機(jī)必要的程序指令和數(shù)據(jù)。又一方面,本發(fā)明實(shí)施例提供了一種存儲(chǔ)控制器,該存儲(chǔ)控制器可以實(shí)現(xiàn)上述方法實(shí)施例中存儲(chǔ)控制器所執(zhí)行的功能,該功能可以通過(guò)硬件實(shí)現(xiàn),也可以通過(guò)硬件執(zhí)行相應(yīng)的軟件實(shí)現(xiàn)。該硬件或軟件包括一個(gè)或多個(gè)上述功能相應(yīng)的模塊。在一種可能的設(shè)計(jì)中,該存儲(chǔ)控制器的結(jié)構(gòu)中包括處理器和通信接口,該處理器被配置為支持該存儲(chǔ)控制器執(zhí)行上述方法中相應(yīng)的功能。該通信接口用于支持該存儲(chǔ)控制器與其他網(wǎng)元之間的通信。該存儲(chǔ)控制器還可以包括存儲(chǔ)器,該存儲(chǔ)器用于與處理器耦合,其保存該存儲(chǔ)控制器必要的程序指令和數(shù)據(jù)。又一方面,本發(fā)明實(shí)施例提供了一種鍵值存儲(chǔ)系統(tǒng),該鍵值存儲(chǔ)系統(tǒng)包括存儲(chǔ)設(shè)備,以及上述方面所述的主機(jī)和存儲(chǔ)控制器。再一方面,本發(fā)明實(shí)施例提供了一種計(jì)算機(jī)存儲(chǔ)介質(zhì),用于儲(chǔ)存上述主機(jī)所用的計(jì)算機(jī)軟件指令,其包含用于執(zhí)行上述方面所設(shè)計(jì)的程序。再一方面,本發(fā)明實(shí)施例提供了一種計(jì)算機(jī)存儲(chǔ)介質(zhì),用于儲(chǔ)存為上述存儲(chǔ)控制器所用的計(jì)算機(jī)軟件指令,其包含用于執(zhí)行上述方面所設(shè)計(jì)的程序。附圖說(shuō)明為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為現(xiàn)有鍵值存儲(chǔ)的兩種主要實(shí)現(xiàn)方式;圖2為本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)系統(tǒng)的架構(gòu)示意圖;圖3為本發(fā)明實(shí)施例提供的本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法的操作模塊示意圖;圖4為本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法的流程示意圖;圖5為本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)與NVMe協(xié)議相結(jié)合以實(shí)現(xiàn)鍵值存儲(chǔ)的操作流程示意圖;圖6為本發(fā)明實(shí)施例提供的寫數(shù)據(jù)請(qǐng)求時(shí)的鍵值存儲(chǔ)流程示意圖;圖7為本發(fā)明實(shí)施例提供的獲取數(shù)據(jù)請(qǐng)求時(shí)的鍵值存儲(chǔ)流程示意圖;圖8為本發(fā)明實(shí)施例提供的刪除數(shù)據(jù)請(qǐng)求時(shí)的鍵值存儲(chǔ)流程示意圖;圖9為本發(fā)明實(shí)施例提供的廢棄數(shù)據(jù)請(qǐng)求時(shí)的鍵值存儲(chǔ)流程示意圖;圖10為本發(fā)明實(shí)施例提供的聚合刪除數(shù)據(jù)請(qǐng)求時(shí)的鍵值存儲(chǔ)流程示意圖;圖11為本發(fā)明實(shí)施例提供的非鍵值存儲(chǔ)相關(guān)的標(biāo)準(zhǔn)NVMe設(shè)備操作流程示意圖;圖12為本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)與SCSI協(xié)議相結(jié)合以實(shí)現(xiàn)鍵值存儲(chǔ)的操作流程示意圖;圖13為本發(fā)明實(shí)施例提供的主機(jī)的結(jié)構(gòu)示意圖;圖14為本發(fā)明實(shí)施例提供的存儲(chǔ)控制器的結(jié)構(gòu)示意圖。具體實(shí)施方式如圖1所示,為現(xiàn)有鍵值存儲(chǔ)的兩種主要實(shí)現(xiàn)方式。其中,在方式一中,硬件使用SCSI設(shè)備,SCSI設(shè)備通過(guò)SCSI底層驅(qū)動(dòng)、SCSI中層、SCSI上層、IO調(diào)度層和塊設(shè)備層對(duì)外提供塊設(shè)備服務(wù)。軟件在塊設(shè)備層或者文件系統(tǒng)之上建立中間件,在中間件中完成鍵值操作和塊設(shè)備或文件系統(tǒng)操作的轉(zhuǎn)換,從而對(duì)用戶空間的應(yīng)用提供鍵值存儲(chǔ)的服務(wù)。然而,在該方式中,存在多層存儲(chǔ)協(xié)議棧轉(zhuǎn)換,因此IO路徑時(shí)延較大。在方式二中,硬件使用支持鍵值存儲(chǔ)的設(shè)備,鍵值存儲(chǔ)設(shè)備通過(guò)鍵值存儲(chǔ)驅(qū)動(dòng)層與中間件進(jìn)行通信,中間件將用戶存儲(chǔ)轉(zhuǎn)換為鍵值存儲(chǔ)操作,從而對(duì)用戶空間的應(yīng)用提供鍵值存儲(chǔ)服務(wù)。然而,在該方式中,專用的鍵值存儲(chǔ)設(shè)備無(wú)法支持傳統(tǒng)塊設(shè)備存儲(chǔ),應(yīng)用范圍具有局限性。本發(fā)明實(shí)施例提供一種鍵值存儲(chǔ)方法,能夠?qū)㈡I值存儲(chǔ)操作擴(kuò)展到存儲(chǔ)協(xié)議之上,進(jìn)而,不僅可以降低存儲(chǔ)系統(tǒng)的IO路徑時(shí)延,還可以同時(shí)支持傳統(tǒng)塊設(shè)備存儲(chǔ)和鍵值存儲(chǔ)。下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述。需要說(shuō)明的是,為了便于清楚描述本發(fā)明實(shí)施例的技術(shù)方案,在本發(fā)明的實(shí)施例中,采用了“第一”、“第二”等字樣對(duì)功能和作用基本相同的相同項(xiàng)或相似項(xiàng)進(jìn)行區(qū)分,本領(lǐng)域技術(shù)人員可以理解“第一”、“第二”等字樣并不對(duì)數(shù)量和執(zhí)行次序進(jìn)行限定。需要說(shuō)明的是,本文中的“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”僅僅是一種描述關(guān)聯(lián)對(duì)象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系,例如,A和/或B,可以表示:?jiǎn)为?dú)存在A,同時(shí)存在A和B,單獨(dú)存在B這三種情況?!岸鄠€(gè)”是指兩個(gè)或多于兩個(gè)。如本申請(qǐng)所使用的術(shù)語(yǔ)“組件”、“模塊”、“系統(tǒng)”等等旨在指代計(jì)算機(jī)相關(guān)實(shí)體,該計(jì)算機(jī)相關(guān)實(shí)體可以是硬件、固件、硬件和軟件的結(jié)合、軟件或者運(yùn)行中的軟件。例如,組件可以是,但不限于是:在處理器上運(yùn)行的處理、處理器、對(duì)象、可執(zhí)行文件、執(zhí)行中的線程、程序和/或計(jì)算機(jī)。作為示例,在計(jì)算設(shè)備上運(yùn)行的應(yīng)用和該計(jì)算設(shè)備都可以是組件。一個(gè)或多個(gè)組件可以存在于執(zhí)行中的過(guò)程和/或線程中,并且組件可以位于一個(gè)計(jì)算機(jī)中以及/或者分布在兩個(gè)或更多個(gè)計(jì)算機(jī)之間。此外,這些組件能夠從在其上具有各種數(shù)據(jù)結(jié)構(gòu)的各種計(jì)算機(jī)可讀介質(zhì)中執(zhí)行。這些組件可以通過(guò)諸如根據(jù)具有一個(gè)或多個(gè)數(shù)據(jù)分組(例如,來(lái)自一個(gè)組件的數(shù)據(jù),該組件與本地系統(tǒng)、分布式系統(tǒng)中的另一個(gè)組件進(jìn)行交互和/或以信號(hào)的方式通過(guò)諸如互聯(lián)網(wǎng)之類的網(wǎng)絡(luò)與其它系統(tǒng)進(jìn)行交互)的信號(hào),以本地和/或遠(yuǎn)程過(guò)程的方式進(jìn)行通信。需要說(shuō)明的是,本發(fā)明實(shí)施例中,“示例性的”或者“例如”等詞用于表示作例子、例證或說(shuō)明。本發(fā)明實(shí)施例中被描述為“示例性的”或者“例如”的任何實(shí)施例或設(shè)計(jì)方案不應(yīng)被解釋為比其它實(shí)施例或設(shè)計(jì)方案更優(yōu)選或更具優(yōu)勢(shì)。確切而言,使用“示例性的”或者“例如”等詞旨在以具體方式呈現(xiàn)相關(guān)概念。需要說(shuō)明的是,本發(fā)明實(shí)施例中,除非另有說(shuō)明,“多個(gè)”的含義是指兩個(gè)或兩個(gè)以上。例如,多個(gè)數(shù)據(jù)包是指兩個(gè)或兩個(gè)以上的數(shù)據(jù)包。需要說(shuō)明的是,本發(fā)明實(shí)施例中,“的(英文:of)”,“相應(yīng)的(英文:corresponding,relevant)”和“對(duì)應(yīng)的(英文:corresponding)”有時(shí)可以混用,應(yīng)當(dāng)指出的是,在不強(qiáng)調(diào)其區(qū)別時(shí),其所要表達(dá)的含義是一致的。需要說(shuō)明的是,本發(fā)明實(shí)施例描述的網(wǎng)絡(luò)架構(gòu)以及業(yè)務(wù)場(chǎng)景是為了更加清楚的說(shuō)明本發(fā)明實(shí)施例的技術(shù)方案,并不構(gòu)成對(duì)于本發(fā)明實(shí)施例提供的技術(shù)方案的限定,本領(lǐng)域普通技術(shù)人員可知,隨著網(wǎng)絡(luò)架構(gòu)的演變和新業(yè)務(wù)場(chǎng)景的出現(xiàn),本發(fā)明實(shí)施例提供的技術(shù)方案對(duì)于類似的技術(shù)問(wèn)題,同樣適用。如圖2所示,為本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)系統(tǒng)的架構(gòu)示意圖。該鍵值存儲(chǔ)系統(tǒng)由主機(jī)20、存儲(chǔ)控制器21以及存儲(chǔ)設(shè)備22組成。其中,主機(jī)20通過(guò)存儲(chǔ)控制器21對(duì)存儲(chǔ)設(shè)備22中的存儲(chǔ)介質(zhì)進(jìn)行鍵值存儲(chǔ)操作;存儲(chǔ)控制器21用于處理鍵值存儲(chǔ)請(qǐng)求并對(duì)存儲(chǔ)設(shè)備22進(jìn)行數(shù)據(jù)存取操作。具體的,如圖2所示,主機(jī)20可以包括:主機(jī)底板201、以及部署在主機(jī)底板201上的中央處理單元(英文:centralprocessingunit,縮寫:CPU)202、內(nèi)存203、橋片204和主機(jī)通信接口205。其中,內(nèi)存203中存儲(chǔ)了該主機(jī)20運(yùn)行時(shí)必要的程序指令和數(shù)據(jù);CPU202用于處理該主機(jī)20的程序指令;橋片204用于連接主機(jī)底板201上的各類外接設(shè)備(未畫(huà)出);主機(jī)通信接口205是主機(jī)20用于和存儲(chǔ)控制器21之間連接的總線接口,用于完成主機(jī)20與存儲(chǔ)控制器21之間的通信。存儲(chǔ)控制器21可以包括:前端通信接口211、CPU212、內(nèi)存213、以及后端通信接口214。其中,內(nèi)存213用于存儲(chǔ)存儲(chǔ)控制器21運(yùn)行時(shí)必要的程序指令和數(shù)據(jù);CPU212用于處理存儲(chǔ)控制器21運(yùn)行的指令和運(yùn)算;前端通信接口211是存儲(chǔ)控制器21用于和主機(jī)20之間連接的總線接口,用于完成存儲(chǔ)控制器21與主機(jī)20之間的通信;后端通信接口214是存儲(chǔ)控制器21用于和存儲(chǔ)設(shè)備22之間連接的總線接口,用于完成存儲(chǔ)控制器21與存儲(chǔ)設(shè)備22之間的通信。需要說(shuō)明的是,本發(fā)明實(shí)施例中的存儲(chǔ)控制器21以及存儲(chǔ)設(shè)備22可能獨(dú)立部署,也可能集成在同一設(shè)備上,本發(fā)明對(duì)此不作具體限定。下面將基于該鍵值存儲(chǔ)系統(tǒng),對(duì)本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法進(jìn)行詳細(xì)介紹。首先,圖3和圖4分別為本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法的操作模塊示意圖和相應(yīng)的流程示意圖,該鍵值存儲(chǔ)方法具體可以包括:S401、在主機(jī)檢測(cè)到鍵值存儲(chǔ)請(qǐng)求之后,主機(jī)將鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼、以及地址信息寫入?yún)f(xié)議定義的字段組成第一存儲(chǔ)請(qǐng)求指令序列(如表一)。其中,該第一指令碼為根據(jù)協(xié)議的預(yù)留擴(kuò)展字段定義的指令碼。協(xié)議的預(yù)留擴(kuò)展字段具體是指協(xié)議預(yù)留的用于協(xié)議擴(kuò)展或用于用戶自定義的字段。S402、主機(jī)與存儲(chǔ)控制器進(jìn)行交互,以使得存儲(chǔ)控制器獲取該第一存儲(chǔ)請(qǐng)求指令序列。S403、存儲(chǔ)控制器的命令處理單元獲取該第一存儲(chǔ)請(qǐng)求指令序列,并通過(guò)分離第一存儲(chǔ)請(qǐng)求指令序列中的第一指令碼來(lái)判斷當(dāng)前為鍵值操作后,將第一存儲(chǔ)請(qǐng)求指令序列中的內(nèi)容轉(zhuǎn)發(fā)給鍵值存儲(chǔ)處理單元。S404、鍵值存儲(chǔ)處理單元處理全部的鍵值存儲(chǔ)請(qǐng)求,并將處理后的鍵值存儲(chǔ)請(qǐng)求提交給存儲(chǔ)控制單元。S405、存儲(chǔ)控制單元將前述提交的請(qǐng)求轉(zhuǎn)換為對(duì)存儲(chǔ)設(shè)備的操作。S406、存儲(chǔ)控制單元將操作結(jié)果通過(guò)前述單元反饋給主機(jī)。表一指令其它字段第一指令碼地址信息指令其它字段S407、在主機(jī)檢測(cè)到非鍵值存儲(chǔ)請(qǐng)求之后,主機(jī)將非鍵值存儲(chǔ)請(qǐng)求攜帶的第二指令碼、以及數(shù)據(jù)內(nèi)存指針寫入?yún)f(xié)議定義的字段組成第三存儲(chǔ)請(qǐng)求指令序列(如表二)。其中,該第二指令碼為協(xié)議的標(biāo)準(zhǔn)指令碼。S408、主機(jī)與存儲(chǔ)控制器進(jìn)行交互,以使得存儲(chǔ)控制器獲取該第三存儲(chǔ)請(qǐng)求指令序列。S409、存儲(chǔ)控制器的命令處理單元獲取該第三存儲(chǔ)請(qǐng)求指令序列,并通過(guò)分離第三存儲(chǔ)請(qǐng)求指令序列中的第二指令碼來(lái)判斷當(dāng)前為非鍵值操作后,將第三存儲(chǔ)請(qǐng)求指令序列中的內(nèi)容轉(zhuǎn)發(fā)給標(biāo)準(zhǔn)協(xié)議處理單元。S410、標(biāo)準(zhǔn)協(xié)議處理單元處理全部的非鍵值存儲(chǔ)請(qǐng)求,并將處理后的非鍵值存儲(chǔ)請(qǐng)求提交給存儲(chǔ)控制單元。S411、存儲(chǔ)控制單元將前述提交的請(qǐng)求轉(zhuǎn)換為對(duì)存儲(chǔ)設(shè)備的操作。S412、存儲(chǔ)控制單元將操作結(jié)果通過(guò)前述單元反饋給主機(jī)。表二指令其它字段第二指令碼數(shù)據(jù)內(nèi)存指針指令其它字段具體的,上述的協(xié)議可以是NVMe協(xié)議,也可以是SCSI協(xié)議等其它存儲(chǔ)協(xié)議,本發(fā)明實(shí)施例對(duì)此不作具體限定。具體的,上述的指令序列的形式可以是隊(duì)列,也可以是數(shù)據(jù)包等其它形式,本發(fā)明實(shí)施例對(duì)此不作具體限定。具體的,上述的鍵值存儲(chǔ)操作可以是寫數(shù)據(jù)、獲取數(shù)據(jù)、刪除數(shù)據(jù)或者廢棄數(shù)據(jù)等操作,本發(fā)明實(shí)施例對(duì)此不作具體限定。本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法將鍵值存儲(chǔ)操作擴(kuò)展到存儲(chǔ)協(xié)議之上,進(jìn)而,一方面,由于主機(jī)可以借助存儲(chǔ)協(xié)議和存儲(chǔ)控制器交互以實(shí)現(xiàn)鍵值存儲(chǔ),無(wú)需在塊層或者文件系統(tǒng)之上進(jìn)行轉(zhuǎn)換以實(shí)現(xiàn)鍵值存儲(chǔ),因此降低了存儲(chǔ)系統(tǒng)的IO路徑時(shí)延;另一方面,由于主機(jī)可以借助存儲(chǔ)協(xié)議和存儲(chǔ)控制器交互以實(shí)現(xiàn)非鍵值存儲(chǔ),因此可以同時(shí)支持傳統(tǒng)塊設(shè)備存儲(chǔ)??蛇x的,步驟S401具體可以包括:在主機(jī)檢測(cè)到鍵值存儲(chǔ)請(qǐng)求之后,主機(jī)按照協(xié)議定義的字段為第一存儲(chǔ)請(qǐng)求指令序列分配內(nèi)存;主機(jī)將該鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼、以及地址信息寫入該內(nèi)存。進(jìn)而,步驟S402具體可以包括:主機(jī)通知存儲(chǔ)控制器從該內(nèi)存中讀取該第一存儲(chǔ)請(qǐng)求指令序列;或者,主機(jī)向存儲(chǔ)控制器發(fā)送該第一存儲(chǔ)請(qǐng)求指令序列。其中,主機(jī)通知存儲(chǔ)控制器從內(nèi)存中讀取第一存儲(chǔ)請(qǐng)求指令序列的方式可以節(jié)省存儲(chǔ)控制器的內(nèi)存空間。需要說(shuō)明的是,本發(fā)明實(shí)施例僅是示例性的提供兩種主機(jī)與存儲(chǔ)控制器進(jìn)行交互,以使得存儲(chǔ)控制器獲取該第一存儲(chǔ)請(qǐng)求指令序列的方式,當(dāng)然,主機(jī)與存儲(chǔ)控制器還可能通過(guò)其它交互方式以使得存儲(chǔ)控制器獲取該第一存儲(chǔ)請(qǐng)求指令序列,本發(fā)明實(shí)施例對(duì)此不作具體限定。下面將結(jié)合具體的協(xié)議以及具體的鍵值存儲(chǔ)操作或者非鍵值存儲(chǔ)操作對(duì)本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法進(jìn)一步說(shuō)明。如圖5所示,為鍵值存儲(chǔ)與NVMe協(xié)議相結(jié)合以實(shí)現(xiàn)鍵值存儲(chǔ)的操作流程示意圖。首先,對(duì)圖5中的相關(guān)單元進(jìn)行簡(jiǎn)要介紹:一、主機(jī)接口:主機(jī)與存儲(chǔ)控制器通過(guò)主機(jī)接口進(jìn)行連接,主機(jī)通過(guò)主機(jī)接口與存儲(chǔ)控制器進(jìn)行指令、地址和數(shù)據(jù)的交互,本發(fā)明實(shí)施例中主機(jī)接口為總線和接口標(biāo)準(zhǔn)(英文:peripheralcomponentinterfaceexpress,縮寫:PCIe)接口;二、主機(jī)軟件模塊:1)應(yīng)用層:主機(jī)應(yīng)用程序或者是存儲(chǔ)客戶端軟件。2)傳統(tǒng)應(yīng)用層:基于傳統(tǒng)文件系統(tǒng)或者塊設(shè)備接口的主機(jī)應(yīng)用程序。3)中間件:鍵值存儲(chǔ)中間件,對(duì)主機(jī)應(yīng)用提供鍵值存儲(chǔ)接口,并將存儲(chǔ)請(qǐng)求傳遞給NVMe驅(qū)動(dòng)層。4)文件系統(tǒng):例如EXT3、EXT4、FAT32等。5)塊層:操作系統(tǒng)對(duì)塊存儲(chǔ)設(shè)備的抽象層,一般文件系統(tǒng)都構(gòu)建于這層之上。6)NVMe驅(qū)動(dòng)層:主機(jī)操作系統(tǒng)通過(guò)驅(qū)動(dòng)軟件和NVMe存儲(chǔ)控制器進(jìn)行數(shù)據(jù)傳輸和命令交互。7)NVMe命令轉(zhuǎn)換單元:位于NVMe驅(qū)動(dòng)層,用于將鍵值(Key-Value)存儲(chǔ)的擴(kuò)展指令、Key和/或Value存放的地址等信息填入NVMe發(fā)送隊(duì)列,并將NVMe發(fā)送隊(duì)列提交給NVMe驅(qū)動(dòng)層,由NVMe驅(qū)動(dòng)層下發(fā)給NVMe存儲(chǔ)控制器。三、NVMe存儲(chǔ)控制器:1)NVMe命令處理單元:分析NVMe控制器接收到的NVMe發(fā)送隊(duì)列中的指令碼,并根據(jù)不同的指令將NVMe發(fā)送隊(duì)列分發(fā)給鍵值存儲(chǔ)處理單元或者NVMe操作處理單元。2)鍵值存儲(chǔ)處理單元:處理全部的鍵值操作請(qǐng)求,并將處理后的請(qǐng)求提交給存儲(chǔ)控制單元。3)NVMe操作處理單元:處理標(biāo)準(zhǔn)NVMe協(xié)議操作請(qǐng)求。4)存儲(chǔ)控制單元:將前述提交的請(qǐng)求轉(zhuǎn)換為對(duì)存儲(chǔ)設(shè)備的操作,并將操作結(jié)果反饋給對(duì)存儲(chǔ)設(shè)備執(zhí)行數(shù)據(jù)的存儲(chǔ)操作。四、存儲(chǔ)設(shè)備:存儲(chǔ)設(shè)備中的存儲(chǔ)介質(zhì)包括動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(英文:dynamicrandomaccessmemory,縮寫:DRAM)、非易失性隨機(jī)訪問(wèn)存儲(chǔ)器(英文:non-volatilerandomaccessmemory,縮寫:NVRAM)、NAND或者其它存儲(chǔ)器件。其次,給出NVMe協(xié)議中NVMeIO隊(duì)列操作定義的指令碼,如表三所示:表三本發(fā)明實(shí)施例中,根據(jù)NVMe協(xié)議的預(yù)留擴(kuò)展字段定義鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼,如表四所示:表四需要說(shuō)明的是,上述表四僅是示例性的提供一種根據(jù)NVMe協(xié)議的預(yù)留擴(kuò)展字段定義鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼的方式,當(dāng)然,根據(jù)NVMe協(xié)議的預(yù)留擴(kuò)展字段定義鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼不限于上述方式,比如,可以在90h-99h字段上定義上述鍵值存儲(chǔ)操作,本發(fā)明實(shí)施例對(duì)此不作具體限定。如上所述,本實(shí)施例中鍵值(Key-Value)存儲(chǔ)操作包括但不限于:寫數(shù)據(jù)Put(StringKey,StringValue)、獲取數(shù)據(jù):Get(StringKey)、刪除數(shù)據(jù):Delete(StringKey)、廢棄數(shù)據(jù):TRIM(StringKey),本發(fā)明實(shí)施例對(duì)此不作具體限定。下面將結(jié)合圖5對(duì)上述鍵值存儲(chǔ)操作進(jìn)行詳細(xì)的描述。示例一:當(dāng)鍵值存儲(chǔ)請(qǐng)求為單次寫數(shù)據(jù)請(qǐng)求時(shí),如圖6所示,本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法包括步驟S601-S611:S601、應(yīng)用層調(diào)用中間件寫接口:Put(StringKey,StringValue)。S602、中間件提交寫數(shù)據(jù)請(qǐng)求、Key和Value存放的地址信息到NVMe驅(qū)動(dòng)層。S603、NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元寫寫數(shù)據(jù)指令80h、Key和Value存放的地址信息到NVMe發(fā)送隊(duì)列。具體的,在NVMe協(xié)議中,定義0-63字節(jié)為NVMe發(fā)送隊(duì)列對(duì)應(yīng)的字段。該步驟中NVMe發(fā)送隊(duì)列的命令格式如圖6中的發(fā)送隊(duì)列命令格式。其中,字節(jié)03:00(即第0個(gè)字節(jié)到第3個(gè)字節(jié))為指令碼對(duì)應(yīng)的字節(jié);字節(jié)23:04(即第4個(gè)字節(jié)到第23個(gè)字節(jié))為CommandDword1-6(即命令字的第1-6個(gè)4字節(jié));字節(jié)39:24(即第24個(gè)字節(jié)到第39個(gè)字節(jié))為Key和Value存放的地址信息對(duì)應(yīng)的字節(jié);字節(jié)63:40(即第40個(gè)字節(jié)到第63個(gè)字節(jié))為CommandDword10-15(即命令字的第10-15個(gè)4字節(jié))。需要說(shuō)明的是,本發(fā)明實(shí)施例中的NVMe發(fā)送隊(duì)列是上述指令序列的一種具體形式,當(dāng)然,如上所述,本發(fā)明實(shí)施例中的指令序列的形式也可以是數(shù)據(jù)包等其它形式,本發(fā)明實(shí)施例對(duì)此不作具體限定。S604、NVMe驅(qū)動(dòng)層通知NVMe存儲(chǔ)控制器讀NVMe發(fā)送隊(duì)列。S605、NVMe存儲(chǔ)控制器的NVMe命令處理單元通過(guò)直接數(shù)據(jù)存取(英文:directmemoryaccess,縮寫:DMA)讀NVMe發(fā)送隊(duì)列。S606、NVMe命令處理單元分離NVMe隊(duì)列中的寫數(shù)據(jù)指令、key和Value存放的地址信息,提交寫數(shù)據(jù)請(qǐng)求到鍵值存儲(chǔ)處理單元。S607、鍵值存儲(chǔ)處理單元處理Key和Value存放的地址信息,轉(zhuǎn)換寫數(shù)據(jù)請(qǐng)求為對(duì)應(yīng)存儲(chǔ)設(shè)備的寫數(shù)據(jù)請(qǐng)求,并提交寫數(shù)據(jù)請(qǐng)求到存儲(chǔ)控制單元。S608、存儲(chǔ)控制單元根據(jù)Key和Value存放的地址信息,寫數(shù)據(jù)到存儲(chǔ)設(shè)備。S609、存儲(chǔ)控制單元返回狀態(tài)信息到鍵值存儲(chǔ)處理單元。具體的,這里的狀態(tài)信息是指是否寫數(shù)據(jù)成功的信息。S610、鍵值存儲(chǔ)處理單元及前述單元依次傳遞狀態(tài)信息到中間件。具體的,結(jié)合圖5可知,此處的前述單元具體包括:NVMe存儲(chǔ)控制器的NVMe命令處理單元、主機(jī)的NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元。S611、中間件返回狀態(tài)信息到應(yīng)用層。至此,當(dāng)鍵值存儲(chǔ)請(qǐng)求為單次寫數(shù)據(jù)請(qǐng)求時(shí),鍵值存儲(chǔ)過(guò)程結(jié)束。示例二:當(dāng)鍵值存儲(chǔ)請(qǐng)求為單次獲取數(shù)據(jù)請(qǐng)求時(shí),如圖7所示,本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法包括步驟S701-S721:S701、應(yīng)用層調(diào)用中間件讀操作接口:Get(StringKey)。S702、中間件提交獲取Key對(duì)應(yīng)Value長(zhǎng)度的請(qǐng)求到NVMe驅(qū)動(dòng)層。S703、NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元寫獲取Value長(zhǎng)度的指令81h、Key存放的地址信息到NVMe發(fā)送隊(duì)列。具體的,在NVMe協(xié)議中,定義0-64字節(jié)為NVMe發(fā)送隊(duì)列對(duì)應(yīng)的字段。該步驟中NVMe發(fā)送隊(duì)列的命令格式如圖7中的發(fā)送隊(duì)列命令格式1。其中,字節(jié)03:00(即第0個(gè)字節(jié)到第3個(gè)字節(jié))為指令碼對(duì)應(yīng)的字節(jié);字節(jié)23:04(即第4個(gè)字節(jié)到第23個(gè)字節(jié))為CommandDword1-6(即命令字的第1-6個(gè)4字節(jié));字節(jié)39:24(即第24個(gè)字節(jié)到第39個(gè)字節(jié))為Key存放的地址信息對(duì)應(yīng)的字節(jié);字節(jié)63:40(即第40個(gè)字節(jié)到第63個(gè)字節(jié))為CommandDword10-15(即命令字的第10-15個(gè)4字節(jié))。需要說(shuō)明的是,本發(fā)明實(shí)施例中的NVMe發(fā)送隊(duì)列是上述指令序列的一種具體形式,當(dāng)然,如上所述,本發(fā)明實(shí)施例中的指令序列的形式也可以是數(shù)據(jù)包等其它形式,本發(fā)明實(shí)施例對(duì)此不作具體限定。S704、NVMe驅(qū)動(dòng)層通知NVMe存儲(chǔ)控制器讀NVMe發(fā)送隊(duì)列。S705、NVMe存儲(chǔ)控制器的NVMe命令處理單元通過(guò)DMA讀NVMe發(fā)送隊(duì)列。S706、NVMe命令處理單元分離NVMe隊(duì)列中的獲取Value長(zhǎng)度的指令、key存放的地址信息,提交讀操作請(qǐng)求到鍵值存儲(chǔ)處理單元。S707、鍵值存儲(chǔ)處理單元處理Key存放的地址信息,轉(zhuǎn)換讀操作請(qǐng)求為對(duì)應(yīng)存儲(chǔ)設(shè)備的讀操作請(qǐng)求,并提交讀操作請(qǐng)求到存儲(chǔ)控制單元。S708、存儲(chǔ)控制單元根據(jù)Key存放的地址信息,從存儲(chǔ)設(shè)備獲取對(duì)應(yīng)Value的長(zhǎng)度。S709、存儲(chǔ)控制單元提交Value的長(zhǎng)度信息到鍵值存儲(chǔ)處理單元。S710、鍵值存儲(chǔ)處理單元及前述單元依次Value的長(zhǎng)度信息到中間件。具體的,結(jié)合圖5可知,此處的前述單元具體包括:NVMe存儲(chǔ)控制器的NVMe命令處理單元、主機(jī)的NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元。S711、中間件根據(jù)Value的長(zhǎng)度分配Value在主機(jī)端存放的內(nèi)存空間。S712、中間件提交獲取Value的請(qǐng)求、Value存放的地址信息到NVMe驅(qū)動(dòng)層。S713、NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元寫獲取Value的指令82h、key存放的地址信息到NVMe發(fā)送隊(duì)列。具體的,在NVMe協(xié)議中,定義0-63字節(jié)為NVMe發(fā)送隊(duì)列對(duì)應(yīng)的字段。該步驟中NVMe發(fā)送隊(duì)列的命令格式如圖7中的發(fā)送隊(duì)列命令格式2。其中,字節(jié)03:00(即第0個(gè)字節(jié)到第3個(gè)字節(jié))為指令碼對(duì)應(yīng)的字節(jié);字節(jié)23:04(即第4個(gè)字節(jié)到第23個(gè)字節(jié))為CommandDword1-6(即命令字的第1-6個(gè)4字節(jié));字節(jié)39:24(即第24個(gè)字節(jié)到第39個(gè)字節(jié))為key存放的地址信息對(duì)應(yīng)的字節(jié);字節(jié)63:40(即第40個(gè)字節(jié)到第63個(gè)字節(jié))為CommandDword10-15(即命令字的第10-15個(gè)4字節(jié))。需要說(shuō)明的是,本發(fā)明實(shí)施例中的NVMe發(fā)送隊(duì)列是上述指令序列的一種具體形式,當(dāng)然,如上所述,本發(fā)明實(shí)施例中的指令序列的形式也可以是數(shù)據(jù)包等其它形式,本發(fā)明實(shí)施例對(duì)此不作具體限定。S714、NVMe驅(qū)動(dòng)層通知NVMe存儲(chǔ)控制器讀NVMe發(fā)送隊(duì)列。S715、NVMe存儲(chǔ)控制器的NVMe命令處理單元通過(guò)DMA讀NVMe發(fā)送隊(duì)列。S716、NVMe命令處理單元分離NVMe隊(duì)列中的獲取Value的指令、key存放的地址信息,提交獲取Value的請(qǐng)求到鍵值存儲(chǔ)處理單元。S717、鍵值存儲(chǔ)處理單元處理Value存放的地址信息,轉(zhuǎn)換獲取Value的請(qǐng)求為對(duì)應(yīng)存儲(chǔ)設(shè)備的獲取Value的請(qǐng)求,并提交獲取Value的請(qǐng)求到存儲(chǔ)控制單元。S718、存儲(chǔ)控制單元通過(guò)DMA方式讀數(shù)據(jù)到主機(jī)分配給Value存放的內(nèi)存地址??蛇x的,主機(jī)和存儲(chǔ)控制器之間指令和數(shù)據(jù)的傳輸方式還可以是遠(yuǎn)程直接數(shù)據(jù)存取(英文:remotedirectmemoryaccess,縮寫:RDMA)等其它傳輸方式,本發(fā)明實(shí)施例對(duì)此不作具體限定。S719、存儲(chǔ)控制單元返回狀態(tài)信息到鍵值存儲(chǔ)處理單元。具體的,這里的狀態(tài)信息是指是否獲取數(shù)據(jù)成功的信息。S720、鍵值存儲(chǔ)處理單元及前述單元依次傳遞狀態(tài)信息到中間件。具體的,結(jié)合圖5可知,此處的前述單元具體包括:NVMe存儲(chǔ)控制器的NVMe命令處理單元、主機(jī)的NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元。S721、中間件返回狀態(tài)信息到應(yīng)用層。至此,當(dāng)鍵值存儲(chǔ)請(qǐng)求為單次獲取數(shù)據(jù)請(qǐng)求時(shí),鍵值存儲(chǔ)過(guò)程結(jié)束。示例三、當(dāng)鍵值存儲(chǔ)請(qǐng)求為單次刪除數(shù)據(jù)請(qǐng)求時(shí),如圖8所示,本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法包括步驟S801-S811:S801、應(yīng)用層調(diào)用中間件刪除接口:Delete(StringKey)。S802、中間件提交刪除數(shù)據(jù)請(qǐng)求、Key存放的地址信息到NVMe驅(qū)動(dòng)層。S803、NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元寫刪除數(shù)據(jù)指令83h、Key存放的地址信息到NVMe發(fā)送隊(duì)列。具體的,在NVMe協(xié)議中,定義0-63字節(jié)為NVMe發(fā)送隊(duì)列對(duì)應(yīng)的字段。該步驟中NVMe發(fā)送隊(duì)列的命令格式如圖8中的發(fā)送隊(duì)列命令格式。其中,字節(jié)03:00(即第0個(gè)字節(jié)到第3個(gè)字節(jié))為指令碼對(duì)應(yīng)的字節(jié);字節(jié)23:04(即第4個(gè)字節(jié)到第23個(gè)字節(jié))為CommandDword1-6(即命令字的第1-6個(gè)4字節(jié));字節(jié)39:24(即第24個(gè)字節(jié)到第39個(gè)字節(jié))為key存放的地址信息對(duì)應(yīng)的字節(jié);字節(jié)63:40(即第40個(gè)字節(jié)到第63個(gè)字節(jié))為CommandDword10-15(即命令字的第10-15個(gè)4字節(jié))。需要說(shuō)明的是,本發(fā)明實(shí)施例中的NVMe發(fā)送隊(duì)列是上述指令序列的一種具體形式,當(dāng)然,如上所述,本發(fā)明實(shí)施例中的指令序列的形式也可以是數(shù)據(jù)包等其它形式,本發(fā)明實(shí)施例對(duì)此不作具體限定。S804、NVMe驅(qū)動(dòng)層通知NVMe存儲(chǔ)控制器讀NVMe發(fā)送隊(duì)列。S805、NVMe存儲(chǔ)控制器的NVMe命令處理單元通過(guò)DMA讀NVMe發(fā)送隊(duì)列。S806、NVMe命令處理單元分離NVMe隊(duì)列中的刪除數(shù)據(jù)指令、key存放的地址信息,提交刪除數(shù)據(jù)請(qǐng)求到鍵值存儲(chǔ)處理單元。S807、鍵值存儲(chǔ)處理單元處理Key存放的地址信息,轉(zhuǎn)換刪除數(shù)據(jù)請(qǐng)求為對(duì)應(yīng)存儲(chǔ)設(shè)備的刪除數(shù)據(jù)請(qǐng)求,并提交刪除數(shù)據(jù)請(qǐng)求到存儲(chǔ)控制單元。S808、存儲(chǔ)控制單元根據(jù)Key存放的地址信息,執(zhí)行對(duì)存儲(chǔ)設(shè)備中數(shù)據(jù)的刪除操作。S809、存儲(chǔ)控制單元返回狀態(tài)信息到鍵值存儲(chǔ)處理單元。具體的,這里的狀態(tài)信息是指是否刪除數(shù)據(jù)成功的信息。S810、鍵值存儲(chǔ)處理單元及前述單元依次傳遞狀態(tài)信息到中間件。具體的,結(jié)合圖5可知,此處的前述單元具體包括:NVMe存儲(chǔ)控制器的NVMe命令處理單元、主機(jī)的NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元。S811、中間件返回狀態(tài)信息到應(yīng)用層。至此,當(dāng)鍵值存儲(chǔ)請(qǐng)求為單次刪除數(shù)據(jù)請(qǐng)求時(shí),鍵值存儲(chǔ)過(guò)程結(jié)束。示例四、當(dāng)鍵值存儲(chǔ)請(qǐng)求為單次廢棄數(shù)據(jù)請(qǐng)求時(shí),如圖9所示,本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法包括步驟S901-S911:S901、應(yīng)用層調(diào)用中間件廢棄接口:TRIM(StringKey)。S902、中間件提交廢棄數(shù)據(jù)請(qǐng)求、Key存放的地址信息到NVMe驅(qū)動(dòng)層。S903、NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元寫廢棄數(shù)據(jù)指令84h、Key存放的地址信息到NVMe發(fā)送隊(duì)列。具體的,在NVMe協(xié)議中,定義0-63字節(jié)為NVMe發(fā)送隊(duì)列對(duì)應(yīng)的字段。該步驟中NVMe發(fā)送隊(duì)列的命令格式如圖9中的發(fā)送隊(duì)列命令格式。其中,字節(jié)03:00(即第0個(gè)字節(jié)到第3個(gè)字節(jié))為指令碼對(duì)應(yīng)的字節(jié);字節(jié)23:04(即第4個(gè)字節(jié)到第23個(gè)字節(jié))為CommandDword1-6(即命令字的第1-6個(gè)4字節(jié));字節(jié)39:24(即第24個(gè)字節(jié)到第39個(gè)字節(jié))為key存放的地址信息對(duì)應(yīng)的字節(jié);字節(jié)63:40(即第40個(gè)字節(jié)到第63個(gè)字節(jié))為CommandDword10-15(即命令字的第10-15個(gè)4字節(jié))。需要說(shuō)明的是,本發(fā)明實(shí)施例中的NVMe發(fā)送隊(duì)列是上述指令序列的一種具體形式,當(dāng)然,如上所述,本發(fā)明實(shí)施例中的指令序列的形式也可以是數(shù)據(jù)包等其它形式,本發(fā)明實(shí)施例對(duì)此不作具體限定。S904、NVMe驅(qū)動(dòng)層通知NVMe存儲(chǔ)控制器讀NVMe發(fā)送隊(duì)列。S905、NVMe存儲(chǔ)控制器的NVMe命令處理單元通過(guò)DMA讀NVMe發(fā)送隊(duì)列。S906、NVMe命令處理單元分離NVMe隊(duì)列中的廢棄數(shù)據(jù)指令、key存放的地址信息,提交廢棄數(shù)據(jù)請(qǐng)求到鍵值存儲(chǔ)處理單元。S907、鍵值存儲(chǔ)處理單元處理Key存放的地址信息,轉(zhuǎn)換廢棄數(shù)據(jù)請(qǐng)求為對(duì)應(yīng)存儲(chǔ)設(shè)備的廢棄數(shù)據(jù)請(qǐng)求,并提交廢棄數(shù)據(jù)請(qǐng)求到存儲(chǔ)控制單元。S908、存儲(chǔ)控制單元根據(jù)Key存放的地址信息,執(zhí)行對(duì)存儲(chǔ)設(shè)備中數(shù)據(jù)的廢棄操作。S909、存儲(chǔ)控制單元返回狀態(tài)信息到鍵值存儲(chǔ)處理單元。具體的,這里的狀態(tài)信息是指是否廢棄數(shù)據(jù)成功的信息。S910、鍵值存儲(chǔ)處理單元及前述單元依次傳遞狀態(tài)信息到中間件。具體的,結(jié)合圖5可知,此處的前述單元具體包括:NVMe存儲(chǔ)控制器的NVMe命令處理單元、主機(jī)的NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元。S911、中間件返回狀態(tài)信息到應(yīng)用層。至此,當(dāng)鍵值存儲(chǔ)請(qǐng)求為單次廢棄數(shù)據(jù)請(qǐng)求時(shí),鍵值存儲(chǔ)過(guò)程結(jié)束。其中,上述圖6-9所示的實(shí)施例均是針對(duì)單次鍵值存儲(chǔ)請(qǐng)求時(shí)的鍵值存儲(chǔ)。由表二可知,在指令定義的過(guò)程中,還可以定義聚合操作。所謂聚合操作,是指一次聚合存儲(chǔ)操作的請(qǐng)求可以同時(shí)完成多個(gè)單次存儲(chǔ)操作的請(qǐng)求,流程和單次請(qǐng)求操作的流程基本一致;不同的是,多個(gè)鍵(Key)和/或值(Value)的地址信息需要借助SGL(聚散表)通過(guò)NVMe發(fā)送隊(duì)列傳遞給存儲(chǔ)控制器,也就是說(shuō),多個(gè)鍵(Key)和/或值(Value)的地址信息可以通過(guò)聚散表地址信息進(jìn)行索引,該聚散表中包含多個(gè)單次鍵值存儲(chǔ)請(qǐng)求中每個(gè)單次鍵值存儲(chǔ)請(qǐng)求攜帶的地址信息。示例五、下面以當(dāng)鍵值存儲(chǔ)請(qǐng)求為聚合刪除數(shù)據(jù)請(qǐng)求為例,對(duì)本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法進(jìn)行說(shuō)明。如圖10所示,本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法包括步驟S1001-S1011:S1001、應(yīng)用層調(diào)用中間件聚合刪除接口Delete_Group(StringKeygroup)。S1002、中間件提交聚合刪除數(shù)據(jù)請(qǐng)求、指示Key數(shù)據(jù)組存放的地址的聚散表(SGL)的地址信息到NVMe驅(qū)動(dòng)層。S1003、NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元寫聚合刪除數(shù)據(jù)指令88h、SGL的地址信息到NVMe發(fā)送隊(duì)列。具體的,在NVMe協(xié)議中,定義0-63字節(jié)為NVMe發(fā)送隊(duì)列對(duì)應(yīng)的字段。該步驟中NVMe發(fā)送隊(duì)列的命令格式如圖10中的發(fā)送隊(duì)列命令格式。其中,字節(jié)03:00(即第0個(gè)字節(jié)到第3個(gè)字節(jié))為指令碼對(duì)應(yīng)的字節(jié);字節(jié)23:04(即第4個(gè)字節(jié)到第23個(gè)字節(jié))為CommandDword1-6(即命令字的第1-6個(gè)4字節(jié));字節(jié)39:24(即第24個(gè)字節(jié)到第39個(gè)字節(jié))為SGL的地址信息對(duì)應(yīng)的字節(jié);字節(jié)63:40(即第40個(gè)字節(jié)到第63個(gè)字節(jié))為CommandDword10-15(即命令字的第10-15個(gè)4字節(jié))。需要說(shuō)明的是,聚合操作可以包含任意數(shù)量個(gè)單次操作,圖10僅是以聚合刪除數(shù)據(jù)請(qǐng)求包括5個(gè)單次刪除數(shù)據(jù)請(qǐng)求為例,給出了SGL中包含key1-key5的地址信息的示意,不構(gòu)成對(duì)本發(fā)明技術(shù)方案的限定。需要說(shuō)明的是,本發(fā)明實(shí)施例中的NVMe發(fā)送隊(duì)列是上述指令序列的一種具體形式,當(dāng)然,如上所述,本發(fā)明實(shí)施例中的指令序列的形式也可以是數(shù)據(jù)包等其它形式,本發(fā)明實(shí)施例對(duì)此不作具體限定。S1004、NVMe驅(qū)動(dòng)層通知NVMe存儲(chǔ)控制器讀NVMe發(fā)送隊(duì)列。S1005、NVMe存儲(chǔ)控制器的NVMe命令處理單元通過(guò)DMA讀NVMe發(fā)送隊(duì)列。S1006、NVMe命令處理單元分離NVMe隊(duì)列中的聚合刪除數(shù)據(jù)指令、SGL的地址信息,提交聚合刪除數(shù)據(jù)請(qǐng)求到鍵值存儲(chǔ)處理單元。S1007、鍵值存儲(chǔ)處理單元對(duì)SGL中Key數(shù)據(jù)組存放的地址信息逐一進(jìn)行處理,轉(zhuǎn)換聚合刪除數(shù)據(jù)請(qǐng)求為每個(gè)Key對(duì)應(yīng)存儲(chǔ)設(shè)備中數(shù)據(jù)的刪除數(shù)據(jù)請(qǐng)求,并提交請(qǐng)求到存儲(chǔ)控制單元。S1008、存儲(chǔ)控制單元逐一執(zhí)行數(shù)據(jù)的刪除操作。S1009、全部操作完成后,存儲(chǔ)控制單元返回狀態(tài)信息到鍵值存儲(chǔ)處理單元。具體的,這里的狀態(tài)信息是指是否全部刪除數(shù)據(jù)成功的信息。S1010、鍵值存儲(chǔ)處理單元及前述單元依次傳遞狀態(tài)信息到中間件。具體的,結(jié)合圖5可知,此處的前述單元具體包括:NVMe存儲(chǔ)控制器的NVMe命令處理單元、主機(jī)的NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元。S1011、中間件返回狀態(tài)信息到應(yīng)用層。至此,當(dāng)鍵值存儲(chǔ)請(qǐng)求為聚合刪除數(shù)據(jù)請(qǐng)求時(shí),鍵值存儲(chǔ)過(guò)程結(jié)束。其中,上述圖6-10所示的實(shí)施例均是針對(duì)主機(jī)檢測(cè)到鍵值存儲(chǔ)請(qǐng)求時(shí)的操作。當(dāng)然,如上所述,本發(fā)明實(shí)施例中,主機(jī)還可以借助存儲(chǔ)協(xié)議和存儲(chǔ)控制器交互以實(shí)現(xiàn)非鍵值存儲(chǔ),比如同時(shí)支持傳統(tǒng)塊設(shè)備存儲(chǔ),具體參見(jiàn)示例六。示例六、當(dāng)主機(jī)檢測(cè)到非鍵值存儲(chǔ)請(qǐng)求時(shí),如圖11所示,非鍵值存儲(chǔ)相關(guān)的標(biāo)準(zhǔn)NVMe設(shè)備操作包括步驟S1101-S1111:S1101、傳統(tǒng)應(yīng)用層調(diào)用文件系統(tǒng)接口。S1102、文件系統(tǒng)層轉(zhuǎn)換非鍵值存儲(chǔ)請(qǐng)求為塊層的操作請(qǐng)求。S1103、塊層提交操作請(qǐng)求到NVMe驅(qū)動(dòng)層。S1104、NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元轉(zhuǎn)換操作請(qǐng)求為標(biāo)準(zhǔn)的NVMe指令,寫指令碼、數(shù)據(jù)內(nèi)存指針等信息到NVMe發(fā)送隊(duì)列。具體的,本實(shí)施例中NVMe發(fā)送隊(duì)列的命令格式和上述實(shí)施例中的NVMe發(fā)送隊(duì)列命令格式類似,此處不再贅述。S1105、NVMe驅(qū)動(dòng)層通知NVMe存儲(chǔ)控制器讀NVMe發(fā)送隊(duì)列。S1106、NVMe存儲(chǔ)控制器的NVMe命令處理單元通過(guò)DMA讀NVMe發(fā)送隊(duì)列;S1107、NVMe命令處理單元分離NVMe發(fā)送隊(duì)列中的指令碼、數(shù)據(jù)內(nèi)存指針等信息,提交操作請(qǐng)求到NVMe操作處理單元。S1108、NVMe操作處理單元處理數(shù)據(jù)內(nèi)存指針等信息,轉(zhuǎn)換操作請(qǐng)求為對(duì)應(yīng)存儲(chǔ)設(shè)備的操作請(qǐng)求,并提交操作請(qǐng)求到存儲(chǔ)控制單元。S1109、存儲(chǔ)控制單元根據(jù)數(shù)據(jù)內(nèi)存指針,執(zhí)行對(duì)存儲(chǔ)設(shè)備的操作請(qǐng)求。S1110、存儲(chǔ)控制單元返回狀態(tài)信息到NVMe操作處理單元。具體的,這里的狀態(tài)信息是指是否執(zhí)行操作請(qǐng)求成功的信息。S1111、NVMe操作處理單元及前述單元依次傳遞狀態(tài)信息到傳統(tǒng)應(yīng)用層。具體的,結(jié)合圖5可知,此處的前述單元具體包括:NVMe存儲(chǔ)控制器的NVMe命令處理單元、主機(jī)的NVMe驅(qū)動(dòng)層的NVMe命令轉(zhuǎn)換單元、塊層、以及文件系統(tǒng)。至此,非鍵值存儲(chǔ)相關(guān)的標(biāo)準(zhǔn)NVMe設(shè)備操作結(jié)束。其中,上述圖6-11所示的實(shí)施例均是結(jié)合圖5所示的鍵值存儲(chǔ)與NVMe協(xié)議相結(jié)合以實(shí)現(xiàn)鍵值存儲(chǔ)的操作流程示意圖進(jìn)行說(shuō)明。將鍵值存儲(chǔ)和NVMe協(xié)議這類高效存儲(chǔ)協(xié)議結(jié)合起來(lái),可以使得存儲(chǔ)系統(tǒng)同時(shí)具備二者的優(yōu)勢(shì)。然而,如上所述,本發(fā)明實(shí)施例中的協(xié)議可以是NVMe協(xié)議,也可以是SCSI協(xié)議等其它存儲(chǔ)協(xié)議,本發(fā)明實(shí)施例對(duì)此不作具體限定。比如,本發(fā)明實(shí)施例還可以將鍵值存儲(chǔ)與SCSI協(xié)議相結(jié)合,如圖12所示,為鍵值存儲(chǔ)與SCSI協(xié)議相結(jié)合以實(shí)現(xiàn)鍵值存儲(chǔ)的操作流程示意圖。首先,對(duì)圖12中的相關(guān)單元進(jìn)行簡(jiǎn)要介紹:一、主機(jī)接口:圖12所示的主機(jī)接口與圖5所示的主機(jī)接口的功能相同,具體可參考圖5所示的主機(jī)接口的描述,此處不再贅述。二、主機(jī)軟件模塊:1)圖12所示的應(yīng)用、傳統(tǒng)應(yīng)用、中間件、文件系統(tǒng)與塊層的功能和圖5所示的應(yīng)用、傳統(tǒng)應(yīng)用、中間件、文件系統(tǒng)與塊層的功能分別相同,具體可參考圖5所示的應(yīng)用、傳統(tǒng)應(yīng)用、中間件、文件系統(tǒng)與塊層的描述,此處不再贅述。2)SCSI層:處理SCSI事務(wù)的軟件層,包括SCSI上層、SCSI中層和SCSI下層。3)SCSI驅(qū)動(dòng)層:位于SCSI下層,負(fù)責(zé)將SCSI請(qǐng)求提交給串行SCSI接口(英文:SerialAttachedSCSI,縮寫:SAS)存儲(chǔ)控制器,完成與SAS存儲(chǔ)控制器間的控制和數(shù)據(jù)交互操作。4)SCSI命令轉(zhuǎn)換單元:位于SCSI驅(qū)動(dòng)層,用于將鍵值(Key-Value)存儲(chǔ)的擴(kuò)展指令、Key和/或Value的地址等信息填入NVMe發(fā)送隊(duì)列,并將NVMe發(fā)送隊(duì)列提交給SCSI驅(qū)動(dòng)層下發(fā)給SAS存儲(chǔ)控制器。三、SAS存儲(chǔ)控制器:1)圖12所示的鍵值存儲(chǔ)處理單元與存儲(chǔ)控制單元的功能和圖5所示的鍵值存儲(chǔ)處理單元與存儲(chǔ)控制單元的功能分別相同,具體可參考圖5所示的鍵值存儲(chǔ)處理單元與存儲(chǔ)控制單元的描述,此處不再贅述。2)SCSI命令處理單元:分析SCSI控制器接收到的SCSI發(fā)送隊(duì)列中的指令碼,并根據(jù)不同的指令將SCSI發(fā)送隊(duì)列分發(fā)給鍵值存儲(chǔ)處理單元或者SCSI操作處理單元。3)SCSI操作處理單元:處理標(biāo)準(zhǔn)SCSI協(xié)議操作請(qǐng)求。四、存儲(chǔ)設(shè)備:圖12所示的存儲(chǔ)設(shè)備與圖5所示的存儲(chǔ)設(shè)備的功能相同,具體可參考圖5所示的存儲(chǔ)設(shè)備的描述,此處不再贅述。其次,給出SCSI協(xié)議中對(duì)塊設(shè)備操作定義的指令碼,如表五所示:表五本發(fā)明實(shí)施例中,根據(jù)SCSI協(xié)議的預(yù)留擴(kuò)展字段定義鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼,如表六所示:表六需要說(shuō)明的是,上述表六僅是示例性的提供一種根據(jù)SCSI協(xié)議的預(yù)留擴(kuò)展字段定義鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼的方式,當(dāng)然,根據(jù)SCSI協(xié)議的預(yù)留擴(kuò)展字段定義鍵值存儲(chǔ)請(qǐng)求攜帶的第一指令碼不限于上述方式,比如,可以在上面表五中注釋部分第3條提到的其它預(yù)留擴(kuò)展字段上定義上述鍵值存儲(chǔ)操作,本發(fā)明實(shí)施例對(duì)此不作具體限定。具體的,結(jié)合圖12進(jìn)行鍵值存儲(chǔ)操作的流程與結(jié)合圖5進(jìn)行鍵值存儲(chǔ)操作的流程一致,具體可參考圖6-11所示的實(shí)施例,此處不再贅述。由上述各實(shí)施例所示的鍵值存儲(chǔ)的方法可知,本發(fā)明實(shí)施例提供的鍵值存儲(chǔ)方法將鍵值存儲(chǔ)操作擴(kuò)展到存儲(chǔ)協(xié)議之上,進(jìn)而,一方面,由于主機(jī)可以借助存儲(chǔ)協(xié)議和存儲(chǔ)控制器交互以實(shí)現(xiàn)鍵值存儲(chǔ),無(wú)需在塊層或者文件系統(tǒng)之上進(jìn)行轉(zhuǎn)換以實(shí)現(xiàn)鍵值存儲(chǔ),因此降低了存儲(chǔ)系統(tǒng)的IO路徑時(shí)延;另一方面,由于主機(jī)可以借助存儲(chǔ)協(xié)議和存儲(chǔ)控制器交互以實(shí)現(xiàn)非鍵值存儲(chǔ),因此可以同時(shí)支持傳統(tǒng)塊設(shè)備存儲(chǔ)。上述主要從各個(gè)設(shè)備之間交互的角度對(duì)本發(fā)明實(shí)施例提供的方案進(jìn)行了介紹。可以理解的是,各個(gè)設(shè)備,例如主機(jī)、存儲(chǔ)控制器等為了實(shí)現(xiàn)上述功能,其包含了執(zhí)行各個(gè)功能相應(yīng)的硬件結(jié)構(gòu)和/或軟件模塊。本領(lǐng)域技術(shù)人員應(yīng)該很容易意識(shí)到,結(jié)合本文中所公開(kāi)的實(shí)施例描述的各示例的單元及算法步驟,本發(fā)明能夠以硬件或硬件和計(jì)算機(jī)軟件的結(jié)合形式來(lái)實(shí)現(xiàn)。某個(gè)功能究竟以硬件還是計(jì)算機(jī)軟件驅(qū)動(dòng)硬件的方式來(lái)執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來(lái)使用不同方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。本發(fā)明實(shí)施例可以根據(jù)上述方法示例對(duì)主機(jī)、存儲(chǔ)控制器等進(jìn)行功能模塊的劃分,例如,可以對(duì)應(yīng)各個(gè)功能劃分各個(gè)功能模塊,也可以將兩個(gè)或兩個(gè)以上的功能集成在一個(gè)處理模塊中。上述集成的模塊既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。需要說(shuō)明的是,本發(fā)明實(shí)施例中對(duì)模塊的劃分是示意性的,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式。在采用集成的單元的情況,圖13示出了上述實(shí)施例中所涉及的主機(jī)1300的一種可能的結(jié)構(gòu)示意圖,主機(jī)1300包括:處理模塊1301和通信模塊1302。通信模塊1302用于和存儲(chǔ)控制器之間進(jìn)行通信。處理模塊1301用于支持主機(jī)執(zhí)行圖4中的過(guò)程S401和S407,或者處理模塊1301可以包括應(yīng)用層1301a、中間件1301b和驅(qū)動(dòng)層1301c,用于支持主機(jī)執(zhí)行圖6-10中應(yīng)用層、中間件和NVMe驅(qū)動(dòng)層所執(zhí)行的操作,或者處理模塊1301還可以包括傳統(tǒng)應(yīng)用層1301d、文件系統(tǒng)1301e、塊層1301f和驅(qū)動(dòng)層1301c,用于支持主機(jī)執(zhí)行圖11中傳統(tǒng)應(yīng)用層、文件系統(tǒng)、塊層和NVMe驅(qū)動(dòng)層所執(zhí)行的操作。其中,上述方法實(shí)施例涉及的各步驟的所有相關(guān)內(nèi)容均可以援引到對(duì)應(yīng)功能模塊的功能描述,在此不再贅述。此外,主機(jī)1300還可以包括存儲(chǔ)模塊,用于存儲(chǔ)主機(jī)1300的程序代碼和數(shù)據(jù)。其中,處理模塊1301可以是處理器或控制器,例如可以是圖2中的CPU202,也可以是通用處理器,數(shù)字信號(hào)處理器(英文:digitalsignalprocessor,縮寫:DSP),專用集成電路(英文:application-specificintegratedcircuit,縮寫:ASIC),現(xiàn)場(chǎng)可編程門陣列(英文:fieldprogrammablegatearray,縮寫:FPGA)或者其他可編程邏輯器件、晶體管邏輯器件、硬件部件或者其任意組合。其可以實(shí)現(xiàn)或執(zhí)行結(jié)合本發(fā)明公開(kāi)內(nèi)容所描述的各種示例性的邏輯方框,模塊和電路。所述處理器也可以是實(shí)現(xiàn)計(jì)算功能的組合,例如包含一個(gè)或多個(gè)微處理器組合,DSP和微處理器的組合等等。通信模塊1302可以是通信接口,例如可以是圖2中的主機(jī)通信接口205,也可以是接收器和發(fā)送器,或者收發(fā)電路等。存儲(chǔ)模塊1201可以是內(nèi)存或存儲(chǔ)器。當(dāng)處理模塊1301為CPU,通信模塊1302為通信接口時(shí),本發(fā)明實(shí)施例所涉及的主機(jī)可以為圖2所示的主機(jī),具體可參見(jiàn)圖2部分的相關(guān)描述,此處不再贅述。在采用集成的單元的情況,圖14示出了上述實(shí)施例中所涉及的存儲(chǔ)控制器1400的一種可能的結(jié)構(gòu)示意圖,存儲(chǔ)控制器1400包括:前端通信模塊1401、處理模塊1402、控制模塊1403和后端通信模塊1404。前端通信模塊1401用于支持存儲(chǔ)控制器1400與前端設(shè)備之間的通信,例如和圖4、圖6-11中主機(jī)的通信。后端通信模塊1404用于支持存儲(chǔ)控制器1400與后端設(shè)備之間的通信,例如和圖4、圖6-11中存儲(chǔ)設(shè)備的通信。處理模塊1402可以包括命令處理單元1402a、鍵值存儲(chǔ)處理單元1402b和標(biāo)準(zhǔn)協(xié)議處理單元1402c,用于支持存儲(chǔ)控制器1400執(zhí)行圖4中命令處理單元、鍵值存儲(chǔ)處理單元和標(biāo)準(zhǔn)協(xié)議處理單元所執(zhí)行的操作,或者用于支持存儲(chǔ)控制器1400執(zhí)行圖6-11中NVMe命令處理單元、鍵值存儲(chǔ)處理單元和NVMe操作處理單元所執(zhí)行的操作??刂颇K1403用于支持存儲(chǔ)控制器執(zhí)行圖4和圖6-11中存儲(chǔ)控制單元所執(zhí)行的操作。其中,上述方法實(shí)施例涉及的各步驟的所有相關(guān)內(nèi)容均可以援引到對(duì)應(yīng)功能模塊的功能描述,在此不再贅述。此外,存儲(chǔ)控制器1400還可以包括存儲(chǔ)模塊,用于存儲(chǔ)存儲(chǔ)控制器1400的程序代碼和數(shù)據(jù)。其中,處理模塊1402和控制模塊1403可以是處理器或控制器,例如可以是圖2中的CPU212,也可以是通用處理器,數(shù)字信號(hào)處理器(英文:digitalsignalprocessor,縮寫:DSP),專用集成電路(英文:application-specificintegratedcircuit,縮寫:ASIC),現(xiàn)場(chǎng)可編程門陣列(英文:fieldprogrammablegatearray,縮寫:FPGA)或者其他可編程邏輯器件、晶體管邏輯器件、硬件部件或者其任意組合。其可以實(shí)現(xiàn)或執(zhí)行結(jié)合本發(fā)明公開(kāi)內(nèi)容所描述的各種示例性的邏輯方框,模塊和電路。所述處理器也可以是實(shí)現(xiàn)計(jì)算功能的組合,例如包含一個(gè)或多個(gè)微處理器組合,DSP和微處理器的組合等等。前端通信模塊1401和后端通信模塊1404可以是通信接口,例如分別可以是圖2中的前端通信接口211后端通信接口214,也可以是接收器和發(fā)送器,或者收發(fā)電路或等。存儲(chǔ)模塊可以是內(nèi)存或存儲(chǔ)器。當(dāng)處理模塊1402和控制模塊1403為CPU,前端通信模塊1401和后端通信模塊1404為通信接口時(shí),本發(fā)明實(shí)施例所涉及的存儲(chǔ)控制器可以為圖2所示的存儲(chǔ)控制器,具體可參見(jiàn)圖2部分的相關(guān)描述,此處不再贅述。結(jié)合本發(fā)明公開(kāi)內(nèi)容所描述的方法或者算法的步驟可以硬件的方式來(lái)實(shí)現(xiàn),也可以是由處理器執(zhí)行軟件指令的方式來(lái)實(shí)現(xiàn)。軟件指令可以由相應(yīng)的軟件模塊組成,軟件模塊可以被存放于隨機(jī)存取存儲(chǔ)器(英文:randomaccessmemory,縮寫:RAM)、閃存、只讀存儲(chǔ)器(英文:readonlymemory,縮寫:ROM)、可擦除可編程只讀存儲(chǔ)器(英文:erasableprogrammableROM,縮寫:EPROM)、電可擦可編程只讀存儲(chǔ)器(英文:electricallyEPROM,縮寫:EEPROM)、寄存器、硬盤、移動(dòng)硬盤、只讀光盤(CD-ROM)或者本領(lǐng)域熟知的任何其它形式的存儲(chǔ)介質(zhì)中。一種示例性的存儲(chǔ)介質(zhì)耦合至處理器,從而使處理器能夠從該存儲(chǔ)介質(zhì)讀取信息,且可向該存儲(chǔ)介質(zhì)寫入信息。當(dāng)然,存儲(chǔ)介質(zhì)也可以是處理器的組成部分。處理器和存儲(chǔ)介質(zhì)可以位于ASIC中。另外,該ASIC可以位于核心網(wǎng)接口設(shè)備中。當(dāng)然,處理器和存儲(chǔ)介質(zhì)也可以作為分立組件存在于核心網(wǎng)接口設(shè)備中。本領(lǐng)域技術(shù)人員應(yīng)該可以意識(shí)到,在上述一個(gè)或多個(gè)示例中,本發(fā)明所描述的功能可以用硬件、軟件、固件或它們的任意組合來(lái)實(shí)現(xiàn)。當(dāng)使用軟件實(shí)現(xiàn)時(shí),可以將這些功能存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中或者作為計(jì)算機(jī)可讀介質(zhì)上的一個(gè)或多個(gè)指令或代碼進(jìn)行傳輸。計(jì)算機(jī)可讀介質(zhì)包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì),其中通信介質(zhì)包括便于從一個(gè)地方向另一個(gè)地方傳送計(jì)算機(jī)程序的任何介質(zhì)。存儲(chǔ)介質(zhì)可以是通用或?qū)S糜?jì)算機(jī)能夠存取的任何可用介質(zhì)。以上所述的具體實(shí)施方式,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說(shuō)明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的技術(shù)方案的基礎(chǔ)之上,所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包括在本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁(yè)1 2 3