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

一種文件存儲方法及裝置與流程

文檔序號:12305352閱讀:230來源:國知局
一種文件存儲方法及裝置與流程

本發(fā)明涉及數據處理領域,特別涉及一種文件存儲方法及裝置。



背景技術:

目前,在存儲文件時,需要存儲文件的元數據和文件本身,現有技術中,一般將文件的元數據存儲在存儲終端的元數據庫中,而將文件本身存儲在存儲終端的其他位置,這樣存在數據訪問需求時,存儲終端根據元數據庫中存儲的元數據確定文件的存儲位置,進而獲得文件。此時若元數據庫中存儲的元數據丟失了,那么即使讀取到了丟失的元數據對應的文件數據,也不能確定所讀取到的文件數據是屬于那些文件的,從而造成文件損失。



技術實現要素:

本發(fā)明實施例公開了一種文件存儲方法及裝置,保證元數據的恢復,避免文件的損失。

為達到上述目的,本發(fā)明實施例公開了一種文件存儲方法,應用于存儲終端,所述方法包括:

接收針對待存儲文件的存儲請求;

獲得所述待存儲文件的第一文件標識和所述待存儲文件的數據量,并確定用于存儲所述待存儲文件的目標鍵;

根據所述目標鍵,獲得所述待存儲文件按照預設的存儲格式存儲時的待存儲元數據;

按照所述預設的存儲格式,將所述第一文件標識、所述數據量和所述待存儲文件存儲至所述目標鍵的值中,并將所述待存儲元數據存儲至預設的元數據庫中。

在本發(fā)明的一種實現方式中,所述按照所述預設的存儲格式,將所述第一文件標識、所述數據量和所述待存儲文件存儲至所述目標鍵的值中,包括:

按照第一關鍵字、文件標識長度和所述第一文件標識的順序,將所述第一關鍵字、所述文件標識長度和所述第一文件標識存儲至所述目標鍵的值中,其中,所述第一關鍵字為針對文件標識的關鍵字,所述文件標識長度為所述第一文件標識占用的字節(jié)數;

按照第二關鍵字、所述數據量和所述待存儲文件的順序,將所述第二關鍵字、所述數據量和所述待存儲文件存儲至所述目標鍵的值中,其中,所述第二關鍵字為針對文件的關鍵字。

在本發(fā)明的一種實現方式中,所述方法還包括:

在所述預設的元數據庫存在元數據丟失的情況下,根據所有鍵的值中存儲的所述第一關鍵字和所述第二關鍵字,更新所述預設的元數據庫。

在本發(fā)明的一種實現方式中,所述根據所有鍵的值中存儲的所述第一關鍵字和所述第二關鍵字,更新所述預設的元數據庫,包括:

獲得元數據丟失的文件的第二文件標識;

根據所述第二文件標識,從所有鍵的值中獲得包含所述第二文件標識的目標數據段;

根據所述目標數據段中存儲的所述第二文件標識和所述數據量,更新所述預設的元數據庫。

在本發(fā)明的一種實現方式中,所述根據所述第二文件標識,從所有鍵的值中獲得包含所述第二文件標識的目標數據段,包括:

根據所述第二文件標識,獲得包含所述第二文件標識的鍵k;

判斷所述鍵k的值中所述第二文件標識之后是否存儲有第一關鍵字;

若為是,則獲得所述鍵k的值中所述第二文件標識之后與所述第二文件標識最近的第一關鍵字w1,并確定第一關鍵字w2和所述第一關鍵字w1間的數據段為目標數據段,其中,所述第一關鍵字w2為:所述鍵k的值中所述第二文件標識之前且與所述第二文件標識最近的第一關鍵字;

若為否,則確定所述第一關鍵字w2與所述鍵k的值末尾存儲位置間的數據段為目標數據段。

在本發(fā)明的一種實現方式中,所述根據所述目標鍵,獲得所述待存儲文件按照預設的存儲格式存儲時的待存儲元數據,包括:

獲得所述目標鍵的值中存儲的第一關鍵字和第二關鍵字;

根據所獲得第一關鍵字和所獲得第二關鍵字,計算所述待存儲文件在所述目標鍵的值中的偏移量;

根據計算得到的偏移量,確定所述待存儲文件的待存儲元數據。

為達到上述目的,本發(fā)明實施例還公開了一種文件存儲裝置,應用于存儲終端,所述裝置包括:存儲請求接收模塊、信息確定模塊、元數據獲得模塊和數據存儲模塊;

其中,所述存儲請求接收模塊,用于接收針對待存儲文件的存儲請求;

所述信息確定模塊,用于獲得所述待存儲文件的第一文件標識和所述待存儲文件的數據量,并確定用于存儲所述待存儲文件的目標鍵;

所述元數據獲得模塊,用于根據所述目標鍵,獲得所述待存儲文件按照預設的存儲格式存儲時的待存儲元數據;

