一種云存儲服務系統(tǒng)的數(shù)據(jù)訪問/存儲方法及裝置的制造方法
【專利摘要】本發(fā)明實施例公開了一種數(shù)據(jù)緩存方法及裝置,所述方法包括:在客戶端內(nèi)建立元數(shù)據(jù)緩存區(qū)和數(shù)據(jù)文件緩存區(qū),其中,所述元數(shù)據(jù)緩存區(qū)用于存儲每個數(shù)據(jù)文件的元數(shù)據(jù),元數(shù)據(jù)是指用于描述數(shù)據(jù)文件的信息;所述數(shù)據(jù)文件緩存區(qū)用于存儲每個數(shù)據(jù)文件的數(shù)據(jù)塊;將每個數(shù)據(jù)文件切分成多個固定大小的數(shù)據(jù)塊,針對每個數(shù)據(jù)塊配置獨立的鎖,實現(xiàn)以數(shù)據(jù)塊為單位將數(shù)據(jù)更新到云端或者將數(shù)據(jù)由云端讀取到本地緩存。本申請?zhí)峁┑募夹g方案,在客戶端通過緩存機制存儲元數(shù)據(jù)和數(shù)據(jù)文件,這樣能夠減少IO次數(shù),通過以數(shù)據(jù)塊的方式存儲數(shù)據(jù)文件,能夠增加并發(fā)量,從而支持高效的讀寫機制。
【專利說明】
一種云存儲服務系統(tǒng)的數(shù)據(jù)訪問/存儲方法及裝置
技術領域
[0001]本發(fā)明涉及云存儲領域,尤其涉及一種云存儲服務系統(tǒng)的數(shù)據(jù)訪問/存儲方法及
目.0
【背景技術】
[0002]云存儲是一種網(wǎng)絡存儲技術,是指通過集群應用、網(wǎng)絡技術或分布式文件系統(tǒng)等功能,將網(wǎng)絡中大量各種不同類型的存儲設備通過應用軟件集合起來協(xié)同工作,共同對外提供數(shù)據(jù)存儲和業(yè)務訪問功能的系統(tǒng)。簡單來說,云存儲就是將儲存資源放在云上供人存取的方案,使用者可以在任何時間、任何地點,透過任何可連接網(wǎng)絡的裝置連接到云上方便地存取數(shù)據(jù)。
[0003]目前,客戶端通常通過加載磁盤的方式把云存儲的共享存儲磁盤加載到本地,以實現(xiàn)遠程訪問。目前,常用的方式有網(wǎng)絡文件系統(tǒng)(Network File System,NFS)和用戶空間文件系統(tǒng)(File system in User space ,FUSE);其中,NFS是FreeBSD支持的文件系統(tǒng)中的一種,它允許網(wǎng)絡中的計算機之間通過TCP/IP網(wǎng)絡共享資源。在NFS的應用中,本地NFS的客戶端應用可以透明地讀寫位于云端(云儲存服務端)NFS服務器上的文件,就像訪問本地文件一樣。FUSE是Linux中用于掛載某些網(wǎng)絡空間到本地文件系統(tǒng)的模塊。
[0004]現(xiàn)階段,大部分的網(wǎng)絡存儲,比如:GlusterFS,HDFS,以及亞馬遜的AWS均有基于FUSE的客戶端文件系統(tǒng)。通過這些客戶端能夠?qū)⒁汛嬖谠贫说木W(wǎng)絡磁盤設備的掛載到本地目錄。其中,s3fs-fUse是一個為亞馬遜S3云平臺開發(fā)的開源項目,基于FUSE實現(xiàn)了用戶空間的文件系統(tǒng)。它提供了對元數(shù)據(jù)和數(shù)據(jù)的管理,但是s3fs-fuse對緩存缺乏更進一步的劃分和管理,s3fs_fuse對于一個文件提供一個單一的鎖,這意味著對于文件在部分更新的過程中,其他部分無法被修改,文件數(shù)據(jù)只能被順序訪問和修改,缺乏并發(fā)性。
[0005]類似于上述s3fs-fuse的其他系統(tǒng),如果針對文件采用單一的鎖進行管理,都會存在上述缺乏并發(fā)性的問題,影響用戶訪問、修改云端數(shù)據(jù)的效率,用戶體驗不太好。
【發(fā)明內(nèi)容】
[0006]為了解決現(xiàn)有技術中,本發(fā)明提供一種數(shù)據(jù)緩存方法和裝置,在客戶端通過緩存機制存儲元數(shù)據(jù)和數(shù)據(jù)文件,這樣能夠減少1次數(shù),通過以數(shù)據(jù)塊的方式存儲數(shù)據(jù)文件,能夠增加并發(fā)量,從而支持高效的讀寫機制。
[0007]在本申請第一方面提供了一種數(shù)據(jù)緩存方法,所述方法包括:
[0008]在客戶端內(nèi)建立元數(shù)據(jù)緩存區(qū)和數(shù)據(jù)文件緩存區(qū),其中,所述元數(shù)據(jù)緩存區(qū)用于存儲每個數(shù)據(jù)文件的元數(shù)據(jù),元數(shù)據(jù)是指用于描述數(shù)據(jù)文件的信息;所述數(shù)據(jù)文件緩存區(qū)用于存儲每個數(shù)據(jù)文件的數(shù)據(jù)塊;
[0009]將每個數(shù)據(jù)文件切分成多個固定大小的數(shù)據(jù)塊,針對每個數(shù)據(jù)塊配置獨立的鎖,實現(xiàn)以數(shù)據(jù)塊為單位將數(shù)據(jù)更新到云端或者將數(shù)據(jù)由云端讀取到本地緩存。
[0010]可選的,所述在客戶端內(nèi)建立元數(shù)據(jù)緩存區(qū)和數(shù)據(jù)文件緩存區(qū),包括:
[0011]在客戶端的內(nèi)存中建立元數(shù)據(jù)緩存區(qū),以使得元數(shù)據(jù)緩存在內(nèi)容中;
[0012]在客戶端的磁盤中建立數(shù)據(jù)文件緩存區(qū),以使得數(shù)據(jù)文件緩存在磁盤中。
[0013]可選的,所述方法還包括:
[0014]接收操作系統(tǒng)內(nèi)核的讀請求,所述讀請求包括:待讀取的文件名和待讀取的數(shù)據(jù)區(qū)段;
[0015]根據(jù)所述元數(shù)據(jù)緩存區(qū)記錄的內(nèi)容,在數(shù)據(jù)文件緩存區(qū)中查找與所述文件名稱對應的數(shù)據(jù)文件;
[0016]對比待讀取的數(shù)據(jù)塊的當前版本與待讀取的文件的當前版本;
[0017]如果,數(shù)據(jù)塊的當前版本小于文件的當前版本,則從云端更新數(shù)據(jù)塊,更新完畢后,從數(shù)據(jù)文件緩存中讀取數(shù)據(jù)并返回;
[0018]如果,數(shù)據(jù)塊的當前版本和文件的當前版本相同,則從數(shù)據(jù)文件緩存中讀取數(shù)據(jù)并返回。
[0019]可選的,在更新數(shù)據(jù)塊的過程中,如果,網(wǎng)絡請求返回的實體標簽ETag與數(shù)據(jù)文件的元數(shù)據(jù)緩存中記錄的實體標簽ETag不相同,則更新數(shù)據(jù)文件的當前版本和元數(shù)據(jù)緩存,更新之后返回所述對比操作;所述ETag是指與Web資源關聯(lián)的記號。
[0020]5、根據(jù)權利要求3所述的方法,其特征在于,設置所述數(shù)據(jù)塊的版本為整形原子變量。
[0021 ]可選的,在讀取一個數(shù)據(jù)塊同時預讀取相鄰的數(shù)個數(shù)據(jù)塊。
[0022]可選的,所述方法還包括:
[0023]接收操作系統(tǒng)內(nèi)核的寫請求,所述寫請求包括:待寫入的文件名稱和待寫入的數(shù)據(jù);
[0024]獲取待寫入的數(shù)據(jù)塊的鎖,啟動該鎖,將數(shù)據(jù)寫入對應的緩存區(qū)中;
[0025]在寫入的過程中,將已寫入的數(shù)據(jù)塊預先上傳到云端;
[0026]在所有數(shù)據(jù)塊上傳結束時,修改元數(shù)據(jù)緩存內(nèi)對應的元數(shù)據(jù)。
[0027]可選的,所述在寫入的過程中,將已寫入的數(shù)據(jù)塊預先上傳到云端,包括:
[0028]監(jiān)控寫入過程,判斷已寫入的數(shù)據(jù)位置是否已經(jīng)超過數(shù)據(jù)塊的末尾,且該數(shù)據(jù)塊的上傳狀態(tài)是否標識為待上傳,如果是,則采用異步方式預先將該數(shù)據(jù)塊上傳到云端,并將其上傳狀態(tài)標識為已上傳。
[0029 ]在本申請第二方面提供了一種數(shù)據(jù)緩存裝置,所述裝置包括:
[0030]緩存區(qū)建立單元,用于在客戶端內(nèi)建立元數(shù)據(jù)緩存區(qū)和數(shù)據(jù)文件緩存區(qū),其中,所述元數(shù)據(jù)緩存區(qū)用于存儲每個數(shù)據(jù)文件的元數(shù)據(jù),元數(shù)據(jù)是指用于描述數(shù)據(jù)文件的信息;所述數(shù)據(jù)文件緩存區(qū)用于存儲每個數(shù)據(jù)文件的數(shù)據(jù)塊;
[0031]數(shù)據(jù)塊劃分及緩存單元,用于將每個數(shù)據(jù)文件切分成多個固定大小的數(shù)據(jù)塊,針對每個數(shù)據(jù)塊配置獨立的鎖,實現(xiàn)以數(shù)據(jù)塊為單位將數(shù)據(jù)更新到云端或者將數(shù)據(jù)由云端讀取到本地緩存。
[0032]可選的,所述緩存區(qū)建立單元,包括:
[0033]元數(shù)據(jù)緩存區(qū)建立子單元,用于在客戶端的內(nèi)存中建立元數(shù)據(jù)緩存區(qū),以使得元數(shù)據(jù)緩存在內(nèi)容中;
[0034]數(shù)據(jù)文件緩存區(qū)建立子單元,用于在客戶端的磁盤中建立數(shù)據(jù)文件緩存區(qū),以使得數(shù)據(jù)文件緩存在磁盤中。
[0035]可選的,所述裝置還包括:
[0036]讀請求響應單元,用于接收操作系統(tǒng)內(nèi)核的讀請求,所述讀請求包括:待讀取的文件名和待讀取的數(shù)據(jù)區(qū)段;
[0037]查找單元,用于根據(jù)所述元數(shù)據(jù)緩存區(qū)記錄的內(nèi)容,在數(shù)據(jù)文件緩存區(qū)中查找與所述文件名稱對應的數(shù)據(jù)文件;
[0038]對比單元,用于對比待讀取的數(shù)據(jù)塊的當前版本與待讀取的文件的當前版本;
[0039]第一讀取單元,用于如果,數(shù)據(jù)塊的當前版本小于文件的當前版本,則從云端更新數(shù)據(jù)塊,更新完畢后,從數(shù)據(jù)文件緩存中讀取數(shù)據(jù)并返回;
[0040]第二讀取單元,用于如果,數(shù)據(jù)塊的當前版本和文件的當前版本相同,則從數(shù)據(jù)文件緩存中讀取數(shù)據(jù)并返回。
[0041]可選的,所述第一讀取單元,包括:
[0042]更新子單元,用于在更新數(shù)據(jù)塊的過程中,如果,網(wǎng)絡請求返回的實體標簽ETag與數(shù)據(jù)文件的元數(shù)據(jù)緩存中記錄的實體標簽ETag不相同,則更新數(shù)據(jù)文件的當前版本和元數(shù)據(jù)緩存,更新之后返回所述對比操作;所述ETag是指與Web資源關聯(lián)的記號。
[0043]可選的,所述裝置還包括:
[0044]設置單元,用于預先設置所述數(shù)據(jù)塊的版本為整形原子變量。
[0045]可選的,所述裝置還包括:
[0046]預讀取單元,用于在第一讀取單元或者第二讀取段讀取一個數(shù)據(jù)塊的同時預讀取相鄰的數(shù)個數(shù)據(jù)塊。
[0047]可選的,所述裝置還包括:
[0048]寫請求響應單元,用于接收操作系統(tǒng)內(nèi)核的寫請求,所述寫請求包括:待寫入的文件名稱和待寫入的數(shù)據(jù);
[0049]數(shù)據(jù)寫入單元,用于獲取待寫入的數(shù)據(jù)塊的鎖,啟動該鎖,將數(shù)據(jù)寫入對應的緩存區(qū)中;
[0050]數(shù)據(jù)上傳單元,用于在寫入的過程中,將已寫入的數(shù)據(jù)塊預先上傳到云端;
[0051]元數(shù)據(jù)更新單元,用于在所有數(shù)據(jù)塊上傳結束時,修改元數(shù)據(jù)緩存內(nèi)對應的元數(shù)據(jù)。
[0052]可選的,所述數(shù)據(jù)上傳單元,包括:
[0053]上傳子單元,用于監(jiān)控寫入過程,判斷已寫入的數(shù)據(jù)位置是否已經(jīng)超過數(shù)據(jù)塊的末尾,且該數(shù)據(jù)塊的上傳狀態(tài)是否標識為待上傳,如果是,則采用異步方式預先將該數(shù)據(jù)塊上傳到云端,并將其上傳狀態(tài)標識為已上傳。
[0054]相對于現(xiàn)有技術,本申請上述技術方案的優(yōu)點在于:
[0055]在客戶端內(nèi)建立元數(shù)據(jù)緩存區(qū)和數(shù)據(jù)文件緩存區(qū),其中,所述元數(shù)據(jù)緩存區(qū)用于存儲每個數(shù)據(jù)文件的元數(shù)據(jù),元數(shù)據(jù)是指用于描述數(shù)據(jù)文件的信息;所述數(shù)據(jù)文件緩存區(qū)用于存儲每個數(shù)據(jù)文件的數(shù)據(jù)塊;將每個數(shù)據(jù)文件切分成多個固定大小的數(shù)據(jù)塊,針對每個數(shù)據(jù)塊配置獨立的鎖,實現(xiàn)以數(shù)據(jù)塊為單位將數(shù)據(jù)更新到云端或者將數(shù)據(jù)由云端讀取到本地緩存。本申請?zhí)岢龅倪@種緩存結構,對數(shù)據(jù)文件進行了劃分,以數(shù)據(jù)塊的形式進行了存儲管理,使得數(shù)據(jù)文件能夠被并行訪問和修改,增加了并發(fā)性,同時為數(shù)據(jù)塊和文件記錄各自的版本,通過判斷版本的方式能夠及時更新數(shù)據(jù),從而能夠滿足數(shù)據(jù)一致性的要求。
【附圖說明】
[0056]為了更清楚地說明本申請實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請中記載的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
[0057]圖1為本申請?zhí)峁┑囊环N數(shù)據(jù)緩存方法的流程圖;
[0058]圖2為本申請?zhí)峁┑臄?shù)據(jù)緩存結構的示意圖;
[0059]圖3為本申請?zhí)峁┑臄?shù)據(jù)讀取方法的流程圖;
[0060]圖4為本申請?zhí)峁┑臄?shù)據(jù)寫入方法的流程圖;
[0061]圖5為本申請?zhí)峁┑囊环N數(shù)據(jù)緩存裝置的結構示意圖。
【具體實施方式】
[0062]為了使本技術領域的人員更好地理解本發(fā)明方案,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0063]參見圖1,圖1是本申請?zhí)峁┑囊环N數(shù)據(jù)緩存方法的流程圖,如圖1所示,該方法可以包括以下步驟101和步驟102。
[0064]步驟101:在客戶端內(nèi)建立元數(shù)據(jù)緩存區(qū)和數(shù)據(jù)文件緩存區(qū),其中,所述元數(shù)據(jù)緩存區(qū)用于存儲每個數(shù)據(jù)文件的元數(shù)據(jù),元數(shù)據(jù)是指用于描述數(shù)據(jù)文件的信息;所述數(shù)據(jù)文件緩存區(qū)用于存儲每個數(shù)據(jù)文件的數(shù)據(jù)塊。
[0065]步驟102:將每個數(shù)據(jù)文件切分成多個固定大小的數(shù)據(jù)塊,針對每個數(shù)據(jù)塊配置獨立的鎖,實現(xiàn)以數(shù)據(jù)塊為單位將數(shù)據(jù)更新到云端或者將數(shù)據(jù)由云端讀取到本地緩存。
[0066]為了更清楚的解釋本申請?zhí)岢龅木彺娼Y構,下面結合圖2對本申請?zhí)岢龅木彺娼Y構作進一步解釋說明。
[0067]如圖2所示,本申請?zhí)峁┑木彺娼Y構包括元數(shù)據(jù)緩存區(qū)和數(shù)據(jù)文件緩存區(qū)這兩部分??紤]到在操作系統(tǒng)中,元數(shù)據(jù)訪問更加頻繁,而數(shù)據(jù)本身比元數(shù)據(jù)占用更大的磁盤空間等特點,為了更好的利用客戶端系統(tǒng)資源,本申請?zhí)峁┑膬?yōu)選的實現(xiàn)方案,該實現(xiàn)方案包括:
[0068]在客戶端的內(nèi)存中建立元數(shù)據(jù)緩存區(qū),以使得元數(shù)據(jù)緩存在內(nèi)容中;并在客戶端的磁盤中建立數(shù)據(jù)文件緩存區(qū),以使得數(shù)據(jù)文件緩存在磁盤中。
[0069]數(shù)據(jù)文件緩存區(qū)緩存數(shù)據(jù)文件,該數(shù)據(jù)文件是在云端數(shù)據(jù)文件在有訪問請求時動態(tài)地建立一個對應的本地緩存文件,并在文件描述符最終關閉時刪除該緩存文件。
[0070]在本申請中,數(shù)據(jù)文件并不是以整體文件形式進行緩存,而是被切分成多個固定大小的數(shù)據(jù)塊,該固定大小可在程序啟動時進行配置。在讀寫請求的過程中,從而以數(shù)據(jù)塊為單位將數(shù)據(jù)更新到云端或者將數(shù)據(jù)由云端讀取到本地緩存。
[0071]每個數(shù)據(jù)塊均需要配置一個讀寫鎖,讀寫鎖用來從云端更新數(shù)據(jù)時防止客戶端的讀取請求。另外,數(shù)據(jù)塊還需要配置有當前版本,數(shù)據(jù)塊的當前版本設置為整型原子變量。整形原子變量在無需加鎖的同時能夠保持線程安全,在一條CPU指令內(nèi)能實現(xiàn)加I操作,效率高。于此同時,每個緩存文件也有一個額外的當前版本變量,當前文件版本是由ETag決定,ETag是由云端返回的值,其是文件的MD5值。
[0072]本申請正是通過數(shù)據(jù)塊的當前版本與緩存文件的當前版本的大小來判斷緩存區(qū)內(nèi)的數(shù)據(jù)塊是否與云端一致。
[0073]基于本申請?zhí)峁┑纳鲜鼍彺娣桨福旧暾堖€提供對應的數(shù)據(jù)讀取方案和數(shù)據(jù)寫入方案,下面通過實施例對這兩種方案分別進行解釋說明。
[0074]參見圖3,圖3是本申請?zhí)峁┑臄?shù)據(jù)讀取方法的流程圖,該數(shù)據(jù)讀取方法是基于上述圖1所示的緩存方案而實現(xiàn)的,如圖3所示,該方法包括以下步驟301-步驟305;
[0075]步驟301:接收操作系統(tǒng)內(nèi)核的讀請求,所述讀請求包括:待讀取的文件名和待讀取的數(shù)據(jù)區(qū)段。
[0076]步驟302:根據(jù)所述元數(shù)據(jù)緩存區(qū)記錄的內(nèi)容,在數(shù)據(jù)文件緩存區(qū)中查找與所述文件名稱對應的數(shù)據(jù)文件。
[0077]步驟303:對比待讀取的數(shù)據(jù)塊的當前版本與待讀取的文件的當前版本。
[0078]步驟304:如果,數(shù)據(jù)塊的當前版本小于文件的當前版本,則從云端更新數(shù)據(jù)塊,更新完畢后,從數(shù)據(jù)文件緩存中讀取數(shù)據(jù)并返回。
[0079]步驟305:如果,數(shù)據(jù)塊的當前版本和文件的當前版本相同,則從數(shù)據(jù)文件緩存中讀取數(shù)據(jù)并返回。
[0080]在實現(xiàn)時,客戶端會接收由Fuse或者NFS等系統(tǒng)轉(zhuǎn)發(fā)的內(nèi)核請求,該請求包括需要訪問的文件名和需要訪問的數(shù)據(jù)區(qū)段;然后,客戶端對比需要訪問的數(shù)據(jù)塊的當前版本與文件的當前版本的大小關系,當數(shù)據(jù)塊的當前版本小于文件的當前版本時,立即更新數(shù)據(jù)塊,同時,還可以對相鄰的數(shù)據(jù)塊發(fā)起異步更新請求。當數(shù)據(jù)塊的當前版本與文件的當前版本相同時,則直接從緩存中讀取并返回數(shù)據(jù)。
[0081]在更新數(shù)據(jù)塊的過程中,如果網(wǎng)絡請求返回的ETag與當前版本元數(shù)據(jù)緩存中記錄的Etag不符,則更新文件的當前版本和元數(shù)據(jù)緩存,再次返回步驟303進行對比。當數(shù)據(jù)更新結束后,再從數(shù)據(jù)文件緩存中讀取并返回數(shù)據(jù)。
[0082]Etag是云端返回的線上數(shù)據(jù)文件的MD5值,因此,當數(shù)據(jù)文件發(fā)生變化時,Etag—定會發(fā)生變化。進一步地,當Etag變化時,就是自動更新系統(tǒng)內(nèi)存儲的文件版本,文件版本為整型原子變量。這樣,就能夠通過對比Etag來保證數(shù)據(jù)的線上線下數(shù)據(jù)的一致性。
[0083]在數(shù)據(jù)文件的讀寫過程中,每當檢測到線上版本變化時,文件的當前版本加I,導致數(shù)據(jù)塊的當前版本可能會比文件的當前版本小。這樣所有文件緩存數(shù)據(jù)將檢測到失效,并在下次訪問時需要更新到最新版本。
[0084]當數(shù)據(jù)塊更新后,將數(shù)據(jù)塊的當前版本將被記錄為文件的當前版本。同時,將每次更新數(shù)據(jù)請求返回的ETag均與元數(shù)據(jù)緩存中的ETag進行對比,當不一致時,表明云端的數(shù)據(jù)已經(jīng)更新,此時,將文件的當前版本將再次加I重復上述操作,直到本地緩存數(shù)據(jù)與云端一 Sc ο
[0085]在多線程讀寫或者多客戶端的讀寫過程中,必須要考慮數(shù)據(jù)的一致性問題。當云端數(shù)據(jù)被修改時,這種修改應當能及時反映到客戶端的數(shù)據(jù)中。為了實現(xiàn)這一點,元數(shù)據(jù)緩存需要一個較小的超時時間,以保證元數(shù)據(jù)緩存能及時更新。當訪問文件時,通過對比文件ETag與元數(shù)據(jù)緩存中的記錄的ETag是否一致。在不一致的情況下將重新更新對文件數(shù)據(jù)緩存和文件元數(shù)據(jù)緩存。
[0086]參見圖4,圖4是本申請?zhí)峁┑臄?shù)據(jù)讀取方法的流程圖,該數(shù)據(jù)讀取方法是基于上述圖1所示的緩存方案而實現(xiàn)的,如圖4所示,該方法包括以下步驟401-步驟404;
[0087]步驟401:接收操作系統(tǒng)內(nèi)核的寫請求,所述寫請求包括:待寫入的文件名稱和待寫入的數(shù)據(jù)。
[0088]步驟402:獲取待寫入的數(shù)據(jù)塊的鎖,啟動該鎖,將數(shù)據(jù)寫入對應的緩存區(qū)中。
[0089]步驟403:在寫入的過程中,將已寫入的數(shù)據(jù)塊預先上傳到云端。
[0090]在實現(xiàn)時,步驟403可以包括:監(jiān)控寫入過程,判斷已寫入的數(shù)據(jù)位置是否已經(jīng)超過數(shù)據(jù)塊的末尾,且該數(shù)據(jù)塊的上傳狀態(tài)是否標識為待上傳,如果是,則采用異步方式預先將該數(shù)據(jù)塊上傳到云端,并將其上傳狀態(tài)標識為已上傳。
[0091 ]步驟404:在所有數(shù)據(jù)塊上傳結束時,修改元數(shù)據(jù)緩存內(nèi)對應的元數(shù)據(jù)。
[0092]與上述圖3所示的讀取方法流程類似的,本申請?zhí)峁┑膶懭敕椒ㄊ紫冉邮盏接蒄use或者NFS轉(zhuǎn)發(fā)的內(nèi)核請求,該請求中包括需要寫入的文件名和數(shù)據(jù),然后,根據(jù)元數(shù)據(jù)緩存區(qū)記錄內(nèi)容找到對應的緩存文件,如果,沒有則創(chuàng)建新的緩存文件。在獲取到數(shù)據(jù)塊的鎖之后將數(shù)據(jù)寫入到緩存數(shù)據(jù)塊中,并將修改過的數(shù)據(jù)的上傳狀態(tài)標記為O,0用于標識待上傳狀態(tài)。如果最后寫入的位置已經(jīng)超過了某個數(shù)據(jù)塊的末尾,且這個數(shù)據(jù)塊的上傳狀態(tài)標記為O,則異步上傳此數(shù)據(jù)塊,并將其上傳狀態(tài)更改為I,I用于標識已上傳狀態(tài)。當文件結束上傳后,修改元數(shù)據(jù)緩存數(shù)據(jù)。
[0093]由于,實現(xiàn)高效讀寫需要考慮的問題主要是減少1次數(shù)和增加并發(fā)性。因此,本申請?zhí)峁┑募夹g方案為了減少10,需要對訪問的數(shù)據(jù)和元數(shù)據(jù)增加一層緩存。在操作系統(tǒng)中,元數(shù)據(jù)訪問更加頻繁,而數(shù)據(jù)本身比元數(shù)據(jù)占用更大的磁盤空間。本文將文件元數(shù)據(jù)與文件數(shù)據(jù)緩存分開,將元數(shù)據(jù)放在內(nèi)存中,數(shù)據(jù)分放在磁盤上。對于文件數(shù)據(jù),則根據(jù)文件大小進一步切分,分為數(shù)個大小相等的數(shù)據(jù)塊,這種緩存方式,有利于在文件讀過程中,后臺線程會同時預讀取相鄰的數(shù)個數(shù)據(jù)塊,提高數(shù)據(jù)讀取效率。在文件寫入的過程,后臺線程會將已經(jīng)寫入的數(shù)據(jù)塊預先上傳。由于后臺線程與客戶端的讀寫操作時同時進行的,客戶端讀取下一個數(shù)據(jù)塊時數(shù)據(jù)已經(jīng)存在于本地,因此其性能能夠接近本地訪問。
[0094]基于以上實施例提供的方法,本發(fā)明實施例還提供了對應的裝置,下面結合附圖來詳細說明其工作原理。
[0095]裝置實施例
[0096]參見圖5,圖5是本發(fā)明提供的一種數(shù)據(jù)緩存裝置的結構圖,如圖5所示,該裝置可以包括以下單元:
[0097]緩存區(qū)建立單元501,用于在客戶端內(nèi)建立元數(shù)據(jù)緩存區(qū)和數(shù)據(jù)文件緩存區(qū),其中,所述元數(shù)據(jù)緩存區(qū)用于存儲每個數(shù)據(jù)文件的元數(shù)據(jù),元數(shù)據(jù)是指用于描述數(shù)據(jù)文件的信息;所述數(shù)據(jù)文件緩存區(qū)用于存儲每個數(shù)據(jù)文件的數(shù)據(jù)塊;
[0098]數(shù)據(jù)塊劃分及緩存單元502,用于將每個數(shù)據(jù)文件切分成多個固定大小的數(shù)據(jù)塊,針對每個數(shù)據(jù)塊配置獨立的鎖,實現(xiàn)以數(shù)據(jù)塊為單位將數(shù)據(jù)更新到云端或者將數(shù)據(jù)由云端讀取到本地緩存。
[0099]可選的,所述緩存區(qū)建立單元501,包括:
[0100]元數(shù)據(jù)緩存區(qū)建立子單元,用于在客戶端的內(nèi)存中建立元數(shù)據(jù)緩存區(qū),以使得元數(shù)據(jù)緩存在內(nèi)容中;
[0101]數(shù)據(jù)文件緩存區(qū)建立子單元,用于在客戶端的磁盤中建立數(shù)據(jù)文件緩存區(qū),以使得數(shù)據(jù)文件緩存在磁盤中。
[0102]可選的,所述裝置還包括:
[0103]讀請求響應單元,用于接收操作系統(tǒng)內(nèi)核的讀請求,所述讀請求包括:待讀取的文件名和待讀取的數(shù)據(jù)區(qū)段;
[0104]查找單元,用于根據(jù)所述元數(shù)據(jù)緩存區(qū)記錄的內(nèi)容,在數(shù)據(jù)文件緩存區(qū)中查找與所述文件名稱對應的數(shù)據(jù)文件;
[0105]對比單元,用于對比待讀取的數(shù)據(jù)塊的當前版本與待讀取的文件的當前版本;
[0106]第一讀取單元,用于如果,數(shù)據(jù)塊的當前版本小于文件的當前版本,則從云端更新數(shù)據(jù)塊,更新完畢后,從數(shù)據(jù)文件緩存中讀取數(shù)據(jù)并返回;
[0107]第二讀取單元,用于如果,數(shù)據(jù)塊的當前版本和文件的當前版本相同,則從數(shù)據(jù)文件緩存中讀取數(shù)據(jù)并返回。
[0108]可選的,所述第一讀取單元,包括:
[0109]更新子單元,用于在更新數(shù)據(jù)塊的過程中,如果,網(wǎng)絡請求返回的實體標簽ETag與數(shù)據(jù)文件的元數(shù)據(jù)緩存中記錄的實體標簽ETag不相同,則更新數(shù)據(jù)文件的當前版本和元數(shù)據(jù)緩存,更新之后返回所述對比操作;所述ETag是指與Web資源關聯(lián)的記號。
[0110]可選的,所述裝置還包括:
[0111]設置單元,用于預先設置所述數(shù)據(jù)塊的版本為整形原子變量。
[0112]可選的,所述裝置還包括:
[0113]預讀取單元,用于在第一讀取單元或者第二讀取段讀取一個數(shù)據(jù)塊的同時預讀取相鄰的數(shù)個數(shù)據(jù)塊。
[0114]可選的,所述裝置還包括:
[0115]寫請求響應單元,用于接收操作系統(tǒng)內(nèi)核的寫請求,所述寫請求包括:待寫入的文件名稱和待寫入的數(shù)據(jù);
[0116]數(shù)據(jù)寫入單元,用于獲取待寫入的數(shù)據(jù)塊的鎖,啟動該鎖,將數(shù)據(jù)寫入對應的緩存區(qū)中;
[0117]數(shù)據(jù)上傳單元,用于在寫入的過程中,將已寫入的數(shù)據(jù)塊預先上傳到云端;
[0118]元數(shù)據(jù)更新單元,用于在所有數(shù)據(jù)塊上傳結束時,修改元數(shù)據(jù)緩存內(nèi)對應的元數(shù)據(jù)。
[0119]可選的,所述數(shù)據(jù)上傳單元,包括:
[0120]上傳子單元,用于監(jiān)控寫入過程,判斷已寫入的數(shù)據(jù)位置是否已經(jīng)超過數(shù)據(jù)塊的末尾,且該數(shù)據(jù)塊的上傳狀態(tài)是否標識為待上傳,如果是,則采用異步方式預先將該數(shù)據(jù)塊上傳到云端,并將其上傳狀態(tài)標識為已上傳。
[0121]需要說明的是,本領域普通技術人員可以理解實現(xiàn)上述方法實施例中的全部或部分流程,是可以通過計算機程序來指令相關的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法實施例的流程。其中,所述存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機存儲記憶體(RandomAccess Memory ,RAM)等。
[0122]本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于裝置實施例而言,由于其基本相似于方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元及模塊可以是或者也可以不是物理上分開的。另外,還可以根據(jù)實際的需要選擇其中的部分或者全部單元和模塊來實現(xiàn)本實施例方案的目的。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
[0123]以上所述僅是本發(fā)明的【具體實施方式】,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。
【主權項】
1.一種數(shù)據(jù)緩存方法,其特征在于,所述方法包括: 在客戶端內(nèi)建立元數(shù)據(jù)緩存區(qū)和數(shù)據(jù)文件緩存區(qū),其中,所述元數(shù)據(jù)緩存區(qū)用于存儲每個數(shù)據(jù)文件的元數(shù)據(jù),元數(shù)據(jù)是指用于描述數(shù)據(jù)文件的信息;所述數(shù)據(jù)文件緩存區(qū)用于存儲每個數(shù)據(jù)文件的數(shù)據(jù)塊; 將每個數(shù)據(jù)文件切分成多個固定大小的數(shù)據(jù)塊,針對每個數(shù)據(jù)塊配置獨立的鎖,實現(xiàn)以數(shù)據(jù)塊為單位將數(shù)據(jù)更新到云端或者將數(shù)據(jù)由云端讀取到本地緩存。2.根據(jù)權利要求1所述的方法,其特征在于,所述在客戶端內(nèi)建立元數(shù)據(jù)緩存區(qū)和數(shù)據(jù)文件緩存區(qū),包括: 在客戶端的內(nèi)存中建立元數(shù)據(jù)緩存區(qū),以使得元數(shù)據(jù)緩存在內(nèi)容中; 在客戶端的磁盤中建立數(shù)據(jù)文件緩存區(qū),以使得數(shù)據(jù)文件緩存在磁盤中。3.根據(jù)權利要求1所述的方法,其特征在于,所述方法還包括: 接收操作系統(tǒng)內(nèi)核的讀請求,所述讀請求包括:待讀取的文件名和待讀取的數(shù)據(jù)區(qū)段;根據(jù)所述元數(shù)據(jù)緩存區(qū)記錄的內(nèi)容,在數(shù)據(jù)文件緩存區(qū)中查找與所述文件名稱對應的數(shù)據(jù)文件; 對比待讀取的數(shù)據(jù)塊的當前版本與待讀取的文件的當前版本; 如果,數(shù)據(jù)塊的當前版本小于文件的當前版本,則從云端更新數(shù)據(jù)塊,更新完畢后,從數(shù)據(jù)文件緩存中讀取數(shù)據(jù)并返回; 如果,數(shù)據(jù)塊的當前版本和文件的當前版本相同,則從數(shù)據(jù)文件緩存中讀取數(shù)據(jù)并返回。4.根據(jù)權利要求3所述的方法,其特征在于,在更新數(shù)據(jù)塊的過程中,如果,網(wǎng)絡請求返回的實體標簽ETag與數(shù)據(jù)文件的元數(shù)據(jù)緩存中記錄的實體標簽ETag不相同,則更新數(shù)據(jù)文件的當前版本和元數(shù)據(jù)緩存,更新之后返回所述對比操作;所述ETag是指與Web資源關聯(lián)的記號。5.根據(jù)權利要求3所述的方法,其特征在于,設置所述數(shù)據(jù)塊的版本為整形原子變量。6.根據(jù)權利要求3所述的方法,其特征在于, 在讀取一個數(shù)據(jù)塊同時預讀取相鄰的數(shù)個數(shù)據(jù)塊。7.根據(jù)權利要求1所述的方法,其特征在于,所述方法還包括: 接收操作系統(tǒng)內(nèi)核的寫請求,所述寫請求包括:待寫入的文件名稱和待寫入的數(shù)據(jù); 獲取待寫入的數(shù)據(jù)塊的鎖,啟動該鎖,將數(shù)據(jù)寫入對應的緩存區(qū)中; 在寫入的過程中,將已寫入的數(shù)據(jù)塊預先上傳到云端; 在所有數(shù)據(jù)塊上傳結束時,修改元數(shù)據(jù)緩存內(nèi)對應的元數(shù)據(jù)。8.根據(jù)權利要求7所述的方法,其特征在于,所述在寫入的過程中,將已寫入的數(shù)據(jù)塊預先上傳到云端,包括: 監(jiān)控寫入過程,判斷已寫入的數(shù)據(jù)位置是否已經(jīng)超過數(shù)據(jù)塊的末尾,且該數(shù)據(jù)塊的上傳狀態(tài)是否標識為待上傳,如果是,則采用異步方式預先將該數(shù)據(jù)塊上傳到云端,并將其上傳狀態(tài)標識為已上傳。9.一種數(shù)據(jù)緩存裝置,其特征在于,所述裝置包括: 緩存區(qū)建立單元,用于在客戶端內(nèi)建立元數(shù)據(jù)緩存區(qū)和數(shù)據(jù)文件緩存區(qū),其中,所述元數(shù)據(jù)緩存區(qū)用于存儲每個數(shù)據(jù)文件的元數(shù)據(jù),元數(shù)據(jù)是指用于描述數(shù)據(jù)文件的信息;所述數(shù)據(jù)文件緩存區(qū)用于存儲每個數(shù)據(jù)文件的數(shù)據(jù)塊; 數(shù)據(jù)塊劃分及緩存單元,用于將每個數(shù)據(jù)文件切分成多個固定大小的數(shù)據(jù)塊,針對每個數(shù)據(jù)塊配置獨立的鎖,實現(xiàn)以數(shù)據(jù)塊為單位將數(shù)據(jù)更新到云端或者將數(shù)據(jù)由云端讀取到本地緩存。10.根據(jù)權利要求9所述的裝置,其特征在于,所述緩存區(qū)建立單元,包括: 元數(shù)據(jù)緩存區(qū)建立子單元,用于在客戶端的內(nèi)存中建立元數(shù)據(jù)緩存區(qū),以使得元數(shù)據(jù)緩存在內(nèi)容中; 數(shù)據(jù)文件緩存區(qū)建立子單元,用于在客戶端的磁盤中建立數(shù)據(jù)文件緩存區(qū),以使得數(shù)據(jù)文件緩存在磁盤中。11.根據(jù)權利要求9所述的裝置,其特征在于,所述裝置還包括: 讀請求響應單元,用于接收操作系統(tǒng)內(nèi)核的讀請求,所述讀請求包括:待讀取的文件名和待讀取的數(shù)據(jù)區(qū)段; 查找單元,用于根據(jù)所述元數(shù)據(jù)緩存區(qū)記錄的內(nèi)容,在數(shù)據(jù)文件緩存區(qū)中查找與所述文件名稱對應的數(shù)據(jù)文件; 對比單元,用于對比待讀取的數(shù)據(jù)塊的當前版本與待讀取的文件的當前版本; 第一讀取單元,用于如果,數(shù)據(jù)塊的當前版本小于文件的當前版本,則從云端更新數(shù)據(jù)塊,更新完畢后,從數(shù)據(jù)文件緩存中讀取數(shù)據(jù)并返回; 第二讀取單元,用于如果,數(shù)據(jù)塊的當前版本和文件的當前版本相同,則從數(shù)據(jù)文件緩存中讀取數(shù)據(jù)并返回。12.根據(jù)權利要求11所述的裝置,其特征在于,所述第一讀取單元,包括: 更新子單元,用于在更新數(shù)據(jù)塊的過程中,如果,網(wǎng)絡請求返回的實體標簽ETag與數(shù)據(jù)文件的元數(shù)據(jù)緩存中記錄的實體標簽ETag不相同,則更新數(shù)據(jù)文件的當前版本和元數(shù)據(jù)緩存,更新之后返回所述對比操作;所述ETag是指與Web資源關聯(lián)的記號。13.根據(jù)權利要求11所述的裝置,其特征在于,還包括: 設置單元,用于預先設置所述數(shù)據(jù)塊的版本為整形原子變量。14.根據(jù)權利要求11所述的裝置,其特征在于,所述裝置還包括: 預讀取單元,用于在第一讀取單元或者第二讀取段讀取一個數(shù)據(jù)塊的同時預讀取相鄰的數(shù)個數(shù)據(jù)塊。15.根據(jù)權利要求9所述的裝置,其特征在于,所述裝置還包括: 寫請求響應單元,用于接收操作系統(tǒng)內(nèi)核的寫請求,所述寫請求包括:待寫入的文件名稱和待寫入的數(shù)據(jù); 數(shù)據(jù)寫入單元,用于獲取待寫入的數(shù)據(jù)塊的鎖,啟動該鎖,將數(shù)據(jù)寫入對應的緩存區(qū)中; 數(shù)據(jù)上傳單元,用于在寫入的過程中,將已寫入的數(shù)據(jù)塊預先上傳到云端; 元數(shù)據(jù)更新單元,用于在所有數(shù)據(jù)塊上傳結束時,修改元數(shù)據(jù)緩存內(nèi)對應的元數(shù)據(jù)。16.根據(jù)權利要求15所述的裝置,其特征在于,所述數(shù)據(jù)上傳單元,包括: 上傳子單元,用于監(jiān)控寫入過程,判斷已寫入的數(shù)據(jù)位置是否已經(jīng)超過數(shù)據(jù)塊的末尾,且該數(shù)據(jù)塊的上傳狀態(tài)是否標識為待上傳,如果是,則采用異步方式預先將該數(shù)據(jù)塊上傳到云端,并將其上傳狀態(tài)標識為已上傳。
【文檔編號】G06F17/30GK106021381SQ201610311690
【公開日】2016年10月12日
【申請日】2016年5月11日
【發(fā)明人】羅安寧
【申請人】北京搜狐新媒體信息技術有限公司