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

一種對(duì)象數(shù)據(jù)處理方法及裝置的制作方法

文檔序號(hào):6341372閱讀:239來(lái)源:國(guó)知局
專利名稱:一種對(duì)象數(shù)據(jù)處理方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種可應(yīng)用于基于對(duì)象的數(shù)據(jù)存儲(chǔ)設(shè)備或系統(tǒng)的對(duì)象數(shù)據(jù)處理方法及裝置。
背景技術(shù)
在對(duì)象存儲(chǔ)系統(tǒng)中,對(duì)象存儲(chǔ)設(shè)備(Object-based Storage Device, 0SD)用來(lái)永久存儲(chǔ)系統(tǒng)中的對(duì)象數(shù)據(jù),以及提供對(duì)象數(shù)據(jù)讀寫功能。對(duì)象數(shù)據(jù)在客戶端和OSD之間傳輸,OSD的性能對(duì)整個(gè)系統(tǒng)有著直接而顯著的影響。在OSD內(nèi),當(dāng)前的對(duì)象組織和管理方式有以下幾種(1)根據(jù)對(duì)象負(fù)載特性設(shè)計(jì)全新的對(duì)象文件系統(tǒng)(OBFS),即提出一種全新的類似于現(xiàn)在文件系統(tǒng)的對(duì)象數(shù)據(jù)組織和管理方式;(2)利用現(xiàn)有的文件系統(tǒng),將對(duì)象數(shù)據(jù)封裝為傳統(tǒng)的文件格式。由于方式(1)的開發(fā)周期過(guò)長(zhǎng)、難度過(guò)大,因此大部分系統(tǒng)采用方式( 。在方式( 中,常將每個(gè)對(duì)象當(dāng)做一個(gè)文件存儲(chǔ)在OSD的本地文件系統(tǒng)上,這種方法簡(jiǎn)單直接,目前大部分系統(tǒng)采用了該方式。在對(duì)象存儲(chǔ)標(biāo)準(zhǔn)0SD-2中規(guī)定,在一個(gè)OSD上,對(duì)象標(biāo)識(shí)符OID由(Partition_ID, User_0bject_ID)組成,它是對(duì)象的唯一標(biāo)識(shí),這也是客戶端訪問(wèn)對(duì)象的接口。在方式O) 中,若將對(duì)象標(biāo)識(shí)符作為文件的路徑名,在OSD上只能為對(duì)象建立平坦的目錄結(jié)構(gòu)。由于單個(gè)OSD上的對(duì)象數(shù)量巨大,一般至少有上百萬(wàn)個(gè),根據(jù)傳統(tǒng)文件系統(tǒng)(如ext3)的目錄文件組織結(jié)構(gòu)及其查找方法,對(duì)于包含大量文件的目錄,它無(wú)法有效的管理(當(dāng)單個(gè)目錄下文件超過(guò)一定數(shù)目時(shí),在該目錄下的文件查找效率就會(huì)急劇下降)。為了有效管理大量的對(duì)象,最簡(jiǎn)單的方法就是將平坦的目錄結(jié)構(gòu)轉(zhuǎn)換為樹型的目錄層次結(jié)構(gòu),以適應(yīng)于傳統(tǒng)文件系統(tǒng)的目錄管理策略和方法。采用這種方式的系統(tǒng)有PVFS、 HOSS等。這種方式的優(yōu)點(diǎn)是解決了平坦名字空間的問(wèn)題,使得定位對(duì)象的時(shí)間有所減少。在傳統(tǒng)文件系統(tǒng)中,要讀取文件數(shù)據(jù)時(shí),需要以下幾個(gè)步驟(1)需要先從目錄數(shù)據(jù)中查找文件名,獲得該文件名對(duì)應(yīng)的索引號(hào);( 根據(jù)索引號(hào)查找該文件元數(shù)據(jù) (inode),獲得文件數(shù)據(jù)所在的磁盤位置;C3)從磁盤上獲取文件數(shù)據(jù)。將每個(gè)對(duì)象當(dāng)做一個(gè)文件存放在OSD內(nèi)的同一個(gè)目錄內(nèi)的方案中,由于同一目錄下的文件數(shù)量巨大導(dǎo)致目錄數(shù)據(jù)很多,在上述步驟(1)中需要上10次隨機(jī)磁盤IO操作(10 操作次數(shù)與該目錄下的文件數(shù)量相關(guān))才能獲得文件名對(duì)應(yīng)的索引號(hào),步驟O)需要一次磁盤IO操作,步驟(3)需要的磁盤IO操作數(shù)則與對(duì)象數(shù)據(jù)量有關(guān)??梢姡瑸榱俗x取對(duì)象數(shù)據(jù)需要太多次磁盤IO操作,嚴(yán)重降低了 OSD的性能。雖然,將每個(gè)對(duì)象當(dāng)做一個(gè)文件存放在OSD內(nèi),并將平坦的目錄結(jié)構(gòu)轉(zhuǎn)換為樹型的目錄層次結(jié)構(gòu)的方案中,減少了上一方案步驟(1)中的磁盤IO數(shù)。步驟(1)需要的磁盤 IO操作次數(shù)與該文件所在目錄層次結(jié)構(gòu)的深度和它父目錄包含的文件數(shù)有關(guān),但是由于系統(tǒng)中的文件總數(shù)并沒(méi)有改變,因此其需要的磁盤IO操作次數(shù)仍然很多。發(fā)明人在實(shí)現(xiàn)本發(fā)明的過(guò)程中,發(fā)現(xiàn)利用現(xiàn)有的文件系統(tǒng),將對(duì)象數(shù)據(jù)封裝為傳統(tǒng)的文件格式進(jìn)行對(duì)象組織和管理的現(xiàn)有技術(shù)至少存在以下問(wèn)題
由于傳統(tǒng)文件系統(tǒng)中能夠保持的文件總數(shù)有限,將每個(gè)對(duì)象當(dāng)做一個(gè)文件存儲(chǔ)會(huì)受限于系統(tǒng)能夠保存的文件總數(shù);另外,將每個(gè)對(duì)象當(dāng)做一個(gè)文件存儲(chǔ),每個(gè)文件都要求一個(gè)inode (幾百個(gè)字節(jié)),內(nèi)存使用效率不高,而且對(duì)象的訪問(wèn)總是需要多次磁盤IO操作,小對(duì)象的元數(shù)據(jù)訪問(wèn)會(huì)成為性能瓶頸,嚴(yán)重影響了 OSD的性能。

發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種對(duì)象數(shù)據(jù)處理方法及系統(tǒng),以提高對(duì)象數(shù)據(jù)處理性能,為此,本發(fā)明實(shí)施例采用以下技術(shù)方案一種對(duì)象數(shù)據(jù)處理方法,包括接收到寫對(duì)象的命令后,在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象的對(duì)象塊,并在與所述對(duì)象數(shù)據(jù)文件對(duì)應(yīng)的元數(shù)據(jù)文件中寫入該對(duì)象的元數(shù)據(jù);其中,在不超過(guò)所述對(duì)象數(shù)據(jù)文件的配額空間的情況下,所述對(duì)象數(shù)據(jù)文件能夠存儲(chǔ)多個(gè)對(duì)象。一種對(duì)象數(shù)據(jù)處理裝置,包括接口模塊,用于接收寫對(duì)象的命令;寫處理模塊,用于在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象的對(duì)象塊,并在與所述對(duì)象數(shù)據(jù)文件對(duì)應(yīng)的元數(shù)據(jù)文件中寫入該對(duì)象的元數(shù)據(jù);其中,在不超過(guò)所述對(duì)象數(shù)據(jù)文件的配額空間的情況下,所述對(duì)象數(shù)據(jù)文件能夠存儲(chǔ)多個(gè)對(duì)象。采用本發(fā)明的上述實(shí)施例,通過(guò)將多個(gè)對(duì)象綁定為單個(gè)對(duì)象數(shù)據(jù)文件,減少了 OSD 內(nèi)部的文件總數(shù),一定程度上避免了文件數(shù)量眾多以及平坦的目錄結(jié)構(gòu)導(dǎo)致的文件查找效率低、需要多次磁盤IO操作才能訪問(wèn)到對(duì)象的問(wèn)題。