所述數據存儲模塊,用于按照所述預設的存儲格式,將所述第一文件標識、所述數據量和所述待存儲文件存儲至所述目標鍵的值中,并將所述待存儲元數據存儲至預設的元數據庫中。

在本發(fā)明的一種實現方式中,所述數據存儲模塊,包括:

文件存儲子模塊,用于按照所述預設的存儲格式,將所述第一文件標識、所述數據量和所述待存儲文件存儲至所述目標鍵的值中;

元數據存儲子模塊,用于將所述待存儲元數據存儲至預設的元數據庫中;

所述文件存儲子模塊,包括:文件標識存儲單元和文件存儲單元;

其中,所述文件標識存儲單元,用于按照第一關鍵字、文件標識長度和所述第一文件標識的順序,將所述第一關鍵字、所述文件標識長度和所述第一文件標識存儲至所述目標鍵的值中,其中,所述第一關鍵字為針對文件標識的關鍵字,所述文件標識長度為所述第一文件標識占用的字節(jié)數;

所述文件存儲單元,用于按照第二關鍵字、所述數據量和所述待存儲文件的順序,將所述第二關鍵字、所述數據量和所述待存儲文件存儲至所述目標鍵的值中,其中,所述第二關鍵字為針對文件的關鍵字。

在本發(fā)明的一種實現方式中,所述裝置還包括:元數據庫更新模塊,用于:

在所述預設的元數據庫存在元數據丟失的情況下,根據所有鍵的值中存儲的所述第一關鍵字和所述第二關鍵字,更新所述預設的元數據庫。

在本發(fā)明的一種實現方式中,所述元數據庫更新模塊,包括:文件標識獲得子模塊、目標數據段確定子模塊和元數據庫更新子模塊;

其中,所述文件標識獲得子模塊,用于在所述預設的元數據庫存在元數據丟失的情況下,獲得元數據丟失的文件的第二文件標識;

所述目標數據段確定子模塊,用于根據所述第二文件標識,從所有鍵的值中獲得包含所述第二文件標識的目標數據段;

所述元數據庫更新子模塊,用于根據所述目標數據段中存儲的所述第二文件標識和所述數據量,更新所述預設的元數據庫。

在本發(fā)明的一種實現方式中,所述目標數據段確定子模塊,包括:鍵獲得單元、關鍵字判斷單元、第一目標數據段確定單元和第二目標數據段確定單元;

其中,所述鍵獲得單元,用于根據所述第二文件標識,獲得包含所述第二文件標識的鍵k;

所述關鍵字判斷單元,用于判斷所述鍵k的值中所述第二文件標識之后是否存儲有第一關鍵字,若為是,則觸發(fā)所述第一目標數據段確定單元,若為否,則觸發(fā)所述第二目標數據段確定單元;

所述第一目標數據段確定單元,用于獲得所述鍵k的值中所述第二文件標識之后與所述第二文件標識最近的第一關鍵字w1,并確定第一關鍵字w2和所述第一關鍵字w1間的數據段為目標數據段,其中,所述第一關鍵字w2為:所述鍵k的值中所述第二文件標識之前且與所述第二文件標識最近的第一關鍵字;

所述第二目標數據段確定單元,用于確定所述第一關鍵字w2與所述鍵k的值末尾存儲位置間的數據段為目標數據段。

在本發(fā)明的一種實現方式中,所述元數據獲得模塊,包括:關鍵字獲得子模塊、偏移量計算子模塊和元數據確定子模塊;

其中,所述關鍵字獲得子模塊,用于獲得所述目標鍵的值中存儲的第一關鍵字和第二關鍵字;

所述偏移量計算子模塊,用于根據所獲得第一關鍵字和所獲得第二關鍵字,計算所述待存儲文件在所述目標鍵的值中的偏移量;

所述元數據確定子模塊,用于根據計算得到的偏移量,確定所述待存儲文件的待存儲元數據。

由上可知,在本發(fā)明實施例中,存儲終端在接收到針對待存儲文件的存儲請求后,獲得待存儲文件的第一文件標識和待存儲文件的數據量,并確定用于存儲待存儲文件的目標鍵,根據目標鍵,獲得待存儲文件按照預設的存儲格式存儲時的待存儲元數據,按照預設的存儲格式,將第一文件標識、數據量和待存儲文件存儲至目標鍵中,并將該待存儲元數據存儲至預設的元數據庫中。這樣,在元數據庫存在元數據丟失的情況下,就可以根據預設的存儲格式確定出鍵的值中已存儲文件的第一文件標識、數據量以及該已存儲文件在該鍵的值中的偏移量,結合該鍵的名字,確定出該已存儲文件的元數據,進而根據該元數據來恢復元數據庫中的元數據,保證了元數據的恢復,避免文件的損失。

附圖說明

為了更清楚地說明本發(fā)明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。

圖1為本發(fā)明實施例提供的一種文件存儲方法的流程示意圖;

圖2為tlv存儲格式的結構示意圖;

圖3為本發(fā)明實施例提供的另一種文件存儲方法的流程示意圖;

