本申請涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種文件存儲(chǔ)和讀取的方法及裝置。
背景技術(shù):
近年來,數(shù)字視頻的應(yīng)用迅猛發(fā)展。在數(shù)字視頻系統(tǒng)中,視頻的采集、傳輸、編碼、解碼等過程會(huì)不可避免地引入存儲(chǔ)問題,存儲(chǔ)的性能,直接影響到視頻的觀看質(zhì)量。
單論存儲(chǔ),目前業(yè)界有各種不同的存儲(chǔ)。針對視頻存儲(chǔ)而言,視頻的數(shù)據(jù)量大,訪問呈現(xiàn)形式是流式。在實(shí)現(xiàn)本申請過程中,發(fā)明人發(fā)現(xiàn)相關(guān)技術(shù)中至少存在如下問題:有些網(wǎng)絡(luò)存儲(chǔ),在大規(guī)模內(nèi)容分發(fā)網(wǎng)絡(luò)或者直播場景下,并不適合部署,成本太高。而傳統(tǒng)的分布式存儲(chǔ)因小文件眾多,對節(jié)點(diǎn)內(nèi)存使用過大,也不適用,并且,某些文件系統(tǒng)響應(yīng)速度比較慢,也不適合在低延時(shí)的視頻應(yīng)用中做中繼或者邊緣節(jié)點(diǎn)使用。
技術(shù)實(shí)現(xiàn)要素:
本申請實(shí)施例提供了一種文件存儲(chǔ)和讀取的方法及裝置,以至少解決現(xiàn)有技術(shù)中存儲(chǔ)成本高及讀取速度不夠快的問題。
第一方面,本申請實(shí)施例提供一種文件存儲(chǔ)方法,包括:
將待存儲(chǔ)的文件,分成N個(gè)源碼塊;
對所述N個(gè)源碼塊進(jìn)行分組,生成M個(gè)碼塊組,其中,每個(gè)碼塊組均包括至少一個(gè)源碼塊,M>N;
對所述M個(gè)碼塊組分別進(jìn)行編碼,以生成M個(gè)編碼塊;
將所述M個(gè)編碼塊存儲(chǔ)至多個(gè)存儲(chǔ)裝置中。
第二方面,本申請實(shí)施例提供一種文件存儲(chǔ)裝置,包括:
分塊模塊,配置用于將待存儲(chǔ)的文件,分成N個(gè)源碼塊;
分組模塊,配置用于對所述N個(gè)源碼塊進(jìn)行分組,生成M個(gè)碼塊組,其中,每個(gè)碼塊組均包括至少一個(gè)源碼塊,M>N;
編碼模塊,配置用于對所述M個(gè)碼塊組分別進(jìn)行編碼,以生成M個(gè)編碼塊;
存儲(chǔ)模塊,配置用于將所述M個(gè)編碼塊存儲(chǔ)至多個(gè)存儲(chǔ)裝置中。
第三方面,本申請實(shí)施例還提供了一種電子設(shè)備,包括:至少一個(gè)處理器;以及存儲(chǔ)器;其中,所述存儲(chǔ)器存儲(chǔ)有可被所述至少一個(gè)處理器執(zhí)行的程序,所述指令被所述至少一個(gè)處理器執(zhí)行,以使所述至少一個(gè)處理器能夠執(zhí)行本申請上述任一項(xiàng)文件存儲(chǔ)方法。
第四方面,本申請實(shí)施例還提供一種文件讀取方法,包括:
根據(jù)文件讀取請求,確定所述文件的源碼塊的數(shù)量N、編碼塊的數(shù)量M、以及所述M個(gè)編碼塊所在的多個(gè)存儲(chǔ)裝置;
向各存儲(chǔ)裝置發(fā)送編碼塊獲取請求;
當(dāng)自所述存儲(chǔ)裝置接收到S個(gè)編碼塊時(shí),對所述S個(gè)編碼塊進(jìn)行譯碼,其中,N≤S<M;
當(dāng)譯碼后成功恢復(fù)所述文件時(shí),利用所述恢復(fù)后的文件響應(yīng)所述文件讀取請求。
第五方面,本申請實(shí)施例提供一種文件讀取裝置,包括:
確定模塊,配置用于根據(jù)文件讀取請求,確定所述文件的源碼塊的數(shù)量N、編碼塊的數(shù)量M、以及所述M個(gè)編碼塊所在的多個(gè)存儲(chǔ)裝置;
發(fā)送模塊,配置用于向各存儲(chǔ)裝置發(fā)送編碼塊獲取請求;
譯碼模塊,配置用于當(dāng)自所述存儲(chǔ)裝置接收到S個(gè)編碼塊時(shí),對所述S個(gè)編碼塊進(jìn)行譯碼,其中,N≤S<M;
響應(yīng)模塊,配置用于當(dāng)譯碼后成功恢復(fù)所述文件時(shí),利用所述恢復(fù)后的文件響應(yīng)所述文件讀取請求。
第六方面,本申請實(shí)施例還提供了一種電子設(shè)備,包括:至少一個(gè)處理器;以及存儲(chǔ)器;其中,所述存儲(chǔ)器存儲(chǔ)有可被所述至少一個(gè)處理器執(zhí)行的程序,所述指令被所述至少一個(gè)處理器執(zhí)行,以使所述至少一個(gè)處理器能夠執(zhí)行本申請上述任一項(xiàng)文件讀取方法。
本申請實(shí)施例的文件存儲(chǔ)方法可以實(shí)現(xiàn)利用零碎的空間存儲(chǔ)數(shù)據(jù),例如視頻數(shù)據(jù)這種可以切分的數(shù)據(jù)。本申請實(shí)施例的文件讀取方法,可以實(shí)現(xiàn)不用等到所有請求被響應(yīng),即可開始恢復(fù)數(shù)據(jù),從而可以有效的提高讀取性能,降低部署成本。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本申請一實(shí)施例提供的一種文件存儲(chǔ)方法的流程圖;
圖2是本申請一實(shí)施例提供的另一種文件存儲(chǔ)方法的流程圖;
圖3是本申請一實(shí)施例提供的一種文件讀取方法的流程圖;
圖4是本申請一實(shí)施例提供的另一種文件讀取方法的流程圖;
圖5是本申請一實(shí)施例提供的又一種文件讀取方法的流程圖;
圖6是本申請一實(shí)施例提供的文件讀取方法的一種實(shí)現(xiàn)的流程圖;
圖7是本申請一實(shí)施例提供的一種文件存儲(chǔ)裝置的結(jié)構(gòu)示意圖;
圖8是本申請一實(shí)施例提供的一種文件讀取裝置的結(jié)構(gòu)示意圖;
圖9是本申請一實(shí)施例提供的電子設(shè)備的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
請參考圖1,其示出了本申請一實(shí)施例提供的一種文件存儲(chǔ)方法的流程圖,本實(shí)施例的技術(shù)方案可適用于將一個(gè)文件分成多個(gè)部分并進(jìn)行多個(gè)備份的存儲(chǔ),該方法可以由文件存儲(chǔ)的電子設(shè)備來執(zhí)行。
本申請實(shí)施例提供的一種文件存儲(chǔ)方法,包括如下步驟:
步驟101,將待存儲(chǔ)的文件,分成N個(gè)源碼塊;
步驟102,對N個(gè)源碼塊進(jìn)行分組,生成M個(gè)碼塊組,其中,每個(gè)碼塊組均包括至少一個(gè)源碼塊,M>N;
步驟103,對M個(gè)碼塊組分別進(jìn)行編碼,以生成M個(gè)編碼塊;
步驟104,將M個(gè)編碼塊存儲(chǔ)至多個(gè)存儲(chǔ)裝置中。
在本實(shí)施例中,對于步驟101,電子設(shè)備可以將待存儲(chǔ)的文件,分成N個(gè)源碼塊,可以將一個(gè)待存儲(chǔ)的視頻文件切分成多塊,例如講一個(gè)視頻文件切分成9塊,還可以依次對其進(jìn)行編號(hào),形成編號(hào)為1、2、3、4、5、6、7、8、9的9個(gè)源碼塊,從而之后可以利用比較零碎的空間來存儲(chǔ)視頻。
之后,對于步驟102,電子設(shè)備可以對之前在步驟101中分成的N個(gè)源碼塊進(jìn)行重新分組,形成M個(gè)碼塊組,其中,每一個(gè)碼塊組中可以包括至少一個(gè)源碼塊。例如可以將前面的9個(gè)源碼塊分為一個(gè)一組、兩個(gè)一組、三個(gè)一組等,當(dāng)然也可以分為更多個(gè)例如8個(gè)一組之類的,但是如果一組里面有太多源碼塊的話,也違背了當(dāng)初把文件切分成多塊的初衷,所以比較優(yōu)選的還是分成少量的幾個(gè)一組,例如三個(gè)一組,具體的,可以是123、246、589、478之類的。
然后,對于步驟103,電子設(shè)備可以對分好的M個(gè)碼塊組分別進(jìn)行編碼,以形成M個(gè)編碼塊,例如對之前的123、246、589之類的碼塊組重新編碼,形成新的編碼塊,例如123可以對應(yīng)為編碼塊a,246可以對應(yīng)為編碼塊b,589可以對應(yīng)為編碼塊c,當(dāng)然也可以有其他編碼方式和命名,本申請?jiān)诖朔矫鏇]有限制。
最后,對于步驟104,電子設(shè)備可以將M個(gè)編碼塊分別存儲(chǔ)至多個(gè)存儲(chǔ)裝置中,例如可以存儲(chǔ)在磁盤中,當(dāng)然也可以存儲(chǔ)在其他外部設(shè)備如硬盤、軟盤、U盤、光盤之類的,本申請?jiān)诖朔矫鏇]有限制。需要說明的是,不同的編碼塊也可以存儲(chǔ)在相同的存儲(chǔ)裝置中,例如也可以存儲(chǔ)在同一磁盤的不同位置。
本實(shí)施例的文件存儲(chǔ)方法,通過對待存儲(chǔ)文件進(jìn)行分塊、分組、編碼和存儲(chǔ),可以將一個(gè)文件分成多個(gè)部分存儲(chǔ)在不同的地方,從而可以利用比較零碎的空間存儲(chǔ)文件,進(jìn)一步地,由于多個(gè)編碼塊中一般都會(huì)或多或少存在重復(fù)的部分,因此,相當(dāng)于對文件進(jìn)行了一次或多次備份,從而即使其中部分編碼塊損壞,也不會(huì)影響文件的完整性,也能憑借部分編碼塊對文件進(jìn)行恢復(fù)。
請參考圖2,其示出了本申請一實(shí)施例提供的另一種文件存儲(chǔ)方法的流程圖。本實(shí)施例中的流程是對圖1中步驟103的細(xì)化的流程,具體包括以下步驟:
步驟201,根據(jù)每個(gè)碼塊組中的源碼塊的數(shù)量,選擇相應(yīng)的編碼方式;
步驟202,利用編碼方式對每個(gè)碼塊組進(jìn)行編碼以生成相應(yīng)的編碼塊。
在本實(shí)施例中,對于步驟201,電子設(shè)備可以根據(jù)每一個(gè)碼塊組中源碼塊的數(shù)量,選擇不同的編碼方式或者選擇不同的命名方式,從而是各種數(shù)量的編碼塊更易被識(shí)別,例如,當(dāng)碼塊組中只含有一個(gè)源碼塊時(shí),可以在編碼和命名時(shí)有所區(qū)別,例如編成以a開頭的,例如a3可以指代只有一個(gè)源碼塊,是只包含源碼塊為3的碼塊組。
之后,對于步驟202,電子設(shè)備可以按照之前的方式對碼塊組進(jìn)行編碼以生成相應(yīng)的編碼塊。
本實(shí)施例的方法,在圖1的實(shí)施例所對應(yīng)的方法的基礎(chǔ)上,通過根據(jù)碼塊組中的源碼塊的數(shù)量在編碼時(shí)有所區(qū)別,可以使編碼塊更加容易被識(shí)別,從而可以加快之后譯碼的速度。
進(jìn)一步參考圖3,其示出了本申請一實(shí)施例提供的一種文件讀取方法的流程圖。本實(shí)施例的技術(shù)方案可適用于響應(yīng)于文件讀取請求,快速向用戶提供該文件,該方法可以由文件讀取的電子設(shè)備來執(zhí)行。具體包括如下步驟:
步驟301,根據(jù)文件讀取請求,確定文件的源碼塊的數(shù)量N、編碼塊的數(shù)量M以及M個(gè)編碼塊所在的多個(gè)存儲(chǔ)裝置;
步驟302,向各存儲(chǔ)裝置發(fā)送編碼塊獲取請求;
步驟303,當(dāng)自存儲(chǔ)裝置接收到S個(gè)編碼塊時(shí),對S個(gè)編碼塊進(jìn)行譯碼,其中,N≤S<M;
步驟304,當(dāng)譯碼后成功恢復(fù)文件時(shí),利用恢復(fù)后的文件響應(yīng)文件讀取請求。
在本實(shí)施例中,對于步驟301,電子設(shè)備根據(jù)接收到的文件讀取請求,確定該文件的源碼塊的數(shù)量N,編碼塊的數(shù)量M以及M個(gè)編碼塊所在的多個(gè)存儲(chǔ)裝置,例如,其中源碼塊的數(shù)量可以為9,編碼塊的數(shù)量可以為30,存儲(chǔ)裝置的數(shù)量沒有限制。
之后,對于步驟302,電子設(shè)備向各個(gè)存儲(chǔ)裝置發(fā)送編碼塊獲取請求。
之后,對于步驟303,當(dāng)自各存儲(chǔ)裝置接收到的編碼塊的個(gè)數(shù)S≥N時(shí),對S個(gè)編碼塊進(jìn)行譯碼,其中,S<M,從而,不用收到全部的M個(gè)編碼塊就可以開始譯碼。
最后,對于步驟304,當(dāng)譯碼后成功恢復(fù)文件時(shí),利用恢復(fù)后的文件響應(yīng)之前的文件讀取請求,將恢復(fù)后的文件發(fā)送給相應(yīng)的設(shè)備。
本實(shí)施例的方法,通過在沒有接收到所有的編碼塊的時(shí)候就開始譯碼從而可以能夠快速的恢復(fù)文件,更加快速的對文件讀取請求作出響應(yīng)。
請參考圖4,其示出了本申請一實(shí)施例提供的另一種文件讀取方法的流程圖。本實(shí)施例中的流程是對圖3中步驟301的細(xì)化的流程,具體包括以下步驟:
步驟401,根據(jù)文件讀取請求,獲取文件的文件名;
步驟402,根據(jù)文件名,索引并解析文件名所對應(yīng)的元數(shù)據(jù),其中,元數(shù)據(jù)包括文件的源碼塊的數(shù)量N、編碼塊的數(shù)量M、以及M個(gè)編碼塊所在的多個(gè)存儲(chǔ)裝置。
在本實(shí)施例中,對于步驟401,電子設(shè)備根據(jù)接收到的文件讀取請求,獲取待讀取的文件的文件名。例如,可以對文件讀取請求中的相關(guān)字段進(jìn)行解析以提取出相應(yīng)的文件名。
之后,對于步驟402,電子設(shè)備根據(jù)獲取的文件名,按照該文件名索引出相應(yīng)的元數(shù)據(jù),之后對該元數(shù)據(jù)進(jìn)行解析,并獲取其中的某些字段,例如文件的源碼塊的數(shù)量N、編碼塊的數(shù)量M、以及M個(gè)編碼塊所在的多個(gè)存儲(chǔ)裝置。進(jìn)一步地,當(dāng)存儲(chǔ)裝置為磁盤時(shí),還可以獲取元數(shù)據(jù)類型,文件片序號(hào),長度,所在磁盤編號(hào),所在磁盤文件編號(hào),長度,文件片校驗(yàn)值(例如循環(huán)冗余校驗(yàn)值)。
本實(shí)施例的文件讀取方法,通過根據(jù)文件名找到元數(shù)據(jù),之后解析元數(shù)據(jù)中的相關(guān)字段獲取所需的信息,從而之后可以根據(jù)解析出來的信息發(fā)送編碼塊獲取請求,可以實(shí)現(xiàn)對文件讀取請求的解析。
可選的,元數(shù)據(jù)中還可以包括多個(gè)編碼塊的校驗(yàn)信息,電子設(shè)備還可以通過查詢多個(gè)編碼塊在存儲(chǔ)裝置中的具體存儲(chǔ)地址,從而確定每一存儲(chǔ)地址中均存儲(chǔ)有與所述每一存儲(chǔ)地址對應(yīng)的編碼塊;并根據(jù)每一編碼塊的校驗(yàn)信息對每一編碼塊進(jìn)行校驗(yàn),當(dāng)多個(gè)編碼塊均校驗(yàn)通過時(shí),向所述多個(gè)存儲(chǔ)地址發(fā)起編碼塊獲取請求。進(jìn)一步地,也可以在其中超過閾值數(shù)量的編碼塊都通過校驗(yàn)時(shí)發(fā)起請求,而不用校驗(yàn)所有的編碼塊,從而可以節(jié)省校驗(yàn)的時(shí)間,其中,該閾值可以大于源碼塊的數(shù)量N,小于編碼塊的數(shù)量M,從而可以減少校驗(yàn)的數(shù)量,節(jié)省時(shí)間,更快速地響應(yīng)。
在另一些可選的實(shí)施例中,元數(shù)據(jù)還包括由每一編碼塊及與每一編碼塊對應(yīng)的源碼塊的映射關(guān)系形成的編碼庫,電子設(shè)備還可以基于編碼塊根據(jù)預(yù)設(shè)的譯碼算法對所接收的編碼塊進(jìn)行譯碼;之后,如果譯碼失敗,繼續(xù)接收新的編碼塊并繼續(xù)譯碼;重復(fù)上述步驟直至譯碼成功,從而得到N個(gè)源碼塊。從而可以在失敗之后繼續(xù)接收和譯碼,從而也能在一定時(shí)間上加快對讀取請求的響應(yīng)速度。
進(jìn)一步參考圖5,其示出了本申請一實(shí)施例提供的另一種文件讀取方法的流程圖。本實(shí)施例的流程是在圖3中的步驟302進(jìn)一步細(xì)化的流程。具體包括如下步驟:
步驟501,基于待獲取的M個(gè)編碼塊確定待發(fā)送的M個(gè)輸入輸出請求數(shù)據(jù)包;
步驟502,檢測數(shù)據(jù)包中是否存在向同一個(gè)存儲(chǔ)裝置發(fā)送的數(shù)據(jù)包;
步驟503,對向同一個(gè)存儲(chǔ)裝置發(fā)送的數(shù)據(jù)包進(jìn)行合并處理;
步驟504,向各存儲(chǔ)裝置發(fā)送經(jīng)合并處理后的多個(gè)輸入輸出請求數(shù)據(jù)包。
在本實(shí)施例中,對于步驟501,電子設(shè)備根據(jù)待獲取的M個(gè)編碼塊確定待發(fā)送的M個(gè)輸入輸出(I/O,Input/Output)請求數(shù)據(jù)包。之后,對于步驟502,檢測所有的M個(gè)數(shù)據(jù)包中是否存在向同一個(gè)存儲(chǔ)裝置發(fā)送的數(shù)據(jù)包,之后對于步驟503,當(dāng)檢測到其中存在向同一個(gè)存儲(chǔ)裝置發(fā)送的數(shù)據(jù)包時(shí),對其進(jìn)行合并處理,例如存在三個(gè)數(shù)據(jù)包都是向存儲(chǔ)裝置A發(fā)出的,則對這三個(gè)數(shù)據(jù)包進(jìn)行合并,將這三個(gè)請求合并在一起,從而通過一次I/O請求就能讀取三次數(shù)據(jù)。最后,對于步驟504,電子設(shè)備向各個(gè)存儲(chǔ)裝置發(fā)送經(jīng)過合并處理之后的多個(gè)I/O請求。
本實(shí)施例的文件讀取方法,通過對向同一存儲(chǔ)裝置發(fā)送的多個(gè)輸入輸出請求數(shù)據(jù)包進(jìn)行合并處理,從而可以減少發(fā)送的請求數(shù)據(jù)包的數(shù)量,通過一次請求即可讀取多個(gè)數(shù)據(jù),從而可以減少發(fā)送數(shù)據(jù)包和讀取數(shù)據(jù)的時(shí)間,進(jìn)一步地可以減少處理的時(shí)間,提高處理效率,快速對讀取請求作出響應(yīng)。
請參考圖6,其示出了本申請一實(shí)施例提供的文件讀取方法的一種實(shí)現(xiàn)的流程圖。以下實(shí)施例重在解決視頻回看,以及點(diǎn)播中文件讀取的性能方面做優(yōu)化。提高數(shù)據(jù)讀取速度。從而提高視頻服務(wù)器的性能。降低視頻的卡頓比。
在本實(shí)施例中,對于步驟601,對待每次請求數(shù)據(jù),檢索數(shù)據(jù)元數(shù)據(jù),根據(jù)元數(shù)據(jù),確定數(shù)據(jù)分片所在具體的磁盤。之后,對于步驟602,若元數(shù)據(jù)損壞,則不對該數(shù)據(jù)進(jìn)行處理,通過后臺(tái)方式對數(shù)據(jù)進(jìn)行恢復(fù)。然后對于步驟603,向各個(gè)磁盤發(fā)起IO請求。最后,對于步驟604,數(shù)據(jù)到達(dá)一定可恢復(fù)閾值,利用編碼運(yùn)算,恢復(fù)數(shù)據(jù)的原貌。
其中,整個(gè)系統(tǒng)可以包括元數(shù)據(jù)模塊、I/O模塊以及編解碼模塊。
在元數(shù)據(jù)模塊中,元數(shù)據(jù)索引以文件名為索引,元數(shù)據(jù)內(nèi)容為:元數(shù)據(jù)類型,文件片序號(hào),長度,所在磁盤編號(hào),所在磁盤文件編號(hào),長度,文件片CRC(循環(huán)冗余校驗(yàn))校驗(yàn)值。讀取文件元數(shù)據(jù)后,對文件的元數(shù)據(jù)進(jìn)行解碼,解析出上述字段,并檢查磁盤,文件是否存儲(chǔ),校驗(yàn)元數(shù)據(jù)正確性。
在I/O模塊中,并行向所有文件塊發(fā)起請求,等待所有I/O請求到達(dá)可恢復(fù)文件的閾值。在這個(gè)模塊,相同的I/O請求會(huì)合并,進(jìn)一步減少磁盤I/O的數(shù)量,提高系統(tǒng)有效I/O能力。
編解碼模塊,可以利用噴泉碼的思想。所謂噴泉碼,是指這種編碼的發(fā)送端隨機(jī)編碼,由k個(gè)原始分組生成任意數(shù)量的編碼分組,源節(jié)點(diǎn)在不知道這些數(shù)據(jù)包是否被成功接收的情況下,持續(xù)發(fā)送數(shù)據(jù)包。而接收端只要收到N=k(1+ε)個(gè)編碼分組的任意子集(ε>0),即收到一個(gè)稍微大于原來k值的N個(gè)子集,就可通過譯碼以高概率(與ε有關(guān))成功地恢復(fù)全部原始分組。
現(xiàn)我們將I/O獲得的結(jié)果作為輸入源,只要輸入源>K,利用我們的編碼庫,對數(shù)據(jù)進(jìn)行恢復(fù)。
以上提出了一種針對存儲(chǔ)于多磁盤的存儲(chǔ)方式,可以有效的提高讀取性能,降低部署成本。不僅可以提高存儲(chǔ)讀取性能,并能夠提供數(shù)據(jù)完備性的方案,將備份與快速讀取合為一體。本發(fā)明還可以讓用戶自定義編碼加密功能,保證數(shù)據(jù)的安全性。
請參考圖7,其示出了本申請一實(shí)施例提供的一種文件存儲(chǔ)裝置的結(jié)構(gòu)示意圖。如圖7所示,本實(shí)施例的文件存儲(chǔ)裝置700包括分塊模塊701、分組模塊702、編碼模塊703以及存儲(chǔ)模塊704。其中,分塊模塊701,配置用于將待存儲(chǔ)的文件,分成N個(gè)源碼塊;分組模塊702,配置用于對N個(gè)源碼塊進(jìn)行分組,生成M個(gè)碼塊組,其中,每個(gè)碼塊組均包括至少一個(gè)源碼塊,M>N;編碼模塊703,配置用于對M個(gè)碼塊組分別進(jìn)行編碼,以生成M個(gè)編碼塊;以及存儲(chǔ)模塊704,配置用于將M個(gè)編碼塊存儲(chǔ)至多個(gè)存儲(chǔ)裝置中。
在一些可選的實(shí)施例中,編碼模塊703包括選擇模塊和生成模塊(圖中為示出)。其中,選擇模塊,配置用于根據(jù)每個(gè)碼塊組中的源碼塊的數(shù)量,選擇相應(yīng)的編碼方式;以及生成模塊,配置用于利用編碼方式對每個(gè)碼塊組進(jìn)行編碼以生成相應(yīng)的編碼塊。
請參考圖8,其示出了本申請一實(shí)施例提供的一種文件讀取裝置的結(jié)構(gòu)示意圖。如圖8所示,文件讀取裝置800包括確定模塊801、發(fā)送模塊802、譯碼模塊803和響應(yīng)模塊804。其中,確定模塊801,配置用于根據(jù)文件讀取請求,確定文件的源碼塊的數(shù)量N、編碼塊的數(shù)量M、以及M個(gè)編碼塊所在的多個(gè)存儲(chǔ)裝置;發(fā)送模塊802,配置用于向各存儲(chǔ)裝置發(fā)送編碼塊獲取請求;譯碼模塊803,配置用于當(dāng)自存儲(chǔ)裝置接收到S個(gè)編碼塊時(shí),對S個(gè)編碼塊進(jìn)行譯碼,其中,N≤S<M;以及響應(yīng)模塊804,配置用于當(dāng)譯碼后成功恢復(fù)文件時(shí),利用恢復(fù)后的文件響應(yīng)文件讀取請求。
在一些可選的實(shí)施例中,確定模塊801包括文件名獲取模塊和索引解析模塊(圖中未示出)。其中,文件名獲取模塊,配置用于根據(jù)文件讀取請求,獲取文件的文件名;以及索引解析模塊,配置用于根據(jù)文件名,索引并解析文件名所對應(yīng)的元數(shù)據(jù),其中,元數(shù)據(jù)包括文件的源碼塊的數(shù)量N、編碼塊的數(shù)量M、以及M個(gè)編碼塊所在的多個(gè)存儲(chǔ)裝置。
在另一些可選的實(shí)施例中,發(fā)送模塊802包括請求確定模塊、檢測模塊、合并處理模塊和請求發(fā)送模塊(圖中未示出)。其中,請求確定模塊,配置用于基于待獲取的M個(gè)編碼塊確定待發(fā)送的M個(gè)輸入輸出請求數(shù)據(jù)包;檢測模塊,配置用于檢測數(shù)據(jù)包中是否存在向同一個(gè)存儲(chǔ)裝置發(fā)送的數(shù)據(jù)包;合并處理模塊,配置用于對向同一個(gè)存儲(chǔ)裝置發(fā)送的數(shù)據(jù)包進(jìn)行合并處理;以及請求發(fā)送模塊,配置用于向各存儲(chǔ)裝置發(fā)送經(jīng)合并處理后的多個(gè)輸入輸出請求數(shù)據(jù)包。
應(yīng)當(dāng)理解,圖7和圖8中記載的諸模塊與參考圖1、圖2、圖3、圖4以及圖5描述的方法中的各個(gè)步驟相對應(yīng)。由此,上文針對方法描述的特征和效果同樣適用于圖7和圖8中的諸模塊,在此不再贅述。
值得注意的是,本發(fā)明的實(shí)施例中的模塊并不用于限制本發(fā)明的方案,例如分塊模塊可以描述為用于將待存儲(chǔ)的文件,分成N個(gè)源碼塊的模塊。另外,還可以通過硬件處理器來實(shí)現(xiàn)相關(guān)功能模塊,例如分塊模塊也可以用處理器實(shí)現(xiàn),在此不再贅述。
本申請實(shí)施例提供了一種非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì),所述計(jì)算機(jī)存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令,該計(jì)算機(jī)可執(zhí)行指令可執(zhí)行上述任意方法實(shí)施例中的文件存儲(chǔ)方法;
作為一種實(shí)施方式,本發(fā)明的非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令,所述計(jì)算機(jī)可執(zhí)行指令設(shè)置為:
將待存儲(chǔ)的文件,分成N個(gè)源碼塊;
對所述N個(gè)源碼塊進(jìn)行分組,生成M個(gè)碼塊組,其中,每個(gè)碼塊組均包括至少一個(gè)源碼塊,M>N;
對所述M個(gè)碼塊組分別進(jìn)行編碼,以生成M個(gè)編碼塊;
將所述M個(gè)編碼塊存儲(chǔ)至多個(gè)存儲(chǔ)裝置中。
作為另一種實(shí)施方式,本發(fā)明的非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令,所述計(jì)算機(jī)可執(zhí)行指令設(shè)置為:
根據(jù)文件讀取請求,確定所述文件的源碼塊的數(shù)量N、編碼塊的數(shù)量M、以及所述M個(gè)編碼塊所在的多個(gè)存儲(chǔ)裝置;
向各存儲(chǔ)裝置發(fā)送編碼塊獲取請求;
當(dāng)自所述存儲(chǔ)裝置接收到S個(gè)編碼塊時(shí),對所述S個(gè)編碼塊進(jìn)行譯碼,其中,N≤S<M;
當(dāng)譯碼后成功恢復(fù)所述文件時(shí),利用所述恢復(fù)后的文件響應(yīng)所述文件讀取請求。
作為一種非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),可用于存儲(chǔ)非易失性軟件程序、非易失性計(jì)算機(jī)可執(zhí)行程序以及模塊,如本申請實(shí)施例中的文件存儲(chǔ)方法對應(yīng)的程序指令/模塊(例如,附圖7所示的分塊模塊701、分組模塊702、編碼模塊703以及存儲(chǔ)模塊704)。所述一個(gè)或者多個(gè)模塊存儲(chǔ)在所述非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,當(dāng)被處理器執(zhí)行時(shí),執(zhí)行上述任意方法實(shí)施例中的文件存儲(chǔ)方法或文件讀取方法。
非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以包括存儲(chǔ)程序區(qū)和存儲(chǔ)數(shù)據(jù)區(qū),其中,存儲(chǔ)程序區(qū)可存儲(chǔ)操作系統(tǒng)、至少一個(gè)功能所需要的應(yīng)用程序;存儲(chǔ)數(shù)據(jù)區(qū)可存儲(chǔ)根據(jù)文件存儲(chǔ)系統(tǒng)的使用所創(chuàng)建的數(shù)據(jù)等。此外,非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以包括高速隨機(jī)存取存儲(chǔ)器,還可以包括非易失性存儲(chǔ)器,例如至少一個(gè)磁盤存儲(chǔ)器件、閃存器件、或其他非易失性固態(tài)存儲(chǔ)器件。在一些實(shí)施例中,非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可選包括相對于處理器遠(yuǎn)程設(shè)置的存儲(chǔ)器,這些遠(yuǎn)程存儲(chǔ)器可以通過網(wǎng)絡(luò)連接至文件存儲(chǔ)裝置。上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動(dòng)通信網(wǎng)及其組合。
本發(fā)明實(shí)施例還提供一種計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品包括存儲(chǔ)在非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上的計(jì)算程序,所述計(jì)算機(jī)程序包括程序指令,當(dāng)所述程序指令被計(jì)算機(jī)執(zhí)行時(shí),使所述計(jì)算機(jī)執(zhí)行上述任一項(xiàng)文件存儲(chǔ)方法或文件讀取方法。
圖9是本申請一實(shí)施例提供的電子設(shè)備的結(jié)構(gòu)示意圖,如圖9所示,該設(shè)備包括:
一個(gè)或多個(gè)處理器910以及存儲(chǔ)器920,圖9中以一個(gè)處理器910為例。
文件存儲(chǔ)方法的設(shè)備還可以包括:輸入裝置930和輸出裝置940。
處理器910、存儲(chǔ)器920、輸入裝置930和輸出裝置940可以通過總線或者其他方式連接,圖9中以通過總線連接為例。
存儲(chǔ)器920為上述的非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。處理器910通過運(yùn)行存儲(chǔ)在存儲(chǔ)器920中的非易失性軟件程序、指令以及模塊,從而執(zhí)行服務(wù)器的各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述方法實(shí)施例文件存儲(chǔ)方法。
輸入裝置930可接收輸入的數(shù)字或字符信息,以及產(chǎn)生與文件存儲(chǔ)裝置的用戶設(shè)置以及功能控制有關(guān)的鍵信號(hào)輸入。輸出裝置940可包括顯示屏等顯示設(shè)備。
上述產(chǎn)品可執(zhí)行本申請實(shí)施例所提供的方法,具備執(zhí)行方法相應(yīng)的功能模塊和有益效果。未在本實(shí)施例中詳盡描述的技術(shù)細(xì)節(jié),可參見本申請實(shí)施例所提供的方法。
作為一種實(shí)施方式,上述電子設(shè)備包括:至少一個(gè)處理器;以及,與所述至少一個(gè)處理器通信連接的存儲(chǔ)器;其中,所述存儲(chǔ)器存儲(chǔ)有可被所述至少一個(gè)處理器執(zhí)行的指令,所述指令被所述至少一個(gè)處理器執(zhí)行,以使所述至少一個(gè)處理器能夠:
將待存儲(chǔ)的文件,分成N個(gè)源碼塊;
對所述N個(gè)源碼塊進(jìn)行分組,生成M個(gè)碼塊組,其中,每個(gè)碼塊組均包括至少一個(gè)源碼塊,M>N;
對所述M個(gè)碼塊組分別進(jìn)行編碼,以生成M個(gè)編碼塊;
將所述M個(gè)編碼塊存儲(chǔ)至多個(gè)存儲(chǔ)裝置中。
作為另一種實(shí)施方式,上述電子設(shè)備包括:至少一個(gè)處理器;以及,與所述至少一個(gè)處理器通信連接的存儲(chǔ)器;其中,所述存儲(chǔ)器存儲(chǔ)有可被所述至少一個(gè)處理器執(zhí)行的指令,所述指令被所述至少一個(gè)處理器執(zhí)行,以使所述至少一個(gè)處理器能夠:
根據(jù)文件讀取請求,確定所述文件的源碼塊的數(shù)量N、編碼塊的數(shù)量M、以及所述M個(gè)編碼塊所在的多個(gè)存儲(chǔ)裝置;
向各存儲(chǔ)裝置發(fā)送編碼塊獲取請求;
當(dāng)自所述存儲(chǔ)裝置接收到S個(gè)編碼塊時(shí),對所述S個(gè)編碼塊進(jìn)行譯碼,其中,N≤S<M;
當(dāng)譯碼后成功恢復(fù)所述文件時(shí),利用所述恢復(fù)后的文件響應(yīng)所述文件讀取請求。
本申請實(shí)施例的電子設(shè)備以多種形式存在,包括但不限于:
(1)服務(wù)器:提供計(jì)算服務(wù)的設(shè)備,服務(wù)器的構(gòu)成包括處理器、硬盤、內(nèi)存、系統(tǒng)總線等,服務(wù)器和通用的計(jì)算機(jī)架構(gòu)類似,但是由于需要提供高可靠的服務(wù),因此在處理能力、穩(wěn)定性、可靠性、安全性、可擴(kuò)展性、可管理性等方面要求較高。
(2)其他具有數(shù)據(jù)交互功能的電子裝置。
以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性的勞動(dòng)的情況下,即可以理解并實(shí)施。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實(shí)施方式可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件?;谶@樣的理解,上述技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
最后應(yīng)說明的是:以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。