亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

文件存儲方法和設(shè)備、文件發(fā)送方法和設(shè)備的制作方法

文檔序號:6402960閱讀:166來源:國知局
專利名稱:文件存儲方法和設(shè)備、文件發(fā)送方法和設(shè)備的制作方法
技術(shù)領(lǐng)域
本發(fā)明的實施方式涉及互聯(lián)網(wǎng)領(lǐng)域,更具體地,本發(fā)明的實施方式涉及文件存儲方法和設(shè)備、文件發(fā)送方法和設(shè)備。
背景技術(shù)
本部分旨在為權(quán)利要求書中陳述的本發(fā)明的實施方式提供背景或上下文。此處的描述可包括可以探究的概念,但不一定是之前已經(jīng)想到或者已經(jīng)探究的概念。因此,除非在此指出,否則在本部分中描述的內(nèi)容對于本申請的說明書和權(quán)利要求書而言不是現(xiàn)有技術(shù),并且并不因為包括在本部分中就承認是現(xiàn)有技術(shù)。在互聯(lián)網(wǎng)高速發(fā)展的今天,利用互聯(lián)網(wǎng)進行設(shè)備之間的數(shù)據(jù)交互也越來越普遍,例如,不同用戶之間可能會采用不同的客戶端傳輸文件,或者,用戶還可能會通過客戶端向服務(wù)器上傳文件,再或者,服務(wù)器之間可能還會存在文件互相傳輸和共享的情況。以用戶通過客戶端向服務(wù)器上傳文件為例,對于服務(wù)器來講,服務(wù)器可以保存多個用戶通過多個客戶端上傳的圖片或者文字等,并且其可以與海量客戶端進行文件交互,或者將保存的文件提供給更多的用戶進行下載。一般情況下,因為網(wǎng)絡(luò)環(huán)境比較復(fù)雜,各個設(shè)備之間的對于文件的存儲情況并不一致,所以為了避免文件各個設(shè)備之間的重復(fù)傳輸,在接收設(shè)備方可以將文件分成若干數(shù)據(jù)塊進行存儲,這樣的話,發(fā)送設(shè)備如果需要發(fā)送某個文件至接收設(shè)備進行存儲,就需要先將該文件的各個數(shù)據(jù)塊的哈希值都發(fā)送給接收設(shè)備,由接收設(shè)備根據(jù)哈希值判斷該文件的某個或者某些數(shù)據(jù)塊,與自身存儲的某個或某些數(shù)據(jù)塊是否重復(fù),在存在數(shù)據(jù)塊重復(fù)的情況下,就不再需要發(fā)送設(shè)備重復(fù)發(fā)送該文件中這些重復(fù)的數(shù)據(jù)塊。