圖4為本發(fā)明實施例提供的另一種文件存儲方法的流程示意圖;

圖5為本發(fā)明實施例提供的另一種文件存儲方法的流程示意圖;

圖6為本發(fā)明實施例提供的一種文件存儲排布示意圖;

圖7為本發(fā)明實施例提供的另一種文件存儲方法的流程示意圖;

圖8為本發(fā)明實施例提供的一種文件存儲裝置的結構示意圖;

圖9為本發(fā)明實施例提供的另一種文件存儲裝置的結構示意圖;

圖10為本發(fā)明實施例提供的另一種文件存儲裝置的結構示意圖;

圖11為本發(fā)明實施例提供的另一種文件存儲裝置的結構示意圖;

圖12為本發(fā)明實施例提供的另一種文件存儲裝置的結構示意圖。

具體實施方式

下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。

下面通過具體實施例,對本發(fā)明進行詳細說明。

參考圖1,圖1為本發(fā)明實施例提供的一種文件存儲方法的流程示意圖,應用于存儲終端,該方法可以包括如下步驟:

s101:接收針對待存儲文件的存儲請求;

這里,存儲請求中包含待存儲文件,還可以包含該待存儲文件的標識,以便于存儲終端快速獲得該待存儲文件的標識,進而存儲該待存儲文件的元數據;或者,存儲請求中也可以不包含該待存儲文件的標識,存儲終端可以在待存儲文件中解析獲得該待存儲文件的標識,這樣存儲請求更為簡單明了。

s102:獲得待存儲文件的第一文件標識和待存儲文件的數據量,并確定用于存儲待存儲文件的目標鍵;

在本發(fā)明的一個實施例中,第一文件標識和待存儲文件的數據量是該待存儲文件的元數據的一部分,并且可以在獲得存儲請求時直接獲得這些信息,因此,在存儲該待存儲文件前,先獲得第一文件標識和該待存儲文件的數據量。

在本發(fā)明的一個實施例中,具備高可靠性及可擴展性的海量數據存儲對互 聯網公司來說是一個巨大的挑戰(zhàn),傳統(tǒng)的數據庫往往很難滿足該需求,在這種情況下使用關系型數據庫將使得存儲和讀取數據的效率低下,并且擴展數據庫也將成為很大的難題。在這樣的情況下,使用鍵存儲將會是一個很好的選擇。鍵存儲具有以下優(yōu)點:

1、availability可用性;

2、scalability可擴展性;

3、failover故障恢復;

4、performance高性能。

鍵由名字key和值value組成,一個key對應一個value。

s103:根據目標鍵,獲得待存儲文件按照預設的存儲格式存儲時的待存儲元數據;

具體地,待存儲文件的元數據一般包括:在該目標鍵中的待存儲文件的標識、數據量和相對于目標鍵起始存儲位置的偏移量等元數據信息。

在本發(fā)明的一個實施例中,可以通過下述過程實現s103:

由于確定了目標鍵以及待存儲文件的存儲格式,從而就可以根據該存儲格式確定該待存儲文件在該目標鍵中的存儲位置,此時,可以確定該待存儲文件相對于目標鍵起始存儲位置的偏移量,這樣,結合獲得的第一文件標識、數據量、偏移量和該目標鍵的名字就可以獲得該待存儲文件的元數據,也就是上述的待存儲元數據。

在本發(fā)明的一個實施例中,預設的存儲格式可以為tlv(tag_length_value,標記_長度_值)的格式,如圖2所示,圖2為tlv存儲格式的結構示意圖,這種存儲格式更為簡潔明了。

s104:按照預設的存儲格式,將待存儲文件的第一文件標識、待存儲文件的數據量和待存儲文件存儲至目標鍵的值中,并將待存儲元數據存儲至預設的元數據庫中。

其中,預設的元數據庫,用于存儲文件的元數據。

在本發(fā)明的一個實施例中,存儲終端可能會存儲許多相對鍵的值的容量小 的文件,如:鍵的值的容量為1mbytes,待存儲文件的大小100kbytes,此時,如果一個鍵的值中只存儲一個文件,將容易造成存儲空間的浪費,因此,可以考慮在一個鍵的值中存儲多個完整的文件。

進行文件存儲時,存儲文件的同時,如果只將文件的元數據存儲至元數據庫中,即使以鍵的形式存儲文件,不管一個鍵的值中存儲一個完整的文件,還是存儲多個完整的文件,一旦元數據庫中某一文件的元數據丟失,即便從相應鍵的值中讀取到了元數據丟失的文件的數據,由于缺乏元數據信息,也無法獲知讀取到的數據是該元數據丟失了的文件的數據。

在本發(fā)明的一個實施例中,存儲終端將獲得的待存儲文件的第一文件標識、待存儲文件的數據量和待存儲文件,按照預設的存儲格式存儲在目標鍵的值中,這樣就算是元數據庫存在元數據丟失的情況,也可以根據該存儲格式,在鍵的值中確定出屬于同一文件的數據,并且根據該存儲格式,獲得已存儲文件的文件標識和數據量等元數據信息,進而恢復元數據庫中存儲的元數據。

