象的第I存儲位置,依此類推,fid值為50的目錄項的反向索引記錄記錄在第50對象的第I存儲位置。
[0132]之后,服務(wù)器同時接到針對fid值從51至100的50個目錄項的新建反向索引記錄的請求,那么服務(wù)器將同時在第I對象至第50對象中寫入反向索引記錄,其中,fid值為51的目錄項的反向索引記錄記錄在第I對象的第2存儲位置,fid值為52的目錄項的反向索引記錄記錄在第2對象的第2存儲位置,依此類推,fid值為100的目錄項的反向索引記錄記錄在第50對象的第2存儲位置。
[0133]依此類推,在第I對象至第50對象寫滿記錄之后,再根據(jù)上述規(guī)則在第51對象至第100對象中寫入反向索引記錄。
[0134]上述例子中,同時寫入的M條反向索引記錄對應(yīng)的fid值連續(xù),實際情況中,即使fid值不連續(xù),只要M條反向索引記錄對應(yīng)的fid值分別映射至M個對象,同樣能夠?qū)崿F(xiàn)并行寫入M條反向索引記錄。由于M的取值為系統(tǒng)在寫入數(shù)據(jù)時的下盤時延內(nèi)的并發(fā)操作數(shù),因此能夠最大限度地利用系統(tǒng)的處理能力,提高處理效率。
[0135]另外,現(xiàn)有技術(shù)中,根據(jù)fid的哈希值將反向索引記錄映射至反向索引表的N個子表中一子表,為了保障哈希映射表切換的均衡性,N的取值往往十倍于節(jié)點數(shù)量,對于上千節(jié)點的集群,N取值往往達到萬數(shù)量級。這意味著連續(xù)插入n〈 = N條;fid記錄,會離散到η個SubTbl子表上的葉子對象中,導(dǎo)致磁盤1的離散率大大增加,磁盤1無法聚合。
[0136]而本發(fā)明實施例提供的技術(shù)方案中,將M的取值限定為系統(tǒng)在寫入數(shù)據(jù)時的下盤時延內(nèi)的并發(fā)操作數(shù),因此,同時最多只有M個對象處于活動狀態(tài),將磁盤1的離散程度控制在一定范圍之內(nèi),相對于現(xiàn)有技術(shù)而言,磁盤1的離散問題得到明顯改善。
[0137]再者,現(xiàn)有技術(shù)中,反向索引表的一個子表中記錄的反向索引記錄采用B+樹方式進行組織,因此,在執(zhí)行針對反向索引記錄的新建和刪除操作時,將觸發(fā)B+葉子對象的分裂以及聚合,大大增加磁盤消耗。而在讀取反向索引記錄時,又需要通過B+排序來定位葉子對象,增加CPU消耗。
[0138]而本發(fā)明實施例提供的技術(shù)方案中,將反向索引記錄固定映射到某個對象中固定的偏移位置,該偏移位置可以根據(jù)目錄項的fid唯一確定,能夠?qū)崿F(xiàn)指定位置的直接寫入和刪除,避免了 B+算法導(dǎo)致的對象的分裂聚合,節(jié)省了磁盤開銷;且在查詢反向索引記錄時,無需B+算法搜索過程,減少cpu開銷。
[0139]基于相同的技術(shù)構(gòu)思,本發(fā)明實施例還提供了一種反向索引記錄的存儲裝置,用于對反向索引表中的反向索引記錄進行維護。參照圖6,該裝置包括:
[0140]第一獲取模塊401,用于在服務(wù)器新建目錄項之后,獲取目錄項的第一目錄項標識和目錄項的父目錄項的第二目錄項標識;
[0141]第一確定模塊402,用于根據(jù)反向索引表中的對象與目錄項標識的第一對應(yīng)關(guān)系,確定與第一目錄項標識對應(yīng)的對象為存儲目錄項的第一反向索引記錄的第一對象;
[0142]第二確定模塊403,用于根據(jù)反向索引記錄在對象中的存儲位置與目錄項標識的第二對應(yīng)關(guān)系,確定與第一目錄項標識對應(yīng)的存儲位置為在第一對象中記錄第一反向索引記錄的第一位置;
[0143]寫入模塊404,用于在第一對象中的第一位置處寫入第一反向索引記錄,第一反向索引記錄中記錄有第一目錄項標識和第二目錄項標識。
[0144]可選的,該裝置還包括:
[0145]權(quán)限獲取模塊,用于在第一對象中的第一位置處寫入第一反向索引記錄之前,獲取針對第一對象的寫鎖權(quán)限;
[0146]權(quán)限釋放模塊,用于在第一對象中的第一位置處寫入第一反向索引記錄之后,釋放獲取到的寫鎖權(quán)限。
[0147]可選的,參照圖7,該裝置還包括:
[0148]第一接收模塊405,用于接收查詢第一反向索引記錄的讀請求,讀請求中包含第一目錄項標識;
[0149]第一確定模塊402,還用于根據(jù)第一對應(yīng)關(guān)系,確定與第一目錄項標識對應(yīng)的第一對象;
[0150]第二確定模塊403,還用于根據(jù)第二對應(yīng)關(guān)系,確定與第一目錄項標識對應(yīng)的第一位置;
[0151]該裝置還包括:讀取模塊406,用于在第一對象中的第一位置處讀取第一反向索引記錄,并返回讀取到的第一反向索引記錄中的數(shù)據(jù)。
[0152]可選的,權(quán)限獲取模塊,還用于在第一對象中的第一位置處讀取第一反向索引記錄之前,獲取針對第一對象的寫鎖權(quán)限;
[0153]權(quán)限釋放模塊,還用于在第一對象中的第一位置處讀取第一反向索引記錄之后,釋放獲取到的寫鎖權(quán)限。
[0154]可選的,繼續(xù)參照圖7,該裝置還包括:
[0155]第二接收模塊407,用于接收刪除第一反向索引記錄的刪除請求,刪除請求中包含第一目錄項標識;
[0156]第一確定模塊402,還用于根據(jù)第一對應(yīng)關(guān)系,確定與第一目錄項標識對應(yīng)的第一對象;
[0157]第二確定模塊403,還用于根據(jù)第二對應(yīng)關(guān)系,確定與第一目錄項標識對應(yīng)的第一位置;
[0158]該裝置還包括:刪除模塊408,用于刪除第一對象中的第一位置處的第一反向索引記錄。
[0159]可選的,權(quán)限獲取模塊,還用于在刪除第一對象中的第一位置處的第一反向索引記錄之前,獲取針對第一對象的寫鎖權(quán)限;
[0160]權(quán)限釋放模塊,還用于在刪除第一對象中的第一位置處的第一反向索引記錄之后,釋放獲取到的寫鎖權(quán)限。
[0161]可選的,該裝置具體根據(jù)如下第一對應(yīng)關(guān)系和第二對應(yīng)關(guān)系進行反向索引表的維護,其中,第一對應(yīng)關(guān)系為:I CU-= (fid/S) *M+fid% 3%皿;其中,1(1()1^為反向索引表中對象的標識,fid為目錄項標識,M為系統(tǒng)在寫入數(shù)據(jù)時的下盤時延內(nèi)的并發(fā)操作數(shù),S =M*K,K為一個對象能夠存儲的反向索引記錄個數(shù),%為取余運算;
[0162]第二對應(yīng)關(guān)系為:index = (fid% S)/M ;其中,index為反向索引記錄在對象中的存儲位置的偏移量。
[0163]本實施例中的裝置與圖2至圖5對應(yīng)的方法是基于同一發(fā)明構(gòu)思下的兩個方面,在前面已經(jīng)對圖2至圖5對應(yīng)的方法的實施過程作了詳細的描述,所以本領(lǐng)域技術(shù)人員可根據(jù)前述描述清楚地了解本實施例中的裝置的結(jié)構(gòu)及實施過程,為了說明書的簡潔,在此就不再贅述了。
[0164]基于相同的技術(shù)構(gòu)思,本發(fā)明實施例還提供了一種反向索引記錄的存儲裝置500,用于管理反向索引表中的反向索引記錄。參照圖8,為裝置500的結(jié)構(gòu)示意框圖,裝置500包括:總線503,以及連接到總線503的處理器501、存儲單元502。
[0165]其中,存儲單元502用于存儲指令;
[0166]處理器501用于執(zhí)行存儲單元502中存儲的指令,在新建目錄項之后,獲取所述目錄項的第一目錄項標識和所述目錄項的父目錄項的第二目錄項標識;根據(jù)反向索引表中的對象與目錄項標識的第一對應(yīng)關(guān)系,確定與所述第一目錄項標識對應(yīng)的對象為存儲所述目錄項的第一反向索引記錄的第一對象;根據(jù)反向索引記錄在對象中的存儲位置與目錄項標識的第二對應(yīng)關(guān)系,確定與所述第一目錄項標識對應(yīng)的存儲位置為在所述第一對象中記錄所述第一反向索引記錄的第一位置;在所述第一對象中的第一位置處寫入所述第一反向索弓丨記錄,所述第一反向索引記錄中記錄有所述第一目錄項標識和所述第二目錄項標識。
[0167]可選的,處理器501在所述第一對象中的第一位置處寫入所述第一反向索引記錄之前,還用于:獲取針對所述第一對象的寫鎖權(quán)限;
[0168]處理器501在所述第一對象中的第一位置處寫入所述第一反向索引記錄之后,還用于:釋放獲取到的所述寫鎖權(quán)限。
[0169]可選的,裝置500還包括:連接到總線503的接口 504,接口 504用于接收查詢所述第一反向索引記錄的讀請求,所述讀請求中包含所述第一目錄項標識;
[0170]處理器501還用于:根據(jù)所述第一對應(yīng)關(guān)系,確定與所述第一目錄項標識對應(yīng)的第一對象;根據(jù)所述第二對應(yīng)關(guān)系,確定與所述第一目錄項標識對應(yīng)的第一位置;在所述第一對象中的第一位置處讀取所述第一反向索引記錄,并返回讀取到的所述第一反向索引記錄中的數(shù)據(jù)。
[0171]可選的,接口 504還用于:接收刪除所述第一反向索引記錄的刪除請求,所述刪除請求中包含所述第一目錄項標識;
[0172]處理器501還用于:根據(jù)所述第一對應(yīng)關(guān)系,確定與所述第一目錄項標識對應(yīng)的第一對象;根據(jù)所述第二對應(yīng)關(guān)系,確定與所述第一目錄項標識對應(yīng)的第一位置;刪除所述第一對象中的第一位置處的所述第一反向索引記錄。
[0173]可選的,處理器501具體根據(jù)第一對應(yīng)關(guān)系:IdQbjeet= (fid/S) *M+fid% S% M,確定與所述第一目錄項標識對應(yīng)的對象;
[0174]處理器501具體根據(jù)第二對應(yīng)關(guān)系:index = (fid% S)/M,確定與所述第一目錄項標識對應(yīng)的存儲位置;
[0175]其中,1‘_為反向索引表中對象的標識,fid為目錄項標識,M為系統(tǒng)在寫入數(shù)據(jù)時的下盤時延內(nèi)的并發(fā)操作數(shù),S = M*K,K為一個對象能夠存儲的反向索引記錄個數(shù),index為反向索引記錄在對象中的存儲位置的偏移量,%為取余運算。
[0176]可選的,可選的,處理器501可以為集成在一起的一塊芯片,或者處理器501包括多個物理上相互獨立的芯片。
[