圖1為本發(fā)明實(shí)施例中的OSD對(duì)象數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)示意圖;圖2為本發(fā)明實(shí)施例中的B文件的結(jié)構(gòu)示意圖;圖3為本發(fā)明實(shí)施例中的BM文件的結(jié)構(gòu)示意圖;圖4為本發(fā)明實(shí)施例中的對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)示意圖;圖5為本發(fā)明實(shí)施例中的對(duì)象元數(shù)據(jù)內(nèi)存數(shù)據(jù)結(jié)構(gòu)的建立流程示意圖;圖6為本發(fā)明實(shí)施例中的對(duì)象數(shù)據(jù)的寫操作流程示意圖;圖7為本發(fā)明實(shí)施例中的刪除對(duì)象數(shù)據(jù)的流程示意圖;圖8為本發(fā)明實(shí)施例中的壓縮對(duì)象存儲(chǔ)空間的流程示意圖;圖9為本發(fā)明實(shí)施例中的對(duì)象數(shù)據(jù)的讀流程示意圖;圖10為本發(fā)明實(shí)施例中的對(duì)象數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式針對(duì)上述現(xiàn)有技術(shù)存在的問(wèn)題,為了提高OSD的訪問(wèn)性能,應(yīng)該盡量減少讀寫對(duì)象元數(shù)據(jù)和對(duì)象數(shù)據(jù)涉及到的磁盤IO操作次數(shù),并盡量減少磁盤的隨機(jī)訪問(wèn)次數(shù),充分利用系統(tǒng)內(nèi)存。以此為目標(biāo),本發(fā)明實(shí)施例給出了一種提高OSD中對(duì)象數(shù)據(jù)存儲(chǔ)效率的對(duì)象組織方式和相應(yīng)的對(duì)象數(shù)據(jù)處理方法。本發(fā)明實(shí)施例將多個(gè)對(duì)象綁定為單個(gè)大文件存儲(chǔ)在OSD的本地文件系統(tǒng)上,從而減少了讀寫對(duì)象元數(shù)據(jù)和對(duì)象數(shù)據(jù)涉及到的磁盤IO操作次數(shù),同時(shí)也減少了隨機(jī)磁盤IO操作次數(shù),提高了 OSD的訪問(wèn)性能。下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)描述。參見圖1,為本發(fā)明實(shí)施例提供的OSD對(duì)象數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)示意圖。如圖1所示,本發(fā)明實(shí)施例在每個(gè)OSD中,根據(jù)掛載的物理磁盤分區(qū)情況,配置若干存儲(chǔ)單元(SU)。每個(gè)SU屬于一個(gè)物理磁盤分區(qū),同一個(gè)物理磁盤分區(qū)可以有多個(gè)SU。 每個(gè)SU目錄下有Data (數(shù)據(jù))和Compact (壓縮)兩個(gè)子目錄和一個(gè)存儲(chǔ)單元配置文件 (SUC)。Data目錄下的文件用于存儲(chǔ)和索引對(duì)象數(shù)據(jù)。其中,Bundle文件(對(duì)象數(shù)據(jù)文件,可容納多個(gè)對(duì)象數(shù)據(jù),以下簡(jiǎn)稱B文件)用來(lái)存儲(chǔ)對(duì)象數(shù)據(jù),它可包含多個(gè)對(duì)象的數(shù)據(jù), 每個(gè)對(duì)象可屬于一個(gè)B文件。Bundle_Meta文件(與B文件對(duì)應(yīng)的對(duì)象元數(shù)據(jù)文件,以下簡(jiǎn)稱BM文件)與B文件一一對(duì)應(yīng),負(fù)責(zé)存儲(chǔ)在對(duì)應(yīng)B文件中的每個(gè)對(duì)象的元數(shù)據(jù)信息,主要用于對(duì)應(yīng)B文件的壓縮掃描,以及系統(tǒng)重啟時(shí)在內(nèi)存中重建對(duì)應(yīng)B文件的元數(shù)據(jù)信息等。Compact目錄下的文件與Data目錄下的文件對(duì)應(yīng),用于當(dāng)某個(gè)B文件的空間利用率小于閾值時(shí),對(duì)B文件和BM文件壓縮,回收磁盤空間。壓縮期間,Data目錄下B文件中的有效數(shù)據(jù)會(huì)被讀入到Compact目錄下的B_C文件中;壓縮操作完成后,有效的對(duì)象元數(shù)據(jù)會(huì)被填充寫入Compact目錄下的BM_C文件,然后用Compact目錄下的B_C以及BM_C文件覆蓋Data目錄下對(duì)應(yīng)的B文件和BM文件,刪除B_C和BM_C文件。SUC記錄了該SU的一些基本配置信息,如總磁盤空間配額、Data目錄磁盤空間配額、Compact目錄磁盤空間配額、 每個(gè)B文件和BM文件的文件配額等信息。其中B文件的大小可根據(jù)OSD通常處理的對(duì)象的大小、磁盤10性能的因素確定,一般應(yīng)可容納一定數(shù)量的對(duì)象。下面首先說(shuō)明Data目錄下的B文件和BM文件的結(jié)構(gòu),以及對(duì)象元數(shù)據(jù)在內(nèi)存中的數(shù)據(jù)組織方式。每個(gè)B文件由一個(gè)超級(jí)塊和多個(gè)Slice (數(shù)據(jù)片)組成。超級(jí)塊中可存儲(chǔ)B文件的空間配額等信息。Slice中記錄了每個(gè)對(duì)象塊及其元數(shù)據(jù)信息。圖2示出了 B文件的組成結(jié)構(gòu)以及每個(gè)Slice的組成格式。如圖所示,Slice Key由<0ID,BID>兩部分組成,其中, OID是對(duì)象塊所屬對(duì)象的對(duì)象標(biāo)識(shí)符;BID是對(duì)象塊的標(biāo)識(shí)符(如對(duì)象塊編號(hào)),可表示對(duì)象塊在其所屬對(duì)象內(nèi)的塊偏址。Flag用來(lái)記錄對(duì)象塊是否有效,可使用True表示該塊能提供正常服務(wù),使用False表示該塊已經(jīng)被刪除。Size用來(lái)指出對(duì)象塊的長(zhǎng)度。Block是該對(duì)象塊的實(shí)體數(shù)據(jù)。每個(gè)BM文件由一個(gè)超級(jí)塊和多個(gè)ObjectMeta(對(duì)象元數(shù)據(jù))組成。超級(jí)塊中可存儲(chǔ)BM文件的空間配額等信息。圖3示出了 BM文件的組成以及每個(gè)ObjectMeta的組成格式。如圖所示,ObjectMeta記錄了每個(gè)對(duì)象的基本元數(shù)據(jù)和其包含的對(duì)象塊的元數(shù)據(jù)信息。其中,對(duì)象的基本元數(shù)據(jù)可包括對(duì)象標(biāo)識(shí)符0ID、對(duì)象大小0_size ;對(duì)象塊的元數(shù)據(jù)可包括對(duì)象塊標(biāo)識(shí)符BID、對(duì)象塊大小Size、對(duì)象塊在所屬對(duì)象內(nèi)的偏址(即地址偏移量) Offset。為了在B文件中快速取回對(duì)象塊,每個(gè)OSD需要維持一個(gè)元數(shù)據(jù)內(nèi)存數(shù)據(jù)結(jié)構(gòu), 它指明了元數(shù)據(jù)在內(nèi)存中的數(shù)據(jù)組織方式。內(nèi)存數(shù)據(jù)結(jié)構(gòu)記錄了每個(gè)對(duì)象的每個(gè)對(duì)象塊Slice Key到〈Offset,Size〉的映射,其中,Offset是指對(duì)象塊對(duì)應(yīng)的Slice在B文件的偏址。在具體實(shí)現(xiàn)中可采用較簡(jiǎn)單的直接組織方式,如圖4所示。參見圖4,為本發(fā)明實(shí)施例提供的對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)示意圖。內(nèi)存中的對(duì)象元數(shù)據(jù)主要包含以下信息:“0ID,0_size,Vec<BID,(size,offset) >”。其中,OID是對(duì)象標(biāo)識(shí)符,根據(jù)它來(lái)定位對(duì)象元數(shù)據(jù)在內(nèi)存中的位置,若內(nèi)存中沒(méi)有該條目,說(shuō)明OSD內(nèi)沒(méi)有存放該對(duì)象;0_siZe是對(duì)象的總大小,它等于對(duì)象所有對(duì)象塊的size的總和;“Vec<BID, (size, offset) ”〉里記錄了對(duì)象的所有對(duì)象塊的元數(shù)據(jù)信息。由于隨機(jī)磁盤IO操作會(huì)嚴(yán)重影響系統(tǒng)性能,因此本發(fā)明實(shí)施例優(yōu)選采取順序讀寫的方式訪問(wèn)文件。新來(lái)的對(duì)象數(shù)據(jù)會(huì)被填充到當(dāng)前B文件的尾部,對(duì)應(yīng)的對(duì)象元數(shù)據(jù)會(huì)被同步填充到當(dāng)前BM文件的尾部。B文件采取寫時(shí)創(chuàng)建的延遲創(chuàng)建策略。最初的系統(tǒng)中,對(duì)應(yīng)的SU的Data目錄下并沒(méi)有B文件。當(dāng)用戶寫對(duì)象數(shù)據(jù)時(shí),檢測(cè)SU的Data目錄下的B文件的狀態(tài),若其中沒(méi)有B 文件或者已創(chuàng)建的B文件大小達(dá)到設(shè)定閾值,并且在SU的Data磁盤空間配額允許的情況下,則創(chuàng)建新的B文件以及與其對(duì)應(yīng)的BM文件;若其中有B文件且B文件的大小未達(dá)到設(shè)定閾值,則不需要?jiǎng)?chuàng)建B文件和對(duì)應(yīng)的BM文件,在寫對(duì)象數(shù)據(jù)時(shí),可寫入到現(xiàn)有B文件及其對(duì)應(yīng)的BM文件中。在OSD運(yùn)行中,會(huì)為每個(gè)B文件計(jì)算其已經(jīng)使用的空間(表示為Used)、存儲(chǔ)有效對(duì)象塊的空間(表示為Valid),B文件的空間利用率P = Valid/Used。如果每個(gè)B文件的文件空間配額為Max,則當(dāng)hed+當(dāng)前要寫入B文件的數(shù)據(jù)大小>Max時(shí),說(shuō)明該B文件的存儲(chǔ)空間不夠,需要在SU內(nèi)新分配一個(gè)B文件來(lái)存放后續(xù)的對(duì)象數(shù)據(jù)?;谏鲜鯫SD對(duì)象數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),下面結(jié)合附圖詳細(xì)描述對(duì)象數(shù)據(jù)的各種處理流程。參見圖5,為本發(fā)明實(shí)施例提供的加載對(duì)象元數(shù)據(jù)到內(nèi)存的流程示意圖。由于訪問(wèn)對(duì)象數(shù)據(jù)需要先獲得對(duì)象元數(shù)據(jù)信息,為了避免隨機(jī)磁盤IO操作,可將對(duì)象元數(shù)據(jù)信息全部載入到內(nèi)存中。通常在系統(tǒng)啟動(dòng)時(shí)或者在因系統(tǒng)出錯(cuò)而需要重啟恢復(fù)時(shí),在內(nèi)存中加載對(duì)象元數(shù)據(jù)信息。在加載對(duì)象元數(shù)據(jù)到內(nèi)存的過(guò)程中,可以按照B文件中的每個(gè)條目依次對(duì)B文件進(jìn)行檢查,但由于B文件通常較大,通過(guò)順序讀完它的所有內(nèi)容來(lái)重構(gòu)對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)將比較耗時(shí)。為解決該問(wèn)題,本發(fā)明實(shí)施例優(yōu)選根據(jù)BM文件建立對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu), 即,采用BM文件來(lái)記錄對(duì)應(yīng)B文件中包含的對(duì)象的元數(shù)據(jù)信息。具體的,在加載對(duì)象元數(shù)據(jù)到內(nèi)存的過(guò)程中,讀取BM中的對(duì)象元數(shù)據(jù),判斷當(dāng)前讀取到的對(duì)象元數(shù)據(jù)所對(duì)應(yīng)的OID是否已經(jīng)存在于對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)中,若不存在,則將當(dāng)前讀取到的對(duì)象元數(shù)據(jù)保存到對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)中;否則,先刪除對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)中的該OID 對(duì)應(yīng)的對(duì)象元數(shù)據(jù),再將當(dāng)前讀取到的對(duì)象元數(shù)據(jù)保存到對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)中; 重復(fù)以上操作,直到BM文件中的所有對(duì)象元數(shù)據(jù)遍歷完成。通過(guò)BM文件來(lái)重建對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu),可以減少系統(tǒng)初始化或數(shù)據(jù)恢復(fù)時(shí)間。其流程可包括步驟501,打開BM文件,定位到BM內(nèi)第一條對(duì)象元數(shù)據(jù);步驟502,檢查是否已到BM文件尾部,若沒(méi)有則轉(zhuǎn)到步驟503,否則結(jié)束本流程;
步驟503,檢查內(nèi)存中是否有該對(duì)象的元數(shù)據(jù),若有,則轉(zhuǎn)到步驟504 ;否則,轉(zhuǎn)到步驟505 ;其中,如果內(nèi)存中有該對(duì)象的對(duì)象標(biāo)識(shí)符Oi所對(duì)應(yīng)的對(duì)象元數(shù)據(jù)條目,則表明內(nèi)存中已經(jīng)存在該對(duì)象的元數(shù)據(jù);步驟504,刪除內(nèi)存中已經(jīng)存在的該Oi對(duì)應(yīng)的對(duì)象元數(shù)據(jù)條目,轉(zhuǎn)到步驟505 ;步驟505,將從BM中讀取的這條對(duì)象元數(shù)據(jù)條目“0i,0_size,Vec<BID,(size, offset)) “插入內(nèi)存,轉(zhuǎn)到步驟506。步驟506,在BM文件中定位到下一條對(duì)象元數(shù)據(jù),轉(zhuǎn)到步驟502。從以上加載對(duì)象元數(shù)據(jù)信息到內(nèi)存的流程可以看出,該流程中僅根據(jù)BM文件重建對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)。若向同一個(gè)B文件中多次寫入過(guò)對(duì)象標(biāo)識(shí)符相同的對(duì)象, 則認(rèn)為其是同一個(gè)對(duì)象的多次更新操作,以BM文件中該對(duì)象的最尾部的對(duì)象元數(shù)據(jù)為準(zhǔn), 因此在初始化或恢復(fù)流程中,內(nèi)存中保存的是最后一次更新的對(duì)象元數(shù)據(jù)。參見圖6,為本發(fā)明實(shí)施例提供的對(duì)象數(shù)據(jù)的寫操作流程示意圖。為了提高OSD的訪問(wèn)性能,減少磁盤IO操作,系統(tǒng)中可為對(duì)象提供數(shù)據(jù)緩存,緩存的單位可以以對(duì)象塊(Block)為粒度,Block的大小可設(shè)置,可根據(jù)OSD的磁盤IO性能設(shè)置。一個(gè)對(duì)象可包含一個(gè)Block,若對(duì)象數(shù)據(jù)量較大,則可以根據(jù)將其分割為多個(gè)Block,這樣一個(gè)對(duì)象可能包含多個(gè)對(duì)象塊。當(dāng)客戶端向OSD進(jìn)行對(duì)象寫操作時(shí),OSD可將從網(wǎng)絡(luò)或其它存儲(chǔ)設(shè)備接收到的數(shù)據(jù)放到數(shù)據(jù)緩存中,直到數(shù)據(jù)量達(dá)到一個(gè)Block時(shí),會(huì)以Block為單位將數(shù)據(jù)寫入到B文件中。通常情況下,一個(gè)對(duì)象只能屬于一個(gè)B文件,在寫入之前需要判斷該對(duì)象是否在B中存放得下,如果放得下,則在該B文件中寫入該對(duì)象,否則可以另創(chuàng)建一B文件寫入該對(duì)象。系統(tǒng)可當(dāng)每個(gè)對(duì)象的所有對(duì)象塊全部寫入到B文件后,在相應(yīng)的BM文件中以對(duì)象為粒度將對(duì)象元數(shù)據(jù)寫入BM文件的尾部。此種情況下,由于B文件是按照對(duì)象塊的粒度寫入,而BM文件是按照對(duì)象的粒度寫入,因此可能會(huì)存在對(duì)象的某個(gè)對(duì)象塊早已寫入B文件而由于該對(duì)象沒(méi)有完全寫完,其元數(shù)據(jù)并沒(méi)有寫入BM文件。若此時(shí)系統(tǒng)出錯(cuò),會(huì)導(dǎo)致B文件中有對(duì)象塊而BM中沒(méi)有該對(duì)象元數(shù)據(jù)信息,這種情況下,認(rèn)為對(duì)象寫操作失敗。只有當(dāng) BM文件中有對(duì)應(yīng)的對(duì)象元數(shù)據(jù)條目并且對(duì)應(yīng)的對(duì)象塊所在的Slice中的Flag為Ture時(shí), 才會(huì)認(rèn)為該對(duì)象存在。圖6示出了一種優(yōu)選的對(duì)象數(shù)據(jù)寫操作流程,其中,對(duì)象可能分為多個(gè)對(duì)象塊寫入B文件,當(dāng)要寫入某個(gè)對(duì)象時(shí),其流程可包括步驟601,根據(jù)待寫入的對(duì)象的對(duì)象標(biāo)識(shí)符0i,從對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)中查找該對(duì)象是否存在,若存在則轉(zhuǎn)到步驟602,若不存在則轉(zhuǎn)到步驟603 ;步驟602,調(diào)用刪除對(duì)象操作流程,將已存在的對(duì)象刪除(刪除流程可參見圖7);步驟603 604,將對(duì)象Oi的第j個(gè)對(duì)象塊Bj添加到B文件尾部< (0i,Bj),flag 為T,sj, Block〉,其中,Bj是該對(duì)象塊在該對(duì)象內(nèi)的塊偏址(如塊編號(hào)),flag為T表示是有效數(shù)據(jù),sj是該對(duì)象塊的大小,Block是該對(duì)象塊的實(shí)體數(shù)據(jù);更新B文件的Used = used+sj ;步驟605,若該對(duì)象塊不是該對(duì)象的最后一塊,則轉(zhuǎn)到步驟606,否則轉(zhuǎn)到步驟 607 ;步驟606,遞增j值(即++j),轉(zhuǎn)到步驟604 ;
步驟607 609,該對(duì)象的所有對(duì)象都已寫完,更新對(duì)應(yīng)B文件的Vaild = Vaild+0_siZe,在對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)中插入該對(duì)象的元數(shù)據(jù)信息<0i,0_size, Vec (Bk, sk,offk)>,將該對(duì)象元數(shù)據(jù) <0i, 0_size,Vec (Bk, sk,offk) > 順序?qū)懭氲?BM 文件尾部,其中,k從1到對(duì)象塊總數(shù)。為了提高OSD的并發(fā)訪問(wèn)能力,OSD內(nèi)可采用多個(gè)線程并發(fā)執(zhí)行對(duì)象數(shù)據(jù)的讀寫操作。通過(guò)以上寫操作流程可以看出,若向同一個(gè)B文件中多次寫入過(guò)對(duì)象標(biāo)識(shí)符相同的對(duì)象,則認(rèn)為其是同一個(gè)對(duì)象的多次更新操作,以最后一次為準(zhǔn),會(huì)調(diào)用刪除對(duì)象操作將已存在的對(duì)象塊所在的Slice的Flag設(shè)置為F,內(nèi)存中保留的是最后一次更新的對(duì)象元數(shù)據(jù),通過(guò)該對(duì)象元數(shù)據(jù)只能訪問(wèn)到最新的對(duì)象數(shù)據(jù)。由于在刪除過(guò)程中沒(méi)有將BM文件中原來(lái)的對(duì)象元數(shù)據(jù)刪除,而又在其尾部添加了一條該對(duì)象的新元數(shù)據(jù),因而會(huì)有同一個(gè)對(duì)象對(duì)應(yīng)有多條對(duì)象元數(shù)據(jù)的情況,通過(guò)圖5所示的對(duì)象元數(shù)據(jù)加載到內(nèi)存的流程,可保證以最后一次寫入的對(duì)象及其元數(shù)據(jù)為準(zhǔn)。參見圖7,為本發(fā)明實(shí)施例提供的刪除對(duì)象數(shù)據(jù)的流程示意圖。對(duì)象數(shù)據(jù)可能分散存放在B文件的不同slice中,其刪除流程可包括步驟701,根據(jù)待刪除對(duì)象的對(duì)象標(biāo)識(shí)符0i,從對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)中查找該對(duì)象是否存在,若不存在則結(jié)束本流程,若存在則轉(zhuǎn)到步驟702 ;其中,若對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)中存在該Oi對(duì)應(yīng)的條目,則表明該對(duì)象存在;步驟702 703,讀取該對(duì)象的元數(shù)據(jù)信息<0i,0_size,Vec (Bj,sj,off j) >,獲知對(duì)象的所有對(duì)象塊在B文件中的偏址,將a賦值為1 (即從第一塊開始);步驟704,在B文件中,根據(jù)元數(shù)據(jù)信息直接定位到Slice key為<0i,Ba>的 Slice ;將該Slice中的Flag置為F(表明該對(duì)象已經(jīng)被刪除);步驟705 706,若其為第一個(gè)對(duì)象塊,則更新該B文件的Vaild = Vaild-0_size, 其中0_size為標(biāo)識(shí)符為Oi的對(duì)象的對(duì)象大小;步驟707,判斷a是否等于該對(duì)象的對(duì)象塊總數(shù)(即該對(duì)象塊是否是最后一塊), 若不等于,則轉(zhuǎn)到步驟708,否則轉(zhuǎn)到步驟709 ;步驟708,遞增a (即++a),轉(zhuǎn)到步驟704 ;步驟709,將該對(duì)象元數(shù)據(jù)從內(nèi)存數(shù)據(jù)結(jié)構(gòu)中刪除。以上流程中,在將一個(gè)對(duì)象的第一個(gè)對(duì)象塊的flag置為F后,更新B文件的Vaild =Vaild-0_size,當(dāng)然也可以在將一個(gè)對(duì)象的最后一個(gè)對(duì)象塊的flag置為F后,更新B文件的Vai 1 d = Vai 1 d-0_size,還可以在將每個(gè)對(duì)象塊的flag置為F后,更新B文件的Vai 1 d =Vaild_B_size,其中B_size為當(dāng)前對(duì)象塊的大小。以上流程是從一個(gè)對(duì)象的第一個(gè)對(duì)象塊開始并逐個(gè)進(jìn)行處理直到該對(duì)象的最后一個(gè)對(duì)象塊為止,當(dāng)然還可以采用其它順序,例如從一個(gè)對(duì)象的最后一個(gè)對(duì)象塊開始到第一個(gè)對(duì)象塊為止。通過(guò)以上刪除對(duì)象數(shù)據(jù)流程可以看出,在刪除過(guò)程中,僅設(shè)置了 B文件中相應(yīng) Slice的Flag為F,而沒(méi)有對(duì)BM文件的相應(yīng)條目進(jìn)行修改(為了避免隨機(jī)修改影響性能), 可能會(huì)出現(xiàn)系統(tǒng)重啟后根據(jù)BM文件重構(gòu)內(nèi)存數(shù)據(jù)結(jié)構(gòu)后有某個(gè)對(duì)象的元數(shù)據(jù)條目而在讀寫對(duì)象數(shù)據(jù)時(shí)發(fā)現(xiàn)其相應(yīng)Slice的Flag為F,此時(shí)只需要將該對(duì)象元數(shù)據(jù)從內(nèi)存中刪除即可。參見圖8,為本發(fā)明實(shí)施例提供的壓縮對(duì)象存儲(chǔ)空間的流程示意圖。當(dāng)某個(gè)B文件的空間利用率P = Valid/Used小于空間利用率閾值A(chǔ)時(shí),說(shuō)明該B 文件中垃圾數(shù)據(jù)過(guò)多,需要對(duì)其壓縮,進(jìn)行空間回收。另外,通過(guò)以上寫對(duì)象數(shù)據(jù)流程可以看出,由于是最后寫B(tài)M文件,可能存在某些對(duì)象塊所在的Slice的Flag為T而BM文件沒(méi)有該對(duì)象條目的情況(如寫對(duì)象塊的過(guò)程中系統(tǒng)出錯(cuò)),這時(shí)可能是只完成對(duì)象的部分寫操作,它們會(huì)成為垃圾數(shù)據(jù)。當(dāng)B文件的空間利用率P小于空間利用率閾值A(chǔ)時(shí),這些空間可以在壓縮操作中被回收。當(dāng)某個(gè)B文件的空間利用率P = Valid/Used小于空間利用率閾值時(shí),其壓縮流程可包括 步驟801,在該SU的Compact目錄下創(chuàng)建B_C和BM_C文件;步驟802 803,檢查待壓縮的B文件是否有對(duì)應(yīng)的內(nèi)存數(shù)據(jù)結(jié)構(gòu),若沒(méi)有,則根據(jù)其BM文件將該B文件的對(duì)象元數(shù)據(jù)都讀入內(nèi)存,重建對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)(其過(guò)程可參考圖5所示的流程);步驟804,遍歷內(nèi)存中對(duì)應(yīng)的對(duì)象元數(shù)據(jù),若遍歷完則轉(zhuǎn)到步驟812,否則轉(zhuǎn)到步驟 805 ;步驟805,取下一條對(duì)象元數(shù)據(jù) <0i,0_size, Vec (Bj,sj,off j) >,轉(zhuǎn)到步驟 806 ;步驟806,根據(jù)該對(duì)象元數(shù)據(jù),從Data目錄下的對(duì)應(yīng)B文件中取出該對(duì)象的所有對(duì)象塊所在的Slice的信息;步驟807,第一個(gè)對(duì)象塊對(duì)應(yīng)的Slice中的Flag是否為T,若不是則說(shuō)明該對(duì)象已被刪除,則轉(zhuǎn)到步驟808 ;否則轉(zhuǎn)到步驟809 ;步驟808,將該對(duì)象元數(shù)據(jù)從內(nèi)存中刪除;步驟809 811,將該對(duì)象的所有對(duì)象塊所在的slice的信息依次順序?qū)懭氲?Compact目錄下的B_C文件的尾部,計(jì)算該B_C文件的hed = used+0_size, valid = used, 根據(jù)該對(duì)象的所有對(duì)象塊在B_C文件中的新偏址修改對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)中該對(duì)象的元數(shù)據(jù)信息;轉(zhuǎn)到步驟804 ;步驟812,重新遍歷對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)中對(duì)應(yīng)的對(duì)象元數(shù)據(jù);轉(zhuǎn)到步驟 813 ;步驟813,取當(dāng)前的對(duì)象元數(shù)據(jù)信息<0i,0_size, Vec (Bj, sj, off j)>順序?qū)懭氲?Compact目錄下BM_C文件的尾部;步驟814,檢查是否遍歷完,是則轉(zhuǎn)到步驟816,否則轉(zhuǎn)到步驟815 ;步驟815,在內(nèi)存中定位到下一條對(duì)象元數(shù)據(jù),轉(zhuǎn)到步驟813 ;步驟816 818,將Compact目錄下的B_C以及BM_C文件覆蓋Data目錄下對(duì)應(yīng)的 B和BM文件,并用B_C文件對(duì)應(yīng)的Used和Valid信息更新B文件的對(duì)應(yīng)信息,并將B_C和 BM_C文件刪除。當(dāng)然,也可以在向B_C文件寫入數(shù)據(jù)塊時(shí),直接更新B文件對(duì)應(yīng)的Used和 Valid信息。上述流程對(duì)每個(gè)B文件采用單線程負(fù)責(zé)壓縮工作,使得每個(gè)對(duì)象的所有對(duì)象塊被順序重寫入B_C文件,保證了下次讀該對(duì)象的順序性,提高了系統(tǒng)性能。壓縮過(guò)程可在后臺(tái)運(yùn)行,壓縮過(guò)程中相應(yīng)的B文件和BM文件不對(duì)外提供服務(wù),只有當(dāng)壓縮過(guò)程完成后才會(huì)采用更新的B文件和BM文件對(duì)外提供服務(wù)。若在壓縮過(guò)程中突然遇到系統(tǒng)故障,則系統(tǒng)重啟后會(huì)發(fā)現(xiàn)在Compact目錄下有相應(yīng)的B_C和BM_C文件存在, 此時(shí)將該文件刪除,采用對(duì)應(yīng)的B文件和BM文件重做壓縮操作即可。通過(guò)以上流程可以看出,首先根據(jù)對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu),僅將標(biāo)識(shí)為有效的對(duì)象塊(即Flag為T的slice)寫入B_C文件,并刪除內(nèi)存數(shù)據(jù)結(jié)構(gòu)中無(wú)效對(duì)象的元數(shù)據(jù),然后再將內(nèi)存數(shù)據(jù)結(jié)構(gòu)中的對(duì)象元數(shù)據(jù)寫入BM_C文件,最后用B_C文件內(nèi)容覆蓋B文件,用BM_C文件內(nèi)容覆蓋BM文件,從而使更新后的B文件存儲(chǔ)的對(duì)象數(shù)據(jù)均為有效數(shù)據(jù), BM文件中存儲(chǔ)的元數(shù)據(jù)均為有效對(duì)象的元數(shù)據(jù),達(dá)到了壓縮B文件及其對(duì)應(yīng)的BM文件的目的。參見圖9,為本發(fā)明實(shí)施例提供的對(duì)象數(shù)據(jù)的讀流程示意圖。在寫入對(duì)象數(shù)據(jù)操作中,由于多線程寫入的影響,同一個(gè)對(duì)象的多個(gè)Block在B文件內(nèi)不一定是連續(xù)性存放的, 即,對(duì)象數(shù)據(jù)可能位于B文件中不連續(xù)的多個(gè)Slice中。當(dāng)要讀取某個(gè)對(duì)象的數(shù)據(jù)時(shí),可首先在數(shù)據(jù)緩存中查找,若存在則直接讀取,若緩存中沒(méi)有,則進(jìn)行磁盤操作,從B文件中讀取對(duì)象數(shù)據(jù),這時(shí)需要知道對(duì)象數(shù)據(jù)在B文件內(nèi)的偏址和大小(即需要知道對(duì)象元數(shù)據(jù)),然后將對(duì)象數(shù)據(jù)讀取到數(shù)據(jù)緩存中(便于下次訪問(wèn)時(shí)直接命中緩存)并將數(shù)據(jù)返回給客戶端。當(dāng)然,也可以直接通過(guò)磁盤IO操作讀取對(duì)象數(shù)據(jù)。其讀操作流程可包括步驟901,根據(jù)對(duì)象標(biāo)識(shí)符0i,從對(duì)象元數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)中查找該對(duì)象是否存在,若存在則轉(zhuǎn)到步驟902,若不存在則結(jié)束本流程;步驟902,讀取該對(duì)象的元數(shù)據(jù)信息<0i,0_siZe,VeC(Bj,sj,off j) >,獲知對(duì)象的所有對(duì)象塊在B文件中的偏址;步驟903,根據(jù)要訪問(wèn)對(duì)象的偏址(offset)和長(zhǎng)度(size)計(jì)算出要訪問(wèn)的所有對(duì)象塊k-m,其中k為第一個(gè)對(duì)象塊的編號(hào),m為最后一個(gè)對(duì)象塊的編號(hào);將a賦值為k ;步驟904,在B文件中根據(jù)該對(duì)象元數(shù)據(jù)信息直接定位到Slice key為<0i,Ba>的 Slice ;步驟905,判斷該Slice中的Flag是否為F,若為F說(shuō)明該對(duì)象已經(jīng)被刪除(即為無(wú)效數(shù)據(jù)),則結(jié)束本流程;若Flag為T,則轉(zhuǎn)到步驟906 ;步驟906,將該Slice對(duì)應(yīng)的Block讀出;步驟907,判斷a是否等于m(即該對(duì)象塊不是要讀取的最后一個(gè)對(duì)象塊),若不等于,則遞增a (即++a),轉(zhuǎn)到步驟904 ;否則,結(jié)束本流程。為了減少隨機(jī)修改操作影響OSD的性能,在刪除對(duì)象數(shù)據(jù)操作中,僅設(shè)置了 B文件中相應(yīng)Slice的Flag為F,而沒(méi)有對(duì)BM文件的相應(yīng)條目進(jìn)行修改,因此可能會(huì)出現(xiàn)B文件中對(duì)應(yīng)對(duì)象塊為F而BM文件有該對(duì)象元數(shù)據(jù)的情況。針對(duì)這種情況,以上讀對(duì)象數(shù)據(jù)流程沒(méi)有涉及到修改操作。在本發(fā)明的另一實(shí)施例中,在根據(jù)對(duì)象元數(shù)據(jù)訪問(wèn)到對(duì)象塊后,可以根據(jù)Flag來(lái)決定該對(duì)象是否有效。若在讀寫對(duì)象時(shí)發(fā)現(xiàn)對(duì)象塊所在Slice的Flag為F,則認(rèn)為該對(duì)象無(wú)效,此時(shí)可將該對(duì)象的元數(shù)據(jù)從對(duì)象數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)中刪除。需要說(shuō)明的是,本發(fā)明實(shí)施例中的壓縮對(duì)象存儲(chǔ)空間的流程為可選流程。在無(wú)需壓縮對(duì)象存儲(chǔ)空間的情況下,在對(duì)象數(shù)據(jù)的寫操作流程或刪除對(duì)象數(shù)據(jù)的流程中,可以省略對(duì)B文件的^ed參數(shù)、Valid參數(shù)等參數(shù)進(jìn)行更新的操作。
基于相同的技術(shù)構(gòu)思,本發(fā)明實(shí)施例還提供了一種對(duì)象處理裝置,該裝置可以是適用于上述流程的0SD。參見圖10,為本發(fā)明實(shí)施例提供的對(duì)象數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。該裝置可包括接口模塊1000、寫處理模塊1002,此外還可包括加載模塊1001,并可根據(jù)需要,還可包括以下模塊中的一種或多種刪除處理模塊1003、壓縮處理模塊1004和讀處理模塊1005, 相應(yīng)的,接口模塊1000可接收寫對(duì)象的命令、刪除對(duì)象的命令、讀取對(duì)象的命令等對(duì)象處理命令,以觸發(fā)相應(yīng)對(duì)象處理功能模塊進(jìn)行相應(yīng)對(duì)象處理過(guò)程。其中,接口模塊1000可接收寫對(duì)象的命令,寫處理模塊1002可接口模塊接收到寫對(duì)象的命令后,在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象的對(duì)象塊,并在與所述對(duì)象數(shù)據(jù)文件對(duì)應(yīng)的元數(shù)據(jù)文件中寫入該對(duì)象的元數(shù)據(jù),如在寫入該對(duì)象的所有對(duì)象塊后在與所述對(duì)象數(shù)據(jù)文件對(duì)應(yīng)的元數(shù)據(jù)文件中寫入該對(duì)象的元數(shù)據(jù)。其中,在不超過(guò)所述對(duì)象數(shù)據(jù)文件的配額空間的情況下,所述對(duì)象數(shù)據(jù)文件能夠存儲(chǔ)多個(gè)對(duì)象。進(jìn)一步的,寫處理模塊1002在對(duì)象數(shù)據(jù)文件中寫入所述對(duì)象的對(duì)象塊的過(guò)程中,將該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)置為有效。加載模塊1001可在內(nèi)存中載入對(duì)象元數(shù)據(jù)(圖中表示為BM01),所述對(duì)象元數(shù)據(jù)包括對(duì)象中各對(duì)象塊的元數(shù)據(jù);相應(yīng)的,寫處理模塊1002還可在寫入所述對(duì)象的所有對(duì)象塊后,在載入內(nèi)存的對(duì)象元數(shù)據(jù)中寫入所述對(duì)象的元數(shù)據(jù)。進(jìn)一步的,寫處理模塊1002在寫入對(duì)象之前,判斷載入內(nèi)存的對(duì)象元數(shù)據(jù)中是否存在所述對(duì)象的對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象元數(shù)據(jù);若判斷為存在,則先將對(duì)象數(shù)據(jù)文件中與所述對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象中的各對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)置為無(wú)效,從內(nèi)存中刪除所述對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象元數(shù)據(jù),再在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象的對(duì)象塊;若不存在,則在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象的對(duì)象塊。具體的,加載模塊1001可逐一讀取對(duì)象元數(shù)據(jù)文件中的對(duì)象元數(shù)據(jù),針對(duì)讀取到的每條對(duì)象元數(shù)據(jù)判斷其所對(duì)應(yīng)的對(duì)象標(biāo)識(shí)是否已經(jīng)存在于內(nèi)存中的對(duì)象元數(shù)據(jù)中,若不存在,則將當(dāng)前讀取到的對(duì)象元數(shù)據(jù)保存到內(nèi)存中;否則,先刪除內(nèi)存中該對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象元數(shù)據(jù),再將當(dāng)前讀取到的對(duì)象元數(shù)據(jù)保存到內(nèi)存中。寫處理模塊1002還可用于當(dāng)待寫入對(duì)象的大小超過(guò)設(shè)定閾值時(shí),在寫入該對(duì)象之前將待寫入對(duì)象分割為多個(gè)大小不超過(guò)所述設(shè)定閾值的對(duì)象塊;當(dāng)待寫入對(duì)象的大小未超過(guò)設(shè)定閾值時(shí),將該對(duì)象作為一個(gè)對(duì)象塊處理。寫處理模塊1002可在對(duì)象數(shù)據(jù)文件的尾部順序?qū)懭雽?duì)象塊,在所述元數(shù)據(jù)文件的尾部順序?qū)懭雽?duì)象元數(shù)據(jù)。寫處理模塊1002可具體用于若當(dāng)前對(duì)象數(shù)據(jù)文件的大小與當(dāng)前待寫入對(duì)象的大小還未達(dá)到該對(duì)象數(shù)據(jù)文件的空間配額,則在該對(duì)象數(shù)據(jù)文件中寫入對(duì)象;所述創(chuàng)建模塊,用于若當(dāng)前對(duì)象數(shù)據(jù)文件的大小與當(dāng)前待寫入對(duì)象的大小達(dá)到該對(duì)象數(shù)據(jù)文件的空間配額,則創(chuàng)建新的對(duì)象數(shù)據(jù)文件和對(duì)應(yīng)的元數(shù)據(jù)文件,并在新創(chuàng)造的對(duì)象數(shù)據(jù)文件中寫入對(duì)象,在新創(chuàng)建的元數(shù)據(jù)文件中寫入對(duì)象元數(shù)據(jù)。寫處理模塊1002還可在向?qū)ο髷?shù)據(jù)文件寫入對(duì)象塊后,根據(jù)寫入的對(duì)象塊的大小更新所述對(duì)象數(shù)據(jù)文件已使用空間大??;在向?qū)ο髷?shù)據(jù)文件寫入對(duì)象的所有對(duì)象塊后, 根據(jù)寫入的對(duì)象的大小更新所述對(duì)象數(shù)據(jù)文件的有效對(duì)象塊所占空間大小。刪除處理模塊1003,用于判斷內(nèi)存中的對(duì)象元數(shù)據(jù)中是否存在待刪除對(duì)象的對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象元數(shù)據(jù);若判斷為存在,則根據(jù)內(nèi)存中該對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象元數(shù)據(jù),逐一定位出對(duì)象數(shù)據(jù)文件中的相應(yīng)對(duì)象塊,逐一將所述對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)設(shè)置為無(wú)效, 并當(dāng)將所述所有對(duì)象塊的有效性標(biāo)識(shí)設(shè)置為無(wú)效后,刪除內(nèi)存中所述對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象元數(shù)據(jù)。刪除處理模塊1003還可在將對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)設(shè)置為無(wú)效后,根據(jù)所述待刪除的對(duì)象的大小更新所述對(duì)象數(shù)據(jù)文件的有效對(duì)象塊所占空間大小。壓縮處理模塊1004,用于當(dāng)對(duì)象數(shù)據(jù)文件的有效對(duì)象塊所占空間大小與已使用空間大小的比值低于設(shè)定閾值時(shí),分別為待壓縮存儲(chǔ)空間的對(duì)象數(shù)據(jù)文件和對(duì)應(yīng)的對(duì)象元數(shù)據(jù)文件,創(chuàng)建中間過(guò)程文件;遍歷內(nèi)存中待壓縮存儲(chǔ)空間的對(duì)象的元數(shù)據(jù),并在遍歷到每個(gè)對(duì)象塊的元數(shù)據(jù)時(shí),根據(jù)當(dāng)前對(duì)象塊的元數(shù)據(jù)定位到對(duì)象數(shù)據(jù)文件中的相應(yīng)對(duì)象塊,若該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)為無(wú)效,則從內(nèi)存中刪除該對(duì)象塊的元數(shù)據(jù);若該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)為有效,則將該對(duì)象塊寫入對(duì)象數(shù)據(jù)文件的中間過(guò)程文件,并更新內(nèi)存中的相應(yīng)對(duì)象塊的元數(shù)據(jù);遍歷內(nèi)存中待壓縮存儲(chǔ)空間的對(duì)象的元數(shù)據(jù),并在遍歷到每個(gè)對(duì)象塊的元數(shù)據(jù)時(shí),將當(dāng)前的對(duì)象塊元數(shù)據(jù)寫入對(duì)象元數(shù)據(jù)文件的中間過(guò)程文件;用對(duì)象數(shù)據(jù)文件的中間過(guò)程文件覆蓋待壓縮存儲(chǔ)空間的對(duì)象數(shù)據(jù)文件,用對(duì)象元數(shù)據(jù)文件的中間過(guò)程文件覆蓋待壓縮存儲(chǔ)空間的對(duì)象元數(shù)據(jù)文件。壓縮處理模塊1004可向?qū)ο髷?shù)據(jù)文件的中間過(guò)程文件寫入對(duì)象塊時(shí),寫入到該文件的尾部;向?qū)ο笤獢?shù)據(jù)文件的中間過(guò)程文件寫入對(duì)象元數(shù)據(jù)時(shí),寫入到該文件的尾部。壓縮處理模塊1004還可在將對(duì)象塊寫入到對(duì)象數(shù)據(jù)文件的中間過(guò)程文件后,根據(jù)待壓縮存儲(chǔ)空間的對(duì)象的大小,更新該待壓縮存儲(chǔ)空間的對(duì)象數(shù)據(jù)文件的已使用空間大小和有效對(duì)象塊所占空間大小。讀處理模塊1005,用于當(dāng)需要讀取對(duì)象時(shí),判斷內(nèi)存中是否存在與待讀取對(duì)象的對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象元數(shù)據(jù),若存在,則逐一根據(jù)該對(duì)象元數(shù)據(jù)中的對(duì)象塊元數(shù)據(jù)定位到對(duì)象數(shù)據(jù)文件中的相應(yīng)對(duì)象塊,并在該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)為有效的情況下,讀出該對(duì)象塊。讀處理模塊1005可具體用于若判斷內(nèi)存中存在與待讀取對(duì)象的對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象元數(shù)據(jù),則首先根據(jù)該對(duì)象元數(shù)據(jù)從緩存中讀取對(duì)應(yīng)的對(duì)象塊;若未從緩存中讀取到對(duì)應(yīng)的對(duì)象塊,則再逐一根據(jù)該對(duì)象元數(shù)據(jù)中的對(duì)象塊元數(shù)據(jù)定位到對(duì)象數(shù)據(jù)文件中的相應(yīng)對(duì)象塊,并在該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)為有效的情況下,讀出該對(duì)象塊;以及,從對(duì)象數(shù)據(jù)文件讀出對(duì)象塊后,將讀出的對(duì)象塊存放在緩存中。綜上所述,本發(fā)明實(shí)施例,一方面通過(guò)將多個(gè)對(duì)象綁定為單個(gè)大文件(B文件),減少了 OSD內(nèi)部的文件總數(shù),一定程度上避免了文件數(shù)量眾多以及平坦的目錄結(jié)構(gòu)導(dǎo)致的文件查找效率低、需要多次磁盤IO操作才能訪問(wèn)到對(duì)象的問(wèn)題;另一方面,通過(guò)將對(duì)象分為對(duì)象塊,以對(duì)象塊為粒度將其寫入到B文件中,減輕了對(duì)象數(shù)據(jù)對(duì)數(shù)據(jù)緩存區(qū)的要求,同時(shí)高效率地利用了 OSD的磁盤能力??梢钥闯觯景l(fā)明實(shí)施例使得OSD能對(duì)外提供高性能的服務(wù)。通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可以通過(guò)硬件實(shí)現(xiàn),也可以借助軟件加必要的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn)?;谶@樣的理解,本發(fā)明的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該軟件產(chǎn)品可以存儲(chǔ)在一個(gè)非易失性存儲(chǔ)介質(zhì)(可以是⑶-ROM,U盤,移動(dòng)硬盤等)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。本領(lǐng)域技術(shù)人員可以理解附圖只是一個(gè)優(yōu)選實(shí)施例的示意圖,附圖中的模塊或流程并不一定是實(shí)施本發(fā)明所必須的。本領(lǐng)域技術(shù)人員可以理解實(shí)施例中的裝置中的模塊可以按照實(shí)施例描述進(jìn)行分布于實(shí)施例的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實(shí)施例的一個(gè)或多個(gè)裝置中。上述實(shí)施例的模塊可以合并為一個(gè)模塊,也可以進(jìn)一步拆分成多個(gè)子模塊。上述本發(fā)明序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。以上公開的僅為本發(fā)明的幾個(gè)具體實(shí)施例,但是,本發(fā)明并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種對(duì)象數(shù)據(jù)處理方法,其特征在于,包括接收到寫對(duì)象的命令后,在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象的對(duì)象塊,并在與所述對(duì)象數(shù)據(jù)文件對(duì)應(yīng)的元數(shù)據(jù)文件中寫入該對(duì)象的元數(shù)據(jù);其中,在不超過(guò)所述對(duì)象數(shù)據(jù)文件的配額空間的情況下,所述對(duì)象數(shù)據(jù)文件能夠存儲(chǔ)多個(gè)對(duì)象。
2.如權(quán)利要求1所述的方法,其特征在于,在對(duì)象數(shù)據(jù)文件中寫入所述對(duì)象的對(duì)象塊的過(guò)程中,還包括將該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)置為有效。
3.如權(quán)利要求1所述的方法,其特征在于,還包括預(yù)先在內(nèi)存中載入對(duì)象元數(shù)據(jù),所述對(duì)象元數(shù)據(jù)包括對(duì)象中各對(duì)象塊的元數(shù)據(jù);在寫入所述對(duì)象的所有對(duì)象塊后,還包括在載入內(nèi)存的對(duì)象元數(shù)據(jù)中寫入所述對(duì)象的元數(shù)據(jù)。
4.如權(quán)利要求3所述的方法,其特征在于,在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象的對(duì)象塊之前,還包括判斷載入內(nèi)存的對(duì)象元數(shù)據(jù)中是否存在所述對(duì)象的對(duì)象元數(shù)據(jù);所述在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象的對(duì)象塊,具體為若判斷為存在,則先將對(duì)象數(shù)據(jù)文件中所述對(duì)象中的各對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)置為無(wú)效,從內(nèi)存中刪除所述對(duì)象的對(duì)象元數(shù)據(jù),再在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象的對(duì)象塊;若不存在,則在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象的對(duì)象塊。
5.如權(quán)利要求3所述的方法,其特征在于,所述在內(nèi)存中載入對(duì)象元數(shù)據(jù),包括逐一讀取對(duì)象元數(shù)據(jù)文件中的對(duì)象元數(shù)據(jù),針對(duì)讀取到的每條對(duì)象元數(shù)據(jù),執(zhí)行以下步驟判斷其所對(duì)應(yīng)的對(duì)象標(biāo)識(shí)是否已經(jīng)存在于內(nèi)存中的對(duì)象元數(shù)據(jù)中,若不存在,則將當(dāng)前讀取到的對(duì)象元數(shù)據(jù)保存到內(nèi)存中;否則,先刪除內(nèi)存中該對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象元數(shù)據(jù), 再將當(dāng)前讀取到的對(duì)象元數(shù)據(jù)保存到內(nèi)存中。
6.如權(quán)利要求1至5任一項(xiàng)所述的方法,其特征在于,所述對(duì)象數(shù)據(jù)文件中,針對(duì)各對(duì)象塊對(duì)應(yīng)記錄有該對(duì)象塊所屬對(duì)象的對(duì)象標(biāo)識(shí)、該對(duì)象塊在其所屬對(duì)象中的塊偏移、該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)、該對(duì)象塊的大??;所述對(duì)象元數(shù)據(jù)包括對(duì)象標(biāo)識(shí)、對(duì)象大小和該對(duì)象的各對(duì)象塊元數(shù)據(jù),其中,所述對(duì)象塊元數(shù)據(jù)包括對(duì)象塊在其所屬對(duì)象中的塊偏移、對(duì)象塊大小和對(duì)象塊在其所屬對(duì)象中的地址偏移。
7.如權(quán)利要求1至5任一項(xiàng)所述的方法,其特征在于,當(dāng)待寫入對(duì)象的大小超過(guò)設(shè)定閾值時(shí),在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象之前還包括將待寫入對(duì)象分割為多個(gè)大小不超過(guò)所述設(shè)定閾值的對(duì)象塊;當(dāng)待寫入對(duì)象的大小未超過(guò)設(shè)定閾值時(shí),將該對(duì)象作為一個(gè)對(duì)象塊處理。
8.如權(quán)利要求1至5任一項(xiàng)所述的方法,其特征在于,在對(duì)象數(shù)據(jù)文件的尾部順序?qū)懭雽?duì)象塊,在所述元數(shù)據(jù)文件的尾部順序?qū)懭雽?duì)象元數(shù)據(jù)。
9.如權(quán)利要求1至5任一項(xiàng)所述的方法,其特征在于,若當(dāng)前對(duì)象數(shù)據(jù)文件的大小與當(dāng)前待寫入對(duì)象的大小還未達(dá)到該對(duì)象數(shù)據(jù)文件的空間配額,則在該對(duì)象數(shù)據(jù)文件中寫入對(duì)象;若當(dāng)前對(duì)象數(shù)據(jù)文件的大小與當(dāng)前待寫入對(duì)象的大小達(dá)到該對(duì)象數(shù)據(jù)文件的空間配額,則創(chuàng)建新的對(duì)象數(shù)據(jù)文件和對(duì)應(yīng)的元數(shù)據(jù)文件,并在新創(chuàng)造的對(duì)象數(shù)據(jù)文件中寫入對(duì)象,在新創(chuàng)建的元數(shù)據(jù)文件中寫入對(duì)象元數(shù)據(jù)。
10.如權(quán)利要求1至5任一項(xiàng)所述的方法,其特征在于,在向?qū)ο髷?shù)據(jù)文件寫入對(duì)象塊后,還包括根據(jù)寫入的對(duì)象塊的大小更新所述對(duì)象數(shù)據(jù)文件已使用空間大??;在向?qū)ο髷?shù)據(jù)文件寫入對(duì)象的所有對(duì)象塊后,還包括根據(jù)寫入的對(duì)象的大小更新所述對(duì)象數(shù)據(jù)文件的有效對(duì)象塊所占空間大小。
11.如權(quán)利要求1至5任一項(xiàng)所述的方法,其特征在于,當(dāng)對(duì)象數(shù)據(jù)文件的有效對(duì)象塊所占空間大小與已使用空間大小的比值低于設(shè)定閾值時(shí),還包括分別為待壓縮存儲(chǔ)空間的對(duì)象數(shù)據(jù)文件和對(duì)應(yīng)的對(duì)象元數(shù)據(jù)文件,創(chuàng)建中間過(guò)程文件;遍歷載入內(nèi)存的待壓縮存儲(chǔ)空間的對(duì)象的元數(shù)據(jù),并在遍歷到每個(gè)對(duì)象塊的元數(shù)據(jù)時(shí),根據(jù)當(dāng)前對(duì)象塊的元數(shù)據(jù)定位到對(duì)象數(shù)據(jù)文件中的相應(yīng)對(duì)象塊,若該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)為無(wú)效,則從內(nèi)存中刪除該對(duì)象塊的元數(shù)據(jù);若該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)為有效,則將該對(duì)象塊寫入對(duì)象數(shù)據(jù)文件的中間過(guò)程文件,并更新內(nèi)存中的相應(yīng)對(duì)象塊的元數(shù)據(jù);遍歷載入內(nèi)存的待壓縮存儲(chǔ)空間的對(duì)象的元數(shù)據(jù),并在遍歷到每個(gè)對(duì)象塊的元數(shù)據(jù)時(shí),將當(dāng)前的對(duì)象塊元數(shù)據(jù)寫入對(duì)象元數(shù)據(jù)文件的中間過(guò)程文件;用對(duì)象數(shù)據(jù)文件的中間過(guò)程文件覆蓋待壓縮存儲(chǔ)空間的對(duì)象數(shù)據(jù)文件,用對(duì)象元數(shù)據(jù)文件的中間過(guò)程文件覆蓋待壓縮存儲(chǔ)空間的對(duì)象元數(shù)據(jù)文件。
12.如權(quán)利要求11所述的方法,其特征在于,向?qū)ο髷?shù)據(jù)文件的中間過(guò)程文件寫入對(duì)象塊時(shí),將對(duì)象塊寫入到該文件的尾部;向?qū)ο笤獢?shù)據(jù)文件的中間過(guò)程文件寫入對(duì)象元數(shù)據(jù)時(shí),將對(duì)象元數(shù)據(jù)寫入到該文件的尾部。
13.如權(quán)利要求11所述的方法,其特征在于,在將對(duì)象塊寫入到對(duì)象數(shù)據(jù)文件的中間過(guò)程文件后,還包括根據(jù)待壓縮存儲(chǔ)空間的對(duì)象的大小,更新該待壓縮存儲(chǔ)空間的對(duì)象數(shù)據(jù)文件的已使用空間大小和有效對(duì)象塊所占空間大小。
14.如權(quán)利要求1至5任一項(xiàng)所述的方法,其特征在于,還包括接收刪除對(duì)象的命令后,判斷載入內(nèi)存中的對(duì)象元數(shù)據(jù)中是否存在待刪除對(duì)象的對(duì)象元數(shù)據(jù),如果存在,則根據(jù)內(nèi)存中該對(duì)象的對(duì)象元數(shù)據(jù),逐一定位出對(duì)象數(shù)據(jù)文件中的相應(yīng)對(duì)象塊,逐一將所述對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)設(shè)置為無(wú)效,并當(dāng)將所述所有對(duì)象塊的有效性標(biāo)識(shí)設(shè)置為無(wú)效后,刪除內(nèi)存中所述對(duì)象的對(duì)象元數(shù)據(jù)。
15.如權(quán)利要求14所述的方法,其特征在于,在將對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)設(shè)置為無(wú)效后,還包括根據(jù)所述待刪除的對(duì)象的大小更新所述對(duì)象數(shù)據(jù)文件的有效對(duì)象塊所占空間大小。
16.如權(quán)利要求1至5任一項(xiàng)所述的方法,其特征在于,還包括接收到讀取對(duì)象的命令后,判斷載入內(nèi)存中的對(duì)象元數(shù)據(jù)是否存在與待讀取對(duì)象的對(duì)象的對(duì)象元數(shù)據(jù),若存在,則逐一根據(jù)該對(duì)象元數(shù)據(jù)中的對(duì)象塊元數(shù)據(jù)定位到對(duì)象數(shù)據(jù)文件中的相應(yīng)對(duì)象塊,并在該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)為有效的情況下,讀出該對(duì)象塊。
17.如權(quán)利要求16所述的方法,其特征在于,若判斷內(nèi)存中存在待讀取對(duì)象的對(duì)象元數(shù)據(jù),則首先根據(jù)該對(duì)象元數(shù)據(jù)從緩存中讀取對(duì)應(yīng)的對(duì)象塊;若未從緩存中讀取到對(duì)應(yīng)的對(duì)象塊,則再逐一根據(jù)該對(duì)象元數(shù)據(jù)中的對(duì)象塊元數(shù)據(jù)定位到對(duì)象數(shù)據(jù)文件中的相應(yīng)對(duì)象塊,并在該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)為有效的情況下,讀出該對(duì)象塊;從對(duì)象數(shù)據(jù)文件讀出對(duì)象塊后,還包括將讀出的對(duì)象塊存放在緩存中。
18.—種對(duì)象數(shù)據(jù)處理裝置,其特征在于,包括接口模塊,用于接收寫對(duì)象的命令;寫處理模塊,用于在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象的對(duì)象塊,并在與所述對(duì)象數(shù)據(jù)文件對(duì)應(yīng)的元數(shù)據(jù)文件中寫入該對(duì)象的元數(shù)據(jù);其中,在不超過(guò)所述對(duì)象數(shù)據(jù)文件的配額空間的情況下,所述對(duì)象數(shù)據(jù)文件能夠存儲(chǔ)多個(gè)對(duì)象。
19.如權(quán)利要求18所述的裝置,其特征在于,所述寫處理模塊還用于,在對(duì)象數(shù)據(jù)文件中寫入所述對(duì)象的對(duì)象塊的過(guò)程中,將該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)置為有效。
20.如權(quán)利要求18所述的裝置,其特征在于,還包括加載模塊,用于在內(nèi)存中載入對(duì)象元數(shù)據(jù),所述對(duì)象元數(shù)據(jù)包括對(duì)象中各對(duì)象塊的元數(shù)據(jù);所述寫處理模塊還用于,在寫入所述對(duì)象的所有對(duì)象塊后,在載入內(nèi)存的對(duì)象元數(shù)據(jù)中寫入所述對(duì)象的元數(shù)據(jù)。
21.如權(quán)利要求20所述的裝置,其特征在于,所述寫處理模塊具體用于,-在對(duì)象數(shù)據(jù)文件中寫入對(duì)象的對(duì)象塊之前,判斷載入內(nèi)存的對(duì)象元數(shù)據(jù)中是否存在所述對(duì)象的對(duì)象元數(shù)據(jù);若判斷為存在,則先將對(duì)象數(shù)據(jù)文件中所述對(duì)象的各對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)置為無(wú)效,從內(nèi)存中刪除所述對(duì)象的對(duì)象元數(shù)據(jù),再在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象的對(duì)象塊;若不存在,則在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象的對(duì)象塊。
22.如權(quán)利要求20所述的裝置,其特征在于,所述加載模塊具體用于,逐一讀取對(duì)象元數(shù)據(jù)文件中的對(duì)象元數(shù)據(jù),針對(duì)讀取到的每條對(duì)象元數(shù)據(jù)判斷其所對(duì)應(yīng)的對(duì)象標(biāo)識(shí)是否已經(jīng)存在于內(nèi)存中的對(duì)象元數(shù)據(jù)中,若不存在,則將當(dāng)前讀取到的對(duì)象元數(shù)據(jù)保存到內(nèi)存中;否則,先刪除內(nèi)存中該對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象元數(shù)據(jù),再將當(dāng)前讀取到的對(duì)象元數(shù)據(jù)保存到內(nèi)存中。
23.如權(quán)利要求18至22任一項(xiàng)所述的裝置,其特征在于,所述寫處理模塊還用于,當(dāng)待寫入對(duì)象的大小超過(guò)設(shè)定閾值時(shí),在對(duì)象數(shù)據(jù)文件中寫入該對(duì)象之前將待寫入對(duì)象分割為多個(gè)大小不超過(guò)所述設(shè)定閾值的對(duì)象塊;當(dāng)待寫入對(duì)象的大小未超過(guò)設(shè)定閾值時(shí),將該對(duì)象作為一個(gè)對(duì)象塊處理。
24.如權(quán)利要求18至22任一項(xiàng)所述的裝置,其特征在于,所述寫處理模塊具體用于,在對(duì)象數(shù)據(jù)文件的尾部順序?qū)懭雽?duì)象塊,在所述元數(shù)據(jù)文件的尾部順序?qū)懭雽?duì)象元數(shù)據(jù)。
25.如權(quán)利要求18至22任一項(xiàng)所述的裝置,其特征在于,所述寫處理模塊具體用于,若當(dāng)前對(duì)象數(shù)據(jù)文件的大小與當(dāng)前待寫入對(duì)象的大小還未達(dá)到該對(duì)象數(shù)據(jù)文件的空間配額, 則在該對(duì)象數(shù)據(jù)文件中寫入對(duì)象塊;所述創(chuàng)建模塊,用于若當(dāng)前對(duì)象數(shù)據(jù)文件的大小與當(dāng)前待寫入對(duì)象的大小達(dá)到該對(duì)象數(shù)據(jù)文件的空間配額,則創(chuàng)建新的對(duì)象數(shù)據(jù)文件和對(duì)應(yīng)的元數(shù)據(jù)文件,并在新創(chuàng)造的對(duì)象數(shù)據(jù)文件中寫入對(duì)象塊,在新創(chuàng)建的元數(shù)據(jù)文件中寫入對(duì)象元數(shù)據(jù)。
26.如權(quán)利要求18至22任一項(xiàng)所述的裝置,其特征在于,所述寫處理模塊還用于,在向?qū)ο髷?shù)據(jù)文件寫入對(duì)象塊后,根據(jù)寫入的對(duì)象塊的大小更新所述對(duì)象數(shù)據(jù)文件已使用空間大??;在向?qū)ο髷?shù)據(jù)文件寫入對(duì)象的所有對(duì)象塊后,根據(jù)寫入的對(duì)象的大小更新所述對(duì)象數(shù)據(jù)文件的有效對(duì)象塊所占空間大小。
27.如權(quán)利要求18至22任一項(xiàng)所述的裝置,其特征在于,還包括壓縮處理模塊,用于當(dāng)對(duì)象數(shù)據(jù)文件的有效對(duì)象塊所占空間大小與已使用空間大小的比值低于設(shè)定閾值時(shí),分別為待壓縮存儲(chǔ)空間的對(duì)象數(shù)據(jù)文件和對(duì)應(yīng)的對(duì)象元數(shù)據(jù)文件, 創(chuàng)建中間過(guò)程文件;遍歷內(nèi)存中待壓縮存儲(chǔ)空間的對(duì)象的元數(shù)據(jù),并在遍歷到每個(gè)對(duì)象塊的元數(shù)據(jù)時(shí),根據(jù)當(dāng)前對(duì)象塊的元數(shù)據(jù)定位到對(duì)象數(shù)據(jù)文件中的相應(yīng)對(duì)象塊,若該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)為無(wú)效,則從內(nèi)存中刪除該對(duì)象塊的元數(shù)據(jù);若該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)為有效,則將該對(duì)象塊寫入對(duì)象數(shù)據(jù)文件的中間過(guò)程文件,并更新內(nèi)存中的相應(yīng)對(duì)象塊的元數(shù)據(jù);遍歷內(nèi)存中待壓縮存儲(chǔ)空間的對(duì)象的元數(shù)據(jù),并在遍歷到每個(gè)對(duì)象塊的元數(shù)據(jù)時(shí),將當(dāng)前的對(duì)象塊元數(shù)據(jù)寫入對(duì)象元數(shù)據(jù)文件的中間過(guò)程文件;用對(duì)象數(shù)據(jù)文件的中間過(guò)程文件覆蓋待壓縮存儲(chǔ)空間的對(duì)象數(shù)據(jù)文件,用對(duì)象元數(shù)據(jù)文件的中間過(guò)程文件覆蓋待壓縮存儲(chǔ)空間的對(duì)象元數(shù)據(jù)文件。
28.如權(quán)利要求27所述的裝置,其特征在于,所述壓縮處理模塊具體用于,向?qū)ο髷?shù)據(jù)文件的中間過(guò)程文件寫入對(duì)象塊時(shí),寫入到該文件的尾部;向?qū)ο笤獢?shù)據(jù)文件的中間過(guò)程文件寫入對(duì)象元數(shù)據(jù)時(shí),寫入到該文件的尾部。
29.如權(quán)利要求27所述的裝置,其特征在于,所述壓縮處理模塊還用于,在將對(duì)象塊寫入到對(duì)象數(shù)據(jù)文件的中間過(guò)程文件后,根據(jù)待壓縮存儲(chǔ)空間的對(duì)象的大小,更新該待壓縮存儲(chǔ)空間的對(duì)象數(shù)據(jù)文件的已使用空間大小和有效對(duì)象塊所占空間大小。
30.如權(quán)利要求18至22任一項(xiàng)所述的裝置,其特征在于,還包括刪除處理模塊;所述接口模塊還用于,接收刪除對(duì)象的命令;刪除處理模塊,用于判斷內(nèi)存中的對(duì)象元數(shù)據(jù)中是否存在待刪除對(duì)象的對(duì)象元數(shù)據(jù); 若判斷為存在,則根據(jù)內(nèi)存中該對(duì)象的對(duì)象元數(shù)據(jù),逐一定位出對(duì)象數(shù)據(jù)文件中的相應(yīng)對(duì)象塊,逐一將所述對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)設(shè)置為無(wú)效,并當(dāng)將所述所有對(duì)象塊的有效性標(biāo)識(shí)設(shè)置為無(wú)效后,刪除內(nèi)存中所述對(duì)象的對(duì)象元數(shù)據(jù)。
31.如權(quán)利要求30所述的裝置,其特征在于,所述刪除處理模塊還用于,在將對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)設(shè)置為無(wú)效后,根據(jù)所述待刪除的對(duì)象的大小更新所述對(duì)象數(shù)據(jù)文件的有效對(duì)象塊所占空間大小。
32.如權(quán)利要求18至22任一項(xiàng)所述的裝置,其特征在于,還包括讀處理模塊;所述接口模塊還用于,接收讀取對(duì)象的命令;讀處理模塊,用于在接收到讀處理命令后,判斷內(nèi)存中是否存在待讀取對(duì)象的對(duì)象元數(shù)據(jù),若存在,則逐一根據(jù)該對(duì)象元數(shù)據(jù)中的對(duì)象塊元數(shù)據(jù)定位到對(duì)象數(shù)據(jù)文件中的相應(yīng)對(duì)象塊,并在該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)為有效的情況下,讀出該對(duì)象塊。
33.如權(quán)利要求32所述的裝置,其特征在于,所述讀處理模塊具體用于,若判斷內(nèi)存中存在待讀取對(duì)象的對(duì)象元數(shù)據(jù),則首先根據(jù)該對(duì)象元數(shù)據(jù)從緩存中讀取對(duì)應(yīng)的對(duì)象塊;若未從緩存中讀取到對(duì)應(yīng)的對(duì)象塊,則再逐一根據(jù)該對(duì)象元數(shù)據(jù)中的對(duì)象塊元數(shù)據(jù)定位到對(duì)象數(shù)據(jù)文件中的相應(yīng)對(duì)象塊,并在該對(duì)象塊的數(shù)據(jù)有效性標(biāo)識(shí)為有效的情況下,讀出該對(duì)象塊;以及,從對(duì)象數(shù)據(jù)文件讀出對(duì)象塊后,將讀出的對(duì)象塊存放在緩存中。
全文摘要
本發(fā)明公開了一種對(duì)象數(shù)據(jù)處理方法及裝置,應(yīng)用于基于對(duì)象的數(shù)據(jù)存儲(chǔ)設(shè)備,該方法包括預(yù)先在內(nèi)存中載入對(duì)象元數(shù)據(jù),所述對(duì)象元數(shù)據(jù)包括對(duì)象中各對(duì)象塊的元數(shù)據(jù);當(dāng)需要寫入對(duì)象時(shí),判斷內(nèi)存中的對(duì)象元數(shù)據(jù)中是否存在該對(duì)象的對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象元數(shù)據(jù);若存在,則先刪除所述對(duì)象標(biāo)識(shí)對(duì)應(yīng)的對(duì)象,再寫入該對(duì)象;若不存在,則寫入該對(duì)象;其中,在不超過(guò)所述對(duì)象數(shù)據(jù)文件的配額空間的情況下,所述對(duì)象數(shù)據(jù)文件能夠存儲(chǔ)多個(gè)對(duì)象。采用本發(fā)明,可提高對(duì)象數(shù)據(jù)處理性能。
文檔編號(hào)G06F17/30GK102567427SQ201010623560
公開日2012年7月11日 申請(qǐng)日期2010年12月30日 優(yōu)先權(quán)日2010年12月30日
發(fā)明者孫少陵, 王娟, 羅治國(guó), 韓金宇 申請(qǐng)人:中國(guó)移動(dòng)通信集團(tuán)公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
虞城县| 岑溪市| 锡林郭勒盟| 湄潭县| 平安县| 克什克腾旗| 麻栗坡县| 东方市| 泰宁县| 包头市| 化州市| 固安县| 筠连县| 屏东市| 清流县| 玉门市| 衡水市| 紫金县| 汝阳县| 永泰县| 兴城市| 舒城县| 康保县| 涪陵区| 磐石市| 青神县| 汤原县| 云龙县| 岢岚县| 衡阳市| 建昌县| 靖安县| 郴州市| 长沙县| 绥棱县| 临江市| 九龙县| 海城市| 嘉鱼县| 吴忠市| 巩留县|