專利名稱:消息文件管理方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)管理技術(shù),具體涉及一種消息文件管理方法及裝置。
背景技術(shù):
在電信的網(wǎng)管應(yīng)用系統(tǒng)中,需要對(duì)現(xiàn)網(wǎng)中的網(wǎng)元設(shè)備運(yùn)維數(shù)據(jù)和網(wǎng)管系統(tǒng)進(jìn)行大 數(shù)據(jù)量的消息動(dòng)態(tài)同步,如何保證這些同步的消息安全持久并能快速定位某消息,會(huì)對(duì)整 個(gè)網(wǎng)管系統(tǒng)的運(yùn)行性能、執(zhí)行效率和準(zhǔn)確性起到至關(guān)重要的影響。 大多數(shù)網(wǎng)管系統(tǒng)中對(duì)消息的讀寫(xiě)一般都是基于內(nèi)存或一般的文件系統(tǒng)的讀寫(xiě),大 致可以分為基于內(nèi)存的方式、基于文件的方式和基于數(shù)據(jù)庫(kù)的方式。 在基于文件的方式的消息讀寫(xiě)中也有多種形式,在實(shí)現(xiàn)本發(fā)明的過(guò)程中,發(fā)明人 發(fā)現(xiàn)現(xiàn)有的基于文件方式的消息讀寫(xiě)中至少存在以下問(wèn)題 (1)現(xiàn)有的無(wú)格式文件和隨機(jī)存取文件的讀寫(xiě)速度慢,無(wú)法快速定位消息。
(2)緩沖輸入流文件讀寫(xiě)速度較快,但是只能順序進(jìn)行,很難定位和控制文件中的 消息。
(3)內(nèi)存映射文件雖然讀寫(xiě)速度較快,但很難定位和控制文件中的消息。
這顯然很難保證系統(tǒng)運(yùn)行的效率和準(zhǔn)確性。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種消息文件管理方法及裝置,能夠快速定位文件中的消息,
提高文件中消息隊(duì)列的管理效率。 為此,本發(fā)明實(shí)施例提供如下技術(shù)方案 本發(fā)明實(shí)施例提供的一種消息文件管理方法,包括 建立文件系統(tǒng),所述文件系統(tǒng)包括根目錄和節(jié)點(diǎn)目錄,所述根目錄下包括頭文件, 節(jié)點(diǎn)目錄下包括頭文件和對(duì)應(yīng)的數(shù)據(jù)文件,并將所述文件系統(tǒng)映射到內(nèi)存;
當(dāng)需要寫(xiě)消息時(shí),選擇所述文件系統(tǒng)中的節(jié)點(diǎn)目錄; 將所述消息的內(nèi)容寫(xiě)入所述節(jié)點(diǎn)目錄下的數(shù)據(jù)文件中,并在所述節(jié)點(diǎn)目錄的頭文 件中寫(xiě)入所述消息的相關(guān)信息。 本發(fā)明實(shí)施例提供的一種消息文件管理裝置,包括 文件建立單元,用于建立文件系統(tǒng),所述文件系統(tǒng)包括根目錄和節(jié)點(diǎn)目錄,所述根 目錄下包括頭文件,節(jié)點(diǎn)目錄下包括頭文件和對(duì)應(yīng)的數(shù)據(jù)文件;
映射單元,用于將所述文件系統(tǒng)映射到內(nèi)存; 消息寫(xiě)入單元,用于當(dāng)需要寫(xiě)消息時(shí),選擇所述文件系統(tǒng)中的節(jié)點(diǎn)目錄,并將所述 消息的內(nèi)容寫(xiě)入所述節(jié)點(diǎn)目錄下的數(shù)據(jù)文件中,并在所述節(jié)點(diǎn)目錄的頭文件中寫(xiě)入所述消 息的相關(guān)信息。 本發(fā)明實(shí)施例的消息文件管理方法及裝置,通過(guò)建立文件系統(tǒng),所述文件系統(tǒng)包 括根目錄和節(jié)點(diǎn)目錄,所述根目錄下包括頭文件,節(jié)點(diǎn)目錄下包括頭文件和對(duì)應(yīng)的數(shù)據(jù)文
4件;將所述文件系統(tǒng)映射到內(nèi)存;當(dāng)需要寫(xiě)消息時(shí),選擇所述文件系統(tǒng)中的節(jié)點(diǎn)目錄;將所 述消息的內(nèi)容寫(xiě)入所述節(jié)點(diǎn)目錄下的數(shù)據(jù)文件中,并在所述節(jié)點(diǎn)目錄的頭文件中寫(xiě)入所述 消息的相關(guān)信息。通過(guò)內(nèi)存映射方式,利用內(nèi)存緩存部分文件系統(tǒng)的內(nèi)容,大大提高了文件 隊(duì)列的訪問(wèn)速度。尤其是對(duì)于電信的網(wǎng)管應(yīng)用系統(tǒng),可以快速定位消息隊(duì)列中的消息,保證 系統(tǒng)運(yùn)行的實(shí)時(shí)性、有效性和準(zhǔn)確性。
圖1是本發(fā)明實(shí)施例消息文件管理方法的流程圖; 圖2是本發(fā)明實(shí)施例中文件系統(tǒng)的存儲(chǔ)示意圖; 圖3是本發(fā)明實(shí)施例中根目錄下的Head文件的一種結(jié)構(gòu)示意圖; 圖4是本發(fā)明實(shí)施例中節(jié)點(diǎn)目錄下的Head文件的一種結(jié)構(gòu)示意圖; 圖5是本發(fā)明實(shí)施例中節(jié)點(diǎn)目錄下的Head文件中的超級(jí)塊的結(jié)構(gòu)示意圖; 圖6是本發(fā)明實(shí)施例中節(jié)點(diǎn)目錄下的Data文件的一種結(jié)構(gòu)示意圖; 圖7是本發(fā)明實(shí)施例消息文件管理裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實(shí)施例的方案,下面結(jié)合附圖和實(shí)施 方式對(duì)本發(fā)明實(shí)施例作進(jìn)一步的詳細(xì)說(shuō)明。 本發(fā)明實(shí)施例的消息文件管理方法及裝置,利用操作系統(tǒng)緩存的模式,將消息文 件映射到內(nèi)存中,這樣訪問(wèn)消息文件中的消息隊(duì)列就像訪問(wèn)內(nèi)存一樣快速和方便。具體地, 首先建立一個(gè)文件系統(tǒng),并將所述文件系統(tǒng)映射到內(nèi)存;當(dāng)需要對(duì)消息進(jìn)行操作,比如讀取 或刪除文件中的消息內(nèi)容、或?qū)⑾?xiě)入文件時(shí),根據(jù)消息標(biāo)識(shí)(ID)確定消息在內(nèi)存中的 位置或需要寫(xiě)入內(nèi)存的地址,即可實(shí)現(xiàn)對(duì)該消息的快速操作。 參照?qǐng)Dl,是本發(fā)明實(shí)施例消息文件管理方法的流程圖,包括以下步驟 步驟101 ,建立文件系統(tǒng),所述文件系統(tǒng)包括根目錄和節(jié)點(diǎn)目錄,所述根目錄下包
括頭文件,節(jié)點(diǎn)目錄下包括頭文件和對(duì)應(yīng)的數(shù)據(jù)文件。 步驟102,將所述文件系統(tǒng)映射到內(nèi)存。 步驟103,當(dāng)需要寫(xiě)消息時(shí),選擇所述文件系統(tǒng)中的節(jié)點(diǎn)目錄。 在選擇節(jié)點(diǎn)目錄時(shí),可以根據(jù)哈希算法來(lái)確定,比如,首先根據(jù)根目錄下的head 中的最大子文件系統(tǒng)數(shù)(FileSysCount,如有3個(gè)),和當(dāng)前系統(tǒng)的路徑比如c:Wffs,得 到3個(gè)子文件系統(tǒng)對(duì)象數(shù)組列表,比如sub[],它們的目錄結(jié)構(gòu)的路徑如下C:\\ffs\0\ ; c:\\ffs\l\ ;c:WffsW然后每次需要寫(xiě)消息時(shí),通過(guò)簡(jiǎn)單的Hash算法子文件系統(tǒng)索引 =種子數(shù)++%最大子文件系統(tǒng)數(shù),再通過(guò)sub[子文件系統(tǒng)索引]中取得某個(gè)子文件系統(tǒng), 最后通過(guò)這個(gè)子文件系統(tǒng)創(chuàng)建一個(gè)(File)文件對(duì)象,并且把消息標(biāo)識(shí)設(shè)置到文件對(duì)象中。
當(dāng)然,也可以根據(jù)其他方法來(lái)確定,對(duì)此本發(fā)明實(shí)施例并不做限定。
步驟104,將所述消息的內(nèi)容寫(xiě)入所述節(jié)點(diǎn)目錄下的數(shù)據(jù)文件中,并在所述節(jié)點(diǎn)目 錄的頭文件中寫(xiě)入所述消息的相關(guān)信息。 具體地,可以在節(jié)點(diǎn)目錄下的頭文件中設(shè)置數(shù)據(jù)塊開(kāi)關(guān)映射表(BitM即)和索引 節(jié)點(diǎn)列表(InodeList);在數(shù)據(jù)文件中設(shè)置數(shù)據(jù)塊。在寫(xiě)消息時(shí),根據(jù)所述數(shù)據(jù)塊開(kāi)關(guān)映射表選擇所述數(shù)據(jù)文件中空閑的數(shù)據(jù)塊;根據(jù)內(nèi)存中的索引節(jié)點(diǎn)開(kāi)關(guān)選擇所述索引節(jié)點(diǎn)列表中空閑的索引節(jié)點(diǎn);然后,將所述消息的內(nèi)容寫(xiě)入所述空閑的數(shù)據(jù)塊中,并在所述空閑的索引節(jié)點(diǎn)中寫(xiě)入所述消息的相關(guān)信息。 為了快速讀取消息,在本發(fā)明實(shí)施例中,還可以將所述消息寫(xiě)入內(nèi)存隊(duì)列中。這樣,當(dāng)需在讀取消息時(shí),根據(jù)消息標(biāo)識(shí)從所述內(nèi)存隊(duì)列中讀取消息。 在本發(fā)明實(shí)施例中,在寫(xiě)入消息時(shí),選擇所述文件系統(tǒng)中的節(jié)點(diǎn)目錄,就可以根據(jù)選擇的節(jié)點(diǎn)目錄建立消息標(biāo)識(shí)與文件對(duì)象的對(duì)應(yīng)關(guān)系,并將該對(duì)應(yīng)關(guān)系寫(xiě)到一個(gè)消息標(biāo)識(shí)與文件對(duì)象的映射表中,在將所述消息寫(xiě)入到相應(yīng)的數(shù)據(jù)塊并將所述消息的相關(guān)信息寫(xiě)入相應(yīng)的索引節(jié)點(diǎn)后,可以在所述映射表中所述消息標(biāo)識(shí)對(duì)應(yīng)的文件對(duì)象中添加相應(yīng)的數(shù)據(jù)塊和索引節(jié)點(diǎn)的信息,以便于在需要?jiǎng)h除消息時(shí)快速定位所述消息在文件系統(tǒng)中的位置信息。 在需要?jiǎng)h除消息時(shí),根據(jù)消息標(biāo)識(shí)從所述內(nèi)存隊(duì)列中刪除該消息,并根據(jù)消息標(biāo)識(shí)以及所述消息標(biāo)識(shí)與文件對(duì)象的映射表,獲取存放該消息的子文件系統(tǒng)以及與該消息相關(guān)的數(shù)據(jù)塊和索引節(jié)點(diǎn),更新所述索引節(jié)點(diǎn)的狀態(tài),即將索引節(jié)點(diǎn)開(kāi)關(guān)中對(duì)應(yīng)該索引節(jié)點(diǎn)的開(kāi)關(guān)設(shè)置為空閑。同時(shí),還要更新內(nèi)存中數(shù)據(jù)塊開(kāi)關(guān)映射表中對(duì)應(yīng)所述數(shù)據(jù)塊的開(kāi)關(guān)的狀態(tài),并刪除內(nèi)存中索引節(jié)點(diǎn)列表中的所述索引節(jié)點(diǎn),最后同步Head文件中數(shù)據(jù)塊開(kāi)關(guān)映射表和索引節(jié)點(diǎn)列表。 需要說(shuō)明的是,在寫(xiě)消息、刪除消息或更新消息時(shí),都需要更新數(shù)據(jù)開(kāi)關(guān)映射表中數(shù)據(jù)塊對(duì)應(yīng)的開(kāi)關(guān)狀態(tài)和內(nèi)存中的索引節(jié)點(diǎn)對(duì)應(yīng)的索引開(kāi)關(guān)的狀態(tài)。 可見(jiàn),利用本發(fā)明實(shí)施例的方法,綜合了緩沖輸入流文件和內(nèi)存映射文件的優(yōu)點(diǎn),通過(guò)內(nèi)存映射方式,利用內(nèi)存緩存部分文件系統(tǒng)的內(nèi)容,大大提高了文件隊(duì)列的訪問(wèn)速度。尤其是對(duì)于電信的網(wǎng)管應(yīng)用系統(tǒng),可以快速定位消息隊(duì)列中的消息,保證系統(tǒng)運(yùn)行的實(shí)時(shí)性、有效性和準(zhǔn)確性。 下面舉例進(jìn)一步詳細(xì)說(shuō)明本發(fā)明實(shí)施例中文件系統(tǒng)的結(jié)構(gòu)。 如圖2所示,是本發(fā)明實(shí)施例中文件系統(tǒng)的存儲(chǔ)示意圖。其中,F(xiàn)FS為根目錄,0、1
為節(jié)點(diǎn)目錄,當(dāng)然,在一個(gè)文件系統(tǒng)中可以有一個(gè)或多個(gè)節(jié)點(diǎn)目錄。 如圖3所示,是本發(fā)明實(shí)施例中根目錄下的Head文件的結(jié)構(gòu)示意圖。 在該實(shí)施例中,根目錄下的Head文件包括文件系統(tǒng)的節(jié)點(diǎn)數(shù)、最大文件個(gè)數(shù)、最
大文件容量,還可進(jìn)一步包括校驗(yàn)信息,比如圖3中所示的數(shù)據(jù)檢查點(diǎn)1和數(shù)據(jù)檢查點(diǎn)2。
其中,所述檢驗(yàn)信息用于檢查所述文件系統(tǒng)是否被破壞,以保證文件系統(tǒng)的正確性。比如,
如果數(shù)據(jù)檢查點(diǎn)2的數(shù)值不等于數(shù)據(jù)檢查點(diǎn)1的數(shù)值,則表明文件系統(tǒng)已被破壞。 節(jié)點(diǎn)目錄下的Head文件用于保存該節(jié)點(diǎn)目錄下的存儲(chǔ)控制信息,其結(jié)構(gòu)如圖4所
示,包括數(shù)據(jù)塊開(kāi)關(guān)映射表和索引節(jié)點(diǎn)列表,還可進(jìn)一步包括超級(jí)塊。其中 所述超級(jí)塊用于存儲(chǔ)該節(jié)點(diǎn)目錄下的子文件系統(tǒng)信息,具體信息內(nèi)容可參照?qǐng)D5
中所示,主要有子文件系統(tǒng)中所有類(lèi)型的信息塊的大小、總數(shù)、信息塊的偏址以及內(nèi)存地
址等信息。圖5中所示的超級(jí)塊中包含的數(shù)據(jù)塊指向存儲(chǔ)的位置字段用于指示文件系統(tǒng)存
儲(chǔ)的路徑,比如是"C:\ff s\"。 所述BitM即中包括對(duì)應(yīng)于Data文件中各數(shù)據(jù)塊的開(kāi)關(guān),用于指示對(duì)應(yīng)的數(shù)據(jù)塊的狀態(tài),也就是說(shuō),指示所述數(shù)據(jù)塊中是否已有消息寫(xiě)入。每個(gè)數(shù)據(jù)塊對(duì)應(yīng)了 BitM即中的一個(gè)開(kāi)關(guān),可以用一個(gè)比特來(lái)表示開(kāi)關(guān)的狀態(tài),比如,O表示空閑,1表示非空閑。 所述索引節(jié)點(diǎn)列表中包括多個(gè)索引節(jié)點(diǎn)(即圖中的I節(jié)點(diǎn)),每個(gè)索引節(jié)點(diǎn)中存
儲(chǔ)了一個(gè)數(shù)據(jù)塊的相關(guān)信息,比如數(shù)據(jù)塊中消息的長(zhǎng)度、建立時(shí)間、消息狀態(tài)、消息標(biāo)識(shí)以
及本身的索引信息(比如索引節(jié)點(diǎn)在索引節(jié)點(diǎn)列表中的位置)等。每個(gè)索引節(jié)點(diǎn)狀態(tài)的
變化可以通過(guò)索引節(jié)點(diǎn)開(kāi)關(guān)來(lái)表示,比如索引節(jié)點(diǎn)為空時(shí),對(duì)應(yīng)的開(kāi)關(guān)變量為T(mén)rue,否則為
False。為了快速定位某個(gè)索引節(jié)點(diǎn),可以將索引節(jié)點(diǎn)開(kāi)關(guān)以位圖的形式保存在內(nèi)存中。 節(jié)點(diǎn)目錄下的Data文件結(jié)構(gòu)如圖6所示,包括多個(gè)數(shù)據(jù)塊。為了降低對(duì)文件管理
的復(fù)雜度,可以設(shè)定這些數(shù)據(jù)塊的容量大小一致,其中每個(gè)數(shù)據(jù)塊用于存儲(chǔ)一條消息。 需要說(shuō)明的是,在實(shí)際應(yīng)用中,可以根據(jù)各消息的最大長(zhǎng)度設(shè)定所述數(shù)據(jù)塊的大
小,每條消息占用一個(gè)數(shù)據(jù)塊,相應(yīng)地,有一個(gè)索引節(jié)點(diǎn)存儲(chǔ)該消息的相關(guān)信息,也就是說(shuō),
一條消息的存儲(chǔ)占用了一個(gè)數(shù)據(jù)塊(存儲(chǔ)了該消息的內(nèi)容)和一個(gè)索引節(jié)點(diǎn)(存儲(chǔ)了該消
息的相關(guān)信息)。當(dāng)然,如果一條消息所需占用的存儲(chǔ)空間大于一個(gè)數(shù)據(jù)塊的容量時(shí),也可
以占用多個(gè)數(shù)據(jù)塊,相應(yīng)地,有一個(gè)索引節(jié)點(diǎn),也就是說(shuō),一條消息的存儲(chǔ)占用了多個(gè)數(shù)據(jù)
塊(存儲(chǔ)了該消息的內(nèi)容)和一個(gè)索引節(jié)點(diǎn)(存儲(chǔ)了該消息的相關(guān)信息)。 可見(jiàn),為了方便靈活地應(yīng)用本發(fā)明實(shí)施例的方法,各子文件系統(tǒng)中的索引節(jié)點(diǎn)和
數(shù)據(jù)塊的數(shù)量可以相同,是一一對(duì)應(yīng)的;索引節(jié)點(diǎn)和數(shù)據(jù)塊的數(shù)量也可以是不同的,是一對(duì)
多的關(guān)系。具體可以根據(jù)應(yīng)用環(huán)境來(lái)確定。 確定了文件系統(tǒng)的結(jié)構(gòu),就可以根據(jù)該結(jié)構(gòu)建立文件系統(tǒng)。首先,在建立文件之前 可以選擇文件系統(tǒng)存放的目錄路徑,根據(jù)消息的大小和存放消息的頻率計(jì)算出文件系統(tǒng)的 大小。 計(jì)算文件系統(tǒng)的大小時(shí),需要先計(jì)算以下信息 BitM即的塊數(shù)=塊位圖數(shù)目(有效大小)/ (數(shù)據(jù)塊大小*8位); 索引節(jié)點(diǎn)塊數(shù)=(最大文件個(gè)數(shù)*索引節(jié)點(diǎn)大小)/消息大??; 索引節(jié)點(diǎn)起始偏址=BitM即偏址+Bitifap的塊數(shù); 最大Data文件大小=數(shù)據(jù)塊大小*BitMap中的開(kāi)關(guān)數(shù); Head文件和Data文件中的塊總數(shù)=超級(jí)塊數(shù)+BitMap的塊數(shù)+索引節(jié)點(diǎn)塊數(shù)+ 數(shù)據(jù)塊數(shù); Head文件數(shù)=超級(jí)塊數(shù)+BitMap的塊數(shù)+索引節(jié)點(diǎn)塊數(shù)。 比如,可以設(shè)定文件系統(tǒng)的默認(rèn)設(shè)置為位圖數(shù)目=32K、最大文件數(shù)二 8K、位圖 塊偏址=lbit、索引節(jié)點(diǎn)大小二64bit、索引節(jié)點(diǎn)數(shù)目二 12、數(shù)據(jù)塊數(shù)目=321(、超級(jí)塊數(shù)目 =l等。 例如文件系統(tǒng)路徑=cAffs,數(shù)據(jù)塊大小二 1024B,2個(gè)文件節(jié)點(diǎn)時(shí),根據(jù)默認(rèn)配 置生成文件系統(tǒng)如圖l所示。 在建立好文件系統(tǒng)后,需要將所述文件系統(tǒng)映射到內(nèi)存中,也就是說(shuō)對(duì)文件系統(tǒng) 進(jìn)行初始化的過(guò)程。具體地可以按照以下方式進(jìn)行 首先讀取根目錄下的Head文件,確定文件系統(tǒng)的節(jié)點(diǎn)數(shù)、最大文件個(gè)數(shù)和最大文 件容量,然后再初始化子文件系統(tǒng)。 初始化子文件系統(tǒng)時(shí),首先根據(jù)各節(jié)點(diǎn)目錄下的Head文件中的超級(jí)塊的信息,可 以確定當(dāng)前文件系統(tǒng)所需的總空間;其次初始化數(shù)據(jù)塊開(kāi)關(guān)映射表,將文件系統(tǒng)中的數(shù)據(jù)塊開(kāi)關(guān)映射表同步到內(nèi)存的BitMap中,其中BitMap在內(nèi)存中的起始位置根據(jù)超級(jí)塊中的BitM即偏址*超級(jí)塊中定義的數(shù)據(jù)塊大小確定,BitM即的大小根據(jù)超級(jí)塊中的BitM即大小確定, 一次Flush的字節(jié)數(shù)根據(jù)超級(jí)塊中的頭文件大小( 一般定義Blocksize ==headBlockSize)確定;然后初始化索引節(jié)點(diǎn),可以根據(jù)索引節(jié)點(diǎn)的起始偏址、索引節(jié)點(diǎn)塊數(shù)和最大數(shù)據(jù)塊數(shù)(即當(dāng)前系統(tǒng)中最大索引節(jié)點(diǎn)數(shù)目(等于最大數(shù)據(jù)塊數(shù)、等于最大塊位圖數(shù)),在內(nèi)存中生成一個(gè)索引節(jié)點(diǎn)列表,裝載索引節(jié)點(diǎn)中的信息,同時(shí)初始化一個(gè)同樣長(zhǎng)度的文件列表(FileList),以便于在讀取或刪除消息時(shí)使用。最后,初始化Data文件,根據(jù)超級(jí)塊中的數(shù)據(jù)塊起始偏址,得到數(shù)據(jù)的讀寫(xiě)通道。即根據(jù)BitM即、數(shù)據(jù)塊的偏址(DataBlockOffset)和數(shù)據(jù)塊數(shù)(DataBlockCount),生成一個(gè)內(nèi)存映射列表用來(lái)控制數(shù)據(jù)塊;如可以根據(jù)超級(jí)塊中的數(shù)據(jù)塊起始地址(DataPosition即指針)或者索引節(jié)點(diǎn)中的消息(消息的開(kāi)始地址、長(zhǎng)度)等相關(guān)信息達(dá)到快速控制內(nèi)存和文件系統(tǒng)映射的效果。除此之外,在初始化時(shí),還需要在內(nèi)存中預(yù)生成一個(gè)數(shù)據(jù)塊對(duì)象池和一個(gè)文件對(duì)象池,同時(shí)初始化一個(gè)消息標(biāo)識(shí)與文件對(duì)象的映射表,以保存消息標(biāo)識(shí)與文件對(duì)象的對(duì)應(yīng)關(guān)系,減少消息的頻繁生成和刪除時(shí)的開(kāi)銷(xiāo)。 基于上述建立的文件系統(tǒng),下面分別詳細(xì)描述消息寫(xiě)入、讀取和刪除的過(guò)程。
1.寫(xiě)入消息 首先,根據(jù)Hash算法選定一個(gè)子文件系統(tǒng),也就是說(shuō)選擇消息寫(xiě)入的節(jié)點(diǎn)目錄。同時(shí),生成一條消息標(biāo)識(shí)與文件對(duì)象的對(duì)應(yīng)關(guān)系,將該對(duì)應(yīng)關(guān)系保存到所述消息標(biāo)識(shí)與文件對(duì)象的映射表中。 然后,根據(jù)索引節(jié)點(diǎn)開(kāi)關(guān)從所述子文件系統(tǒng)的Head文件的索引節(jié)點(diǎn)列表中選擇
一個(gè)空閑的索引節(jié)點(diǎn),并從文件對(duì)象池中選擇一個(gè)文件,并且根據(jù)索引節(jié)點(diǎn)初始化該文件,
主要包括設(shè)置當(dāng)前索引節(jié)點(diǎn)在文件系統(tǒng)中的位置和確定所述文件的文件名,然后將該文件
對(duì)象(名稱、索引、索引節(jié)點(diǎn)、子文件系統(tǒng)、輸入流、輸出流等信息)放到文件列表中;同時(shí),
根據(jù)文件對(duì)象中的文件輸出流和子文件系統(tǒng)新生成一個(gè)內(nèi)存數(shù)據(jù)塊,將所述消息寫(xiě)到該內(nèi)
存數(shù)據(jù)塊中。如果當(dāng)前輸出流的字節(jié)數(shù)大于等于當(dāng)前系統(tǒng)寫(xiě)消息到文件的閾值的大小,則
還需要將寫(xiě)到所述內(nèi)存數(shù)據(jù)塊中的消息同步到所述文件系統(tǒng)映射到的內(nèi)存和文件系統(tǒng)中。
所述閾值可以是自定義但是必須小于等于數(shù)據(jù)塊的大小。具體過(guò)程如下 寫(xiě)數(shù)據(jù)塊根據(jù)BitM即選擇一個(gè)空閑數(shù)據(jù)塊,得到其起始地址,將所述消息寫(xiě)到
該空閑數(shù)據(jù)塊中,然后將該數(shù)據(jù)塊寫(xiě)到Data文件中; 寫(xiě)索引節(jié)點(diǎn)在空閑數(shù)據(jù)塊中寫(xiě)入消息后,設(shè)置所述空閑的索引節(jié)點(diǎn)的狀態(tài)為非
空閑狀態(tài),也就是說(shuō),將索引節(jié)點(diǎn)開(kāi)關(guān)中對(duì)應(yīng)該索引節(jié)點(diǎn)的開(kāi)關(guān)設(shè)置為非空閑狀態(tài),并更新
索引節(jié)點(diǎn)中的信息,主要是將當(dāng)前消息的長(zhǎng)度、狀態(tài)、創(chuàng)建時(shí)間和校驗(yàn)信息等保存到該索引
節(jié)點(diǎn)中,并將該索引節(jié)點(diǎn)和BitM即中的數(shù)據(jù)開(kāi)關(guān)狀態(tài)寫(xiě)到Head文件中。 需要說(shuō)明的是,為了便于快速讀取消息,還可以將所述消息寫(xiě)入到內(nèi)存隊(duì)列中。 2.讀取消息 在讀取消息時(shí),可以根據(jù)消息標(biāo)識(shí)直接從內(nèi)存隊(duì)列中讀出消息,而無(wú)需讀取文件
系統(tǒng),從而可以提高讀取速度。 3.刪除消息 在需要?jiǎng)h除消息時(shí),可以根據(jù)消息標(biāo)識(shí)直接從所述內(nèi)存隊(duì)列中刪除消息,并且根據(jù)消息標(biāo)識(shí)以及所述消息標(biāo)識(shí)與文件對(duì)象的映射表,獲取存放該消息的子文件系統(tǒng)以及與 該消息相關(guān)的數(shù)據(jù)塊和索引節(jié)點(diǎn),更新所述索引節(jié)點(diǎn)的狀態(tài),即將索引節(jié)點(diǎn)開(kāi)關(guān)中對(duì)應(yīng)該 索引節(jié)點(diǎn)的開(kāi)關(guān)設(shè)置為空閑。同時(shí),還要更新內(nèi)存中數(shù)據(jù)塊開(kāi)關(guān)映射表中對(duì)應(yīng)所述數(shù)據(jù)塊 的開(kāi)關(guān)的狀態(tài),并刪除內(nèi)存中索引節(jié)點(diǎn)列表中的所述索引節(jié)點(diǎn),最后同步Head文件中數(shù)據(jù) 塊開(kāi)關(guān)映射表和索引節(jié)點(diǎn)列表,即更新數(shù)據(jù)開(kāi)關(guān)映射表中數(shù)據(jù)塊對(duì)應(yīng)的開(kāi)關(guān)狀態(tài)和內(nèi)存中 的索引節(jié)點(diǎn)對(duì)應(yīng)的索引開(kāi)關(guān)的狀態(tài)。 可見(jiàn),本發(fā)明實(shí)施例的方法利用內(nèi)存映射和索引算法可以快速寫(xiě)入、讀取、刪除 文件系統(tǒng)中的消息。該文件系統(tǒng)存儲(chǔ)的是二進(jìn)制形式的字節(jié)流,可以適用各種協(xié)議,比如 http、https、rmi、webservice等協(xié)議消息隊(duì)列的管理。 本發(fā)明實(shí)施例的方法可以應(yīng)用于多種消息處理環(huán)境,比如應(yīng)用于同步消息的處理 中,由系統(tǒng)A產(chǎn)生和發(fā)送消息給系統(tǒng)B。系統(tǒng)A在發(fā)送消息(內(nèi)存中的消息)給系統(tǒng)B之 前,將消息寫(xiě)入隊(duì)列,然后有兩種情況(l)可以根據(jù)系統(tǒng)B返回的消息狀態(tài),系統(tǒng)A負(fù)責(zé)清 除隊(duì)列中的消息;(2)系統(tǒng)B可以直接回調(diào)系統(tǒng)A來(lái)負(fù)責(zé)清除隊(duì)列消息。最后系統(tǒng)A可以 定期輪詢隊(duì)列,看看是否有消息沒(méi)有被置狀態(tài),重新發(fā)送消息給系統(tǒng)B。還可以應(yīng)用于異步 消息的處理中,比如將消息隊(duì)列單獨(dú)部署成一個(gè)應(yīng)用系統(tǒng),系統(tǒng)A負(fù)責(zé)寫(xiě)消息,而系統(tǒng)B負(fù) 責(zé)讀消息,而消息的狀態(tài)僅僅由系統(tǒng)B和隊(duì)列系統(tǒng)控制。 本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是可以 通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中, 所述的存儲(chǔ)介質(zhì),如R0M/RAM、磁碟、光盤(pán)等。 本發(fā)明實(shí)施例還提供了一種消息文件管理裝置,如圖7所示,是該裝置的一種結(jié) 構(gòu)示意圖。 在該實(shí)施例中,所述裝置包括文件建立單元701、映射單元702和消息寫(xiě)入單元 703。其中,文件建立單元701 ,用于建立文件系統(tǒng),所述文件系統(tǒng)包括根目錄和節(jié)點(diǎn)目錄,所 述根目錄下包括頭文件,節(jié)點(diǎn)目錄下包括頭文件和對(duì)應(yīng)的數(shù)據(jù)文件;映射單元702,用于將 所述文件系統(tǒng)映射到內(nèi)存;消息寫(xiě)入單元703,用于當(dāng)需要寫(xiě)消息時(shí),選擇所述文件系統(tǒng)中 的節(jié)點(diǎn)目錄,并將所述消息的內(nèi)容寫(xiě)入所述節(jié)點(diǎn)目錄下的數(shù)據(jù)文件中,并在所述節(jié)點(diǎn)目錄 的頭文件中寫(xiě)入所述消息的相關(guān)信息。 為了方便對(duì)文件中消息的管理,可以在節(jié)點(diǎn)目錄下的頭文件中設(shè)置數(shù)據(jù)塊開(kāi)關(guān)映 射表和索引節(jié)點(diǎn)列表;在節(jié)點(diǎn)目錄下的數(shù)據(jù)文件中設(shè)置數(shù)據(jù)塊。所述消息寫(xiě)入單元703包 括節(jié)點(diǎn)目錄選擇子單元731,用于利用哈希算法確定所述節(jié)點(diǎn)目錄;數(shù)據(jù)塊選擇子單元 732,用于根據(jù)所述數(shù)據(jù)塊開(kāi)關(guān)映射表選擇所述數(shù)據(jù)文件中空閑的數(shù)據(jù)塊;索引節(jié)點(diǎn)選擇子 單元733,用于根據(jù)內(nèi)存中的索引開(kāi)關(guān)選擇所述索引節(jié)點(diǎn)列表中空閑的索引節(jié)點(diǎn);寫(xiě)入子 單元734,用于將所述消息的內(nèi)容寫(xiě)入所述空閑的數(shù)據(jù)塊中,并在所述空閑的索引節(jié)點(diǎn)中寫(xiě) 入所述消息的相關(guān)信息。 利用本發(fā)明實(shí)施例的裝置,可以快速將消息寫(xiě)入文件系統(tǒng)中。具體過(guò)程可參照前 面本發(fā)明實(shí)施例的方法中的描述。 當(dāng)然,在本發(fā)明實(shí)施例的裝置中還可以設(shè)置有隊(duì)列寫(xiě)入單元704和消息讀取單元 705。其中,用于將所述消息寫(xiě)入內(nèi)存隊(duì)列,以方便消息的讀取。這樣,在讀取消息時(shí),消息 讀取單元705可以根據(jù)所述消息標(biāo)識(shí)直接從所述內(nèi)存隊(duì)列中讀取消息,而無(wú)需讀取文件系統(tǒng),從而提高了消息的讀取速度。 為了進(jìn)一步提高對(duì)文件系統(tǒng)中消息的定位速度,在本發(fā)明實(shí)施例的裝置中,還可 以設(shè)置有映射表建立單元706和消息刪除子單元707。其中,映射表建立單元706,用于建 立所述消息標(biāo)識(shí)與文件對(duì)象的對(duì)應(yīng)關(guān)系,所述文件對(duì)象包括以下信息選擇的節(jié)點(diǎn)目錄、所 述消息內(nèi)容寫(xiě)入的數(shù)據(jù)塊、所述消息的相關(guān)信息寫(xiě)入的索引節(jié)點(diǎn);消息刪除子單元707,用 于當(dāng)需要?jiǎng)h除消息時(shí),根據(jù)所述消息標(biāo)識(shí)與文件對(duì)象的對(duì)應(yīng)關(guān)系,確定與所述消息相關(guān)的 數(shù)據(jù)塊和索引節(jié)點(diǎn);更新所述數(shù)據(jù)塊對(duì)應(yīng)的數(shù)據(jù)塊開(kāi)關(guān)映射表中的開(kāi)關(guān)狀態(tài)及所述索引節(jié) 點(diǎn)對(duì)應(yīng)的內(nèi)存中的索引開(kāi)關(guān)狀態(tài)。對(duì)文件系統(tǒng)中保存的消息的刪除過(guò)程可參照前面本發(fā)明 實(shí)施例的方法中的描述。 本發(fā)明實(shí)施例的裝置利用內(nèi)存映射和索引算法可以快速寫(xiě)入、讀取、刪除文件系 統(tǒng)中的消息。該文件系統(tǒng)存儲(chǔ)的是二進(jìn)制形式的字節(jié)流,可以適用各種協(xié)議,比如http、 https、rmi、webservice等協(xié)議消息隊(duì)列的管理。 以上對(duì)本發(fā)明實(shí)施例進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體實(shí)施方式
對(duì)本發(fā)明進(jìn)行 了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及設(shè)備;同時(shí),對(duì)于本領(lǐng)域的 一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所 述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
一種消息文件管理方法,其特征在于,包括建立文件系統(tǒng),所述文件系統(tǒng)包括根目錄和節(jié)點(diǎn)目錄,所述根目錄下包括頭文件,節(jié)點(diǎn)目錄下包括頭文件和對(duì)應(yīng)的數(shù)據(jù)文件,并將所述文件系統(tǒng)映射到內(nèi)存;當(dāng)需要寫(xiě)消息時(shí),選擇所述文件系統(tǒng)中的節(jié)點(diǎn)目錄;將所述消息的內(nèi)容寫(xiě)入所述節(jié)點(diǎn)目錄下的數(shù)據(jù)文件中,并在所述節(jié)點(diǎn)目錄的頭文件中寫(xiě)入所述消息的相關(guān)信息。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述選擇所述文件系統(tǒng)中的節(jié)點(diǎn)目錄包 括根據(jù)哈希算法確定所述節(jié)點(diǎn)目錄。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,節(jié)點(diǎn)目錄下的頭文件包括數(shù)據(jù)塊開(kāi)關(guān)映 射表和索引節(jié)點(diǎn)列表;節(jié)點(diǎn)目錄下的數(shù)據(jù)文件包括數(shù)據(jù)塊;所述將所述消息的內(nèi)容寫(xiě)入所述節(jié)點(diǎn)目錄下的數(shù)據(jù)文件中,并在所述節(jié)點(diǎn)目錄的頭文件中寫(xiě)入所述消息的相關(guān)信息包括根據(jù)所述數(shù)據(jù)塊開(kāi)關(guān)映射表選擇所述數(shù)據(jù)文件中空閑的數(shù)據(jù)塊; 根據(jù)內(nèi)存中的索引開(kāi)關(guān)選擇所述索引節(jié)點(diǎn)列表中空閑的索引節(jié)點(diǎn); 將所述消息的內(nèi)容寫(xiě)入所述空閑的數(shù)據(jù)塊中,并在所述空閑的索引節(jié)點(diǎn)中寫(xiě)入所述消息的相關(guān)信息。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述方法還包括 將所述消息寫(xiě)入內(nèi)存隊(duì)列;當(dāng)需在讀取消息時(shí),根據(jù)消息標(biāo)識(shí)從所述內(nèi)存隊(duì)列中讀取消息。
5. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述方法還包括建立所述消息標(biāo)識(shí)與文件對(duì)象的對(duì)應(yīng)關(guān)系,所述文件對(duì)象包括以下信息選擇的節(jié)點(diǎn) 目錄、所述消息內(nèi)容寫(xiě)入的數(shù)據(jù)塊、所述消息的相關(guān)信息寫(xiě)入的索引節(jié)點(diǎn);當(dāng)需要?jiǎng)h除消息時(shí),根據(jù)所述消息標(biāo)識(shí)與文件對(duì)象的對(duì)應(yīng)關(guān)系,確定與所述消息相關(guān) 的數(shù)據(jù)塊和索引節(jié)點(diǎn);刪除所述數(shù)據(jù)塊中的內(nèi)容,并更新所述數(shù)據(jù)塊對(duì)應(yīng)的數(shù)據(jù)塊開(kāi)關(guān)映射表中的開(kāi)關(guān)狀態(tài) 及所述索引節(jié)點(diǎn)對(duì)應(yīng)的內(nèi)存中的索引開(kāi)關(guān)狀態(tài)。
6. —種消息文件管理裝置,其特征在于,包括文件建立單元,用于建立文件系統(tǒng),所述文件系統(tǒng)包括根目錄和節(jié)點(diǎn)目錄,所述根目錄 下包括頭文件,節(jié)點(diǎn)目錄下包括頭文件和對(duì)應(yīng)的數(shù)據(jù)文件; 映射單元,用于將所述文件系統(tǒng)映射到內(nèi)存;消息寫(xiě)入單元,用于當(dāng)需要寫(xiě)消息時(shí),選擇所述文件系統(tǒng)中的節(jié)點(diǎn)目錄,并將所述消息 的內(nèi)容寫(xiě)入所述節(jié)點(diǎn)目錄下的數(shù)據(jù)文件中,并在所述節(jié)點(diǎn)目錄的頭文件中寫(xiě)入所述消息的 相關(guān)信息。
7. 根據(jù)權(quán)利要求6所述的裝置,其特征在于,節(jié)點(diǎn)目錄下的頭文件包括數(shù)據(jù)塊開(kāi)關(guān)映 射表和索引節(jié)點(diǎn)列表;節(jié)點(diǎn)目錄下的數(shù)據(jù)文件包括數(shù)據(jù)塊;所述消息寫(xiě)入單元包括節(jié)點(diǎn)目錄選擇子單元,用于利用哈希算法確定所述節(jié)點(diǎn)目錄;數(shù)據(jù)塊選擇子單元,用于根據(jù)所述數(shù)據(jù)塊開(kāi)關(guān)映射表選擇所述數(shù)據(jù)文件中空閑的數(shù)據(jù)塊;索引節(jié)點(diǎn)選擇子單元,用于根據(jù)內(nèi)存中的索引開(kāi)關(guān)選擇所述索引節(jié)點(diǎn)列表中空閑的索 引節(jié)點(diǎn);寫(xiě)入子單元,用于將所述消息的內(nèi)容寫(xiě)入所述空閑的數(shù)據(jù)塊中,并在所述空閑的索引 節(jié)點(diǎn)中寫(xiě)入所述消息的相關(guān)信息。
8. 根據(jù)權(quán)利要求7所述的裝置,其特征在于,還包括 隊(duì)列寫(xiě)入單元,用于將所述消息寫(xiě)入內(nèi)存隊(duì)列。
9. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,還包括消息讀取單元,用于當(dāng)需在讀取消息時(shí),根據(jù)所述消息標(biāo)識(shí)從所述內(nèi)存隊(duì)列中讀取消息。
10. 根據(jù)權(quán)利要求7所述的裝置,其特征在于,還包括映射表建立單元,用于建立所述消息標(biāo)識(shí)與文件對(duì)象的對(duì)應(yīng)關(guān)系,所述文件對(duì)象包括 以下信息選擇的節(jié)點(diǎn)目錄、所述消息內(nèi)容寫(xiě)入的數(shù)據(jù)塊、所述消息的相關(guān)信息寫(xiě)入的索引 節(jié)點(diǎn);消息刪除子單元,用于當(dāng)需要?jiǎng)h除消息時(shí),根據(jù)所述消息標(biāo)識(shí)與文件對(duì)象的對(duì)應(yīng)關(guān)系, 確定與所述消息相關(guān)的數(shù)據(jù)塊和索引節(jié)點(diǎn);更新所述數(shù)據(jù)塊對(duì)應(yīng)的數(shù)據(jù)塊開(kāi)關(guān)映射表中的 開(kāi)關(guān)狀態(tài)及所述索引節(jié)點(diǎn)對(duì)應(yīng)的內(nèi)存中的索引開(kāi)關(guān)狀態(tài)。
全文摘要
本發(fā)明公開(kāi)了一種消息文件管理方法及裝置,所述方法包括建立文件系統(tǒng),所述文件系統(tǒng)包括根目錄和節(jié)點(diǎn)目錄,所述根目錄下包括頭文件,節(jié)點(diǎn)目錄下包括頭文件和對(duì)應(yīng)的數(shù)據(jù)文件,并將所述文件系統(tǒng)映射到內(nèi)存;當(dāng)需要寫(xiě)消息時(shí),選擇所述文件系統(tǒng)中的節(jié)點(diǎn)目錄;將所述消息的內(nèi)容寫(xiě)入所述節(jié)點(diǎn)目錄下的數(shù)據(jù)文件中,并在所述節(jié)點(diǎn)目錄的頭文件中寫(xiě)入所述消息的相關(guān)信息。利用本發(fā)明,能夠快速定位文件中的消息,提高文件中消息隊(duì)列的管理效率。
文檔編號(hào)H04L12/56GK101783740SQ20091007729
公開(kāi)日2010年7月21日 申請(qǐng)日期2009年1月21日 優(yōu)先權(quán)日2009年1月21日
發(fā)明者徐凡 申請(qǐng)人:大唐移動(dòng)通信設(shè)備有限公司