具體地,存儲終端確定了待存儲數據要存儲至的目標鍵之后,就可以獲得該待存儲數據按照預設的存儲格式存儲時,在該目標鍵的值中的偏移量等元數據信息,綜合上述獲得的第一文件標識和該待存儲文件的數據量,可以確定出該待存儲文件的待存儲元數據,并將待存儲元數據存儲至預設的元數據庫中。這樣,在進行數據訪問時,存儲終端就可以根據元數據庫中的元數據進行數據訪問了。

在本發(fā)明的一種實現方式中,存儲終端在成功存儲了待存儲文件后,再存儲該待存儲文件的元數據,保證了元數據庫中的元數據的準確性,避免出現未成功存儲待存儲文件,卻存儲了該待存儲文件的元數據,進而導致存儲終端不能正確讀取元數據庫中存儲的元數據,出現存儲終端庫崩潰等問題。

需要說明的是,上述存儲待存儲文件的步驟可以與存儲待存儲元數據的步驟同時執(zhí)行,也可以在存儲待存儲元數據之前s102之后執(zhí)行,甚至可以在存儲待存儲元數據之后執(zhí)行,本申請并不對此進行限定。

應用圖1所示實施例,存儲終端在接收到針對待存儲文件的存儲請求后,獲得待存儲文件的第一文件標識和待存儲文件的數據量,并確定用于存儲待存儲文件的目標鍵,根據目標鍵,獲得待存儲文件按照預設的存儲格式存儲時的待 存儲元數據,按照預設的存儲格式,將第一文件標識、數據量和待存儲文件存儲至目標鍵中,并將該待存儲元數據存儲至預設的元數據庫中。這樣,在元數據庫存在元數據丟失的情況下,從一個鍵中讀取數據時,就可以根據預設的存儲格式確定出鍵的值中已存儲文件的第一文件標識、數據量以及該已存儲文件在該鍵的值中的偏移量,結合該鍵的名字,確定出該已存儲文件的元數據,進而根據該元數據來恢復元數據庫中的元數據,保證了元數據的恢復,避免了文件的損失。

參考圖3,圖3為本發(fā)明實施例提供的另一種文件存儲方法的流程示意圖,應用于存儲終端,該方法中,步驟s104可以包括如下步驟:

s1041:按照第一關鍵字、文件標識長度和待存儲文件的第一文件標識的順序,將第一關鍵字、文件標識長度和待存儲文件的第一文件標識存儲至目標鍵的值中;

其中,第一關鍵字為針對文件標識的關鍵字,文件標識長度為第一文件標識占用的字節(jié)數。

在圖2中,tag可以用于存儲第一關鍵字,該第一關鍵字可以為tag_file_name,也可以用其他字符來表示第一關鍵字,本發(fā)明對此不進行限定。按照tlv格式存儲了文件后,若存儲終端讀取到tag_file_name,則表示其后length中存儲的為文件標識長度,假設,length中存儲的為4,當讀取得到length中存儲的4時,表示其后value占用了4字節(jié)數,進而可以在value中讀取到占用了4字節(jié)數的文件標識。

s1042:按照第二關鍵字、待存儲文件的數據量和待存儲文件的順序,將第二關鍵字、數據量和待存儲文件存儲至目標鍵的值中;

其中,第二關鍵字為針對文件的關鍵字。

具體地,在圖3中,tag還可以用于存儲第二關鍵字,該第二關鍵字可以為tag_file_data,也可以用其他字符來表示第二關鍵字,本發(fā)明對此不進行限定。按照tlv格式存儲了文件后,若存儲終端讀取到tag_file_data,則表示其后length中存儲的為文件的數據量,假設,length中存儲的為200,當讀取得到length中存儲的200時,表示其后value占用了200字節(jié)數,進而可以在value中讀取到占用了200字節(jié)數的文件。

s1043:將待存儲元數據存儲至預設的元數據庫中。

應用圖3所示實施例,存儲終端按照第一關鍵字、文件標識長度和待存儲文件的第一文件標識的順序,將第一關鍵字、文件標識長度和待存儲文件的第一文件標識存儲至目標鍵的值中,并按照第二關鍵字、待存儲文件的數據量和待存儲文件的順序,將第二關鍵字、數據量和待存儲文件存儲至目標鍵的值中,將待存儲元數據存儲至預設的元數據庫中。這樣在元數據庫存在元數據丟失的情況下,仍然可以根據按照預設的存儲格式存儲在鍵的值中的文件的標識和數據量,確定讀取到的數據是屬于哪一文件的,有效地避免了文件的損失。

參考圖4,圖4為本發(fā)明實施例提供的另一種文件存儲方法的流程示意圖,應用于存儲終端,該方法可以包括如下步驟:

