本發(fā)明涉及分布式存儲技術(shù)領(lǐng)域,尤其涉及一種小文件的寫聚合、讀聚合方法及系統(tǒng)。
背景技術(shù):
隨著云計算、移動互聯(lián)網(wǎng)等技術(shù)的發(fā)展,需要存儲及讀取的數(shù)據(jù)量日益增大,而不同的數(shù)據(jù)的存儲與讀取方式是不同的,如只有數(shù)千字節(jié)的小文件,廣泛采用隨機聚合、查表索引的方式來進行存儲與讀取。由于聚合策略導(dǎo)致小文件在聚合時,需要額外創(chuàng)建這些小文件的映射表,并通過查映射表才能讀取這些小文件,因此耗費較多小文件的讀取和寫入的時間。
技術(shù)實現(xiàn)要素:
本發(fā)明的主要目的在于提供一種小文件寫聚合、讀聚合方法及系統(tǒng),旨在解決在小文件的寫聚合和讀聚合過程中需要耗費較多讀取和寫入的時間的問題。
為實現(xiàn)上述目的,本發(fā)明提供的一種小文件寫聚合方法,包括:
客戶端發(fā)起小文件的寫請求;
元數(shù)據(jù)服務(wù)器為所述小文件分配全局唯一編號ino和存儲區(qū)域唯一編號ono;
所述客戶端根據(jù)所述ino和所述ono計算所述小文件在對象存儲設(shè)備OSD中的聚合位置oid;
所述對象存儲設(shè)備OSD根據(jù)所述oid將小文件聚合。
優(yōu)選地,所述oid的計算公式為:oid=((ino+ono+1)<<32)|1。
優(yōu)選地,所述元數(shù)據(jù)服務(wù)器為小文件分配全局唯一編號ino和存儲區(qū)域唯一編號ono的步驟包括:
元數(shù)據(jù)服務(wù)器按時序遞增的分配原則為所述小文件分配全局唯一編號ino;
將預(yù)判為在所述聚合位置oid中聚合的N個ino連續(xù)的所述小文件分配存 儲區(qū)域唯一編號ono。
優(yōu)選地,所述對象存儲設(shè)備OSD根據(jù)所述oid將小文件聚合的步驟包括:
所述對象存儲設(shè)備OSD接收所述客戶端發(fā)送的小文件寫聚合請求;
所述對象存儲設(shè)備OSD根據(jù)所述小文件寫聚合請求逐個檢測N個ino連續(xù)小文件的ono,在所述小文件的ono為負數(shù)時,將所述小文件寫入編號為oid的對象中的第-ono個區(qū)域中。
此外,為實現(xiàn)上述目的,本發(fā)明還提供一種小文件寫聚合系統(tǒng),包括:
所述小文件寫聚合系統(tǒng)包括:客戶端、元數(shù)據(jù)服務(wù)器及對象存儲設(shè)備OSD,其中,
所述客戶端,用于發(fā)起小文件的寫請求;
所述元數(shù)據(jù)服務(wù)器,用于為小文件分配全局唯一編號ino和存儲區(qū)域唯一編號ono;
所述客戶端,還用于根據(jù)所述ino和所述ono計算小文件在所述對象存儲設(shè)備OSD中的聚合位置oid;
所述對象存儲設(shè)備OSD,用于根據(jù)所述oid將小文件聚合。
優(yōu)選地,所述oid的計算公式為:oid=((ino+ono+1)<<32)|1。
優(yōu)選地,所述元數(shù)據(jù)服務(wù)器還用于:
按時序遞增的分配原則為所述小文件分配全局唯一編號ino;
將預(yù)判為在所述聚合位置oid中聚合的N個ino連續(xù)的所述小文件分配存儲區(qū)域唯一編號ono。
優(yōu)選地,所述對象存儲設(shè)備OSD還用于:
所述對象存儲設(shè)備OSD接收所述客戶端發(fā)送的小文件寫聚合請求;
所述對象存儲設(shè)備OSD根據(jù)所述小文件寫聚合請求逐個檢測N個ino連續(xù)小文件的ono,在所述小文件的ono為負數(shù)時,將所述小文件寫入編號為oid的對象中的第-ono個區(qū)域中。
本發(fā)明通過客戶端發(fā)起小文件的寫請求,以供元數(shù)據(jù)服務(wù)器為小文件分配全局唯一編號ino和存儲區(qū)域唯一編號ono,該客戶端根據(jù)該ino和該ono計算小文件在對象存儲設(shè)備OSD中的聚合位置oid,使得該對象存儲設(shè)備OSD 根據(jù)該oid將小文件聚合。由于該小文件存儲位置的是通過計算獲取到的ino和ono而確定,并根據(jù)該小文件存儲位置寫入該小文件,因此不需要額外創(chuàng)建該小文件的映射表,從而解決了耗費較多小文件的寫入時間的問題。
為實現(xiàn)上述目的,本發(fā)明提供的一種小文件讀聚合方法,包括:
客戶端發(fā)起小文件的讀請求;
從元數(shù)據(jù)服務(wù)器獲取所述小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono;
根據(jù)所述ino和所述ono計算小文件在對象存儲設(shè)備OSD中的聚合位置oid;
根據(jù)所述oid從所述對象存儲設(shè)備OSD中獲取所述小文件。
優(yōu)選地,所述oid的計算公式為:oid=((ino+ono+1)<<32)|1。
優(yōu)選地,在所述客戶端發(fā)起小文件的讀請求的步驟之后,還包括:
檢測所述客戶端的緩存中是否存在所述小文件;
在所述客戶端的緩存中存在所述小文件時,則獲取所述小文件;
在所述客戶端的緩存中未存在所述小文件時,則執(zhí)行所述從元數(shù)據(jù)服務(wù)器獲取所述小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono的步驟。
優(yōu)選地,所述根據(jù)所述oid獲取所述小文件的步驟包括:
向所述對象存儲設(shè)備OSD發(fā)送讀聚合請求;
接收所述對象存儲設(shè)備OSD發(fā)送的所述oid中所有的小文件并保存;
獲取所述ono的絕對值對應(yīng)區(qū)域中的小文件。
此外,為實現(xiàn)上述目的,本發(fā)明還提供一種客戶端,包括:
讀請求模塊,用于發(fā)起小文件的讀請求;
編號獲取模塊,用于從元數(shù)據(jù)服務(wù)器獲取所述小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono;
計算模塊,用于根據(jù)所述ino和所述ono計算小文件在對象存儲設(shè)備OSD中的聚合位置oid;
小文件獲取模塊,用于根據(jù)所述oid從所述對象存儲設(shè)備OSD中獲取所述小文件。
優(yōu)選地,所述oid的計算公式為:oid=((ino+ono+1)<<32)|1。
優(yōu)選地,所述客戶端還包括:
檢測模塊,用于檢測所述客戶端的緩存中是否存在所述小文件;
所述小文件獲取模塊,還用于在所述客戶端的緩存中存在所述小文件時,則獲取所述小文件;
所述編號獲取模塊,還用于在所述客戶端的緩存中未存在所述小文件時,則從元數(shù)據(jù)服務(wù)器獲取所述小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono。
優(yōu)選地,所述小文件獲取模塊包括:
發(fā)送單元,用于向所述對象存儲設(shè)備OSD發(fā)送讀聚合請求;
接收單元,用于接收所述對象存儲設(shè)備OSD發(fā)送的所述oid中所有的小文件并保存;
獲取單元,用于獲取所述ono的絕對值對應(yīng)區(qū)域中的小文件。
本發(fā)明通過客戶端發(fā)起小文件的讀請求,根據(jù)該小文件的讀請求從元數(shù)據(jù)服務(wù)器獲取小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono,并根據(jù)ino和ono計算小文件在對象存儲設(shè)備OSD中的聚合位置oid,使得該客戶端根據(jù)oid從OSD中獲取小文件。由于該小文件存儲位置的是通過計算獲取到的ino和ono而確定,并根據(jù)該小文件存儲位置讀取該小文件,因此不需要通過查映射表來讀取該小文件,從而解決了耗費較多小文件讀取時間的問題。
附圖說明
圖1為本發(fā)明小文件的寫聚合方法的第一實施例的流程示意圖;
圖2為本發(fā)明小文件的寫聚合方法的第二實施例中元數(shù)據(jù)服務(wù)器為小文件分配全局唯一編號ino和存儲區(qū)域唯一編號ono的細化流程示意圖;
圖3為本發(fā)明小文件寫聚合方法的第三實施例中對象存儲設(shè)備OSD根據(jù)oid將小文件聚合的細化流程示意圖;
圖4為本發(fā)明小文件寫聚合系統(tǒng)的第一實施例的功能模塊示意圖;
圖5為本發(fā)明小文件讀聚合方法的第一實施例的流程示意圖;
圖6為本發(fā)明小文件讀聚合方法的第二實施例的流程示意圖;
圖7為本發(fā)明小文件讀聚合方法的第三實施例中根據(jù)oid獲取小文件的細 化流程示意圖;
圖8為本發(fā)明客戶端的第一實施例的功能模塊示意圖;
圖9為本發(fā)明客戶端的第二實施例的功能模塊示意圖;
圖10為本發(fā)明客戶端的第三實施例中小文件獲取模塊的細化功能模塊示意圖。
本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。
具體實施方式
應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
基于上述問題,本發(fā)明提供一種小文件的寫聚合方法。
參照圖1,圖1為本發(fā)明小文件的寫聚合方法的第一實施例的流程示意圖。
在本實施例中,所述小文件的寫聚合方法包括:
步驟S10,客戶端發(fā)起小文件的寫請求;
在本實施例中,一個小文件的文件大小小于1MB,客戶端發(fā)起小文件寫請求,客戶端將該小文件的內(nèi)容寫入客戶端的本地緩存中。
步驟S20,元數(shù)據(jù)服務(wù)器為小文件分配全局唯一編號ino和存儲區(qū)域唯一編號ono;
在該客戶端將該小文件的內(nèi)容寫入該客戶端的本地緩存中后,該客戶端向元數(shù)據(jù)服務(wù)器發(fā)送創(chuàng)建這些小文件的元數(shù)據(jù)請求,該元數(shù)據(jù)服務(wù)器接收到該請求后,將會為該小文件逐一分配全局唯一編號ino和小文件在對象中的存儲區(qū)域唯一編號ono,再將該ino及該ono回傳給該客戶端,該客戶端接收該ino和該ono。
步驟S30,客戶端根據(jù)ino和ono計算小文件在對象存儲設(shè)備OSD中的聚合位置oid;
在該客戶端接收到該元數(shù)據(jù)服務(wù)器回傳該ino和該ono后,該客戶端通過該oid的計算公式oid=((ino+ono+1)<<32)|1,計算該小文件在對象存儲設(shè)備OSD中的聚合位置oid,即小文件對象的編號=((小文件的文件編號+小文件在對象中的區(qū)域編號+1)<<32)|1,計算出該小文件聚合成對象后,該對象的 編號。該oid為該小文件在聚合成對象后,該對象在全局對象中的唯一編號。在同一對象中任一區(qū)域的小文件通過計算后得出的oid均相同。該對象存儲設(shè)備OSD的確定是通過公式OSD_num=HUSH(oid),計算得到的,即對象存儲設(shè)備的編號=HASH(文件的對象編號),計算出該對象所處的對象存儲設(shè)備的編號,其中,HUSH泛化了計算機領(lǐng)域常見的、公開的數(shù)據(jù)分布算法,包括但不限于:平方取中間值、模運算取余、DHT算法、CRUSH算法。
步驟S40,對象存儲設(shè)備OSD根據(jù)oid將小文件聚合。
在計算得到該小文件的oid后,該對象存儲設(shè)備將具有相同的oid的小文件聚合在同一對象中,分別寫入不同區(qū)域中。同時,在對象存儲設(shè)備OSD將該小文件聚合完成后,該對象存儲設(shè)備向該客戶端發(fā)送小文件聚合寫完成指令,該客戶端接收到該小文件聚合寫完成指令后,該客戶端向元數(shù)據(jù)服務(wù)器發(fā)送元數(shù)據(jù)更新請求更新指令,通知該元數(shù)據(jù)服務(wù)器更新該小文件的元數(shù)據(jù)信息,以更新該小文件的文件編號、區(qū)域編號、小文件的創(chuàng)建時間、小文件的修改時間、訪問權(quán)限、文件大小。
本實施例通過客戶端發(fā)起小文件的寫請求,以供元數(shù)據(jù)服務(wù)器為小文件分配全局唯一編號ino和存儲區(qū)域唯一編號ono,該客戶端根據(jù)該ino和該ono計算小文件在對象存儲設(shè)備OSD中的聚合位置oid,使得該對象存儲設(shè)備OSD根據(jù)該oid將小文件聚合。由于該小文件存儲位置的是通過計算獲取到的ino和ono而確定,并根據(jù)該小文件存儲位置寫入該小文件,因此不需要額外創(chuàng)建該小文件的映射表,從而解決了耗費較多小文件的寫入時間的問題。
進一步的,基于第一實施例,提出本發(fā)明小文件的寫聚合方法的第二實施例,在本實施例中,參照圖2,上述步驟S20包括:
步驟S21,元數(shù)據(jù)服務(wù)器按時序遞增的分配原則為小文件分配全局唯一編號ino;
在本實施例中,在該客戶端發(fā)起該小文件的寫請求后,該客戶端向該元數(shù)據(jù)服務(wù)器發(fā)送該小文件元數(shù)據(jù)的創(chuàng)建請求,該元數(shù)據(jù)服務(wù)器根據(jù)該小文件元數(shù)據(jù)的創(chuàng)建請求為該小文件逐一分配全局唯一編號ino,該小文件的全局唯一編號ino的分配順序是按照時序遞增的順序來分配的,將該元數(shù)據(jù)服務(wù)器中預(yù)設(shè)的全局唯一編號ino,分配給該小文件中最早創(chuàng)建的小文件,將預(yù)設(shè)的唯 一的小文件的文件編號增加1。該元數(shù)據(jù)服務(wù)器按照小文件的創(chuàng)建時間來分配小文件的全局唯一編號ino,小文件的創(chuàng)建時間越晚,被分配到的小文件的文件編號越大。例如,小文件包括B、C、D、E、F、G、H、I、J、K、L、M,它們的創(chuàng)建時間依次增大,將該元數(shù)據(jù)服務(wù)器中預(yù)設(shè)的小文件的文件編號2015分配給小文件B,則小文件C的文件編號為2016,則小文件D的文件編號為2017,其中小文件E、F、G、H、I、J、K、L、M的文件編號可以依次類推。
步驟S22,將預(yù)判為在聚合位置oid中聚合的N個ino連續(xù)的小文件分配存儲區(qū)域唯一編號ono。
一個對象的內(nèi)存容量為4MB,一個對象中最多聚合4個小文件,至少要聚合一個小文件,其中,一個對象中分配4個存儲區(qū)域。在該元數(shù)據(jù)服務(wù)器為該小文件逐一分配該小文件的全局唯一編號ino后,該元數(shù)據(jù)服務(wù)器將具有連續(xù)小文件的全局唯一編號ino的4個小文件預(yù)判為同一個對象,例如,將(B、C、D、E)、(F、G、H、I)、(J、K、L、M)12個小文件判定分別合并在三個對象中。
需要說明的是,當(dāng)未聚合完畢的小文件的數(shù)量小于預(yù)設(shè)聚合數(shù)量時,將所述未聚合完畢的小文件聚合于同一對象中,并為其對象分配存儲區(qū)域唯一編號ono。分配原則為:第K個區(qū)域中的小文件ono為-k。例如,對小文件B、C、D、E、F、G、H、I、J、K進行聚合,則將(B、C、D、E)、(F、G、H、I)、(J、K)10個小文件分別聚合成三個對象中,其中包含(J、K)2個小文件的對象占用內(nèi)存大小是4MB。
在該小文件聚合成對象后,該元數(shù)據(jù)服務(wù)器為該小文件逐一分配在該對象中的區(qū)域編號。例如,小文件B在對象中的區(qū)域編號為-1、小文件C在對象中的區(qū)域編號為-2、小文件D在對象中的區(qū)域編號為-3、小文件E在對象中的區(qū)域編號為-4、小文件F在對象中的區(qū)域編號為-1、小文件G在對象中的區(qū)域編號為-2、小文件H在對象中的區(qū)域編號為-3、小文件I在對象中的區(qū)域編號為-4、小文件J在對象中的區(qū)域編號為-1、小文件K在對象中的區(qū)域編號為-2、小文件L在對象中的區(qū)域編號為-3、小文件M在對象中的區(qū)域編號為-4。
該元數(shù)據(jù)服務(wù)器逐一為上述小文件創(chuàng)建其他的元數(shù)據(jù),如小文件的創(chuàng)建 時間、訪問權(quán)限、最后修改時間、文件大小。
本實施例通過元數(shù)據(jù)服務(wù)器按時序遞增的分配原則為小文件分配全局唯一編號ino,并為預(yù)判為同一對象的N個ino連續(xù)的小文件分配存儲區(qū)域唯一編號ono。由于該小文件的ino及該ono是按時序遞增的原則分配的,并按照區(qū)域編號有序聚合在對象中,因此不需要額外創(chuàng)建這些小文件的映射表,從而提高對小文件的效率。
進一步的,基于第一實施例,提出本發(fā)明小文件的寫聚合方法的第三實施例,在本實施例中,參照圖3,上述步驟S40包括:
步驟S41,對象存儲設(shè)備OSD接收客戶端發(fā)送的小文件寫聚合請求;
在本實施例中,在該客戶端確定該小文件將要寫入的OSD后,該客戶端向該OSD發(fā)送該小文件寫聚合請求,該OSD接收客戶端發(fā)送的小文件寫聚合請求。
步驟S42,對象存儲設(shè)備OSD根據(jù)小文件寫聚合請求逐個檢測N個ino連續(xù)小文件的ono,在小文件的ono為負數(shù)時,將小文件寫入編號為oid的對象中的第-ono個區(qū)域中。
在該OSD接收客戶端發(fā)送的小文件寫聚合請求,該OSD逐個檢測接收到的小文件的ono是否為負數(shù),在確定接收到的小文件的ono為負數(shù)后,該OSD通知該OSD中小文件聚合模塊對該小文件進行小文件聚合寫操作。該小文件聚合模塊將連續(xù)個ino小文件聚合在同一個對象中;或者,根據(jù)該ono的絕對值確定該小文件在該對象的區(qū)域,將該小文件寫入該小文件的ono的絕對值對應(yīng)的區(qū)域中。
本實施例通過對象存儲設(shè)備OSD接收客戶端發(fā)送的小文件寫聚合請求,并根據(jù)小文件寫聚合請求逐個檢測N個ino連續(xù)小文件的ono,在小文件的ono為負數(shù)時,將小文件寫入編號為oid的對象中的第-ono個區(qū)域中,使得小文件存儲位置是定向的、唯一的,從而解決了耗費較多的讀寫時間的問題。
本發(fā)明進一步提供一種小文件的寫聚合系統(tǒng)。
參照圖4,圖4為本發(fā)明小文件的寫聚合系統(tǒng)的第一實施例的功能模塊示意圖。
在本實施例中,該系統(tǒng)包括:客戶端10、元數(shù)據(jù)服務(wù)器20、對象存儲設(shè)備OSD 30。
所述客戶端10,用于發(fā)起小文件的寫請求;
在本實施例中,一個小文件的文件大小小于1MB,客戶端發(fā)起小文件寫請求,客戶端將該小文件的內(nèi)容寫入客戶端的本地緩存中。
所述元數(shù)據(jù)服務(wù)器20,用于為小文件分配全局唯一編號ino和存儲區(qū)域唯一編號ono;
在該客戶端將該小文件的內(nèi)容寫入該客戶端的本地緩存中后,該客戶端向元數(shù)據(jù)服務(wù)器發(fā)送創(chuàng)建這些小文件的元數(shù)據(jù)請求,該元數(shù)據(jù)服務(wù)器接收到該請求后,將會為該小文件逐一分配全局唯一編號ino和小文件在對象中的存儲區(qū)域唯一編號ono,再將該ino及該ono回傳給該客戶端,該客戶端接收該ino和該ono。
所述客戶端10,還用于根據(jù)ino和ono計算小文件在對象存儲設(shè)備OSD中的聚合位置oid;
在該客戶端接收到該元數(shù)據(jù)服務(wù)器回傳該ino和該ono后,該客戶端通過該oid的計算公式oid=((ino+ono+1)<<32)|1,計算該小文件在對象存儲設(shè)備OSD中的聚合位置oid,即小文件對象的編號=((小文件的文件編號+小文件在對象中的區(qū)域編號+1)<<32)|1,計算出該小文件聚合成對象后,該對象的編號。該oid為該小文件在聚合成對象后,該對象在全局對象中的唯一編號。在同一對象中任一區(qū)域的小文件通過計算后得出的oid均相同。該對象存儲設(shè)備OSD的確定是通過公式OSD_num=HUSH(oid),計算得到的,即對象存儲設(shè)備的編號=HASH(文件的對象編號),計算出該對象所處的對象存儲設(shè)備的編號,其中,HUSH泛化了計算機領(lǐng)域常見的、公開的數(shù)據(jù)分布算法,包括但不限于:平方取中間值、模運算取余、DHT算法、CRUSH算法。
所述對象存儲設(shè)備OSD 30,用于根據(jù)oid將小文件聚合。
在計算得到該小文件的oid后,該對象存儲設(shè)備將具有相同的oid的小文件聚合在同一對象中,分別寫入不同區(qū)域中。同時,在對象存儲設(shè)備OSD將該小文件聚合完成后,該對象存儲設(shè)備向該客戶端發(fā)送小文件聚合寫完成指令,該客戶端接收到該小文件聚合寫完成指令后,該客戶端向元數(shù)據(jù)服務(wù)器發(fā)送元數(shù)據(jù)更新請求更新指令,通知該元數(shù)據(jù)服務(wù)器更新該小文件的元數(shù)據(jù) 信息,以更新該小文件的文件編號、區(qū)域編號、小文件的創(chuàng)建時間、小文件的修改時間、訪問權(quán)限、文件大小。
所述元數(shù)據(jù)服務(wù)器20,還用于按時序遞增的分配原則為小文件分配全局唯一編號ino;
在本實施例中,在該客戶端發(fā)起該小文件的寫請求后,該客戶端向該元數(shù)據(jù)服務(wù)器發(fā)送該小文件元數(shù)據(jù)的創(chuàng)建請求,該元數(shù)據(jù)服務(wù)器根據(jù)該小文件元數(shù)據(jù)的創(chuàng)建請求為該小文件逐一分配全局唯一編號ino,該小文件的全局唯一編號ino的分配順序是按照時序遞增的順序來分配的,將該元數(shù)據(jù)服務(wù)器中預(yù)設(shè)的全局唯一編號ino,分配給該小文件中最早創(chuàng)建的小文件,將預(yù)設(shè)的唯一的小文件的文件編號增加1。該元數(shù)據(jù)服務(wù)器按照小文件的創(chuàng)建時間來分配小文件的全局唯一編號ino,小文件的創(chuàng)建時間越晚,被分配到的小文件的文件編號越大。例如,小文件包括B、C、D、E、F、G、H、I、J、K、L、M,它們的創(chuàng)建時間依次增大,將該元數(shù)據(jù)服務(wù)器中預(yù)設(shè)的小文件的文件編號2015分配給小文件B,則小文件C的文件編號為2016,則小文件D的文件編號為2017,其中小文件E、F、G、H、I、J、K、L、M的文件編號可以依次類推。
所述元數(shù)據(jù)服務(wù)器20,還用于將預(yù)判為在聚合位置oid中聚合的N個ino連續(xù)的小文件分配存儲區(qū)域唯一編號ono。
一個對象的內(nèi)存容量為4MB,一個對象中最多聚合4個小文件,至少要聚合一個小文件,其中,一個對象中分配4個存儲區(qū)域。在該元數(shù)據(jù)服務(wù)器為該小文件逐一分配該小文件的全局唯一編號ino后,該元數(shù)據(jù)服務(wù)器將具有連續(xù)小文件的全局唯一編號ino的4個小文件預(yù)判為同一個對象,例如,將(B、C、D、E)、(F、G、H、I)、(J、K、L、M)12個小文件判定分別合并在三個對象中。
需要說明的是,當(dāng)未聚合完畢的小文件的數(shù)量小于預(yù)設(shè)聚合數(shù)量時,將所述未聚合完畢的小文件聚合于同一對象中,并為其對象分配存儲區(qū)域唯一編號ono。分配原則為:第K個區(qū)域中的小文件ono為-k。例如,對小文件B、C、D、E、F、G、H、I、J、K進行聚合,則將(B、C、D、E)、(F、G、H、I)、(J、K)10個小文件分別聚合成三個對象中,其中包含(J、K)2個小文件的對象占用內(nèi)存大小是4MB。
在該小文件聚合成對象后,該元數(shù)據(jù)服務(wù)器為該小文件逐一分配在該對象中的區(qū)域編號。例如,小文件B在對象中的區(qū)域編號為-1、小文件C在對象中的區(qū)域編號為-2、小文件D在對象中的區(qū)域編號為-3、小文件E在對象中的區(qū)域編號為-4、小文件F在對象中的區(qū)域編號為-1、小文件G在對象中的區(qū)域編號為-2、小文件H在對象中的區(qū)域編號為-3、小文件I在對象中的區(qū)域編號為-4、小文件J在對象中的區(qū)域編號為-1、小文件K在對象中的區(qū)域編號為-2、小文件L在對象中的區(qū)域編號為-3、小文件M在對象中的區(qū)域編號為-4。
該元數(shù)據(jù)服務(wù)器逐一為上述小文件創(chuàng)建其他的元數(shù)據(jù),如小文件的創(chuàng)建時間、訪問權(quán)限、最后修改時間、文件大小。
所述對象存儲設(shè)備OSD 30,還用于接收客戶端發(fā)送的小文件寫聚合請求;
在本實施例中,在該客戶端確定該小文件將要寫入的OSD后,該客戶端向該OSD發(fā)送該小文件寫聚合請求,該OSD接收客戶端發(fā)送的小文件寫聚合請求,其中,該小文件寫聚合請求包括小文件、ino、ono及oid。
所述對象存儲設(shè)備OSD 30,還用于根據(jù)小文件寫聚合請求逐個檢測N個ino連續(xù)小文件的ono,在小文件的ono為負數(shù)時,將小文件寫入編號為oid的對象中的第-ono個區(qū)域中。。
在該OSD接收客戶端發(fā)送的小文件寫聚合請求,該OSD逐個檢測接收到的小文件的ono是否為負數(shù),在確定接收到的小文件的ono為負數(shù)后,該OSD通知該OSD中小文件聚合模塊對該小文件進行小文件聚合寫操作。該小文件聚合模塊將連續(xù)個ino小文件聚合在同一個對象中;或者,根據(jù)該ono的絕對值確定該小文件在該對象的區(qū)域,將該小文件寫入該小文件的ono的絕對值對應(yīng)的區(qū)域中。
本實施例通過通過客戶端10發(fā)起小文件的寫請求,以供元數(shù)據(jù)服務(wù)器20為小文件分配全局唯一編號ino和存儲區(qū)域唯一編號ono,該客戶端10根據(jù)該ino和該ono計算小文件在對象存儲設(shè)備OSD 30中的聚合位置oid,使得該對象存儲設(shè)備OSD 30根據(jù)該oid將小文件聚合。由于該小文件存儲位置的是通過計算獲取到的ino和ono而確定,并根據(jù)該小文件存儲位置寫入該小文件,因此不需要額外創(chuàng)建該小文件的映射表,從而解決了耗費較多小文件的寫入時間的問題。
本發(fā)明進一步提供一種小文件的讀聚合方法。
參照圖5,圖5為本發(fā)明小文件的讀聚合方法的第一實施例的流程示意圖。
在本實施例中,所述小文件的讀聚合方法包括:
步驟S50,客戶端發(fā)起小文件的讀請求;
在本實施例中,一個小文件的文件大小小于1MB,客戶端向小文件發(fā)起小文件讀請求,即根據(jù)該客戶端對該小文件按順序進行讀取。
步驟S60,從元數(shù)據(jù)服務(wù)器獲取小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono;
該客戶端向元數(shù)據(jù)服務(wù)器獲取當(dāng)前讀取的小文件的元數(shù)據(jù)。該元數(shù)據(jù)服務(wù)器根據(jù)該客戶端發(fā)起的小文件的讀請求,檢測該客戶端對小文件的訪問權(quán)限,如果該元數(shù)據(jù)服務(wù)器判定該客戶端對該小文件的是非法訪問,則向該客戶端反饋該客戶端對該文件是非法訪問的信息,該客戶端檢查對該小文件的讀取是否完成,如果沒有完成則繼續(xù)讀取該小文件中的下一個小文件,如果完成則結(jié)束小文件的讀?。蝗绻撛獢?shù)據(jù)服務(wù)器判定該客戶端對該小文件的是合法訪問,則元數(shù)據(jù)服務(wù)器將該讀取小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono發(fā)送給該客戶端,該客戶端接收該元數(shù)據(jù)服務(wù)器發(fā)送的該ino和該ono。
步驟S70,根據(jù)ino和ono計算小文件在對象存儲設(shè)備OSD中的聚合位置oid;
在該客戶端接收到該元數(shù)據(jù)服務(wù)器回傳該ino和該ono后,該客戶端通過該oid的計算公式oid=((ino+ono+1)<<32)|1,計算該小文件在對象存儲設(shè)備OSD中的聚合位置oid,即小文件所屬對象的編號=((小文件的文件編號+小文件在對象中的區(qū)域編號+1)<<32)|1,計算出該小文件聚合成的對象后,該對象的對象編號。該oid為該小文件在聚合成對象后,該對象在全局對象中的唯一編號。在同一對象中任一區(qū)域的小文件通過計算后得出的oid均相同。該對象存儲設(shè)備OSD的確定是通過公式OSD_num=HUSH(oid),計算得到的,即對象存儲設(shè)備的編號=HASH(文件的對象編號),計算出該對象所處的對象存儲設(shè)備的編號,其中,HUSH泛化了計算機領(lǐng)域常見的、公開的數(shù)據(jù)分布算法,包括但不限于:平方取中間值、模運算取余、DHT算法、CRUSH算法。
步驟S80,根據(jù)oid從對象存儲設(shè)備OSD中獲取小文件。
在該客戶端計算出該小文件的聚合位置后,即計算出該小文件在OSD中的oid后,該OSD中的小文件聚合模塊將該oid中聚合的所有小文件發(fā)送給該客戶端??蛻舳烁鶕?jù)該小文件的ono,將該小文件中的數(shù)據(jù)反饋給客戶端的應(yīng)用,該oid中包含的其他小文件則存儲在該客戶端的本地緩存中。
本實施例通過客戶端發(fā)起小文件的讀請求,根據(jù)該小文件的讀請求從元數(shù)據(jù)服務(wù)器獲取小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono,并根據(jù)ino和ono計算小文件在對象存儲設(shè)備OSD中的聚合位置oid,使得該客戶端根據(jù)oid從OSD中獲取小文件。由于該小文件存儲位置的是通過計算獲取到的ino和ono而確定,并根據(jù)該小文件存儲位置讀取該小文件,因此不需要通過查映射表來讀取該小文件,從而解決了耗費較多小文件讀取的時間的問題。
進一步的,基于第一實施例,提出本發(fā)明小文件的讀聚合方法的第二實施例,在本實施例中,參照圖6,上述步驟S10之后,還包括:
步驟S90,檢測客戶端的緩存中是否存在小文件;
在本實施例中,該客戶端檢測當(dāng)前讀取的該小文件是否存在該客戶端的本地緩存中,可以理解的是,對該小文件讀取的同時也將該小文件聚合成的對象中的所有文件讀取出來并保存,因此可以通過查找該客戶端的緩存中是否存在該小文件,可以減少對該小文件的讀取時間。
步驟S100,在客戶端的緩存中存在小文件時,則獲取小文件;
在該檢測到該客戶端的緩存中存在該小文件時,該客戶端獲取該小文件,并將該小文件中的數(shù)據(jù)返回給該客戶端的應(yīng)用。
在客戶端的緩存中未存在小文件時,則執(zhí)行步驟S60,即從元數(shù)據(jù)服務(wù)器獲取小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono。
在檢測到客戶端的緩存中未存在該小文件時,則該客戶端向該元數(shù)據(jù)服務(wù)器發(fā)送該小文件的有序讀請求,使得該客戶端獲取該元數(shù)據(jù)服務(wù)器為該小文件分配的文件編號及該小文件在對象中的區(qū)域編號。例如,客戶端發(fā)起小文件B、C、D、E、F、G、H、I、J、K、L、M的有序讀請求時,檢測到該客戶端的緩存中未存在該小文件,則該客戶端向該元數(shù)據(jù)服務(wù)器發(fā)送該小文件的有序讀請求,以獲取元數(shù)據(jù)服務(wù)器為小文件分配的全局唯一編號ino及小 文件在對象存儲區(qū)域唯一編號ono。
本實施例通過檢測該客戶端的緩存中是否存在該小文件,如果該客戶端的緩存中存在該小文件時,則獲取該小文件;如果客戶端的緩存中未存在所述小文件,則從元數(shù)據(jù)服務(wù)器獲取小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono,使得該客戶端在對該小文件發(fā)起有序讀請求后能夠快速的對該小文件進行讀取,從而提高了客戶端對小文件的讀寫效率。
進一步的,基于所述第一實施例,提出本發(fā)明小文件的讀聚合方法的第三實施例,在本實施例中,參照圖7,上述步驟S80包括:
步驟S81,向?qū)ο蟠鎯υO(shè)備OSD發(fā)送讀聚合請求;
在本實施例中,該客戶端確定該小文件聚合成對象后所存儲的OSD,該客戶端向該OSD發(fā)送該小文件的讀聚合請求,該OSD判斷該小文件的ono是否為負數(shù),在確定該小文件的ono為負數(shù)后,該OSD通知該OSD中的小文件聚合模塊對該小文件進行小文件聚合讀操作。
步驟S82,接收對象存儲設(shè)備OSD發(fā)送的oid中所有的小文件并保存;
該小文件聚合模塊從該OSD中將該小文件所述的對象中的所有小文件發(fā)送給該客戶端,該客戶端并保存該對象中所有小文件。同時,在對象存儲設(shè)備OSD將該小文件聚合讀取完成后,該對象存儲設(shè)備向該客戶端發(fā)送小文件聚合讀取完成指令,該客戶端接收到該小文件聚合讀取完成指令后,該客戶端向元數(shù)據(jù)服務(wù)器發(fā)送元數(shù)據(jù)更新請求更新指令,通知該元數(shù)據(jù)服務(wù)器更新該小文件的元數(shù)據(jù)信息,如小文件的最后訪問時間、對象的最后訪問時間。
步驟S83,獲取ono的絕對值對應(yīng)區(qū)域中的小文件。
該客戶端將該小文件的ono的絕對值,即該對象中第-ono個區(qū)域的小文件從該對象中讀取出,并將該小文件中的數(shù)據(jù)反饋給該客戶端的應(yīng)用。
本實施例通過客戶端向OSD發(fā)送讀聚合請求,該OSD判斷該小文件的ono是否為負數(shù),在確定該小文件的ono為負數(shù)后,該客戶端接收OSD發(fā)送的oid中所有的小文件并保存,從而該客戶端獲取ono的絕對值對應(yīng)區(qū)域中的小文件,使得不用通過查映射表來讀取該小文件,節(jié)約了對小文件的讀取的時間。
本發(fā)明進一步提供一種客戶端。
參照圖8,圖8為本發(fā)明客戶端的第一實施例的功能模塊示意圖。
在本實施例中,該客戶端包括:讀請求模塊40、編號獲取模塊50、計算模塊60、小文件獲取模塊70。
所述讀請求模塊40,用于發(fā)起小文件的讀請求;
本實施例中,一個小文件的文件大小小于1MB,客戶端向小文件發(fā)起小文件讀請求,即根據(jù)該客戶端對該小文件按順序進行讀取。
所述編號獲取模塊50,用于從元數(shù)據(jù)服務(wù)器獲取小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono;
該客戶端向元數(shù)據(jù)服務(wù)器獲取當(dāng)前讀取的小文件的元數(shù)據(jù)。該元數(shù)據(jù)服務(wù)器根據(jù)該客戶端發(fā)起的小文件的讀請求,檢測該客戶端對小文件的訪問權(quán)限,如果該元數(shù)據(jù)服務(wù)器判定該客戶端對該小文件的是非法訪問,則向該客戶端反饋該客戶端對該文件是非法訪問的信息,該客戶端檢查對該小文件的讀取是否完成,如果沒有完成則繼續(xù)讀取該小文件中的下一個小文件,如果完成則結(jié)束小文件的讀??;如果該元數(shù)據(jù)服務(wù)器判定該客戶端對該小文件的是合法訪問,則元數(shù)據(jù)服務(wù)器將該讀取小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono發(fā)送給該客戶端,該客戶端接收該元數(shù)據(jù)服務(wù)器發(fā)送的該ino和該ono。
所述計算模塊60,用于根據(jù)ino和ono計算小文件在對象存儲設(shè)備OSD中的聚合位置oid;
在該客戶端接收到該元數(shù)據(jù)服務(wù)器回傳該ino和該ono后,該客戶端通過該oid的計算公式oid=((ino+ono+1)<<32)|1,計算該小文件在對象存儲設(shè)備OSD中的聚合位置oid,即小文件所屬對象的編號=((小文件的文件編號+小文件在對象中的區(qū)域編號+1)<<32)|1,計算出該小文件聚合成的對象后,該對象的對象編號。該oid為該小文件在聚合成對象后,該對象在全局對象中的唯一編號。在同一對象中任一區(qū)域的小文件通過計算后得出的oid均相同。該對象存儲設(shè)備OSD的確定是通過公式OSD_num=HUSH(oid),計算得到的,即對象存儲設(shè)備的編號=HASH(文件的對象編號),計算出該對象所處的對象存儲設(shè)備的編號,其中,HUSH泛化了計算機領(lǐng)域常見的、公開的數(shù)據(jù)分布算法,包括但不限于:平方取中間值、模運算取余、DHT算法、CRUSH算法。
所述小文件獲取模塊70,用于根據(jù)oid從對象存儲設(shè)備OSD中獲取小文件。
在該客戶端計算出該小文件的聚合位置后,即計算出該小文件在OSD中的oid后,該OSD中的小文件聚合模塊將該oid中聚合的所有小文件發(fā)送給該客戶端??蛻舳烁鶕?jù)該小文件的ono,將該小文件中的數(shù)據(jù)反饋給客戶端的應(yīng)用,該oid中包含的其他小文件則存儲在該客戶端的本地緩存中。
本實施例通過讀請求模塊40發(fā)起小文件的讀請求,編號獲取模塊50根據(jù)該小文件的讀請求從元數(shù)據(jù)服務(wù)器獲取小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono,計算模塊60根據(jù)ino和ono計算小文件在對象存儲設(shè)備OSD中的聚合位置oid,使得該小文件獲取模塊70根據(jù)oid從OSD中獲取小文件。由于該小文件存儲位置的是通過計算獲取到的ino和ono而確定,并根據(jù)該小文件存儲位置讀取該小文件,因此不需要通過查映射表來讀取該小文件,從而解決了耗費較多小文件讀取的時間的問題。
進一步的,基于第一實施例,提出本發(fā)明客戶端第二實施例,參照圖9,在本實施例中,所述客戶端還包括:檢測模塊50。
所述檢測模塊80,用于檢測客戶端的緩存中是否存在小文件;
在本實施例中,該客戶端檢測當(dāng)前讀取的該小文件是否存在該客戶端的本地緩存中,可以理解的是,對該小文件讀取的同時也將該小文件聚合成的對象中的所有文件讀取出來并保存,因此可以通過查找該客戶端的緩存中是否存在該小文件,可以減少對該小文件的讀取時間。
所述小文件獲取模塊70,還用于在客戶端的緩存中存在小文件時,則獲取小文件;
在該檢測到該客戶端的緩存中存在該小文件時,該客戶端獲取該小文件,并將該小文件中的數(shù)據(jù)返回給該客戶端的應(yīng)用。
所述編號獲取模塊50,還用于在客戶端的緩存中未存在小文件時,則從元數(shù)據(jù)服務(wù)器獲取小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono。
在檢測到客戶端的緩存中未存在該小文件時,則該客戶端向該元數(shù)據(jù)服務(wù)器發(fā)送該小文件的有序讀請求,使得該客戶端獲取該元數(shù)據(jù)服務(wù)器為該小文件分配的文件編號及該小文件在對象中的區(qū)域編號。例如,客戶端發(fā)起小 文件B、C、D、E、F、G、H、I、J、K、L、M的有序讀請求時,檢測到該客戶端的緩存中未存在該小文件,則該客戶端向該元數(shù)據(jù)服務(wù)器發(fā)送該小文件的有序讀請求,以獲取元數(shù)據(jù)服務(wù)器為小文件分配的全局唯一編號ino及小文件在對象存儲區(qū)域唯一編號ono。
本實施例通過檢測該客戶端的緩存中是否存在該小文件,如果該客戶端的緩存中存在該小文件時,則獲取該小文件;如果客戶端的緩存中未存在所述小文件,則從元數(shù)據(jù)服務(wù)器獲取小文件的全局唯一編號ino和存儲區(qū)域唯一編號ono,使得該客戶端在對該小文件發(fā)起有序讀請求后能夠快速的對該小文件進行讀取,從而提高了客戶端對小文件的讀寫效率。
進一步的,基于第一實施例,提出本發(fā)明客戶端第三實施例,參照圖10,在本實施例中,所述小文件獲取模塊70包括發(fā)送單元71、接收單元72、獲取單元73。
所述發(fā)送單元71,用于向?qū)ο蟠鎯υO(shè)備OSD發(fā)送讀聚合請求;
在本實施例中,該客戶端確定該小文件聚合成對象后所存儲的OSD,該客戶端向該OSD發(fā)送該小文件的讀聚合請求,該OSD判斷該小文件的ono是否為負數(shù),在確定該小文件的ono為負數(shù)后,該OSD通知該OSD中的小文件聚合模塊對該小文件進行小文件聚合讀操作。
所述接收單元72,用于接收對象存儲設(shè)備OSD發(fā)送的oid中所有的小文件并保存;
該小文件聚合模塊從該OSD中將該小文件所述的對象中的所有小文件發(fā)送給該客戶端,該客戶端并保存該對象中所有小文件。同時,在對象存儲設(shè)備OSD將該小文件聚合讀取完成后,該對象存儲設(shè)備向該客戶端發(fā)送小文件聚合讀取完成指令,該客戶端接收到該小文件聚合讀取完成指令后,該客戶端向元數(shù)據(jù)服務(wù)器發(fā)送元數(shù)據(jù)更新請求更新指令,通知該元數(shù)據(jù)服務(wù)器更新該小文件的元數(shù)據(jù)信息,如小文件的最后訪問時間、對象的最后訪問時間。
所述獲取單元73,用于獲取ono的絕對值對應(yīng)區(qū)域中的小文件。
該客戶端將該小文件的ono的絕對值,即該對象中第-ono個區(qū)域的小文件從該對象中讀取出,并將該小文件中的數(shù)據(jù)反饋給該客戶端的應(yīng)用。
本實施例通過客戶端向OSD發(fā)送讀聚合請求,該OSD判斷該小文件的 ono是否為負數(shù),在確定該小文件的ono為負數(shù)后,該客戶端接收OSD發(fā)送的oid中所有的小文件并保存,從而該客戶端獲取ono的絕對值對應(yīng)區(qū)域中的小文件,使得不用通過查映射表來讀取該小文件,節(jié)約了對小文件的讀取的時間。
以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。