本發(fā)明涉及通信技術(shù)領(lǐng)域,具體涉及一種存儲系統(tǒng)中的數(shù)據(jù)處理方法、裝置和系統(tǒng)。
背景技術(shù):
存儲系統(tǒng)在通信系統(tǒng)中具有極為重要的地位,其容量、以及處理效率直接關(guān)系到整個通信系統(tǒng)的性能。關(guān)于存儲系統(tǒng),現(xiàn)在用的最多的基于鍵值對(key-value)數(shù)據(jù)格式的NoSql(非關(guān)系型的數(shù)據(jù)庫,Not Only SQL)分布式存儲系統(tǒng),簡稱為Key-value存儲系統(tǒng),其數(shù)據(jù)按照鍵值對的形式進(jìn)行存儲,以鍵(key)作為值(value)的索引,由于它可以不涉及過多的業(yè)務(wù)關(guān)系數(shù)據(jù),不用關(guān)心數(shù)據(jù)的存儲格式,因此,比SQL數(shù)據(jù)庫擁有更好的讀寫性能。
在現(xiàn)有技術(shù)中,對于Key-value存儲系統(tǒng)的局部更新,一般需要由業(yè)務(wù)側(cè)先把value全部讀取出來,然后解碼并更新其中的一部分?jǐn)?shù)據(jù),再重新將數(shù)據(jù)寫回。如果涉及并發(fā)修改,則需要實現(xiàn)樂觀鎖,即在寫回的過程需要檢查value是否被修改,如果被修改,則需要重新讀取數(shù)據(jù),然后更新再寫入,不停重試,直到成功為止。而且,如果業(yè)務(wù)需要存儲結(jié)構(gòu)化數(shù)據(jù),則在寫入時需要將結(jié)構(gòu)化數(shù)據(jù)讀取到業(yè)務(wù)側(cè),由業(yè)務(wù)側(cè)將結(jié)構(gòu)化數(shù)據(jù)進(jìn)行序列化操作,然后在讀取時再進(jìn)行反序列化。
在對現(xiàn)有技術(shù)的研究和實踐過程中,本發(fā)明的發(fā)明人發(fā)現(xiàn),由于每次都需要拉取全量的value數(shù)據(jù),因此,需要消耗較多的網(wǎng)絡(luò)資源,且處理效率較低;而且,由于在存儲結(jié)構(gòu)化數(shù)據(jù)時,需要將數(shù)據(jù)讀取到業(yè)務(wù)側(cè)進(jìn)行序列化操作,因此,會造成大量的網(wǎng)絡(luò)資源消耗,且不利于數(shù)據(jù)的并發(fā)處理。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種存儲系統(tǒng)中的數(shù)據(jù)處理方法、裝置和系統(tǒng),可以節(jié)省網(wǎng)絡(luò)資源的消耗,提升并發(fā)處理能力,以提高處理效率。
本發(fā)明實施例提供一種存儲系統(tǒng)中的數(shù)據(jù)處理方法,包括:
接收業(yè)務(wù)側(cè)發(fā)送的數(shù)據(jù)處理請求,所述數(shù)據(jù)處理請求攜帶業(yè)務(wù)標(biāo)識,并指示需要處理的鍵、以及處理內(nèi)容;
根據(jù)所述業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹,所述請求樹包括多個葉子節(jié)點;
確定與所述需要處理的鍵對應(yīng)的葉子節(jié)點;
根據(jù)所述處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理。
相應(yīng)的,本發(fā)明實施例還提供一種存儲系統(tǒng)中的數(shù)據(jù)處理裝置,包括:
接收單元,用于接收業(yè)務(wù)側(cè)發(fā)送的數(shù)據(jù)處理請求,所述數(shù)據(jù)處理請求攜帶業(yè)務(wù)標(biāo)識,并指示需要處理的鍵、以及處理內(nèi)容;
獲取單元,用于根據(jù)所述業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹,所述請求樹包括多個葉子節(jié)點;
確定單元,用于確定與所述需要處理的鍵對應(yīng)的葉子節(jié)點;
處理單元,用于根據(jù)所述處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理。
此外,本發(fā)明實施例還提供一種存儲系統(tǒng),包括本發(fā)明實施例所提供的任一種存儲系統(tǒng)中的數(shù)據(jù)處理裝置。
本發(fā)明實施例采用接收業(yè)務(wù)側(cè)發(fā)送的數(shù)據(jù)處理請求,其中,該數(shù)據(jù)處理請求攜帶業(yè)務(wù)標(biāo)識,并指示需要處理的鍵、以及處理內(nèi)容,根據(jù)該業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹,該請求樹包括多個葉子節(jié)點,確定與該需要處理的鍵對應(yīng)的葉子節(jié)點,然后,根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理;由于該方案可以根據(jù)需要處理的鍵直接獲取對應(yīng)的葉子節(jié)點進(jìn)行處理,即只需拉取需要處理的部分value數(shù)據(jù)進(jìn)行處理,因此,相對于現(xiàn)有技術(shù)中只能拉取全量的value數(shù)據(jù)的方案而言,大大節(jié)省了網(wǎng)絡(luò)資源的消耗,以及提高處理效率;而且,由于該方案在對數(shù)據(jù)進(jìn)行處理時,都無需業(yè)務(wù)側(cè)參與,因此,有利于保證事務(wù)的完整性,以及降低操作的復(fù)雜性,適合大規(guī)模海量數(shù)據(jù)處理,可以提升存儲系統(tǒng)的并發(fā)處理能力;總而言之,該方案不僅可以節(jié)省網(wǎng)絡(luò)資源的消耗,提高處理效率,而且可以提升并發(fā)處理能力。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1a是本發(fā)明實施例提供的存儲系統(tǒng)的場景示意圖;
圖1b是本發(fā)明實施例提供的存儲系統(tǒng)中的數(shù)據(jù)處理方法的流程圖;
圖2a是本發(fā)明實施例提供的存儲系統(tǒng)的架構(gòu)圖;
圖2b是本發(fā)明實施例提供的請求樹的示例圖;
圖2c是本發(fā)明實施例提供的存儲系統(tǒng)中的數(shù)據(jù)處理方法的另一流程圖;
圖2d是本發(fā)明實施例提供的請求樹的另一示例圖;
圖3a是本發(fā)明實施例提供的存儲系統(tǒng)中的數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖;
圖3b是本發(fā)明實施例提供的存儲系統(tǒng)中的數(shù)據(jù)處理裝置的另一結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實施例提供一種存儲系統(tǒng)中的數(shù)據(jù)處理方法、裝置和系統(tǒng)。
該存儲系統(tǒng)可以包括本發(fā)明實施例所提供的任一種存儲系統(tǒng)中的數(shù)據(jù)處理裝置,該存儲系統(tǒng)中的數(shù)據(jù)處理裝置具體可以作為獨立的實體存在,也可以集成在存儲側(cè),比如存儲服務(wù)器等設(shè)備中。
以集成在存儲服務(wù)器中為例,參見圖1a,該存儲服務(wù)器可以接收業(yè)務(wù)側(cè),如業(yè)務(wù)服務(wù)器發(fā)送的數(shù)據(jù)處理請求,比如數(shù)據(jù)讀取請求、數(shù)據(jù)寫入請求或數(shù)據(jù)更新請求,等等,其中,該數(shù)據(jù)處理請求可以攜帶業(yè)務(wù)標(biāo)識,并指示需要處理 的鍵、以及處理內(nèi)容,然后,存儲服務(wù)器根據(jù)該業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹,并確定與該需要處理的鍵對應(yīng)的葉子節(jié)點,其中,該請求樹可以包括多個葉子節(jié)點,比如節(jié)點A、B、C、D、E、F和G等,再然后,根據(jù)該處理內(nèi)容對確定的葉子節(jié)點,如F和G進(jìn)行處理,比如進(jìn)行數(shù)據(jù)的寫入、讀取、更新或刪除,等等,此后,存儲服務(wù)器還可以返回相應(yīng)的處理結(jié)果給業(yè)務(wù)側(cè);也就是說,該方案只需拉取需要處理的部分value數(shù)據(jù)(即葉子節(jié)點所存儲的數(shù)據(jù)),比如F和G上的數(shù)據(jù)進(jìn)行處理,而無需拉取全量的value數(shù)據(jù),因此,可以大大節(jié)省了網(wǎng)絡(luò)資源的消耗,以及提高處理效率。
以下將分別進(jìn)行詳細(xì)說明。
實施例一、
本實施例中將從存儲系統(tǒng)中的數(shù)據(jù)處理裝置的角度進(jìn)行描述,該存儲系統(tǒng)中的數(shù)據(jù)處理裝置可以作為獨立的實體,也可以集成在存儲側(cè),比如存儲服務(wù)器等設(shè)備中。
一種存儲系統(tǒng)中的數(shù)據(jù)處理方法,包括:接收業(yè)務(wù)側(cè)發(fā)送的數(shù)據(jù)處理請求,該數(shù)據(jù)處理請求攜帶業(yè)務(wù)標(biāo)識,并指示需要處理的鍵、以及處理內(nèi)容;根據(jù)該業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹,該請求樹包括多個葉子節(jié)點;確定與該需要處理的鍵對應(yīng)的葉子節(jié)點;根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理。
如圖1b所示,該存儲系統(tǒng)中的數(shù)據(jù)處理方法的具體流程可以如下:
101、接收業(yè)務(wù)側(cè)發(fā)送的數(shù)據(jù)處理請求,該數(shù)據(jù)處理請求攜帶業(yè)務(wù)標(biāo)識,并指示需要處理的鍵、以及處理內(nèi)容等信息。
其中,該數(shù)據(jù)處理請求可以是數(shù)據(jù)讀取請求、數(shù)據(jù)寫入請求、數(shù)據(jù)更新請求或數(shù)據(jù)刪除請求等,根據(jù)不同的請求類型,所指示的處理內(nèi)容也會有所不同,比如,可以如下:
若是數(shù)據(jù)讀取請求,則指示的處理內(nèi)容為讀取數(shù)據(jù);若是數(shù)據(jù)更新請求,則指示的處理內(nèi)容為更新數(shù)據(jù),比如對鍵進(jìn)行更新;若是數(shù)據(jù)寫入請求,則指示的處理內(nèi)容為寫入數(shù)據(jù);而若是數(shù)據(jù)刪除請求,則指示的處理內(nèi)容為刪除數(shù) 據(jù),等等。
其中,業(yè)務(wù)標(biāo)識指的是可以用于識別業(yè)務(wù)的信息,比如業(yè)務(wù)名稱、業(yè)務(wù)編號或業(yè)務(wù)代碼等等。
102、根據(jù)該業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹。
其中,該請求樹可以包括多個葉子節(jié)點,每個鍵都有其對應(yīng)的葉子節(jié)點,葉子節(jié)點中存儲有相應(yīng)的鍵的value數(shù)據(jù),在本發(fā)明實施例中簡稱數(shù)據(jù)。
該請求樹可以根據(jù)實際應(yīng)用的需求進(jìn)行設(shè)置,比如,可以由維護(hù)人員預(yù)先根據(jù)業(yè)務(wù)進(jìn)行來構(gòu)建,或者,也可以由該存儲系統(tǒng)自行進(jìn)行建立,比如可以通過獲取業(yè)務(wù)信息,并對該業(yè)務(wù)信息進(jìn)行分析,以提取鍵信息,然后基于該鍵信息建立該業(yè)務(wù)的請求樹,等等;即在步驟“根據(jù)該業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹”之前,該存儲系統(tǒng)中的數(shù)據(jù)處理方法還可以包括:
接收請求樹建立請求,該請求樹建立請求攜帶業(yè)務(wù)標(biāo)識,根據(jù)該業(yè)務(wù)標(biāo)識獲取業(yè)務(wù)信息,對該業(yè)務(wù)信息進(jìn)行分析,以提取鍵信息,其中,該鍵信息可以包括鍵標(biāo)識、以及各個鍵之間的關(guān)聯(lián)關(guān)系等信息,然后,根據(jù)該鍵信息建立該業(yè)務(wù)的請求樹。
其中,鍵標(biāo)識指的是可以用于識別鍵的信息,比如可以是鍵的名稱、編號或代碼等,各個鍵之間的關(guān)聯(lián)關(guān)系可以是平級關(guān)系、也可以是從屬(如父子等)關(guān)系,在此不再贅述。
103、確定與該需要處理的鍵對應(yīng)的葉子節(jié)點,例如,可以如下:
根據(jù)該需要處理的鍵確定訪問路徑,基于該訪問路徑確定訪問節(jié)點,得到該需要處理的鍵對應(yīng)的葉子節(jié)點。
104、根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理。
其中,該處理可以包括對數(shù)據(jù)的寫入、讀取、更新和刪除等處理,例如可以是如下任意一種或幾種操作:
(1)寫入;
若該處理內(nèi)容指示寫入數(shù)據(jù),且指示該鍵的值,則在確定的葉子節(jié)點上添加子節(jié)點,并根據(jù)指示的鍵的值在該葉子節(jié)點上寫入數(shù)據(jù)。
需說明的是,在指示該鍵的值時,除了可以指示該鍵本身的值之外,還可以包括指示即將建立的該鍵的子建的值。
(2)讀取;
若該處理內(nèi)容指示讀取數(shù)據(jù),則讀取該葉子節(jié)點上存儲的數(shù)據(jù),將讀取的數(shù)據(jù)返回給業(yè)務(wù)側(cè)。
(3)更新;
若該處理內(nèi)容指示對該鍵進(jìn)行更新,且指示該鍵的值,則根據(jù)指示的鍵的值對確定的葉子節(jié)點上存儲的數(shù)據(jù)進(jìn)行更新。
需說明的是,這里的更新主要指的是修改。
(4)刪除;
若該處理內(nèi)容指示刪除數(shù)據(jù),則刪除確定的葉子節(jié)點。
可選的,為了節(jié)省存儲空間,在寫入時,可以對數(shù)據(jù)進(jìn)行壓縮,讀取時再進(jìn)行解壓縮,即步驟“根據(jù)指示的鍵的值在該葉子節(jié)點上寫入數(shù)據(jù)”可以包括:
根據(jù)指示的鍵的值確定需要寫入的數(shù)據(jù),并對數(shù)據(jù)進(jìn)行壓縮,得到壓縮數(shù)據(jù),將該壓縮數(shù)據(jù)寫入該葉子節(jié)點。
其中,壓縮時所采用的壓縮算法可以根據(jù)實際應(yīng)用的需求進(jìn)行設(shè)置。
若在寫入時,已經(jīng)對數(shù)據(jù)進(jìn)行了壓縮,則在讀取時,需要采用與壓縮算法相應(yīng)的解壓縮算法進(jìn)行解壓縮,即在步驟“讀取該葉子節(jié)點上存儲的數(shù)據(jù),將讀取的數(shù)據(jù)返回給業(yè)務(wù)側(cè)”可以包括:
讀取該葉子節(jié)點上存儲的壓縮數(shù)據(jù),對該壓縮數(shù)據(jù)進(jìn)行解壓縮,得到解壓縮數(shù)據(jù),將解壓縮數(shù)據(jù)返回給業(yè)務(wù)側(cè)。
可選的,數(shù)據(jù)處理請求中所指示的需要處理的鍵可以是一個,也可以是多個,即可以將多個操作封裝在同一個數(shù)據(jù)處理請求中,比如可以在一個數(shù)據(jù)處理請求中包含兩個操作(如OpeReg),一個操作是執(zhí)行對葉子節(jié)點1上的數(shù)據(jù)進(jìn)行加1,一個是執(zhí)行對葉子節(jié)點2上的數(shù)據(jù)進(jìn)行減1,等等。
當(dāng)該需要處理的鍵有多個時,還可以在該數(shù)據(jù)處理請求中指示這多個鍵之間的操作關(guān)系(或者說是執(zhí)行關(guān)系),比如可以設(shè)置當(dāng)其中任意一個操作為失 敗時,則取消所有的操作;或者,還可以設(shè)置各個操作的執(zhí)行不影響其他的操作,即不管操作是否成功,保留其他操作的執(zhí)行結(jié)果;又或者,還可以設(shè)置某些操作之間的關(guān)聯(lián)關(guān)系,即若某個操作執(zhí)行失敗,則只取消與之關(guān)聯(lián)的其他操作,而不影響與之不具有關(guān)聯(lián)關(guān)系的其他操作,等等。也就是說,在執(zhí)行步驟“根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理”時,該存儲系統(tǒng)中的數(shù)據(jù)處理方法還可以包括:
若該操作關(guān)系為預(yù)設(shè)第一關(guān)系,則在該多個鍵中的任意一個鍵所對應(yīng)的葉子節(jié)點操作失敗時,取消該多個鍵中所有鍵相應(yīng)的葉子節(jié)點的操作;
若該操作關(guān)系為預(yù)設(shè)第二關(guān)系,則在該多個鍵中的任意一個鍵所對應(yīng)的葉子節(jié)點操作失敗時,取消與該操作失敗的鍵具有關(guān)聯(lián)關(guān)系的鍵所對應(yīng)的葉子節(jié)點的操作;
若該操作關(guān)系為預(yù)設(shè)第三關(guān)系,則在該多個鍵中的任意一個鍵所對應(yīng)的葉子節(jié)點操作失敗時,保留該多個鍵中其他鍵相應(yīng)的葉子節(jié)點的操作。
其中,第一關(guān)系、第二關(guān)系和第三關(guān)系可以根據(jù)實際應(yīng)用的需求進(jìn)行設(shè)置,可以分別采用不同的標(biāo)識來對其進(jìn)行識別,比如,可以將第一關(guān)系標(biāo)識為“break”,將第三關(guān)系標(biāo)識為“continue”,而對于第二關(guān)系,則需要標(biāo)明哪些鍵之間是具有“continue”關(guān)系,哪些鍵之間是具有“break”關(guān)系,這樣,當(dāng)該存儲系統(tǒng)中的數(shù)據(jù)處理裝置識別到這些信息時,便可以采用相應(yīng)的執(zhí)行方式。
可選的,還可以為處理內(nèi)容設(shè)置相應(yīng)的限制條件,只要滿足該條件,才可以執(zhí)行該數(shù)據(jù)處理請求,即在步驟“根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理”之前,該存儲系統(tǒng)中的數(shù)據(jù)處理方法還可以包括:
確定該處理內(nèi)容是否符合預(yù)置條件,若是,則執(zhí)行根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理的步驟(即步驟104),若否,則拒絕該數(shù)據(jù)處理請求。
可選的,在拒絕該數(shù)據(jù)處理請求時,還可以提供相應(yīng)的提示信息,比如拒絕的原因等。
其中,該預(yù)置條件的具體內(nèi)容可以根據(jù)實際應(yīng)用的需求進(jìn)行設(shè)置,可以預(yù) 設(shè)在該存儲系統(tǒng)中,也可以攜帶在數(shù)據(jù)處理請求中,在此不再贅述。
由上可知,本實施例采用接收業(yè)務(wù)側(cè)發(fā)送的數(shù)據(jù)處理請求,其中,該數(shù)據(jù)處理請求攜帶業(yè)務(wù)標(biāo)識,并指示需要處理的鍵、以及處理內(nèi)容,根據(jù)該業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹,該請求樹包括多個葉子節(jié)點,確定與該需要處理的鍵對應(yīng)的葉子節(jié)點,然后,根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理;由于該方案可以根據(jù)需要處理的鍵直接獲取對應(yīng)的葉子節(jié)點進(jìn)行處理,即只需拉取需要處理的部分value數(shù)據(jù)進(jìn)行處理,因此,相對于現(xiàn)有技術(shù)中只能拉取全量的value數(shù)據(jù)的方案而言,大大節(jié)省了網(wǎng)絡(luò)資源的消耗,以及提高處理效率;而且,由于該方案在對數(shù)據(jù)進(jìn)行處理時,都無需業(yè)務(wù)側(cè)參與,因此,有利于保證事務(wù)的完整性,以及降低操作的復(fù)雜性,適合大規(guī)模海量數(shù)據(jù)處理,可以提升存儲系統(tǒng)的并發(fā)處理能力;總而言之,該方案不僅可以節(jié)省網(wǎng)絡(luò)資源的消耗,提高處理效率,而且可以提升并發(fā)處理能力。
實施例二、
根據(jù)實施例一所描述的方法,以下將舉例作進(jìn)一步詳細(xì)說明。
在本實施例中,將以該存儲系統(tǒng)中的數(shù)據(jù)處理裝置具體集成在存儲服務(wù)器中為例進(jìn)行說明。
如圖2a所示,該存儲系統(tǒng)可以包括業(yè)務(wù)側(cè)設(shè)備和存儲服務(wù)器,具體實現(xiàn)時,該存儲服務(wù)器可以分為接入層和存儲層,如下:
接入層主要負(fù)責(zé)接收業(yè)務(wù)側(cè)的數(shù)據(jù)處理請求,并將接收到的數(shù)據(jù)處理請求轉(zhuǎn)發(fā)到指定的存儲層,比如轉(zhuǎn)發(fā)給存儲層中相應(yīng)的存儲機(jī)等,該接入層還可以接收存儲層返回的處理結(jié)果。該接入層可以支持橫向擴(kuò)展,比如,可以包括“access:0”、“access:0”、……“access:n”等,簡稱“a:0”、“a:0”、……“a:n”;
存儲層主要負(fù)責(zé)數(shù)據(jù)的存儲,以及多級鍵(key)數(shù)據(jù)的解析和處理等,為了節(jié)省存儲空間,在寫入數(shù)據(jù)時,可以對數(shù)據(jù)進(jìn)行壓縮,讀取時再進(jìn)行解壓縮,具體可參見實施例一,在此不再贅述。
此外,為了提高數(shù)據(jù)的可靠性,還可以采用主和備的方式來存儲這些數(shù)據(jù), 比如,參見圖2a,可以包括“主:cache:0”、“主:cache:1”、……“主:c:n”,簡稱“主:c:0”、“主:c:1”、……“主:c:n”,以及“備:c:0”、“備:c:1”、……“備:c:n”等,具體的備份方法可參見現(xiàn)有技術(shù),在此不作贅述。
在具體實施時,首先,需要根據(jù)具體的業(yè)務(wù)場景構(gòu)建相應(yīng)的請求樹,該請求樹可以由維護(hù)人員預(yù)先根據(jù)業(yè)務(wù)來進(jìn)行來構(gòu)建,也可以由該存儲系統(tǒng)自行進(jìn)行建立,比如可以通過獲取業(yè)務(wù)信息,并對該業(yè)務(wù)信息進(jìn)行分析,以提取鍵信息,然后基于該鍵信息建立該業(yè)務(wù)的請求樹,等等。
其中,該鍵信息可以包括鍵標(biāo)識、以及各個鍵之間的關(guān)聯(lián)關(guān)系等信息。
例如,以“紅包”為例,假設(shè)一個標(biāo)識為“紅包1”的紅包的記錄的信息包括:紅包的總個數(shù)、可領(lǐng)取數(shù)、已領(lǐng)取數(shù)和領(lǐng)取詳情等信息,則可以根據(jù)確定“鍵(即key)”可以包括“紅包1”、“總個數(shù)”、“可領(lǐng)取數(shù)”、“已領(lǐng)取數(shù)”和“領(lǐng)取詳情”等,其中,“紅包1”為主鍵,而“總個數(shù)”、“可領(lǐng)取數(shù)”、“已領(lǐng)取數(shù)”和“領(lǐng)取詳情”均為該主鍵的子鍵,即“總個數(shù)”、“可領(lǐng)取數(shù)”、“已領(lǐng)取數(shù)”和“領(lǐng)取詳情”與“紅包1”之間的關(guān)聯(lián)關(guān)系為從屬關(guān)系,而“總個數(shù)”、“可領(lǐng)取數(shù)”、“已領(lǐng)取數(shù)”和“領(lǐng)取詳情”四者之間的關(guān)系為平級關(guān)系,在確定了鍵信息之后,便可以據(jù)此建立該紅包對應(yīng)的請求樹,比如,參見圖2b。
其次,在建立了請求樹之后,便可以通過接入層來接收業(yè)務(wù)側(cè)發(fā)送的數(shù)據(jù)處理請求,并傳送給存儲層,由存儲層基于該請求樹,對該數(shù)據(jù)處理請求進(jìn)行處理,比如解析該數(shù)據(jù)處理請求,然后根據(jù)該請求樹去確定與需要處理的鍵對應(yīng)的葉子節(jié)點,并對該葉子節(jié)點進(jìn)行讀取、寫入、更新或刪除等操作,以下將進(jìn)行詳細(xì)說明。
如圖2c所示,一種存儲系統(tǒng)中的數(shù)據(jù)處理方法,具體流程可以如下:
201、業(yè)務(wù)側(cè)設(shè)備向存儲服務(wù)器發(fā)送數(shù)據(jù)處理請求,比如TreeReq,其中,該數(shù)據(jù)處理請求可以攜帶業(yè)務(wù)標(biāo)識,并指示需要處理的鍵、以及處理內(nèi)容等信息。
其中,該數(shù)據(jù)處理請求可以是數(shù)據(jù)讀取請求、數(shù)據(jù)寫入請求、數(shù)據(jù)更新請求或數(shù)據(jù)刪除請求等,根據(jù)不同的請求類型,所指示的處理內(nèi)容也會有所不同, 比如,可以如下:
若是數(shù)據(jù)讀取請求,則指示的處理內(nèi)容為讀取數(shù)據(jù);若是數(shù)據(jù)更新請求,則指示的處理內(nèi)容為更新數(shù)據(jù),比如對鍵進(jìn)行更新;若是數(shù)據(jù)寫入請求,則指示的處理內(nèi)容為寫入數(shù)據(jù);而若是數(shù)據(jù)刪除請求,則指示的處理內(nèi)容為刪除數(shù)據(jù),等等。
其中,業(yè)務(wù)標(biāo)識指的是可以用于識別業(yè)務(wù)的信息,比如業(yè)務(wù)名稱、業(yè)務(wù)編號或業(yè)務(wù)代碼等等,例如,在“紅包”的應(yīng)用場景下,該業(yè)務(wù)標(biāo)識具體可以為“紅包”,或者是“0001”,即這個業(yè)務(wù)的業(yè)務(wù)代碼,等等。
可選的,數(shù)據(jù)處理請求中所指示的需要處理的鍵可以是一個,也可以是多個,即可以將多個操作封裝在同一個數(shù)據(jù)處理請求中,比如可以在一個數(shù)據(jù)處理請求中包含兩個操作,一個操作是執(zhí)行“已領(lǐng)取數(shù)”加1,一個是執(zhí)行“可領(lǐng)取數(shù)”減1,等等。
當(dāng)該需要處理的鍵有多個時,還可以在該數(shù)據(jù)處理請求中指示這多個鍵之間的操作關(guān)系(或者說是執(zhí)行關(guān)系),比如可以設(shè)置當(dāng)其中任意一個操作為失敗時,則取消所有的操作(為了描述方便,本發(fā)明實施例將這種操作關(guān)系稱為第一關(guān)系);或者,還可以設(shè)置各個操作的執(zhí)行不影響其他的操作,即不管操作是否成功,保留其他操作的執(zhí)行結(jié)果(為了描述方便,本發(fā)明實施例將這種操作關(guān)系稱為第二關(guān)系);又或者,還可以設(shè)置某些操作之間的關(guān)聯(lián)關(guān)系,即若某個操作執(zhí)行失敗,則只取消與之關(guān)聯(lián)的其他操作,而不影響與之不具有關(guān)聯(lián)關(guān)系的其他操作(為了描述方便,本發(fā)明實施例將這種操作關(guān)系稱為第三關(guān)系),等等。
其中,第一關(guān)系、第二關(guān)系和第三關(guān)系可以根據(jù)實際應(yīng)用的需求進(jìn)行設(shè)置,可以分別采用不同的標(biāo)識來對其進(jìn)行識別,比如,可以將第一關(guān)系標(biāo)識為“break”,將第三關(guān)系標(biāo)識為“continue”,而對于第二關(guān)系,則需要標(biāo)明哪些鍵之間是具有“continue”關(guān)系,哪些鍵之間是具有“break”關(guān)系,這樣,當(dāng)該存儲系統(tǒng)中的數(shù)據(jù)處理裝置識別到這些信息時,便可以采用相應(yīng)的執(zhí)行方式,詳見步驟205。
202、存儲服務(wù)器在接收到該數(shù)據(jù)處理請求后,解析該數(shù)據(jù)處理請求,以提取其中的業(yè)務(wù)標(biāo)識,以及指示信息,比需要處理的鍵、以及處理內(nèi)容等。
例如,該存儲服務(wù)器具體可以通過接入層接收業(yè)務(wù)側(cè)發(fā)送的數(shù)據(jù)處理請求,并由接入層將該數(shù)據(jù)處理請求傳送給存儲層,由存儲層對該數(shù)據(jù)處理請求進(jìn)行解析,以提取其中的業(yè)務(wù)標(biāo)識,以及指示信息,比需要處理的鍵、以及處理內(nèi)容等。
203、存儲服務(wù)器根據(jù)該業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹。
例如,具體可以由該存儲服務(wù)器的存儲層根據(jù)該業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹。
其中,該請求樹可以包括多個葉子節(jié)點,每個鍵都有其對應(yīng)的葉子節(jié)點,葉子節(jié)點中存儲有相應(yīng)的鍵的value數(shù)據(jù)。
例如,還是以“紅包”為例,則此時可以獲取“紅包”對應(yīng)的請求樹,比如,可以是圖2b所示的請求樹,即以“紅包1”作為根節(jié)點,“總個數(shù)”、“可領(lǐng)取數(shù)”、“已領(lǐng)取數(shù)”和“領(lǐng)取詳情”作為根節(jié)點“紅包1”的葉子節(jié)點(即子節(jié)點)。
204、存儲服務(wù)器根據(jù)該需要處理的鍵確定訪問路徑,基于該訪問路徑確定訪問節(jié)點,得到該需要處理的鍵對應(yīng)的葉子節(jié)點。
例如,具體可以由存儲層根據(jù)該需要處理的鍵確定訪問路徑,然后基于該訪問路徑確定訪問節(jié)點,得到該需要處理的鍵對應(yīng)的葉子節(jié)點。
比如,還以“紅包”為例,如圖2b所示,若有人領(lǐng)取了紅包,需要對“領(lǐng)取詳情”進(jìn)行修改,則可以在數(shù)據(jù)處理請求中指示需要處理的鍵為“紅包1”下的“領(lǐng)取詳情”,處理內(nèi)容為對“領(lǐng)取詳情”的數(shù)據(jù)進(jìn)更新,那么,此時,便可以根據(jù)該需要處理的鍵確定訪問路徑為“紅包1——領(lǐng)取詳情”,進(jìn)而確定該需要處理的鍵對應(yīng)的葉子節(jié)點為根節(jié)點“紅包1”下的葉子節(jié)點“領(lǐng)取詳情”。
又比如,如圖2b所示,若用戶需要查看“已領(lǐng)取數(shù)”和“被領(lǐng)取數(shù)”,則可以在數(shù)據(jù)處理請求中指示需要處理的鍵為“紅包1”下的“已領(lǐng)取數(shù)”和“被領(lǐng)取數(shù)”,處理內(nèi)容為對“已領(lǐng)取數(shù)”和“被領(lǐng)取數(shù)”進(jìn)行讀取,那么,此時, 便可以確定第一個操作的訪問路徑為“紅包1——已領(lǐng)取數(shù)”,對應(yīng)的葉子節(jié)點為“已領(lǐng)取數(shù)”,第二個操作的訪問路徑為“紅包1——被領(lǐng)取數(shù)”,對應(yīng)的葉子節(jié)點為“被領(lǐng)取數(shù)”。
以此類推,等等。
205、存儲服務(wù)器根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理。
例如,具體可以由存儲層根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理,比如,進(jìn)行寫入、讀取、更新和刪除等,具體可以如下:
(1)寫入;
若該處理內(nèi)容指示寫入數(shù)據(jù),且指示該鍵的值,則在確定的葉子節(jié)點上添加子節(jié)點,并根據(jù)指示的鍵的值在該葉子節(jié)點上寫入數(shù)據(jù)。
例如,具體可以由存儲層在該確定的葉子節(jié)點上添加子節(jié)點,并根據(jù)指示的鍵的值在該葉子節(jié)點上寫入數(shù)據(jù)。
需說明的是,在指示該鍵的值時,除了可以指示該鍵本身的值之外,還可以包括指示即將建立的該鍵的子建的值,比如,以“紅包”下的“領(lǐng)取詳情”為例,當(dāng)0個“紅包”被領(lǐng)取時,“領(lǐng)取詳情”的值為“0”個,而當(dāng)有1個紅包被領(lǐng)取時,比如a領(lǐng)取了一個“1元”的紅包時,則可以在處理內(nèi)容中指示在“領(lǐng)取詳情”中寫入“領(lǐng)取詳情”的值為“1”個,且領(lǐng)取人為“a”,金額為“1元”,那么,此時,便可以根據(jù)該指示將請求樹中葉子節(jié)點“領(lǐng)取詳情”的值修改為“1”個,且可以在“領(lǐng)取詳情”下添加相應(yīng)的子節(jié)點,如“被領(lǐng)紅包:1”,且“被領(lǐng)紅包:1”的子節(jié)點為“領(lǐng)取人:a”和“金額:1元”等,參加圖2d。
同理,若b也領(lǐng)取了一個“2元”的紅包,則可以將在處理內(nèi)容中指示在“領(lǐng)取詳情”中寫入“領(lǐng)取詳情”的值為“2”個,且領(lǐng)取人為“b”,金額為“2元”,那么,此時,便可以根據(jù)該指示將請求樹中葉子節(jié)點“領(lǐng)取詳情”的值修改為“2”個,且可以在“領(lǐng)取詳情”下添加相應(yīng)的子節(jié)點,如“被領(lǐng)紅包:2”,且“被領(lǐng)紅包:2”的子節(jié)點為“領(lǐng)取人:b”和“金額:2元”等,參加圖2d。
可選的,為了節(jié)省存儲空間,在寫入數(shù)據(jù)時,可以對數(shù)據(jù)進(jìn)行壓縮,比如,具體可以根據(jù)指示的鍵的值確定需要寫入的數(shù)據(jù),并對數(shù)據(jù)進(jìn)行壓縮,得到壓縮數(shù)據(jù),然后,將該壓縮數(shù)據(jù)寫入該葉子節(jié)點。
其中,壓縮時所采用的壓縮算法可以根據(jù)實際應(yīng)用的需求進(jìn)行設(shè)置。
(2)讀?。?/p>
若該處理內(nèi)容指示讀取數(shù)據(jù),則存儲服務(wù)器讀取該確定的葉子節(jié)點上所存儲的數(shù)據(jù),并將讀取的數(shù)據(jù)返回給業(yè)務(wù)側(cè)。
例如,具體可以通過存儲層讀取該葉子節(jié)點上存儲的數(shù)據(jù),然后將讀取的數(shù)據(jù)通過接入層返回給業(yè)務(wù)側(cè)
比如,以“紅包”為例,若該處理內(nèi)容指示讀取“可領(lǐng)取數(shù)”的數(shù)據(jù),則此時,可以從葉子節(jié)點“可領(lǐng)取數(shù)”上讀取相應(yīng)的數(shù)據(jù),如“2個”等,然后將讀取到的數(shù)據(jù)返回給業(yè)務(wù)側(cè),如通過接入層返回給業(yè)務(wù)側(cè)。
需說明的是,若在寫入時,已經(jīng)對數(shù)據(jù)進(jìn)行了壓縮,則在讀取時,需要采用與壓縮算法相應(yīng)的解壓縮算法進(jìn)行解壓縮,比如,具體可以讀取該葉子節(jié)點上存儲的壓縮數(shù)據(jù),對該壓縮數(shù)據(jù)進(jìn)行解壓縮,得到解壓縮數(shù)據(jù),然后將解壓縮數(shù)據(jù)返回給業(yè)務(wù)側(cè)。
(3)更新;
若該處理內(nèi)容指示對該鍵進(jìn)行更新,且指示該鍵的值,則根據(jù)指示的鍵的值對該確定的葉子節(jié)點上存儲的數(shù)據(jù)進(jìn)行更新。
例如,具體可以由存儲層根據(jù)指示的鍵的值對該確定的葉子節(jié)點上存儲的數(shù)據(jù)進(jìn)行更新。
需說明的是,這里的更新主要指的是修改,比如,若原來葉子節(jié)點“可領(lǐng)取數(shù)”指示可領(lǐng)取的紅包為2個,而此時需要將該數(shù)目修改為1個,則可以在數(shù)據(jù)處理請求中指示需要處理的鍵為“紅包1”下的“可領(lǐng)取數(shù)”,并指示該鍵的值為“1”個,那么,此時便可以根據(jù)該鍵的值將“可領(lǐng)取數(shù)”上的“2”個修改為“1”個,以此類推,在此不再贅述。
(4)刪除;
若該處理內(nèi)容指示刪除數(shù)據(jù),則刪除確定的葉子節(jié)點。
例如,具體可以由存儲層刪除該確定的葉子節(jié)點
比如,若該處理內(nèi)容指示刪除“紅包1”的相關(guān)記錄,則此時可以將“紅包1”對應(yīng)的葉子節(jié)點都進(jìn)行刪除,包括節(jié)點“紅包1”以及“紅包1”下的其他子節(jié)點。
需說明的是,當(dāng)該需要處理的鍵有多個時,在對各個確定的葉子節(jié)點進(jìn)行處理時還需考慮到各個操作直接的操作關(guān)系,例如,以在“紅包”應(yīng)用場景,且操作關(guān)系包括“continue”和“break”為例,則具體可以如下:
如果“被領(lǐng)取數(shù)”加1和“已領(lǐng)取數(shù)”減1之間的操作關(guān)系為“break”,則只有當(dāng)“被領(lǐng)取數(shù)”加1和“已領(lǐng)取數(shù)”減1的操作均為成功,才會保存對“被領(lǐng)取數(shù)”和“已領(lǐng)取數(shù)”的修改,而不可以只保存“被領(lǐng)取數(shù)”加1的操作結(jié)果,或者只保存“已領(lǐng)取數(shù)”減1的操作結(jié)果;比如,如果“被領(lǐng)取數(shù)”加1操作成功,而“已領(lǐng)取數(shù)”減1操作失敗,則需要取消“被領(lǐng)取數(shù)”加1的操作,即既不對“已領(lǐng)取數(shù)”進(jìn)行修改,也不對“被領(lǐng)取數(shù)”進(jìn)行修改,以保證事務(wù)的完整性,以及降低操作的復(fù)雜度。反之,若“被領(lǐng)取數(shù)”加1和“已領(lǐng)取數(shù)”減1之間的操作關(guān)系為“continue”,則“被領(lǐng)取數(shù)”加1是否操作成功,并不會影響“已領(lǐng)取數(shù)”減1的操作結(jié)果,同理,“已領(lǐng)取數(shù)”減1是否操作成功,也不會影響“被領(lǐng)取數(shù)”加1的操作結(jié)果,比如,如果“被領(lǐng)取數(shù)”加1操作成功,而“已領(lǐng)取數(shù)”減1操作失敗,則需要保留“被領(lǐng)取數(shù)”加1的操作,即對“被領(lǐng)取數(shù)”進(jìn)行加1,而不對“已領(lǐng)取數(shù)”進(jìn)行減1。
可選的,還可以為處理內(nèi)容設(shè)置相應(yīng)的限制條件,只要滿足該條件,才可以執(zhí)行該數(shù)據(jù)處理請求。例如,以“紅包”為例,在紅包領(lǐng)取后,需要將“已領(lǐng)取數(shù)”進(jìn)行加1,則在增加“已領(lǐng)取數(shù)”時,可以設(shè)置一個條件,比如該“已領(lǐng)取數(shù)”需要小于紅包的“總個數(shù)”,只有在該“已領(lǐng)取數(shù)”需要小于紅包的“總個數(shù)”時,才可以執(zhí)行加1的操作,否則,則拒絕該數(shù)據(jù)處理請求。
可選的,在拒絕該數(shù)據(jù)處理請求時,還可以提供相應(yīng)的提示信息,比如拒絕的原因等。
其中,該預(yù)置條件的具體內(nèi)容可以根據(jù)實際應(yīng)用的需求進(jìn)行設(shè)置,可以預(yù)設(shè)在該存儲系統(tǒng)中,也可以攜帶在數(shù)據(jù)處理請求中,在此不再贅述。
由上可知,本實施例采用由存儲服務(wù)器接收業(yè)務(wù)側(cè)發(fā)送的數(shù)據(jù)處理請求,其中,該數(shù)據(jù)處理請求攜帶業(yè)務(wù)標(biāo)識,并指示需要處理的鍵、以及處理內(nèi)容,根據(jù)該業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹,該請求樹包括多個葉子節(jié)點,確定與該需要處理的鍵對應(yīng)的葉子節(jié)點,然后,根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理;由于該方案可以根據(jù)需要處理的鍵直接獲取對應(yīng)的葉子節(jié)點進(jìn)行處理,即只需拉取需要處理的部分value數(shù)據(jù)進(jìn)行處理,因此,相對于現(xiàn)有技術(shù)中只能拉取全量的value數(shù)據(jù)的方案而言,大大節(jié)省了網(wǎng)絡(luò)資源的消耗,以及提高處理效率;而且,由于該方案在對數(shù)據(jù)進(jìn)行處理時,都無需業(yè)務(wù)側(cè)參與,因此,有利于保證事務(wù)的完整性,以及降低操作的復(fù)雜性,適合大規(guī)模海量數(shù)據(jù)處理,可以提升存儲系統(tǒng)的并發(fā)處理能力;總而言之,該方案不僅可以節(jié)省網(wǎng)絡(luò)資源的消耗,提高處理效率,而且可以提升并發(fā)處理能力。
實施例三、
為了更好地實現(xiàn)以上方法,本發(fā)明實施例還提供一種存儲系統(tǒng)中的數(shù)據(jù)處理裝置,簡稱數(shù)據(jù)處理裝置,如圖3a所示,該數(shù)據(jù)處理裝置包括接收單元301、獲取單元302、確定單元303和處理單元304,如下:
(1)接收單元301;
接收單元301,用于接收業(yè)務(wù)側(cè)發(fā)送的數(shù)據(jù)處理請求,該數(shù)據(jù)處理請求攜帶業(yè)務(wù)標(biāo)識,并指示需要處理的鍵、以及處理內(nèi)容等信息。
其中,該數(shù)據(jù)處理請求可以是數(shù)據(jù)讀取請求、數(shù)據(jù)寫入請求、數(shù)據(jù)更新請求或數(shù)據(jù)刪除請求等,根據(jù)不同的請求類型,所指示的處理內(nèi)容也會有所不同,比如,可以如下:
若是數(shù)據(jù)讀取請求,則指示的處理內(nèi)容為讀取數(shù)據(jù);若是數(shù)據(jù)更新請求,則指示的處理內(nèi)容為更新數(shù)據(jù),比如對鍵進(jìn)行更新;若是數(shù)據(jù)寫入請求,則指示的處理內(nèi)容為寫入數(shù)據(jù);而若是數(shù)據(jù)刪除請求,則指示的處理內(nèi)容為刪除數(shù) 據(jù),等等。
其中,業(yè)務(wù)標(biāo)識指的是可以用于識別業(yè)務(wù)的信息,比如業(yè)務(wù)名稱、業(yè)務(wù)編號或業(yè)務(wù)代碼等等。
(2)獲取單元302;
獲取單元302,用于根據(jù)該業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹,該請求樹包括多個葉子節(jié)點。
該請求樹可以根據(jù)實際應(yīng)用的需求進(jìn)行設(shè)置,比如,可以由維護(hù)人員預(yù)先根據(jù)業(yè)務(wù)進(jìn)行來構(gòu)建,或者,也可以由該存儲系統(tǒng)自行進(jìn)行建立,比如可以通過獲取業(yè)務(wù)信息,并對該業(yè)務(wù)信息進(jìn)行分析,以提取鍵信息,然后基于該鍵信息建立該業(yè)務(wù)的請求樹,等等;即如圖3b所示,該數(shù)據(jù)處理裝置還可以包括建立單元305,如下:
該接收單元301,還可以用于接收請求樹建立請求,該請求樹建立請求攜帶業(yè)務(wù)標(biāo)識;
該獲取單元302,還可以用于根據(jù)該業(yè)務(wù)標(biāo)識獲取業(yè)務(wù)信息;
該建立單元305,用于對該業(yè)務(wù)信息進(jìn)行分析,以提取鍵信息,根據(jù)該鍵信息建立該業(yè)務(wù)的請求樹。
其中,該鍵信息可以包括鍵標(biāo)識、以及各個鍵之間的關(guān)聯(lián)關(guān)系等信息;鍵標(biāo)識指的是可以用于識別鍵的信息,比如可以是鍵的名稱、編號或代碼等,各個鍵之間的關(guān)聯(lián)關(guān)系可以是平級關(guān)系、也可以是從屬(如父子等)關(guān)系,在此不再贅述。
(3)確定單元303;
確定單元303,用于確定與該需要處理的鍵對應(yīng)的葉子節(jié)點;
例如,該確定單元303,具體可以用于根據(jù)該需要處理的鍵確定訪問路徑,基于該訪問路徑確定訪問節(jié)點,得到該需要處理的鍵對應(yīng)的葉子節(jié)點。
(4)處理單元304;
處理單元304,用于根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理。
其中,該處理可以包括對數(shù)據(jù)的寫入、讀取、更新和刪除等處理,例如, 該處理單元304,具體可以用于執(zhí)行如下操作:
若該處理內(nèi)容指示讀取數(shù)據(jù),則讀取該葉子節(jié)點上存儲的數(shù)據(jù),將讀取的數(shù)據(jù)返回給業(yè)務(wù)側(cè);和/或,
若該處理內(nèi)容指示對該鍵進(jìn)行更新,且指示該鍵的值,則根據(jù)指示的鍵的值對確定的葉子節(jié)點上存儲的數(shù)據(jù)進(jìn)行更新;和/或,
若該處理內(nèi)容指示寫入數(shù)據(jù),且指示該鍵的值,則在確定的葉子節(jié)點上添加子節(jié)點,并根據(jù)指示的鍵的值在該葉子節(jié)點上寫入數(shù)據(jù);和/或,
若該處理內(nèi)容指示刪除數(shù)據(jù),則刪除確定的葉子節(jié)點。
可選的,為了節(jié)省存儲空間,在寫入時,可以對數(shù)據(jù)進(jìn)行壓縮,即:
該處理單元304,具體可以用于在該處理內(nèi)容指示寫入數(shù)據(jù),且指示該鍵的值時,根據(jù)指示的鍵的值確定需要寫入的數(shù)據(jù),并對數(shù)據(jù)進(jìn)行壓縮,得到壓縮數(shù)據(jù),將該壓縮數(shù)據(jù)寫入該葉子節(jié)點。
其中,壓縮時所采用的壓縮算法可以根據(jù)實際應(yīng)用的需求進(jìn)行設(shè)置。
若在寫入時,已經(jīng)對數(shù)據(jù)進(jìn)行了壓縮,則在讀取時,需要采用與壓縮算法相應(yīng)的解壓縮算法進(jìn)行解壓縮,即:
該處理單元304,具體可以用于在該處理內(nèi)容指示讀取數(shù)據(jù)時,讀取該葉子節(jié)點上存儲的壓縮數(shù)據(jù),對該壓縮數(shù)據(jù)進(jìn)行解壓縮,得到解壓縮數(shù)據(jù),將解壓縮數(shù)據(jù)返回給業(yè)務(wù)側(cè)。
可選的,數(shù)據(jù)處理請求中所指示的需要處理的鍵可以是一個,也可以是多個,即可以將多個操作封裝在同一個數(shù)據(jù)處理請求中,比如可以在一個數(shù)據(jù)處理請求中包含兩個操作,一個操作是執(zhí)行對葉子節(jié)點1上的數(shù)據(jù)進(jìn)行加1,一個是執(zhí)行對葉子節(jié)點2上的數(shù)據(jù)進(jìn)行減1,等等。
當(dāng)該需要處理的鍵有多個時,還可以在該數(shù)據(jù)處理請求中指示這多個鍵之間的操作關(guān)系,比如可以設(shè)置當(dāng)其中任意一個操作為失敗時,則取消所有的操作;或者,還可以設(shè)置各個操作的執(zhí)行不影響其他的操作,即不管操作是否成功,保留其他操作的執(zhí)行結(jié)果;又或者,還可以設(shè)置某些操作之間的關(guān)聯(lián)關(guān)系,即若某個操作執(zhí)行失敗,則只取消與之關(guān)聯(lián)的其他操作,而不影響與之不具有 關(guān)聯(lián)關(guān)系的其他操作,等等。即該處理單元304,還可以用于:
若該操作關(guān)系為預(yù)設(shè)第一關(guān)系,則在該多個鍵中的任意一個鍵所對應(yīng)的葉子節(jié)點操作失敗時,取消該多個鍵中所有鍵相應(yīng)的葉子節(jié)點的操作;
若該操作關(guān)系為預(yù)設(shè)第二關(guān)系,則在該多個鍵中的任意一個鍵所對應(yīng)的葉子節(jié)點操作失敗時,取消與該操作失敗的鍵具有關(guān)聯(lián)關(guān)系的鍵所對應(yīng)的葉子節(jié)點的操作;
若該操作關(guān)系為預(yù)設(shè)第三關(guān)系,則在該多個鍵中的任意一個鍵所對應(yīng)的葉子節(jié)點操作失敗時,保留該多個鍵中其他鍵相應(yīng)的葉子節(jié)點的操作。
其中,第一關(guān)系、第二關(guān)系和第三關(guān)系可以根據(jù)實際應(yīng)用的需求進(jìn)行設(shè)置,可以分別采用不同的標(biāo)識來對其進(jìn)行識別,比如,可以將第一關(guān)系標(biāo)識為“break”,將第三關(guān)系標(biāo)識為“continue”,而對于第二關(guān)系,則需要標(biāo)明哪些鍵之間是具有“continue”關(guān)系,哪些鍵之間是具有“break”關(guān)系,這樣,當(dāng)該存儲系統(tǒng)中的數(shù)據(jù)處理裝置識別到這些信息時,便可以采用相應(yīng)的執(zhí)行方式。
可選的,還可以為處理內(nèi)容設(shè)置相應(yīng)的限制條件,只要滿足該條件,才可以執(zhí)行該數(shù)據(jù)處理請求,即如圖3b所示,該數(shù)據(jù)處理裝置還可以包括判斷單元306,如下:
該判斷單元306,可以用于確定該處理內(nèi)容是否符合預(yù)置條件,在確定不符合預(yù)置條件時,拒絕該數(shù)據(jù)處理請求。
則此時,處理單元304,具體可以用于在判斷單元306確定該處理內(nèi)容符合預(yù)置條件時,根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理。
可選的,判斷單元306在拒絕該數(shù)據(jù)處理請求時,還可以提供相應(yīng)的提示信息,比如拒絕的原因等。
其中,該預(yù)置條件的具體內(nèi)容可以根據(jù)實際應(yīng)用的需求進(jìn)行設(shè)置,可以預(yù)設(shè)在該存儲系統(tǒng)中,也可以攜帶在數(shù)據(jù)處理請求中,在此不再贅述。
具體實施時,以上各個單元可以作為獨立的實體來實現(xiàn),也可以進(jìn)行任意組合,作為同一或若干個實體來實現(xiàn),以上各個單元的具體實施可參見前面的 方法實施例,在此不再贅述。
該數(shù)據(jù)處理裝置可以作為獨立的實體,也可以集成在存儲側(cè),比如存儲服務(wù)器等設(shè)備中。
由上可知,本實施例的數(shù)據(jù)處理裝置的接收單元301可以接收業(yè)務(wù)側(cè)發(fā)送的數(shù)據(jù)處理請求,其中,該數(shù)據(jù)處理請求攜帶業(yè)務(wù)標(biāo)識,并指示需要處理的鍵、以及處理內(nèi)容,然后由獲取單元302根據(jù)該業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹,該請求樹包括多個葉子節(jié)點,并由確定單元303確定與該需要處理的鍵對應(yīng)的葉子節(jié)點,再然后,由處理單元304根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理;由于該方案可以根據(jù)需要處理的鍵直接獲取對應(yīng)的葉子節(jié)點進(jìn)行處理,即只需拉取需要處理的部分value數(shù)據(jù)進(jìn)行處理,因此,相對于現(xiàn)有技術(shù)中只能拉取全量的value數(shù)據(jù)的方案而言,大大節(jié)省了網(wǎng)絡(luò)資源的消耗,以及提高處理效率;而且,由于該方案在對數(shù)據(jù)進(jìn)行處理時,都無需業(yè)務(wù)側(cè)參與,因此,有利于保證事務(wù)的完整性,以及降低操作的復(fù)雜性,適合大規(guī)模海量數(shù)據(jù)處理,可以提升存儲系統(tǒng)的并發(fā)處理能力;總而言之,該方案不僅可以節(jié)省網(wǎng)絡(luò)資源的消耗,提高處理效率,而且可以提升并發(fā)處理能力。
實施例四、
相應(yīng)的,本發(fā)明實施例還提供一種存儲系統(tǒng),可以包括本發(fā)明實施例所提供的任一種數(shù)據(jù)處理裝置,該數(shù)據(jù)處理裝置可參見實施例三,例如,具體可以如下:
數(shù)據(jù)處理裝置,用于接收業(yè)務(wù)側(cè)發(fā)送的數(shù)據(jù)處理請求,該數(shù)據(jù)處理請求攜帶業(yè)務(wù)標(biāo)識,并指示需要處理的鍵、以及處理內(nèi)容;根據(jù)該業(yè)務(wù)標(biāo)識獲取對應(yīng)的請求樹,該請求樹包括多個葉子節(jié)點;確定與該需要處理的鍵對應(yīng)的葉子節(jié)點;根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理。
其中,該處理可以包括對數(shù)據(jù)的寫入、讀取、更新和刪除等處理,例如,該數(shù)據(jù)處理裝置,具體可以用于執(zhí)行如下操作:
若該處理內(nèi)容指示讀取數(shù)據(jù),則讀取該葉子節(jié)點上存儲的數(shù)據(jù),將讀取的 數(shù)據(jù)返回給業(yè)務(wù)側(cè);和/或,
若該處理內(nèi)容指示對該鍵進(jìn)行更新,且指示該鍵的值,則根據(jù)指示的鍵的值對確定的葉子節(jié)點上存儲的數(shù)據(jù)進(jìn)行更新;和/或,
若該處理內(nèi)容指示寫入數(shù)據(jù),且指示該鍵的值,則在確定的葉子節(jié)點上添加子節(jié)點,并根據(jù)指示的鍵的值在該葉子節(jié)點上寫入數(shù)據(jù);和/或,
若該處理內(nèi)容指示刪除數(shù)據(jù),則刪除確定的葉子節(jié)點。
可選的,數(shù)據(jù)處理請求中所指示的需要處理的鍵可以是一個,也可以是多個,即可以將多個操作封裝在同一個數(shù)據(jù)處理請求中,比如可以在一個數(shù)據(jù)處理請求中包含兩個操作(如OpeReg),一個操作是執(zhí)行對葉子節(jié)點1上的數(shù)據(jù)進(jìn)行加1,一個是執(zhí)行對葉子節(jié)點2上的數(shù)據(jù)進(jìn)行減1,等等。
當(dāng)該需要處理的鍵有多個時,還可以在該數(shù)據(jù)處理請求中指示這多個鍵之間的操作關(guān)系,則此時:
該數(shù)據(jù)處理裝置,還可以用于執(zhí)行如下操作:
若該操作關(guān)系為預(yù)設(shè)第一關(guān)系,則在該多個鍵中的任意一個鍵所對應(yīng)的葉子節(jié)點操作失敗時,取消該多個鍵中所有鍵相應(yīng)的葉子節(jié)點的操作;
若該操作關(guān)系為預(yù)設(shè)第二關(guān)系,則在該多個鍵中的任意一個鍵所對應(yīng)的葉子節(jié)點操作失敗時,取消與該操作失敗的鍵具有關(guān)聯(lián)關(guān)系的鍵所對應(yīng)的葉子節(jié)點的操作;
若該操作關(guān)系為預(yù)設(shè)第三關(guān)系,則在該多個鍵中的任意一個鍵所對應(yīng)的葉子節(jié)點操作失敗時,保留該多個鍵中其他鍵相應(yīng)的葉子節(jié)點的操作。
其中,第一關(guān)系、第二關(guān)系和第三關(guān)系可以根據(jù)實際應(yīng)用的需求進(jìn)行設(shè)置,可以分別采用不同的標(biāo)識來對其進(jìn)行識別,比如,可以將第一關(guān)系標(biāo)識為“break”,將第三關(guān)系標(biāo)識為“continue”,而對于第二關(guān)系,則需要標(biāo)明哪些鍵之間是具有“continue”關(guān)系,哪些鍵之間是具有“break”關(guān)系,這樣,當(dāng)該存儲系統(tǒng)中的數(shù)據(jù)處理裝置識別到這些信息時,便可以采用相應(yīng)的執(zhí)行方式。
可選的,還可以為處理內(nèi)容設(shè)置相應(yīng)的限制條件,只要滿足該條件,才可 以執(zhí)行該數(shù)據(jù)處理請求,即:
該數(shù)據(jù)處理裝置,還可以用于確定該處理內(nèi)容是否符合預(yù)置條件,若是,則執(zhí)行根據(jù)該處理內(nèi)容對確定的葉子節(jié)點進(jìn)行處理的步驟(即步驟104),若否,則拒絕該數(shù)據(jù)處理請求。
其中,該預(yù)置條件的具體內(nèi)容可以根據(jù)實際應(yīng)用的需求進(jìn)行設(shè)置,可以預(yù)設(shè)在該存儲系統(tǒng)中,也可以攜帶在數(shù)據(jù)處理請求中,在此不再贅述。
此外,該存儲系統(tǒng)還可以包括其他的設(shè)備,比如業(yè)務(wù)側(cè)設(shè)備,如下:
該業(yè)務(wù)側(cè)設(shè)備,可以用于向存儲系統(tǒng)中的數(shù)據(jù)處理裝置發(fā)送數(shù)據(jù)處理請求,該數(shù)據(jù)處理請求可以攜帶業(yè)務(wù)標(biāo)識,并指示需要處理的鍵、以及處理內(nèi)容等信息。
該業(yè)務(wù)側(cè)設(shè)備,還可以用于接收該數(shù)據(jù)處理裝置返回的處理結(jié)果,比如返回的數(shù)據(jù)等。
以上各個設(shè)備的具體實施可參見前面的實施例,在此不再贅述。
由于該存儲系統(tǒng)可以包括本發(fā)明實施例所提供的任一種數(shù)據(jù)處理裝置,因此,可以實現(xiàn)本發(fā)明實施例所提供的任一種數(shù)據(jù)處理裝置所能實現(xiàn)的有益效果,詳見前面的實施例,在此不再贅述。
本領(lǐng)域普通技術(shù)人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲于一計算機(jī)可讀存儲介質(zhì)中,存儲介質(zhì)可以包括:只讀存儲器(ROM,Read Only Memory)、隨機(jī)存取記憶體(RAM,Random Access Memory)、磁盤或光盤等。
以上對本發(fā)明實施例所提供的一種存儲系統(tǒng)中的數(shù)據(jù)處理方法、裝置和系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進(jìn)行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。