s105:在預設的元數據庫存在元數據丟失的情況下,根據所有鍵的值中存儲的第一關鍵字和第二關鍵字,更新該預設的元數據庫。

在本發(fā)明的一個實施例中,每次元數據庫更新了存儲的元數據后,都獲得一個第一校驗值,在下一次存儲元數據之前可以再次獲得一個第二校驗值,當第一校驗值和第二校驗值不同時,就可以說,元數據庫存在元數據丟失。目前,可以根據crc(cyclicredundancycheck)校驗算法或其他校驗算法來獲得校驗值。

在本發(fā)明的一個實施例中,當確定元數據庫存在元數據丟失時,可以根據所有鍵的值中存儲的第一關鍵字和第二關鍵字來獲得鍵的值中已存儲文件的標識、數據量等元數據信息,進而根據獲得的元數據信息,更新元數據庫,保證了元數據庫中元數據的恢復,避免了文件損失。

需要說明的是,步驟s105可以發(fā)生在步驟s101、s102、s103和s104中的任一步驟之前,也可以發(fā)生在步驟s101、s102、s103和s104中的任一步驟之后,還可以與步驟s101、s102、s103和s104中的任一步驟同時發(fā)生,本發(fā)明對此不進行限定。

應用圖4所示實施例,存儲終端在預設的元數據庫存在元數據丟失的情況下,從各個鍵中讀取數據時,根據預設的存儲格式獲得已存儲文件的標識、已存儲文件的數據量,根據所有鍵的值中存儲的第一關鍵字和第二關鍵字,獲得該已存儲文件在該鍵的值中的偏移量,根據獲得信息更新預設的元數據庫,能 夠有效地恢復元數據庫中的元數據,避免了文件損失。

參考圖5,圖5為本發(fā)明實施例提供的另一種文件存儲方法的流程示意圖,應用于存儲終端,該方法中,步驟s105可以包括如下步驟:

s1051:在預設的元數據庫存在元數據丟失的情況下,獲得元數據丟失的文件的第二文件標識;

在本發(fā)明的一個實施例中,元數據庫中丟失的元數據可能僅僅只是一小部分,此時,若全部更新元數據庫中存儲的元數據,將會增加存儲終端的工作量,并且元數據的恢復速度慢。若只更新元數據庫中丟失的元數據,將會大大減少存儲終端的工作量,并且元數據的恢復速度快。

具體地,當存儲終端針對某一文件進行讀取時,不能夠讀取到,則可以認為該文件在元數據庫中的元數據丟失,進而獲得該文件的第二文件標識。在本發(fā)明的一種實現方式中,該文件的第二文件標識可以從讀取文件時的讀取請求中獲得。

s1052:根據丟失的文件的第二文件標識,從所有鍵的值中獲得包含第二文件標識的目標數據段;

在本發(fā)明的一個實施例中,上述根據丟失的文件的第二文件標識,從所有鍵的值存儲的文件中獲得包含第二標識的目標數據段,可以包括:

s1、根據第二文件標識,獲得包含第二文件標識的鍵k;

具體地,在所有鍵的值中讀取第一關鍵字,進而根據第一關鍵字確定對應的文件標識長度,再根據文件標識長度確定出文件標識,從確定的文件標識中獲得與第二文件標識相同的文件標識及該文件標識對應的鍵,這里所獲得鍵為包含第二文件標識的鍵。

需要說明的是,上述鍵k可以是多個鍵,也可以僅僅為一個鍵,其中,上述鍵k為多個鍵的情況下,說明一個文件存儲在多個鍵中。

s2、判斷鍵k的值中第二文件標識之后是否存儲有第一關鍵字,若為是,則執(zhí)行步驟s3,若為否,則執(zhí)行步驟s4;

具體地,存儲一個文件的標識、數據量和該文件本身的順序可以為:先存 儲該文件的標識,再存儲該文件的數據量和該文件本身,第一關鍵字為存儲一個文件的數據段起始存儲位置。如圖6所示,圖6為本發(fā)明實施例提供的一種文件存儲排布示意圖。從圖6中可以知,名字為key1的鍵的值中存儲了2個文件,file1后面存儲了file2,而file2后面未存儲文件,因此,與file1對應的第一關鍵字a(tag_file_name)和與file2對應的第一關鍵字b(tag_file_name)間的空間為存儲file1的數據段,與file2對應的第一關鍵字b至名字為key1的鍵的值的末尾存儲位置間的空間為存儲file2的數據段。由上可知,只有知道文件標識后是否包含第一關鍵字,也就是說,只有知道該文件后是否存儲了其他文件,才能知道如何確定存儲一個文件的數據段,而每一文件都對應一個關鍵字,因此,需要判斷第二文件標識之后是否存儲有第一關鍵字。

s3、獲得鍵k的值中第二文件標識之后與第二文件標識最近的第一關鍵字w1,并確定第一關鍵字w2和第一關鍵字w1間的數據段為目標數據段,其中,第一關鍵字w2為:鍵k的值中第二文件標識之前且與第二文件標識最近的第一關鍵字;