發(fā)明內(nèi)容
但是,本發(fā)明人在研究 過程中發(fā)現(xiàn),在現(xiàn)有技術(shù)中采用的在接收設(shè)備方進行數(shù)據(jù)塊級別的存儲方式,需要為每一個數(shù)據(jù)塊都建立對應(yīng)的索引,而在接收設(shè)備方實現(xiàn)海量數(shù)據(jù)塊對應(yīng)的索引維護的代價非常大,就會導(dǎo)致接收設(shè)備的處理資源和性能開銷較大。進一步地,接收設(shè)備在查詢一個文件的時候,因為數(shù)據(jù)塊索引量較大,就需要接收設(shè)備耗費更多的資源來查找一個文件,使得文件查找的復(fù)雜度很高,因此文件查詢效率也就較低。再進一步地,因為采用數(shù)據(jù)塊級別的存儲方式,會使得一個文件的多個數(shù)據(jù)塊一般情況下并不是連續(xù)存儲的,這就使接收設(shè)備在讀取文件的時候的磁盤輸入輸出(10, Input/Output)代價相對較高,這就影響了接收設(shè)備對文件的讀取效率,同時也會占用較多的接收設(shè)備的磁盤IO資源。再從發(fā)送設(shè)備來看,由于文件在接收設(shè)備方并不是連續(xù)存儲的,而是分散為各個數(shù)據(jù)塊進行存儲,所以發(fā)送設(shè)備在發(fā)送文件之前,需要計算待存儲文件的全部數(shù)據(jù)塊的哈希值并將其傳送給接收設(shè)備,才能使接收設(shè)備判斷得出都有哪些數(shù)據(jù)塊存在重復(fù)的結(jié)果,而這對于發(fā)送設(shè)備來講,就意味著那些不重復(fù)的數(shù)據(jù)塊的哈希值也需要發(fā)送給接收設(shè)備,這無形中也會降低發(fā)送設(shè)備向接收設(shè)備發(fā)送文件的效率。為此,非常需要一種改進的文件存儲方法和設(shè)備,以及一種改進的文件發(fā)送方法和設(shè)備,以解決現(xiàn)有技術(shù)的文件存儲方法導(dǎo)致的接收設(shè)備的處理資源和性能開銷較大這一技術(shù)問題。進一步地,在文件存儲至接收設(shè)備之后,還能提高接收設(shè)備端的文件查詢效率。進一步地,還能提高發(fā)送設(shè)備發(fā)送文件的效率。在本上下文中,本發(fā)明的實施方式期望提供一種文件存儲方法和設(shè)備,以及一種文件發(fā)送方法和設(shè)備。在本發(fā)明實施方式的第一方面中,提供了一種文件存儲方法,例如可以包括:響應(yīng)于接收發(fā)送設(shè)備發(fā)送的、針對待存儲文件的數(shù)據(jù)塊計算的哈希值列表,判斷所述待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配;如果不匹配,則通知所述發(fā)送設(shè)備從所述待存儲文件中與第一個不匹配的哈希值對應(yīng)的數(shù)據(jù)塊開始發(fā)送所述待存儲文件的內(nèi)容,直至所述待存儲文件的內(nèi)容結(jié)束,并根據(jù)接收到的數(shù)據(jù)塊來存儲所述待存儲文件。在本發(fā)明的一個實施方式中,其中,所述待存儲文件中的數(shù)據(jù)塊按照文件內(nèi)容從前到后的順序進行排序,且所述待存儲文件中的數(shù)據(jù)塊按照預(yù)設(shè)的發(fā)送順序劃分為若干數(shù)據(jù)塊集合;所述判斷所述待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配,包括:按照所述各數(shù)據(jù)塊集合的發(fā)送順序以及數(shù)據(jù)塊集合內(nèi)各數(shù)據(jù)塊的排序,依次判斷所述各數(shù)據(jù)塊集合中各個數(shù)據(jù)塊的哈希值是否與所述已存儲文件的哈希值列表中的各個哈希值匹配;其中,所述已存儲文件的哈希值列表中各個哈希值的排列順序與所述待存儲文件的各數(shù)據(jù)塊的排序相同。在本發(fā)明的另一實施方式中,其中,所述待存儲文件中的第一個數(shù)據(jù)塊集合中僅包括第一個數(shù)據(jù)塊;則所述依次判斷所述各數(shù)據(jù)塊集合中各個數(shù)據(jù)塊的哈希值是否與所述已存儲文件的哈希值列表中的各個哈希值匹配,包括:判斷所述待存儲文件的第一個數(shù)據(jù)塊的哈希值是否與所述已存儲文 件的哈希值列表中的第一個哈希值匹配,如果是,則針對發(fā)送設(shè)備繼續(xù)發(fā)送的其他數(shù)據(jù)塊集合,依次判斷所述其他數(shù)據(jù)塊集合中各個數(shù)據(jù)塊的哈希值是否與對應(yīng)的所述已存儲文件的哈希值列表中的其他哈希值匹配。在本發(fā)明的另一實施方式中,其中,如果所述待存儲文件的第一個數(shù)據(jù)塊的哈希值與所述已存儲文件的哈希值列表中的第一個哈希值不匹配,則所述根據(jù)接收到的數(shù)據(jù)塊來存儲所述待存儲文件,包括:將所述接收到的數(shù)據(jù)塊確定為所述待存儲文件的全部內(nèi)容;存儲所述待存儲文件。在本發(fā)明的再一實施方式中,其中,所述已存儲文件的文件標(biāo)識、存儲路徑和哈希值列表保存在元數(shù)據(jù)索引表中,則所述方法例如還可以包括:將所述待存儲文件的文件標(biāo)識、存儲路徑和哈希值列表對應(yīng)保存至所述元數(shù)據(jù)索引表中。在本發(fā)明的另一實施方式中,其中,所述待存儲文件的哈希值列表包括針對所述待存儲文件的部分或全部數(shù)據(jù)塊計算的哈希值;如果所述待存儲文件的所述哈希值列表包括針對所述待存儲文件的部分數(shù)據(jù)塊計算的哈希值,且所述待存儲文件的所述哈希值列表與所述已存儲文件的哈希值列表匹配,例如還可以包括:通知所述發(fā)送設(shè)備繼續(xù)發(fā)送針對所述待存儲文件的剩余部分或剩余全部數(shù)據(jù)塊計算的哈希值列表。在本發(fā)明的又一個實施方式中,其中,所述根據(jù)接收到的數(shù)據(jù)塊來存儲所述待存儲文件,包括:將所述接收到的數(shù)據(jù)塊確定為第一文件內(nèi)容,并和第二文件內(nèi)容組合為所述待存儲文件,其中,所述第二文件內(nèi)容拷貝自所述已存儲文件中與所述待存儲文件中匹配的文件內(nèi)容;存儲所述待存儲文件。在本發(fā)明的又一個實施方式中,其中,所述待存儲文件的哈希值列表包括針對所述待存儲文件的部分或全部數(shù)據(jù)塊計算的哈希值;如果所述待存儲文件的所述哈希值列表包括針對所述待存儲文件的全部數(shù)據(jù)塊計算的哈希值,且所述待存儲文件的哈希值列表和已存儲文件的哈希值列表匹配,例如還可以包括:將所述已存儲文件的存儲路徑返回至所述發(fā)送設(shè)備。在本發(fā)明的再一個實施方式中,其中,所述已存儲文件的文件標(biāo)識、存儲路徑和哈希值列表保存在元數(shù)據(jù)索引表中。在本發(fā)明的再一個實施方式中,所述元數(shù)據(jù)索引表還包括已存儲文件的引用計數(shù),則將所述已存儲文件的存儲路徑返回至發(fā)送設(shè)備之后,還包括:將所述已存儲文件對應(yīng)的引用計數(shù)增加一。在本發(fā)明實施方式的第二方面中,提供了一種文件發(fā)送方法,包括:以數(shù)據(jù)塊為單位計算并發(fā)送待存儲文件的哈希值列表至接收設(shè)備,以便所述接收設(shè)備判斷所述待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配;響應(yīng)于從所述接收設(shè)備接收判斷結(jié)果為不匹配的通知,從所述待存儲文件中與第一個不匹配的哈希值對應(yīng)的數(shù)據(jù)塊開始向所述接收設(shè)備發(fā)送所述待存儲文件的內(nèi)容,直至所述待存儲文件的內(nèi)容結(jié)束。在本發(fā)明的一個實施方式中,其中,所述待存儲文件按照預(yù)設(shè)的分塊方式劃分為若干數(shù)據(jù)塊,所述若干數(shù)據(jù)塊按照文件內(nèi)容從前到后的順序進行排序,且所述若干數(shù)據(jù)塊按照預(yù)設(shè)的發(fā)送順序劃分為若干數(shù)據(jù)塊集合;所述以數(shù)據(jù)塊為單位計算并發(fā)送待存儲文件的哈希值列表至接收設(shè)備,包括:計算第一個數(shù)據(jù)塊集合的哈希值列表并發(fā)送至接收設(shè)備;計算第二個數(shù)據(jù)塊集合的哈希值列表,并響應(yīng)于接收設(shè)備在所述第一個數(shù)據(jù)塊集合的哈希值列表與已存儲文件的哈希值列表匹配的情況下返回的通知,繼續(xù)發(fā)送第二個數(shù)據(jù)塊集合的哈希值列表,直至在所述接收設(shè)備的判斷結(jié)果為不匹配的情況下接收到接收設(shè)備發(fā)送的通知,或者,所述待存儲文件匹 配完畢。在本發(fā)明的再一個實施方式中,在所述接收設(shè)備的判斷結(jié)果為匹配的情況下,例如還可以包括:接收所述接收設(shè)備返回的所述已存儲文件的存儲路徑。在本發(fā)明實施方式的第三方面中,提供了一種文件存儲設(shè)備,例如可以包括:判斷模塊,配置用于響應(yīng)于接收發(fā)送設(shè)備發(fā)送的、針對待存儲文件的數(shù)據(jù)塊計算的哈希值列表,判斷所述待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配;通知模塊,配置用于在所述判斷模塊的結(jié)果為不匹配的情況下,通知所述發(fā)送設(shè)備從所述待存儲文件中與第一個不匹配的哈希值對應(yīng)的數(shù)據(jù)塊開始發(fā)送所述待存儲文件的內(nèi)容,直至所述待存儲文件的內(nèi)容結(jié)束;存儲模塊,配置用于根據(jù)接收到的數(shù)據(jù)塊來存儲所述待存儲文件。在本發(fā)明的另一實施方式中,其中,所述待存儲文件中的數(shù)據(jù)塊按照文件內(nèi)容從前到后的順序進行排序,且所述待存儲文件中的數(shù)據(jù)塊按照預(yù)設(shè)的發(fā)送順序劃分為若干數(shù)據(jù)塊集合;所述判斷模塊,包括:獲取子模塊,配置用于獲取所述各數(shù)據(jù)塊集合的發(fā)送順序以及數(shù)據(jù)塊集合內(nèi)各數(shù)據(jù)塊的排序;第一判斷子模塊,配置用于按照所述各數(shù)據(jù)塊集合的發(fā)送順序以及數(shù)據(jù)塊集合內(nèi)各數(shù)據(jù)塊的排序,依次判斷所述各數(shù)據(jù)塊集合中各個數(shù)據(jù)塊的哈希值是否與所述已存儲文件的哈希值列表中的各個哈希值匹配;其中,所述已存儲文件的哈希值列表中各個哈希值的排列順序與所述待存儲文件的各數(shù)據(jù)塊的排序相同。在本發(fā)明的另一實施方式中,其中,所述待存儲文件中的第一個數(shù)據(jù)塊集合中僅包括第一個數(shù)據(jù)塊;則所述第一判斷子模塊,包括:第二判斷子模塊,配置用于判斷所述待存儲文件的第一個數(shù)據(jù)塊的哈希值是否與所述已存儲文件的哈希值列表中的第一個哈希值匹配;第三判斷子模塊,配置用于在所述第二判斷子模塊的結(jié)果為是的情況下,針對發(fā)送設(shè)備繼續(xù)發(fā)送的其他數(shù)據(jù)塊集合,依次判斷所述其他數(shù)據(jù)塊集合中各個數(shù)據(jù)塊的哈希值是否與對應(yīng)的所述已存儲文件的哈希值列表中的其他哈希值匹配。在本發(fā)明的另一個實施方式中,其中,如果所述待存儲文件的第一個數(shù)據(jù)塊的哈希值與所述已存儲文件的哈希值列表中的第一個哈希值不匹配,則所述存儲模塊,包括:第一確定子模塊,配置用于將所述接收到的數(shù)據(jù)塊確定為所述待存儲文件的全部內(nèi)容;第一存儲模塊,配置用于存儲所述待存儲文件。在本發(fā)明的再一個實施方式中,其中,所述已存儲文件的文件標(biāo)識、存儲路徑和哈希值列表保存在元數(shù)據(jù)索引表中,則所述存儲模塊,則所述存儲模塊例如還可以包括:保存子模塊,用于將所述待存儲文件的文件標(biāo)識、存儲路徑和哈希值列表對應(yīng)保存至所述元數(shù)據(jù)索引表中。在本發(fā)明的另一實施方式中,其中,所述待存儲文件的哈希值列表包括針對所述待存儲文件的部分或全部數(shù)據(jù)塊計算的哈希值;如果所述待存儲文件的所述哈希值列表包括針對所述待存儲文件的部分數(shù)據(jù)塊計算的哈希值,且所述待存儲文件的所述哈希值列表與所述已存儲文件的哈希值列表匹配,例如還可以包括:通知模塊,配置用于通知所述發(fā)送設(shè)備繼續(xù)發(fā)送針對所述待存儲文件的剩余部分或剩余全部數(shù)據(jù)塊計算的哈希值列表。在本發(fā)明的另一實施方式中,其中,所述存儲模塊,包括:第二確定子模塊,配置用于將所述接收到的數(shù)據(jù)塊確定為第一文件內(nèi)容,并和第二文件內(nèi)容組合為所述待存儲文件,其中,所述第二文件 內(nèi)容拷貝自所述已存儲文件中與所述待存儲文件中匹配的文件內(nèi)容;第二存儲子模塊,配置用于存儲所述待存儲文件。在本發(fā)明的另一實施方式中,其中,所述待存儲文件的哈希值列表包括針對所述待存儲文件的部分或全部數(shù)據(jù)塊計算的哈希值;如果所述待存儲文件的所述哈希值列表包括針對所述待存儲文件的全部數(shù)據(jù)塊計算的哈希值,且所述待存儲文件的哈希值列表和已存儲文件的哈希值列表匹配,例如還可以包括:返回模塊,配置用于將所述已存儲文件的存儲路徑返回至所述發(fā)送設(shè)備。在本發(fā)明的另一實施方式中,所述已存儲文件的文件標(biāo)識、存儲路徑和哈希值列表保存在元數(shù)據(jù)索引表中,所述元數(shù)據(jù)索引表還包括已存儲文件的引用計數(shù),還包括:增加模塊,配置用于將所述已存儲文件對應(yīng)的引用計數(shù)增加一。在本發(fā)明實施方式的第四方面中,提供了一種文件發(fā)送設(shè)備,包括:預(yù)處理模塊,配置用于以數(shù)據(jù)塊為單位計算并發(fā)送待存儲文件的哈希值列表至接收設(shè)備,以便所述接收設(shè)備判斷所述待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配;發(fā)送模塊,配置用于響應(yīng)于從所述接收設(shè)備接收判斷結(jié)果為不匹配的通知,從所述待存儲文件中與第一個不匹配的哈希值對應(yīng)的數(shù)據(jù)塊開始向所述接收設(shè)備發(fā)送所述待存儲文件的內(nèi)容,直至所述待存儲文件的內(nèi)容結(jié)束。在本發(fā)明的一實施方式中,其中,所述待存儲文件按照預(yù)設(shè)的分塊方式劃分為若干數(shù)據(jù)塊,所述若干數(shù)據(jù)塊按照文件內(nèi)容從前到后的順序進行排序,且所述若干數(shù)據(jù)塊按照預(yù)設(shè)的發(fā)送順序劃分為若干數(shù)據(jù)塊集合;所述預(yù)處理模塊,包括:第一計算子模塊,配置用于計算第一個數(shù)據(jù)塊集合的哈希值列表并發(fā)送至接收設(shè)備;第二計算子模塊,配置用于計算第二個數(shù)據(jù)塊集合的哈希值列表;發(fā)送子模塊,配置用于在所述第二計算子模塊進行計算的同時,響應(yīng)于接收設(shè)備在所述第一個數(shù)據(jù)塊集合的哈希值列表與已存儲文件的哈希值列表匹配的情況下返回的通知,繼續(xù)發(fā)送第二個數(shù)據(jù)塊集合的哈希值列表,直至在所述接收設(shè)備的判斷結(jié)果為不匹配的情況下接收到接收設(shè)備發(fā)送的通知,或者,所述待存儲文件匹配完畢。在本發(fā)明的另一實施方式中,在所述接收設(shè)備的判斷結(jié)果為匹配的情況下,例如還可以包括:接收模塊,配置用于接收所述接收設(shè)備返回的所述已存儲文件的存儲路徑。在本實施方式中,在接收設(shè)備方采用文件級別的存儲方式,可以實現(xiàn)以較小的處理資源和性能維護文件索引,從而降低接收設(shè)備在查詢一個文件時的復(fù)雜度,以提高查詢效率。進一步地,因為采用文件級別的存儲方式,會使一個文件的多個數(shù)據(jù)塊實現(xiàn)連續(xù)存儲,這就降低了接收設(shè)備在讀取文件的時候的磁盤輸入輸出(10, Input/Output)代價,從而可以提升接收設(shè)備對文件的讀取效率,同時也不會占用過多的接收設(shè)備的磁盤IO資源。同時對于發(fā)送設(shè)備來講,其待存儲文件如果沒有數(shù)據(jù)塊與已存儲文件重復(fù),也不需要全部計算待存儲文件的哈希值,而只需要計算第一個數(shù)據(jù)塊的哈希值即可,從而可以降低發(fā)送設(shè)備計算哈希值的開銷,也能夠縮短發(fā)送設(shè)備向接收設(shè)備發(fā)送待存儲文件的時間,從而改善用戶發(fā)送待存儲文件的用戶體驗。進一步地,對于發(fā)送設(shè)備來講,其計算數(shù)據(jù)塊的哈希值和上傳數(shù)據(jù)塊的哈希值也可以并行進行,又進一 步提升上傳效率,改善用戶通過發(fā)送設(shè)備與接收設(shè)備的交互體驗。并且,對于待存儲文件和已存儲文件部分匹配或者全部匹配的情況下,發(fā)送設(shè)備只需要發(fā)送部分待存儲文件并通過已存儲文件中的匹配部分實現(xiàn)待存儲文件的存儲,甚至可以在全部匹配的情況下不發(fā)送待存儲文件,這樣就能降低接收設(shè)備與發(fā)送設(shè)備之間的網(wǎng)絡(luò)流量。進一步地,在接收設(shè)備方,相同的已存儲文件可以只存儲一份,其存儲的次數(shù)可以通過引用計數(shù)的字段進行標(biāo)示,這樣也能降低接收設(shè)備方的存儲開銷,從而保證接收設(shè)備的處理效率。