具體地,第一關鍵字為存儲一個文件的數據段起始存儲位置,一個文件標識對應一個第一關鍵字,兩個相鄰的第一關鍵字之間的空間為一個數據段,這里,文件標識對應第一關鍵字為:該文件標識之前且與該文件標識最近的第一關鍵字。在確定了目標數據段后,就可以根據該目標數據段中存儲的第一關鍵字獲得文件標識長度,再根據文件標識長度,確定文件標識;并且還可以根據該目標數據段中存儲的第二關鍵字獲得該文件的數據量,進而獲得該文件。這里,文件標識和該文件的數據量為元數據,這樣就可以根據在鍵的值中獲得的元數據來恢復元數據庫中的元數據了。

s4、確定第一關鍵字w2與鍵k的值的末尾存儲位置之間的數據段為目標數據段。

具體地,在一個文件標識后不存在第一關鍵字,說明該文件后未存儲文件,因此,可以確定該文件標識對應的第一關鍵字w2與該文件標識所在鍵k的值的末尾存儲位置之間的數據段為目標數據段。

s1053:根據目標數據段中存儲的丟失的文件的第二文件標識和丟失的文件的數據量,更新預設的元數據庫。

應用圖5所示實施例,存儲終端只需要獲得元數據丟失的文件的第二文件標識,根據丟失的文件的第二文件標識,從所有鍵的值中存儲的文件中獲得包含第二標識的目標數據段,最后根據目標數據段中存儲的丟失的文件的第二文件標識和丟失的文件的數據量,更新預設的元數據庫就可以了,減少了存儲終端的工作量,提高了元數據庫更新的效率。

參考圖7,圖7為本發(fā)明實施例提供的另一種文件存儲方法的流程示意圖,應用于存儲終端,該方法中,步驟s103可以包括如下步驟:

s1031:獲得目標鍵的值中存儲的第一關鍵字和第二關鍵字;

在本發(fā)明的一個實施例中,按照tlv格式存儲的文件中tag和length占用的字節(jié)數為固定大小的,因此只需目標鍵的值中存儲的第一關鍵字和第二關鍵字(也就是tag),就可以根據第一關鍵字和第二關鍵字的個數以及與第一關鍵字對應的文件標識長度和第二關鍵字對應的數據量(也就是length),確定出該待存儲文件在目標鍵的值中的偏移量。

s1032:根據所獲得第一關鍵字和所獲得第二關鍵字,計算待存儲文件在目標鍵的值中的偏移量;

根據圖6所示,假設,tag和length占用的字節(jié)數均為4kbytes,file1的標識長度為10kbytes,file1的數據量為100kbytes,file2的標識長度為12kbytes,file2的數據量為200kbytes,file1和file2的存儲順序為:先存儲file1再存儲file2,此時獲得的file1和file2的元數據如表1所示。

表1

具體地,file1和file2在鍵的值中的偏移量通過以下方式計算得到:在向名字為key1的目標鍵的值中存儲file1時,該目標鍵的值中為空,此時,可以確定,該目標鍵的值的起始存儲位置至file1文件的文件頭之間有1個第一關鍵字和1個第二關鍵字(此為預設的存儲格式tlv自身攜帶的第一關鍵字和所獲得第二關鍵 字),也就是有2個tag,對應的有2個length,從length中可以獲得file1的標識長度為10kbytes、file1的數據量為100kbytes,因此,可以確定file1在key1的值中的偏移量為:2*4kbytes(2個tag占用的字節(jié)數)+2*4kbytes(2個length占用的字節(jié)數)+10kbytes(file1的標識占用的字節(jié)數)=8kbytes+8kbytes+10kbytes=26kbytes;另外,在向名字為key1的目標鍵的值中存儲file2時,該目標鍵的值中存儲了file1,可以獲得1個第一關鍵字和1個第二關鍵字,另外還包含1個第一關鍵字和1個第二關鍵字(此為預設的存儲格式tlv自身攜帶的第一關鍵字和所獲得第二關鍵字),也就是有4個tag,對應的有4個length,從length中可以獲得file1的標識長度為10kbytes、file1的數據量為100kbytes、file2的標識長度為12kbytes、file2的數據量為200kbytes,因此,可以確定file2在key1的值中的偏移量為:4*4kbytes(2個tag占用的字節(jié)數)+4*4kbytes(2個length占用的字節(jié)數)+10kbytes(file1的標識占用的字節(jié)數)+100kbytes(file1占用的字節(jié)數)+12kbytes(file2的標識占用的字節(jié)數)=16kbytes+16kbytes+10kbytes+100kbytes+12kbytes=154kbytes。

s1033:根據計算得到的偏移量,確定待存儲文件的待存儲元數據;

在本發(fā)明的一個實施例中,文件在鍵的值中的偏移量也是文件的元數據的一部分,以便于存儲終端根據偏移量快速獲得該文件的存儲位置。

具體地,在獲得了待存儲文件在目標鍵的值中的偏移量后,結合第一文件標識和待存儲文件的數據量確定出待存儲文件的元數據。

應用圖7所示實施例,存儲終端獲得目標鍵的值中存儲的第一關鍵字和第二關鍵字,根據所獲得第一關鍵字和所獲得第二關鍵字,計算待存儲文件在目標鍵的值中的偏移量,并根據計算得到的偏移量,確定待存儲文件的待存儲元數據。這里,根據目標鍵的值中存儲的第一關鍵字和第二關鍵字計算文件的偏移量,進而確定待存儲文件的待存儲元數據,而不必一一統(tǒng)計待存儲文件的存儲位置與目標鍵的值的起始存儲位置之間的數據量,來確定文件的偏移量,元數據的確定更為快速、方便。

參考圖8,圖8為本發(fā)明實施例提供的一種文件存儲裝置的結構示意圖,應用于存儲終端,該裝置可以包括:存儲請求接收模塊801、信息確定模塊802、元數據獲得模塊803和數據存儲模塊804;

其中,存儲請求接收模塊801,用于接收針對待存儲文件的存儲請求;

信息確定模塊802,用于獲得待存儲文件的第一文件標識和待存儲文件的數據量,并確定用于存儲待存儲文件的目標鍵;

元數據獲得模塊803,用于根據目標鍵,獲得待存儲文件按照預設的存儲格式存儲時的待存儲元數據;

數據存儲模塊804,用于按照所述預設的存儲格式,將所述第一文件標識、所述數據量和所述待存儲文件存儲至所述目標鍵的值中,并將所述待存儲元數據存儲至預設的元數據庫中,其中,預設的元數據庫,用于存儲文件的元數據。

應用圖8所示實施例,存儲終端在接收到針對待存儲文件的存儲請求后,獲得待存儲文件的第一文件標識和待存儲文件的數據量,并確定用于存儲待存儲文件的目標鍵,根據目標鍵,獲得待存儲文件按照預設的存儲格式存儲時的待存儲元數據,按照預設的存儲格式,將第一文件標識、數據量和待存儲文件存儲至目標鍵中,并將該待存儲元數據存儲至預設的元數據庫中。這樣,在元數據庫存在元數據丟失的情況下,從一個鍵中讀取數據時,就可以根據預設的存儲格式確定出鍵的值中已存儲文件的第一文件標識、數據量以及該已存儲文件在該鍵的值中的偏移量,結合該鍵的名字,確定出該已存儲文件的元數據,進而根據該元數據來恢復元數據庫中的元數據,保證了元數據的恢復,避免文件的損失。

參考圖9,圖9為本發(fā)明實施例提供的另一種文件存儲裝置的結構示意圖,應用于存儲終端,該裝置中,數據存儲模塊804可以包括:文件標識存儲子模塊8041和元數據存儲子模塊8042;

文件存儲子模塊8041,用于按照所述預設的存儲格式,將所述第一文件標識、所述數據量和所述待存儲文件存儲至所述目標鍵的值中;

元數據存儲子模塊8042,用于將所述待存儲元數據存儲至預設的元數據庫中;

其中,文件存儲子模塊8041,包括:文件標識存儲單元8041a和文件存儲單元8041b;

文件標識存儲單元8041a,用于按照第一關鍵字、文件標識長度和第一文件 標識的順序,將第一關鍵字、文件標識長度和第一文件標識存儲至目標鍵的值中,其中,第一關鍵字為針對文件標識的關鍵字,文件標識長度為第一文件標識占用的字節(jié)數;

文件存儲單元8041b,用于按照第二關鍵字、數據量和待存儲文件的順序,將第二關鍵字、數據量和待存儲文件存儲至目標鍵的值中,其中,第二關鍵字為針對文件的關鍵字。

應用圖9所示實施例,存儲終端按照第一關鍵字、文件標識長度和待存儲文件的第一文件標識的順序,將第一關鍵字、文件標識長度和待存儲文件的第一文件標識存儲至目標鍵的值中,并按照第二關鍵字、待存儲文件的數據量和待存儲文件的順序,將第二關鍵字、數據量和待存儲文件存儲至目標鍵的值中,將待存儲元數據存儲至預設的元數據庫中。這樣在元數據庫存在元數據丟失的情況下,仍然可以根據按照預定存儲格式存儲在鍵的值中的文件的標識和數據量,確定讀取到的數據是屬于哪一文件的,有效地避免了文件的損失。

參考圖10,圖10為本發(fā)明實施例提供的另一種文件存儲裝置的結構示意圖,應用于存儲終端,該裝置還可以包括:元數據庫更新模塊805;

這里,元數據庫更新模塊805,用于:

在預設的元數據庫存在元數據丟失的情況下,根據所有鍵的值中存儲的第一關鍵字和第二關鍵字,更新預設的元數據庫。