通過參考附圖閱讀下文的詳細描述,本發(fā)明示例性實施方式的上述以及其他目的、特征和優(yōu)點將變得易于理解。在附圖中,以示例性而非限制性的方式示出了本發(fā)明的若干實施方式,其中:圖1示意性地示出了適于實現(xiàn)本發(fā)明實施方式的示例性計算系統(tǒng)100的框圖;圖2示意性地示出了本發(fā)明的實施方式的一個示例性應(yīng)用場景的框架示意圖;圖3示意性地示出了根據(jù)本發(fā)明文件存儲方法一實施方式的方法流程圖;圖4示意性地示出了根據(jù)本發(fā)明文件存儲方法又一實施方式的方法流程圖;圖5示意性地示出了根據(jù)本發(fā)明文件發(fā)送方法一實施方式的方法流程圖;圖6示意性地示出了根據(jù)本發(fā)明文件發(fā)送方法一實施方式中一步驟的方法流程圖7示意性地示出了根據(jù)本發(fā)明文件發(fā)送方法又一實施方式的方法流程圖;圖8示意性地示出了本發(fā)明一實施方式的文件存儲設(shè)備(例如,服務(wù)器)的結(jié)構(gòu)框架圖;圖9示意性地示出了本發(fā)明一實施方式的文件存儲設(shè)備中判斷模塊801的結(jié)構(gòu)框架圖;圖10示意性地示出了本發(fā)明一實施方式的文件存儲設(shè)備中第一判斷子模塊902的結(jié)構(gòu)框架圖;圖11示意性地示出了本發(fā)明一實施方式的文件存儲設(shè)備中存儲模塊803的結(jié)構(gòu)框架圖;圖12示意性地示出了本發(fā)明又一實施方式的文件存儲設(shè)備(例如,服務(wù)器)的結(jié)構(gòu)框架圖;圖13示意性地示出了本發(fā)明一實施方式的文件存儲設(shè)備中存儲模塊803的結(jié)構(gòu)框架圖;圖14示意性地示出了本發(fā)明一實施方式的文件發(fā)送設(shè)備(例如,客戶端)的結(jié)構(gòu)框架圖;圖15示意性地示出了本發(fā)明又一實施方式的文件發(fā)送設(shè)備(例如,客戶端)的結(jié)構(gòu)框架圖。在附圖中,相同或?qū)?yīng)的標(biāo)號表不相同或?qū)?yīng)的部分。
具體實施例方式下面將參考若干示例性實施方式來描述本發(fā)明的原理和精神。應(yīng)當(dāng)理解,給出這些實施方式僅僅是為了使本領(lǐng)域技術(shù)人員能夠更好地理解進而實現(xiàn)本發(fā)明,而并非以任何方式限制本發(fā)明的范圍。相反,提供這些實施方式是為了使本公開更加透徹和完整,并且能夠?qū)⒈竟_的范圍完整地傳達給本領(lǐng)域的技術(shù)人員。圖1示出了適于實現(xiàn)本發(fā)明實施方式的示例性計算系統(tǒng)100的框圖。如圖1所示,計算系統(tǒng)100可以包括:中央處理單元(CPU) 101、隨機存取存儲器(RAM) 102、只讀存儲器(ROM) 103、系統(tǒng)總線104、硬盤控制器105、鍵盤控制器106、串行接口控制器107、并行接口控制器108、顯示控制器109、硬盤110、鍵盤111、串行外部設(shè)備112、并行外部設(shè)備113和顯示器114。這些設(shè)備中,與系統(tǒng)總線104耦合的有CPU101、RAM102、R0M103、硬盤控制器105、鍵盤控制器106、串行控制器107、并行控制器108和顯示控制器109。硬盤110與硬盤控制器105耦合,鍵盤111與鍵盤控制器106耦合,串行外部設(shè)備112與串行接口控制器107耦合,并行外部設(shè)備113與并行接口控制器108耦合,以及顯示器114與顯示控制器109耦合。應(yīng)當(dāng)理解,圖1所述的結(jié)構(gòu)框圖僅僅是為了示例的目的,而不是對本發(fā)明范圍的限制。在某些情況下,可以根據(jù)具體情況增加或減少某些設(shè)備。本領(lǐng)域技術(shù)技術(shù)人員知道,本發(fā)明的實施方式可以實現(xiàn)為一種系統(tǒng)、方法或計算機程序產(chǎn)品。因此,本公開可以具體實現(xiàn)為以下形式,即:完全的硬件、完全的軟件(包括固件、駐留軟件、微代碼等),或者硬件和軟件結(jié)合的形式,本文一般稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實施例中,本發(fā)明還可以實現(xiàn)為在一個或多個計算機可讀介質(zhì)中的計算機程序產(chǎn)品的形式,該 計算機可讀介質(zhì)中包含計算機可讀的程序代碼。
可以采用一個或多個計算機可讀的介質(zhì)的任意組合。計算機可讀介質(zhì)可以是計算機可讀信號介質(zhì)或者計算機可讀存儲介質(zhì)。計算機可讀存儲介質(zhì)例如可以是,但不限于,電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機可讀存儲介質(zhì)的更具體的例子(非窮舉示例)例如可以包括:具有一個或多個導(dǎo)線的電連接、便攜式計算機磁盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計算機可讀存儲介質(zhì)可以是任何包含或存儲程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。計算機可讀的信號介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了計算機可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括但不限于電磁信號、光信號或上述的任意合適的組合。計算機可讀的信號介質(zhì)還可以是計算機可讀存儲介質(zhì)以外的任何計算機可讀介質(zhì),該計算機可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。計算機可讀介 質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括但不限于無線、電線、光纜、RF等等,或者上述的任意合適的組合。可以以一種或多種程序設(shè)計語言或其組合來編寫用于執(zhí)行本發(fā)明操作的計算機程序代碼,所述程序設(shè)計語言包括面向?qū)ο蟮某绦蛟O(shè)計語言-諸如Java、Smalltalk、C++,還包括常規(guī)的過程式程序設(shè)計語言-諸如“C”語言或類似的程序設(shè)計語言。程序代碼可以完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機上部分在遠程計算機上執(zhí)行、或者完全在遠程計算機或服務(wù)器上執(zhí)行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網(wǎng)絡(luò)(包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN))連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。下面將參照本發(fā)明實施方式的方法的流程圖和設(shè)備(或系統(tǒng))的框圖描述本發(fā)明的實施方式。應(yīng)當(dāng)理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,這些計算機程序指令通過計算機或其它可編程數(shù)據(jù)處理裝置執(zhí)行,產(chǎn)生了實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置。也可以把這些計算機程序指令存儲在能使得計算機或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計算機可讀介質(zhì)中,這樣,存儲在計算機可讀介質(zhì)中的指令就產(chǎn)生出一個包括實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置的產(chǎn)品。也可以把計算機程序指令加載到計算機、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計算機、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計算機實現(xiàn)的過程,從而使得在計算機或其它可編程裝置上執(zhí)行的指令能夠提供實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。根據(jù)本發(fā)明的實施方式,提出了一種文件存儲方法和設(shè)備,以及一種文件發(fā)送方法和設(shè)備。在本文中,需要理解的是,附圖中的任何元素數(shù)量均用于示例而非限制,以及任何命名都僅用于區(qū)分,而不具有任何限制含義。下面參考本發(fā)明的若干代表性實施方式,詳細闡釋本發(fā)明的原理和精神。發(fā)明概沭本發(fā)明人發(fā)現(xiàn),因為現(xiàn)有技術(shù)中采用在接收設(shè)備方進行數(shù)據(jù)塊級別的存儲方式,進而導(dǎo)致在接收設(shè)備方實現(xiàn)海量數(shù)據(jù)塊對應(yīng)的索引維護的代價非常大,使得接收設(shè)備對文件進行查詢的效率較低,進一步地,也會使接收設(shè)備需要占用較多的磁盤IO資源來實現(xiàn)文件的讀取。而對于發(fā)送設(shè)備來說,也需要在發(fā)送文件之前,計算待存儲文件的全部數(shù)據(jù)塊的哈希值并將其傳送給接收設(shè)備,而這就意味著那些不重復(fù)的數(shù)據(jù)塊的哈希值也需要發(fā)送給接收設(shè)備,這無形中也會降低發(fā)送設(shè)備向接收設(shè)備發(fā)送文件的效率。而如果在接收設(shè)備方能夠采用文件級別的存儲,即是以文件為單位對不同的數(shù)據(jù)進行區(qū)分,而文件是包括多個數(shù)據(jù)塊的,對于接收設(shè)備方只需要針對不同的文件維護不同的索引即可,從而與維護數(shù)據(jù)塊索引相比,可以大大降低維護代價,也能夠提高接收設(shè)備查詢文件的效率。并且,因為文件之間的某個或者某些數(shù)據(jù)塊允許重復(fù),所以對于發(fā)送設(shè)備來說,在發(fā)送文件的時候只需要先發(fā)送部分數(shù)據(jù)塊的哈希值,以便發(fā)送設(shè)備無需計算并發(fā)送不重復(fù)的數(shù)據(jù)塊對應(yīng)的哈希值,即可以只向接收設(shè)備發(fā)送不重復(fù)的那部分數(shù)據(jù)塊,這樣也能提升發(fā)送設(shè)備向接收設(shè)備發(fā)送文件的效率。進一步地,在接收設(shè)備方實現(xiàn)文件級別的存儲方式也會使文件中的多個數(shù)據(jù)塊都能實現(xiàn)連續(xù)存儲,相應(yīng)地,接收設(shè)備在查詢同一個文件的時候,就可以在連續(xù)的物理空間內(nèi)實現(xiàn),就減少了接收設(shè)備在讀取文件的時候的磁盤IO代價,使得文件查找的復(fù)雜度降低,因此在能夠提升文件查詢效率的同時,也不會占用較多的接收設(shè)備的磁盤IO資源。在介紹了本發(fā)明的基本原理之后,下面具體介紹本發(fā)明的各種非限制性實施方式。應(yīng)用場景總覽·首先參考圖2,圖2是本發(fā)明的實施方式的一個示例性應(yīng)用場景的框架示意圖。例如,接收設(shè)備為服務(wù)器201,而實現(xiàn)文件發(fā)送的發(fā)送設(shè)備為客戶端202,其中,用戶通過客戶端202與服務(wù)器201進行交互。本領(lǐng)域技術(shù)人員可以理解,圖2所示的框架示意圖僅是本發(fā)明的實施方式可以在其中得以實現(xiàn)的一個示例。本發(fā)明實施方式的適用范圍不受到該框架任何方面的限制。需要注意的是,此處的客戶端202可以是現(xiàn)有的、正在研發(fā)的或?qū)硌邪l(fā)的、能夠通過任何形式的有線或無線連接(例如,W1-F1、LAN、WAN、因特網(wǎng)等)與服務(wù)器201交互的任何客戶端,包括但不限于:現(xiàn)有的、正在研發(fā)的或?qū)硌邪l(fā)的、臺式計算機、膝上型計算機、移動終端(包括智能手機、非智能手機、各種平板電腦)等。還需要注意的是,此處的服務(wù)器201僅是現(xiàn)有的、正在研發(fā)的或?qū)硌邪l(fā)的、能夠向用戶提供郵件服務(wù)的設(shè)備的一個示例。本發(fā)明的實施方式在此方面不受任何限制。在本發(fā)明的一個實施方式中,服務(wù)器201可以響應(yīng)于接收客戶端202發(fā)送的、針對待存儲文件的數(shù)據(jù)塊計算的哈希值列表,判斷所述待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配,如果不匹配,則通知所述發(fā)送設(shè)備客戶端202從所述待存儲文件中與第一個不匹配的哈希值對應(yīng)的數(shù)據(jù)塊開始發(fā)送所述待存儲文件的內(nèi)容,直至所述待存儲文件的內(nèi)容結(jié)束,并根據(jù)接收到的數(shù)據(jù)塊來存儲所述待存儲文件。
示例性方法下面結(jié)合圖2的應(yīng)用場景,參考圖3來描述根據(jù)本發(fā)明示例性實施方式的文件存儲方法。需要注意的是,上述應(yīng)用場景僅是為了便于理解本發(fā)明的精神和原理而示出,本發(fā)明的實施方式在此方面不受任何限制。相反,本發(fā)明的實施方式可以應(yīng)用于適用的任何場景參考圖3所示,為本發(fā)明公開的文件存儲方法一實施方式的流程圖,本實施方式具體例如可以包括:步驟301:響應(yīng)于接收發(fā)送設(shè)備發(fā)送的、針對待存儲文件的數(shù)據(jù)塊計算的哈希值列表,判斷所述待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配,如果不匹配,進入步驟302。在本實施方式中,所述文件存儲方法可以應(yīng)用于接收設(shè)備方,例如,可以是客戶端向服務(wù)器上傳文件的服務(wù)器,也可以是兩個服務(wù)器之間進行文件共享時接收文件的服務(wù)器,還可以是兩個客戶端進行文件發(fā)送時接收文件的客戶端,等等。對于發(fā)送設(shè)備來講,在需要發(fā)送待存儲文件到接收設(shè)備方進行存儲的時候,可以先按照特定的方式將待存儲文件分塊為若干數(shù)據(jù)塊,并將這若干數(shù)據(jù)塊按照文件內(nèi)容從前到后的順序進行排序,并且再將所述待存儲文件中的數(shù)據(jù)塊按照預(yù)設(shè)的發(fā)送順序劃分為若干數(shù)據(jù)塊集合 。其中,對于待存儲文件的數(shù)據(jù)塊劃分的特定方式,可以有很多種,例如可以按照固定大小的劃分方式,即是劃分后的若干數(shù)據(jù)塊具有同樣的大小;還可以根據(jù)文件大小按照比例來劃分,即是將文件的1% (當(dāng)然也可以是其他的比例)的大小作為一個數(shù)據(jù)塊;還可以按照所需要劃分數(shù)據(jù)塊的個數(shù)的劃分方式,例如,將某個文件劃分為100個數(shù)據(jù)塊,等等。采用何種劃分方式不影響本發(fā)明實施方式的實現(xiàn),本發(fā)明因此不對劃分的特定方式進行任何限定。在本發(fā)明的實施方式中,接收設(shè)備方判斷所述待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配,具體可以按照發(fā)送設(shè)備方對各數(shù)據(jù)塊集合的發(fā)送順序以及數(shù)據(jù)塊集合內(nèi)各數(shù)據(jù)塊的排序,依次來判斷所述各數(shù)據(jù)塊集合中各個數(shù)據(jù)塊的哈希值是否與所述已存儲文件的哈希值列表中的各個哈希值匹配。例如,某個待存儲文件存在數(shù)據(jù)塊集
合SI = {數(shù)據(jù)塊nl、數(shù)據(jù)塊n2},S2 = {數(shù)據(jù)塊n3、數(shù)據(jù)塊n4},......S5 = {數(shù)據(jù)塊n9,
數(shù)據(jù)塊nlO},可見該待存儲文件共有10個數(shù)據(jù)塊,每兩個數(shù)據(jù)塊屬于一個數(shù)據(jù)塊集合,而
這五個數(shù)據(jù)塊集合的發(fā)送順序依次為:S1、S2.......S5,那么接收設(shè)備方就可以現(xiàn)對數(shù)據(jù)
塊集合SI中的兩個數(shù)據(jù)塊nl和n2的哈希值進行匹配,而在數(shù)據(jù)塊集合SI的內(nèi)部,則可以按照數(shù)據(jù)塊的排序,先匹配數(shù)據(jù)塊nl的哈希值,再匹配數(shù)據(jù)塊n2的哈希值。其中,需要說明的是,因為接收設(shè)備方在對哈希值進行匹配的時候,是將發(fā)送設(shè)備方發(fā)送的待存儲文件的哈希值列表與自身已存儲文件的哈希值列表中的各個哈希值進行匹配,那么就需要接收設(shè)備方的已存儲文件中的各個哈希值的排列順序與所述待存儲文件的各數(shù)據(jù)塊的排序相同。在本實施方式中,如果接收設(shè)備方判斷得到待存儲文件的某個或者某些數(shù)據(jù)塊集合的哈希值列表與已存儲文件的哈希值列表是匹配的,那就說明這些數(shù)據(jù)塊在接收設(shè)備方已經(jīng)存儲了,因此,這些匹配的哈希值對應(yīng)的數(shù)據(jù)塊的內(nèi)容就不需要后續(xù)由發(fā)送設(shè)備方進行發(fā)送。在本發(fā)明的一個優(yōu)選實施方式中,接收設(shè)備方發(fā)送的待存儲文件中的第一個數(shù)據(jù)塊集合中可以僅包括第一個數(shù)據(jù)塊,則所述依次判斷所述各數(shù)據(jù)塊集合中各個數(shù)據(jù)塊的哈希值是否與所述已存儲文件的哈希值列表中的各個哈希值匹配的實現(xiàn),可以為:先判斷待存儲文件的第一個數(shù)據(jù)塊的哈希值是否與已存儲文件的哈希值列表中的第一個哈希值匹配,如果是,說明待存儲文件的第一個數(shù)據(jù)塊已經(jīng)在已存儲文件中進行存儲,接收設(shè)備方就可以通知發(fā)送設(shè)備方繼續(xù)發(fā)送數(shù)據(jù)塊集合的哈希值列表,接收設(shè)備方同時也可以針對發(fā)送設(shè)備繼續(xù)發(fā)送的其他數(shù)據(jù)塊集合,再按照發(fā)送設(shè)備方對各數(shù)據(jù)塊集合的發(fā)送順序以及數(shù)據(jù)塊集合內(nèi)各數(shù)據(jù)決的排序,依次來判斷所述其他數(shù)據(jù)塊集合中各個數(shù)據(jù)塊的哈希值是否與對應(yīng)的所述已存儲文件的哈希值列表中的其他哈希值匹配。而對于第一個數(shù)據(jù)塊的哈希值就不匹配的情況,說明發(fā)送設(shè)備方當(dāng)前發(fā)送的待存儲文件與接收設(shè)備方的每一個文件都完全不相同,在這種情況下,發(fā)送設(shè)備方可以直接通知接收設(shè)備方將待存儲文件的所有數(shù)據(jù)塊都發(fā)送給自己進行存儲。步驟302:通知所述發(fā)送設(shè)備從所述待存儲文件中與第一個不匹配的哈希值對應(yīng)的數(shù)據(jù)塊開始發(fā)送所述待存儲文件的內(nèi)容,直至所述待存儲文件的內(nèi)容結(jié)束,并根據(jù)接收到的數(shù)據(jù)塊來存儲所述待存儲文件。在本發(fā)明的實施方式中,如果接收設(shè)備方判斷得到待存儲文件的哈希值列表與自身存儲的已存儲文件的哈希值列表不匹配的情況下,說明待存儲文件中有部分或者全部的數(shù)據(jù)塊與接收設(shè)備方的已存儲文件的數(shù)據(jù)塊內(nèi)容不重復(fù),那么接收設(shè)備方就可以通知發(fā)送設(shè)備從待存儲文件中與第一個不匹配的哈希值對應(yīng)的數(shù)據(jù)塊開始再發(fā)送待存儲文件的內(nèi)容,直至接收設(shè)備方將待存儲文件的內(nèi)容發(fā)送結(jié)束,再由接收設(shè)備方根據(jù)接收到的數(shù)據(jù)塊來存儲所述待存儲文件。在本實施方式中,因為有可能出現(xiàn)第一個數(shù)據(jù)塊的哈希值就不匹配的情況,此種情況下,接收設(shè)備方就可以將接收到的數(shù)據(jù)塊確定為待存儲文件的全部內(nèi)容并直接將其進行存儲。而如果存在部分數(shù)據(jù)塊的哈希值匹配而其他數(shù)據(jù)塊的哈希值不匹配的情況,說明發(fā)送設(shè)備方發(fā)送的那部分數(shù)據(jù)塊只是待存儲文件與已存儲文件中不重復(fù)的那部分數(shù)據(jù)塊,而重復(fù)的那部分數(shù)據(jù)塊就需要接收設(shè)備方從已存儲文件中獲取得到,并將重復(fù)的那部分數(shù)據(jù)塊與接收到的不重復(fù)的那部 分數(shù)據(jù)塊組合為待存儲文件,進而再將該待存儲文件進行存儲。在本實施方式中,因為接收設(shè)備方是以文件為單位進行存儲的,所以只需針對文件維護其索引即可,因此相比維護各個數(shù)據(jù)塊的索引的方式大大降低了維護索引的代價,從而降低接收設(shè)備在查詢一個文件時的復(fù)雜度,以提高查詢效率。而對于發(fā)送設(shè)備來說,其待存儲文件如果有部分數(shù)據(jù)塊與已存儲文件重復(fù),那么在實現(xiàn)時也不會將待存儲文件的全部數(shù)據(jù)塊的哈希值都進行計算并發(fā)送,當(dāng)接收設(shè)備方判斷有數(shù)據(jù)塊的哈希值不匹配的時候,就通知發(fā)送設(shè)備直接從所述待存儲文件中與第一個不匹配的哈希值對應(yīng)的數(shù)據(jù)塊開始發(fā)送所述待存儲文件的內(nèi)容,這樣既不需要發(fā)送設(shè)備發(fā)送待存儲文件的全部數(shù)據(jù)塊的哈希值,也不需要發(fā)送設(shè)備發(fā)送待存儲文件的全部數(shù)據(jù)塊,從而提高發(fā)送設(shè)備向接收設(shè)備發(fā)送文件的效率。進一步地,在本實施方式中,接收設(shè)備實現(xiàn)文件級別的存儲方式,也使一個文件中的多個數(shù)據(jù)塊可以實現(xiàn)連續(xù)存儲,相應(yīng)的,接收設(shè)備在查詢某個文件的時候,也就可以在連續(xù)的物理空間內(nèi)實現(xiàn),這就降低了接收設(shè)備在讀取文件的時候的磁盤輸入輸出(10,Input/Output)所耗費的代價,從而可以提升接收設(shè)備對文件的讀取效率,同時也不會占用過多的接收設(shè)備的磁盤IO資源。參考圖4所示,為本發(fā)明公開的文件存儲方法又一實施方式的流程圖,本實施方式具體例如可以包括:步驟401:響應(yīng)于接收發(fā)送設(shè)備發(fā)送的、針對待存儲文件的數(shù)據(jù)塊計算的哈希值列表,判斷所述待存儲文件的第一個數(shù)據(jù)塊的哈希值是否與所述已存儲文件的哈希值列表中的第一個哈希值匹配,如果否,則進入步驟402,如果是,則進入步驟404。在本實施方式 中,其中發(fā)送設(shè)備以客戶端,而接收設(shè)備以服務(wù)器為例,并且對于待存儲文件,假設(shè)共劃分為η個數(shù)據(jù)塊,其中η為大于I的整數(shù)。而每一個數(shù)據(jù)塊都對應(yīng)一個哈希值,例如數(shù)據(jù)塊I對應(yīng)的哈希值為hi,而數(shù)據(jù)塊2對應(yīng)的哈希值為h2,以此類推,數(shù)
據(jù)塊η對應(yīng)的哈希值為hn。那么,待存儲文件的完整哈希值列表為Hn = {hl,h2,......,
hn}。對于客戶端來講,因為其是以數(shù)據(jù)塊集合為順序發(fā)送哈希值列表的,所以假設(shè)當(dāng)前客戶端已經(jīng)完成發(fā)送的哈希值的最大編號為hi,其中,i應(yīng)當(dāng)小于或者等于η。為了實現(xiàn)待存儲文件的哈希值列表與已存儲文件的哈希值列表的匹配,在服務(wù)器端可以維護一個已存儲文件的元數(shù)據(jù)索引表,如表I所示。表權(quán)利要求
1.一種方法,包括: 響應(yīng)于接收發(fā)送設(shè)備發(fā)送的、針對待存儲文件的數(shù)據(jù)塊計算的哈希值列表,判斷所述待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配; 如果不匹配,則通知所述發(fā)送設(shè)備從所述待存儲文件中與第一個不匹配的哈希值對應(yīng)的數(shù)據(jù)塊開始發(fā)送所述待存儲文件的內(nèi)容,直至所述待存儲文件的內(nèi)容結(jié)束,并根據(jù)接收到的數(shù)據(jù)塊來存儲所述待存儲文件。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述待存儲文件中的數(shù)據(jù)塊按照文件內(nèi)容從前到后的順序進行排序,且所述待存儲文件中的數(shù)據(jù)塊按照預(yù)設(shè)的發(fā)送順序劃分為若干數(shù)據(jù)塊集合;所述判斷所述待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配,包括: 按照所述各數(shù)據(jù)塊集合的發(fā)送順序以及數(shù)據(jù)塊集合內(nèi)各數(shù)據(jù)塊的排序,依次判斷所述各數(shù)據(jù)塊集合中各個數(shù)據(jù)塊的哈希值是否與所述已存儲文件的哈希值列表中的各個哈希值匹配;其中,所述已存儲文件的哈希值列表中各個哈希值的排列順序與所述待存儲文件的各數(shù)據(jù)塊的排序相同。
3.根據(jù)權(quán)利要求2所述的方法,其中,所述待存儲文件中的第一個數(shù)據(jù)塊集合中僅包括第一個數(shù)據(jù)塊;則所述依次判斷所述各數(shù)據(jù)塊集合中各個數(shù)據(jù)塊的哈希值是否與所述已存儲文件的哈希值列表中的各個哈希值匹配,包括: 判斷所述待存儲文件的第一個數(shù)據(jù)塊的哈希值是否與所述已存儲文件的哈希值列表中的第一個哈希值匹配,如果是,則針對發(fā)送設(shè)備繼續(xù)發(fā)送的其他數(shù)據(jù)塊集合,依次判斷所述其他數(shù)據(jù)塊集合中各個數(shù)據(jù)塊的哈希值是否與對應(yīng)的所述已存儲文件的哈希值列表中的其他哈希值匹配。
4.根據(jù)權(quán)利要求3所述的方法,其中,如果所述待存儲文件的第一個數(shù)據(jù)塊的哈希值與所述已存儲文件的哈希值列·表中的第一個哈希值不匹配,則所述根據(jù)接收到的數(shù)據(jù)塊來存儲所述待存儲文件,包括: 將所述接收到的數(shù)據(jù)塊確定為所述待存儲文件的全部內(nèi)容; 存儲所述待存儲文件。
5.根據(jù)權(quán)利要求4所述的方法,其中,所述已存儲文件的文件標(biāo)識、存儲路徑和哈希值列表保存在元數(shù)據(jù)索引表中,還包括: 將所述待存儲文件的文件標(biāo)識、存儲路徑和哈希值列表對應(yīng)保存至所述元數(shù)據(jù)索引表中。
6.根據(jù)權(quán)利要求1 3所述的方法,其中,所述待存儲文件的哈希值列表包括針對所述待存儲文件的部分或全部數(shù)據(jù)塊計算的哈希值;如果所述待存儲文件的所述哈希值列表包括針對所述待存儲文件的部分數(shù)據(jù)塊計算的哈希值,且所述待存儲文件的所述哈希值列表與所述已存儲文件的哈希值列表匹配,還包括: 通知所述發(fā)送設(shè)備繼續(xù)發(fā)送針對所述待存儲文件的剩余部分或剩余全部數(shù)據(jù)塊計算的哈希值列表。
7.根據(jù)權(quán)利要求6所述的方法,其中,所述根據(jù)接收到的數(shù)據(jù)塊來存儲所述待存儲文件,包括: 將所述接收到的數(shù)據(jù)塊確定為第一文件內(nèi)容,并和第二文件內(nèi)容組合為所述待存儲文件,其中,所述第二文件內(nèi)容拷貝自所述已存儲文件中與所述待存儲文件中匹配的文件內(nèi)容; 存儲所述待存儲文件。
8.根據(jù)權(quán)利要求1 3所述的方法,其中,所述待存儲文件的哈希值列表包括針對所述待存儲文件的部分或全部數(shù)據(jù)塊計算的哈希值;如果所述待存儲文件的所述哈希值列表包括針對所述待存儲文件的全部數(shù)據(jù)塊計算的哈希值,且所述待存儲文件的哈希值列表和已存儲文件的哈希值列表匹配,還包括: 將所述已存儲文件的存儲路徑返回至所述發(fā)送設(shè)備。
9.根據(jù)權(quán)利要求8所述的方法,其中,所述已存儲文件的文件標(biāo)識、存儲路徑和哈希值列表保存在元數(shù)據(jù)索引表中。
10.根據(jù)權(quán)利要求9所述的方法,所述元數(shù)據(jù)索引表還包括已存儲文件的引用計數(shù),則將所述已存儲文件的存儲路徑返回至發(fā)送設(shè)備之后,還包括: 將所述已存儲文件對應(yīng)的引用計數(shù)增加一。
11.一種方法,包括: 以數(shù)據(jù)塊為單位計算并發(fā)送待存儲文件的哈希值列表至接收設(shè)備,以便所述接收設(shè)備判斷所述待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配; 響應(yīng)于從所述接收設(shè)備接收判斷結(jié)果為不匹配的通知,從所述待存儲文件中與第一個不匹配的哈希值對應(yīng)的數(shù)據(jù)塊開始向所述接收設(shè)備發(fā)送所述待存儲文件的內(nèi)容,直至所述待存儲文件的內(nèi)容結(jié)束。
12.根據(jù)權(quán)利要求11所述的方法,其中,所述待存儲文件按照預(yù)設(shè)的分塊方式劃分為若干數(shù)據(jù)塊,所述若干數(shù)據(jù)塊按照文件內(nèi)容從前到后的順序進行排序,且所述若干數(shù)據(jù)塊按照預(yù)設(shè)的發(fā)送順序劃分為若干數(shù)據(jù)塊集合;所述以數(shù)據(jù)塊為單位計算并發(fā)送待存儲文件的哈希值列表至接收設(shè)備,包括: 計算第一個數(shù)據(jù)塊集合的哈希值列表并發(fā)送至接收設(shè)備; 計算第二個數(shù)據(jù)塊集合的哈希值列表,并響應(yīng)于接收設(shè)備在所述第一個數(shù)據(jù)塊集合的哈希值列表與已存儲文件的哈希值列表匹配的情況下返回的通知,繼續(xù)發(fā)送第二個數(shù)據(jù)塊集合的哈希值列表,直至在所述接收設(shè)備的判斷結(jié)果為不匹配的情況下接收到接收設(shè)備發(fā)送的通知,或者,所述待存儲文件匹配完畢。
13.根據(jù)權(quán)利要求11所述的方法,在所述接收設(shè)備的判斷結(jié)果為匹配的情況下,還包括: 接收所述接收設(shè)備返回的所述已存儲文件的存儲路徑。
14.一種設(shè)備,包括: 判斷模塊,配置用于響應(yīng)于接收發(fā)送設(shè)備發(fā)送的、針對待存儲文件的數(shù)據(jù)塊計算的哈希值列表,判斷所述待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配; 通知模塊,配置用于在所述判斷模塊的結(jié)果為不匹配的情況下,通知所述發(fā)送設(shè)備從所述待存儲文件中與第一個不匹配的哈希值對應(yīng)的數(shù)據(jù)塊開始發(fā)送所述待存儲文件的內(nèi)容,直至所述待存儲文件的內(nèi)容結(jié)束; 存儲模塊,配置用于根據(jù)接收到的數(shù)據(jù)塊來存儲所述待存儲文件。
15.根據(jù)權(quán)利要求14所述的設(shè)備,其中,所述待存儲文件中的數(shù)據(jù)塊按照文件內(nèi)容從前到后的順序進行排序,且所述待存儲文件中的數(shù)據(jù)塊按照預(yù)設(shè)的發(fā)送順序劃分為若干數(shù)據(jù)塊集合;所述判斷模塊,包括: 獲取子模塊,配置用于獲取所述各數(shù)據(jù)塊集合的發(fā)送順序以及數(shù)據(jù)塊集合內(nèi)各數(shù)據(jù)塊的排序; 第一判斷子模塊,配置用于按照所述各數(shù)據(jù)塊集合的發(fā)送順序以及數(shù)據(jù)塊集合內(nèi)各數(shù)據(jù)塊的排序,依次判斷所述各數(shù)據(jù)塊集合中各個數(shù)據(jù)塊的哈希值是否與所述已存儲文件的哈希值列表中的各個哈希值匹配;其中,所述已存儲文件的哈希值列表中各個哈希值的排列順序與所述待存儲文件的各數(shù)據(jù)塊的排序相同。
16.根據(jù)權(quán)利要求15所述的設(shè)備,其中,所述待存儲文件中的第一個數(shù)據(jù)塊集合中僅包括第一個數(shù)據(jù)塊;則所述第一判斷子模塊,包括: 第二判斷子模塊,配置用于判斷所述待存儲文件的第一個數(shù)據(jù)塊的哈希值是否與所述已存儲文件的哈希值列表中的第一個哈希值匹配; 第三判斷子模塊,配置用于在所述第二判斷子模塊的結(jié)果為是的情況下,針對發(fā)送設(shè)備繼續(xù)發(fā)送的其他數(shù)據(jù)塊集合,依次判斷所述其他數(shù)據(jù)塊集合中各個數(shù)據(jù)塊的哈希值是否與對應(yīng)的所述已存儲文件的哈希值列表中的其他哈希值匹配。
17.根據(jù)權(quán)利要求16所述的設(shè)備,其中,如果所述待存儲文件的第一個數(shù)據(jù)塊的哈希值與所述已存儲文件的哈希值列表中的第一個哈希值不匹配,則所述存儲模塊,包括: 第一確定子模塊,配置用于將所述接收到的數(shù)據(jù)塊確定為所述待存儲文件的全部內(nèi)容; 第一存儲子模塊,配置用于存儲所述待存儲文件。
18.根據(jù)權(quán)利要求17所述的設(shè)備,其中,所述已存儲文件的文件標(biāo)識、存儲路徑和哈希值列表保存在元數(shù)據(jù)索引表中,則所述存儲模塊,還包括: 保存子模塊,用于將所述待存儲文件的文件標(biāo)識、存儲路徑和哈希值列表對應(yīng)保存至所述元數(shù)據(jù)索引表中。
19.根據(jù)權(quán)利要求14 16任一項所述的設(shè)備,其中,所述待存儲文件的哈希值列表包括針對所述待存儲文件的部分或全部數(shù)據(jù)塊計算的哈希值;如果所述待存儲文件的所述哈希值列表包括針對所述待存儲文件的部分數(shù)據(jù)塊計算的哈希值,且所述待存儲文件的所述哈希值列表與所述已存儲文件的哈希值列表匹配,還包括: 通知模塊,配置用于通知所述發(fā)送設(shè)備繼續(xù)發(fā)送針對所述待存儲文件的剩余部分或剩余全部數(shù)據(jù)塊計算的哈希值列表。
20.根據(jù)權(quán)利要求19所述的設(shè)備,其中,所述存儲模塊,包括: 第二確定子模塊,配置用于將所述接收到的數(shù)據(jù)塊確定為第一文件內(nèi)容,并和第二文件內(nèi)容組合為所述待存儲文件,其中,所述第二文件內(nèi)容拷貝自所述已存儲文件中與所述待存儲文件中匹配的文件內(nèi)容; 第二存儲子模塊,配置用于存儲所述待存儲文件。
21.根據(jù)權(quán)利要求14 16任一項所述的設(shè)備,其中,所述待存儲文件的哈希值列表包括針對所述待存儲文件的部分或全部數(shù)據(jù)塊計算的哈希值;如果所述待存儲文件的所述哈希值列表包括針對所述待存儲文件的全部數(shù)據(jù)塊計算的哈希值,且所述待存儲文件的哈希值列表和已存儲文件的哈希值列表匹配,還包括:返回模塊,配置用于將所述已存儲文件的存儲路徑返回至所述發(fā)送設(shè)備。
22.根據(jù)權(quán)利要求21所述的設(shè)備,所述已存儲文件的文件標(biāo)識、存儲路徑和哈希值列表保存在元數(shù)據(jù)索引表中,所述元數(shù)據(jù)索引表還包括已存儲文件的引用計數(shù),還包括: 增加模塊,配置用于將所述已存儲文件對應(yīng)的引用計數(shù)增加一。
23.—種設(shè)備,包括: 預(yù)處理模塊,配置用于以數(shù)據(jù)塊為單位計算并發(fā)送待存儲文件的哈希值列表至接收設(shè)備,以便所述接收設(shè)備判斷所述待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配; 發(fā)送模塊,配置用于響應(yīng)于從所述接收設(shè)備接收判斷結(jié)果為不匹配的通知,從所述待存儲文件中與第一個不匹配的哈希值對應(yīng)的數(shù)據(jù)塊開始向所述接收設(shè)備發(fā)送所述待存儲文件的內(nèi)容,直至所述待存儲文件的內(nèi)容結(jié)束。
24.根據(jù)權(quán)利要求23所述的設(shè)備,其中,所述待存儲文件按照預(yù)設(shè)的分塊方式劃分為若干數(shù)據(jù)塊,所述若干數(shù)據(jù)塊按照文件內(nèi)容從前到后的順序進行排序,且所述若干數(shù)據(jù)塊按照預(yù)設(shè)的發(fā)送順序劃分為若干數(shù)據(jù)塊集合;所述預(yù)處理模塊,包括: 第一計算子模塊,配置用于計算第一個數(shù)據(jù)塊集合的哈希值列表并發(fā)送至接收設(shè)備; 第二計算子模塊,配置用于計算第二個數(shù)據(jù)塊集合的哈希值列表; 發(fā)送子模塊,配置用于在所述第二計算子模塊進行計算的同時,響應(yīng)于接收設(shè)備在所述第一個數(shù)據(jù)塊集合的哈希值列表與已存儲文件的哈希值列表匹配的情況下返回的通知,繼續(xù)發(fā)送第二個數(shù)據(jù)塊集合的哈希值列表,直至在所述接收設(shè)備的判斷結(jié)果為不匹配的情況下接收到接收設(shè)備發(fā)送的通知,或者,所述待存儲文件匹配完畢。
25.根據(jù)權(quán)利要求23所述的設(shè)備,在所述接收設(shè)備的判斷結(jié)果為匹配的情況下,還包括: 接收模塊,配置用于接收所述接收設(shè)備返回的所述已存儲文件的存儲路徑。
全文摘要
本發(fā)明的實施方式提供了一種文件存儲方法。該方法包括響應(yīng)于接收發(fā)送設(shè)備發(fā)送的、針對待存儲文件的數(shù)據(jù)塊計算的哈希值列表,判斷待存儲文件的哈希值列表和已存儲文件的哈希值列表是否匹配;如果不匹配,則通知發(fā)送設(shè)備從待存儲文件中與第一個不匹配的哈希值對應(yīng)的數(shù)據(jù)塊開始發(fā)送待存儲文件的內(nèi)容,直至待存儲文件的內(nèi)容結(jié)束,并根據(jù)接收到的數(shù)據(jù)塊來存儲待存儲文件。本發(fā)明的實施方式通過文件級別的存儲方式,可以以較小的代價維護文件索引,從而降低接收設(shè)備的處理資源和性能開銷。此外,本發(fā)明的實施方式提供了一種文件存儲設(shè)備,例如,服務(wù)器。此外,本發(fā)明的實施方式還提供了一種文件發(fā)送方法,以及一種文件發(fā)送設(shè)備,例如客戶端。
文檔編號G06F17/30GK103246730SQ20131017044
公開日2013年8月14日 申請日期2013年5月8日 優(yōu)先權(quán)日2013年5月8日
發(fā)明者王磊, 周欣然 申請人:網(wǎng)易(杭州)網(wǎng)絡(luò)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1