應用圖10所示實施例,存儲終端在在預設的元數據庫存在元數據丟失的情況下,從各個鍵中讀取數據時,根據預設的存儲格式獲得已存儲文件的標識、已存儲文件的數據量,根據所有鍵的值中存儲的第一關鍵字和第二關鍵字,確定各個已存儲文件在各個鍵的值中的偏移量,根據獲得信息更新預設的元數據庫,能夠有效地恢復元數據庫中的元數據,避免了文件損失。

參考圖11,圖11為本發(fā)明實施例提供的另一種文件存儲裝置的結構示意圖,應用于存儲終端,該裝置中,元數據庫更新模塊805可以包括:文件標識獲得子模塊8051、目標數據段確定子模塊8052和元數據庫更新子模塊8053;

其中,文件標識獲得子模塊8051,用于在預設的元數據庫存在元數據丟失的情況下,獲得元數據丟失的文件的第二文件標識;

目標數據段確定子模塊8052,用于根據第二文件標識,從所有鍵的值中獲得包含第二文件標識的目標數據段;

元數據庫更新子模塊8053,用于根據目標數據段中存儲的第二文件標識和數據量,更新預設的元數據庫。

在本發(fā)明的一種實現方式中,上述目標數據段確定子模塊8052可以包括:鍵獲得單元、關鍵字判斷單元、第一目標數據段確定單元和第二目標數據段確定單元(圖11中未示出);

其中,鍵獲得單元,用于根據第二文件標識,獲得包含第二文件標識的鍵k;

關鍵字判斷單元,用于判斷鍵k的值中第二文件標識之后是否存儲有第一關鍵字,若為是,則觸發(fā)第一目標數據段確定單元,若為否,則觸發(fā)第二目標數據段確定單元;

第一目標數據段確定單元,用于獲得鍵k的值中第二文件標識之后與第二文件標識最近的第一關鍵字w1,并確定第一關鍵字w2和第一關鍵字w1間的數據段為目標數據段,其中,第一關鍵字w2為:鍵k的值中第二文件標識之前且與第二文件標識最近的第一關鍵字;

第二目標數據段確定單元,用于確定第一關鍵字w2與鍵k的值末尾存儲位置間的數據段為目標數據段。

應用圖11所示實施例,存儲終端只需要獲得元數據丟失的文件的第二文件標識,根據丟失的文件的第二文件標識,從所有鍵的值中存儲的文件中獲得包含第二標識的目標數據段,最后根據目標數據段中存儲的丟失的文件的第二文件標識和丟失的文件的數據量,更新預設的元數據庫就可以了,減少了存儲終端的工作量,提高了元數據庫更新的效率。

參考圖12,圖12為本發(fā)明實施例提供的另一種文件存儲裝置的結構示意圖,應用于存儲終端,該裝置中,元數據獲得模塊803,可以包括:關鍵字獲得子模塊8031、偏移量計算子模塊8032、元數據確定子模塊8033;

其中,關鍵字獲得子模塊8031,用于獲得所述目標鍵的值中存儲的第一關鍵字和第二關鍵字;

偏移量計算子模塊8032,用于根據所獲得第一關鍵字和所獲得第二關鍵字, 計算待存儲文件在目標鍵的值中的偏移量;

元數據確定子模塊8033,用于根據計算得到的偏移量,確定待存儲文件的待存儲元數據。

應用圖12所示實施例,存儲終端獲得目標鍵的值中存儲的第一關鍵字和第二關鍵字,根據所獲得第一關鍵字和所獲得第二關鍵字,計算待存儲文件在目標鍵的值中的偏移量,并根據計算得到的偏移量,確定待存儲文件的待存儲元數據。這里,根據目標鍵的值中存儲的第一關鍵字和第二關鍵字計算文件的偏移量,進而確定待存儲文件的待存儲元數據,而不必一一統(tǒng)計待存儲文件的存儲位置與目標鍵的值的起始存儲位置之間的數據量,來確定文件的偏移量,元數據的確定更為快速、方便。

對于裝置實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。

需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。

本領域普通技術人員可以理解實現上述方法實施方式中的全部或部分步驟是可以通過程序來指令相關的硬件來完成,所述的程序可以存儲于計算機可讀取存儲介質中,這里所稱得的存儲介質,如:rom/ram、磁碟、光盤等。

以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內所作的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內。

當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
镇赉县| 保德县| 汉川市| 伊吾县| 永靖县| 齐河县| 土默特右旗| 山丹县| 济宁市| 武平县| 延津县| 大关县| 斗六市| 银川市| 云阳县| 抚州市| 石嘴山市| 台州市| 邯郸市| 澄江县| 烟台市| 乐山市| 广汉市| 上蔡县| 老河口市| 米林县| 乳源| 千阳县| 子长县| 翁源县| 开江县| 锡林郭勒盟| 萝北县| 淳化县| 托克托县| 乳山市| 卢氏县| 潮安县| 丹江口市| 青岛市| 衢州市|