本申請(qǐng)涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及一種文件存檔方法、文件讀取方法及裝置。
背景技術(shù):
隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,社交類(lèi)應(yīng)用程序(Application,APP)越來(lái)越多,用戶之間可以通過(guò)社交類(lèi)APP進(jìn)行交流,常用的社交類(lèi)APP有阿里旺旺、QQ、微信、飛信等等。服務(wù)器將用戶之間每次通過(guò)社交類(lèi)APP交互的信息作為一個(gè)歷史文件寫(xiě)入磁盤(pán)進(jìn)行存檔,以便于用戶再次查詢和使用,歷史文件可以為語(yǔ)音文件、視頻文件、文本文件、圖片文件等等。
目前,用戶數(shù)量日益增多,歷史文件的數(shù)量也越來(lái)越多,服務(wù)器需要借助于目錄管理系統(tǒng)或者分布式文件系統(tǒng)等等將歷史文件寫(xiě)入磁盤(pán),為了便于區(qū)分眾多的歷史文件,通常需要將每個(gè)歷史文件的描述信息也寫(xiě)入磁盤(pán)。按照現(xiàn)有的文件存檔方法,服務(wù)器首先建立與用戶對(duì)應(yīng)的目錄,然后將歷史文件及其描述信息保存在該目錄下,由于磁盤(pán)的每個(gè)目錄下存儲(chǔ)的歷史文件及其描述信息的個(gè)數(shù)有最大值,當(dāng)該目錄下的歷史文件及其描述信息的個(gè)數(shù)超過(guò)最大值時(shí),需要將該目錄下已有的歷史文件及其描述信息保存在一個(gè)子目錄中,并在該目錄下建立新的子目錄來(lái)保存其它的歷史文件及其描述信息。
上述文件存檔方法,需要借助文件目錄管理系統(tǒng)或文件分布式系統(tǒng)對(duì)歷史文件及其描述信息進(jìn)行存檔,由于每個(gè)目錄下存儲(chǔ)的歷史文件及其描述信息的個(gè)數(shù)都有最大值,隨著歷史文件的數(shù)量增多,為了保存歷史文件及其描述信息就需要不斷建立子目錄,這樣會(huì)占用很多目錄資源,并且相應(yīng)地還會(huì)增大訪問(wèn)延遲。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提供一種文件存檔方法、文件讀取方法及裝置,用以解決相關(guān)技術(shù)中存在的占用很多目錄資源,并且增大訪問(wèn)延遲的問(wèn)題。
根據(jù)本申請(qǐng)實(shí)施例,提供一種文件存檔方法,包括:
獲取待存檔的歷史文件及其描述信息;
從至少一個(gè)預(yù)設(shè)緩存隊(duì)列中選取一個(gè)預(yù)設(shè)緩存隊(duì)列,得到選定緩存隊(duì)列;
將所述歷史文件及其描述信息寫(xiě)入所述選定緩存隊(duì)列中;以及,
定期將所述至少一個(gè)預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息寫(xiě)入磁盤(pán)中進(jìn)行存檔。
具體的,從至少一個(gè)預(yù)設(shè)緩存隊(duì)列中選取一個(gè)預(yù)設(shè)緩存隊(duì)列,得到選定緩存隊(duì)列,具體包括:
若所述至少一個(gè)預(yù)設(shè)緩存隊(duì)列形成環(huán)形隊(duì)列,確定當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小是否超過(guò)所述歷史文件的大小,若所述當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小超過(guò)所述歷史文件的大小,則將所述當(dāng)前預(yù)設(shè)緩存隊(duì)列確定為選定緩存隊(duì)列;若所述當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小小于所述歷史文件的大小,則將所述環(huán)形隊(duì)列中位于所述當(dāng)前預(yù)設(shè)緩存隊(duì)列之后的預(yù)設(shè)緩存隊(duì)列確定為選定緩存隊(duì)列;或者,
確定每個(gè)預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小,選取剩余緩存空間大小超過(guò)所述歷史文件的大小的一個(gè)預(yù)設(shè)緩存隊(duì)列,得到選定緩存隊(duì)列。
具體的,將所述歷史文件及其描述信息寫(xiě)入所述選定緩存隊(duì)列中,具體包括:
將所述歷史文件寫(xiě)入所述選定緩存隊(duì)列的文件子隊(duì)列中;
將所述歷史文件的描述信息以內(nèi)存對(duì)齊的格式寫(xiě)入所述選定緩存隊(duì)列的索引子隊(duì)列中。
具體的,定期將所述至少一個(gè)預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息寫(xiě)入磁盤(pán)中進(jìn)行存檔,具體包括:
監(jiān)控設(shè)定周期是否到期;
若所述設(shè)定周期到期,檢測(cè)每個(gè)預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大??;
將剩余緩存空間大小小于設(shè)定數(shù)值的預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息按照設(shè)定規(guī)則寫(xiě)入磁盤(pán)中進(jìn)行存檔。
具體的,將剩余緩存空間大小小于設(shè)定數(shù)值的預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息按照設(shè)定規(guī)則寫(xiě)入磁盤(pán)中進(jìn)行存檔,具體包括:
輸出剩余緩存空間大小小于設(shè)定數(shù)值的預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息;
以每個(gè)歷史文件的描述信息中的發(fā)送時(shí)間命名對(duì)應(yīng)的歷史文件及其描述信息;
將命名后的歷史文件及其描述信息按照發(fā)送時(shí)間的先后順序分別進(jìn)行歸檔。
可選的,還包括:
接收用戶發(fā)送的歷史文件獲取請(qǐng)求;
根據(jù)所述歷史文件獲取請(qǐng)求獲取描述信息;
從高速緩存中查找與所述描述信息名稱相同的歷史文件;
若在所述高速緩存中查找到與所述描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給所述用戶;若在所述高速緩存中未查找到與所述描述信息名稱相同的歷史文件,根據(jù)所述描述信息從所述磁盤(pán)中查找與所述描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給所述用戶并保存在所述高速緩存中。
可選的,還包括:
統(tǒng)計(jì)已有時(shí)段內(nèi)接收到的歷史文件的大小及其增長(zhǎng)率;
根據(jù)所述已有時(shí)段內(nèi)接收到的歷史文件的大小及其增長(zhǎng)率確定在未來(lái)時(shí)段內(nèi)所述磁盤(pán)的容量是否滿足需求;
若在所述未來(lái)時(shí)段內(nèi)所述磁盤(pán)的容量不滿足需求,則對(duì)所述磁盤(pán)進(jìn)行擴(kuò)容。
根據(jù)本申請(qǐng)實(shí)施例,還提供一種文件讀取方法,包括:
接收用戶發(fā)送的歷史文件獲取請(qǐng)求;
根據(jù)所述歷史文件獲取請(qǐng)求獲取描述信息;
從高速緩存中查找與所述描述信息名稱相同的歷史文件;
若在所述高速緩存中查找到與所述描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給所述用戶;若在所述高速緩存中未查找到與所述描述信息名稱相同的歷史文件,根據(jù)所述描述信息從所述磁盤(pán)中查找與所述描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給所述用戶并保存在所述高速緩存中。
根據(jù)本申請(qǐng)實(shí)施例,還提供一種文件存檔裝置,包括:
第一獲取單元,用于獲取待存檔的歷史文件及其描述信息;
選取單元,用于從至少一個(gè)預(yù)設(shè)緩存隊(duì)列中選取一個(gè)預(yù)設(shè)緩存隊(duì)列,得到選定緩存隊(duì)列;
第一寫(xiě)入單元,用于將所述歷史文件及其描述信息寫(xiě)入所述選定緩存隊(duì)列中;以及,
第二寫(xiě)入單元,用于定期將所述至少一個(gè)預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息寫(xiě)入磁盤(pán)中進(jìn)行存檔。
具體的,所述選取單元,用于從至少一個(gè)預(yù)設(shè)緩存隊(duì)列中選取一個(gè)預(yù)設(shè)緩存隊(duì)列,得到選定緩存隊(duì)列,具體用于:
若所述至少一個(gè)預(yù)設(shè)緩存隊(duì)列形成環(huán)形隊(duì)列,確定當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小是否超過(guò)所述歷史文件的大小,若所述當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小超過(guò)所 述歷史文件的大小,則將所述當(dāng)前預(yù)設(shè)緩存隊(duì)列確定為選定緩存隊(duì)列;若所述當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小小于所述歷史文件的大小,則將所述環(huán)形隊(duì)列中位于所述當(dāng)前預(yù)設(shè)緩存隊(duì)列之后的預(yù)設(shè)緩存隊(duì)列確定為選定緩存隊(duì)列;或者,
確定每個(gè)預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小,選取剩余緩存空間大小超過(guò)所述歷史文件的大小的一個(gè)預(yù)設(shè)緩存隊(duì)列,得到選定緩存隊(duì)列。
具體的,所述第一寫(xiě)入單元,用于將所述歷史文件及其描述信息寫(xiě)入所述選定緩存隊(duì)列中,具體用于:
將所述歷史文件寫(xiě)入所述選定緩存隊(duì)列的文件子隊(duì)列中;
將所述歷史文件的描述信息以內(nèi)存對(duì)齊的格式寫(xiě)入所述選定緩存隊(duì)列的索引子隊(duì)列中。
具體的,所述第二寫(xiě)入單元,用于定期將所述至少一個(gè)預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息寫(xiě)入磁盤(pán)中進(jìn)行存檔,具體用于:
監(jiān)控設(shè)定周期是否到期;
若所述設(shè)定周期到期,檢測(cè)每個(gè)預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大?。?/p>
將剩余緩存空間大小小于設(shè)定數(shù)值的預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息按照設(shè)定規(guī)則寫(xiě)入磁盤(pán)中進(jìn)行存檔。
具體的,所述第二寫(xiě)入單元,用于將剩余緩存空間大小小于設(shè)定數(shù)值的預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息按照設(shè)定規(guī)則寫(xiě)入磁盤(pán)中進(jìn)行存檔,具體用于:
輸出剩余緩存空間大小小于設(shè)定數(shù)值的預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息;
以每個(gè)歷史文件的描述信息中的發(fā)送時(shí)間命名對(duì)應(yīng)的歷史文件及其描述信息;
將命名后的歷史文件及其描述信息按照發(fā)送時(shí)間的先后順序分別進(jìn)行歸檔。
可選的,還包括:
接收單元,用于接收用戶發(fā)送的歷史文件獲取請(qǐng)求;
第二獲取單元,用于根據(jù)所述歷史文件獲取請(qǐng)求獲取描述信息;
查找單元,用于從高速緩存中查找與所述描述信息名稱相同的歷史文件;
發(fā)送單元,用于若在所述高速緩存中查找到與所述描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給所述用戶;若在所述高速緩存中未查找到與所述描述信息名稱相同的歷史文件,根據(jù)所述描述信息從所述磁盤(pán)中查找與所述描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給所述用戶并保存在所述高速緩存中。
可選的,還包括:
統(tǒng)計(jì)單元,用于統(tǒng)計(jì)已有時(shí)段內(nèi)接收到的歷史文件的大小及其增長(zhǎng)率;
確定單元,用于根據(jù)所述已有時(shí)段內(nèi)接收到的歷史文件的大小及其增長(zhǎng)率確定在未來(lái)時(shí)段內(nèi)所述磁盤(pán)的容量是否滿足需求;
擴(kuò)容單元,用于若在所述未來(lái)時(shí)段內(nèi)所述磁盤(pán)的容量不滿足需求,則對(duì)所述磁盤(pán)進(jìn)行擴(kuò)容。
根據(jù)本申請(qǐng)實(shí)施例,還提供一種文件讀取裝置,包括:
接收單元,用于接收用戶發(fā)送的歷史文件獲取請(qǐng)求;
獲取單元,用于根據(jù)所述歷史文件獲取請(qǐng)求獲取描述信息;
查找單元,用于從高速緩存中查找與所述描述信息名稱相同的歷史文件;
發(fā)送單元,用于若在所述高速緩存中查找到與所述描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給所述用戶;若在所述高速緩存中未查找到與所述描述信息名稱相同的歷史文件,根據(jù)所述描述信息從所述磁盤(pán)中查找與所述描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給所述用戶并保存在所述高速緩存中。
本申請(qǐng)實(shí)施例提供一種文件存檔方法、文件讀取方法及裝置,獲取待存檔的歷史文件及其描述信息;從至少一個(gè)預(yù)設(shè)緩存隊(duì)列中選取一個(gè)預(yù)設(shè)緩存隊(duì)列,得到選定緩存隊(duì)列;將所述歷史文件及其描述信息寫(xiě)入所述選定緩存隊(duì)列中;以及,定期將所述至少一個(gè)預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息寫(xiě)入磁盤(pán)中進(jìn)行存檔。該方案中,無(wú)需借助文件目錄管理系統(tǒng)或文件分布式系統(tǒng)對(duì)歷史文件及其描述信息進(jìn)行存檔,從而不會(huì)占用很多目錄資源,相應(yīng)地也減少訪問(wèn)延遲。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
圖1為本申請(qǐng)實(shí)施例中一種文件存檔方法的流程圖;
圖2為本申請(qǐng)實(shí)施例中環(huán)形隊(duì)列的示意圖;
圖3為本申請(qǐng)實(shí)施例中一個(gè)預(yù)設(shè)緩存隊(duì)列中設(shè)置的兩個(gè)子隊(duì)列的結(jié)構(gòu)示意圖;
圖4為本申請(qǐng)實(shí)施例中另一種文件存檔方法的流程圖;
圖5為本申請(qǐng)實(shí)施例中再一種文件存檔方法的流程圖;
圖6為本申請(qǐng)實(shí)施例中一種文件讀取方法的流程圖;
圖7為本申請(qǐng)實(shí)施例中一種文件存檔裝置的結(jié)構(gòu)示意圖;
圖8為本申請(qǐng)實(shí)施例中另一種文件存檔裝置的結(jié)構(gòu)示意圖;
圖9為本申請(qǐng)實(shí)施例中再一種文件存檔裝置的結(jié)構(gòu)示意圖;
圖10為本申請(qǐng)實(shí)施例一種文件讀取裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本申請(qǐng)所要解決的技術(shù)問(wèn)題、技術(shù)方案及有益效果更加清楚、明白,以下結(jié)合附圖和實(shí)施例,對(duì)本申請(qǐng)進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本申請(qǐng),并不用于限定本申請(qǐng)。
為了解決相關(guān)技術(shù)中存在的占用很多目錄資源,并且增大訪問(wèn)延遲的問(wèn)題,本申請(qǐng)實(shí)施例提供一種文件存檔方法,該方法的執(zhí)行主體可以但不限于是服務(wù)器,流程如圖1所示,具體包括如下步驟:
S11:獲取待存檔的歷史文件及其描述信息。
用戶之間每次通過(guò)社交類(lèi)APP交互的信息都作為一個(gè)待存檔的歷史文件,服務(wù)器可以獲取該歷史文件及其描述信息,該歷史文件的描述信息描述的是歷史文件的相關(guān)信息,可以包括發(fā)送時(shí)間、用戶標(biāo)識(shí)、群組標(biāo)識(shí)、類(lèi)型、校驗(yàn)摘要等等。
S12:從至少一個(gè)預(yù)設(shè)緩存隊(duì)列中選取一個(gè)預(yù)設(shè)緩存隊(duì)列,得到選定緩存隊(duì)列。
通常歷史文件的大小不完全一致,文本文件相對(duì)較小,視頻文件相對(duì)較大,若每獲取一個(gè)待存檔的歷史文件及其描述信息就寫(xiě)入磁盤(pán),會(huì)浪費(fèi)很多時(shí)間,且嚴(yán)重降低文件存檔的效率,為了避免該問(wèn)題,可以首先將待存檔的歷史文件及其描述信息緩存在預(yù)設(shè)緩存隊(duì)列中,然后再將預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息統(tǒng)一寫(xiě)入磁盤(pán)中。
通常可以設(shè)定至少一個(gè)預(yù)設(shè)緩存隊(duì)列,例如設(shè)定為2個(gè)、3個(gè)、4個(gè)等等,然后從中選取一個(gè)作為選定緩存隊(duì)列,預(yù)設(shè)緩存隊(duì)列的數(shù)量及每個(gè)預(yù)設(shè)緩存隊(duì)列的緩存空間大小可以根據(jù)磁盤(pán)的存儲(chǔ)空間進(jìn)行設(shè)定,預(yù)設(shè)緩存隊(duì)列的緩存空間大小可以設(shè)定為256M、128M、512M等等。
S13:將歷史文件及其描述信息寫(xiě)入選定緩存隊(duì)列中。
S11-S13實(shí)現(xiàn)了將一個(gè)待存檔的歷史文件及其描述信息寫(xiě)入選定緩存隊(duì)列中,服務(wù)器獲取的待存檔的歷史文件都可以按照上述過(guò)程寫(xiě)入選定緩存隊(duì)列中。
S14:定期將至少一個(gè)預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息寫(xiě)入磁盤(pán)中進(jìn)行存檔。
上述每個(gè)預(yù)設(shè)緩存隊(duì)列的緩存空間大小是一定的,不可能無(wú)限制緩存歷史文件及其描述信息,當(dāng)預(yù)設(shè)緩存隊(duì)列的緩存空間全部被占用后,預(yù)設(shè)緩存隊(duì)列不能再容納新的歷史文件及其描述信息,因此,在執(zhí)行S11-S13的同時(shí),還需要定期將上述至少一個(gè)預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息寫(xiě)入磁盤(pán)中進(jìn)行歸檔,這樣就可以釋放預(yù)設(shè)緩存隊(duì)列中的緩存空間,緩存新的歷史文件及其描述信息。
該方案中,無(wú)需借助文件目錄管理系統(tǒng)或文件分布式系統(tǒng)對(duì)歷史文件及其描述信息進(jìn)行存檔,從而不會(huì)占用很多目錄資源,相應(yīng)地也減少訪問(wèn)延遲。
具體的,上述S12中的從至少一個(gè)預(yù)設(shè)緩存隊(duì)列中選取一個(gè)預(yù)設(shè)緩存隊(duì)列,得到選定緩存隊(duì)列有多種實(shí)現(xiàn)方式,下面列舉兩種方式進(jìn)行說(shuō)明:
第一種方式,若至少一個(gè)預(yù)設(shè)緩存隊(duì)列形成環(huán)形隊(duì)列,確定當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小是否超過(guò)歷史文件的大小,若當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小超過(guò)歷史文件的大小,則將當(dāng)前預(yù)設(shè)緩存隊(duì)列確定為選定緩存隊(duì)列;若當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小小于歷史文件的大小,則將環(huán)形隊(duì)列中位于當(dāng)前預(yù)設(shè)緩存隊(duì)列之后的預(yù)設(shè)緩存隊(duì)列確定為選定緩存隊(duì)列。
上述至少一個(gè)預(yù)設(shè)緩存隊(duì)列可以采用環(huán)形隊(duì)列的設(shè)計(jì)方式,如圖2所示,可以根據(jù)歷史文件及其描述信息的大小確定選定緩存隊(duì)列,也就是確定要將歷史文件及其描述信息寫(xiě)入當(dāng)前預(yù)設(shè)緩存隊(duì)列還是環(huán)形隊(duì)列中位于當(dāng)前預(yù)設(shè)緩存隊(duì)列之后的預(yù)設(shè)緩存隊(duì)列。
例如,若每個(gè)預(yù)設(shè)緩存隊(duì)列的緩存空間為256M,當(dāng)前預(yù)設(shè)緩存隊(duì)列已用的緩存空間大小為250M,那么當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小為6M,若歷史文件及其描述信息的大小為50M,則當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間不足以緩存該歷史文件及其描述信息,要選取環(huán)形隊(duì)列中位于當(dāng)前預(yù)設(shè)緩存隊(duì)列之后的預(yù)設(shè)緩存隊(duì)列作為選定緩存隊(duì)列。
第二種方式,確定每個(gè)預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小,選取剩余緩存空間大小超過(guò)歷史文件的大小的一個(gè)預(yù)設(shè)緩存隊(duì)列,得到選定緩存隊(duì)列。
上述至少一個(gè)預(yù)設(shè)緩存隊(duì)列也可以采用普通隊(duì)列的設(shè)計(jì)方式,在確定選定緩存隊(duì)列時(shí),選取剩余緩存空間大小超過(guò)歷史文件的大小的一個(gè)預(yù)設(shè)緩存隊(duì)列即可,具體可以采用隨機(jī)選取的方式,也可以選取剩余緩存空間最大的預(yù)設(shè)緩存隊(duì)列,還可以選取歷史文件的寫(xiě)入時(shí)間最早的預(yù)設(shè)緩存隊(duì)列。
具體的,選定緩存隊(duì)列可以包括文件子隊(duì)列和索引子隊(duì)列,上述S13中的將歷史文件及其描述信息寫(xiě)入選定緩存隊(duì)列中,具體的實(shí)現(xiàn)過(guò)程為:將歷史文件寫(xiě)入選定緩存隊(duì)列的文件子隊(duì)列中;將歷史文件的描述信息以內(nèi)存對(duì)齊的格式寫(xiě)入選定緩存隊(duì)列的索引子隊(duì)列 中。
可以在每個(gè)預(yù)設(shè)緩存隊(duì)列中設(shè)置兩個(gè)子隊(duì)列:文件子隊(duì)列和索引子隊(duì)列,文件子隊(duì)列中寫(xiě)入歷史文件,這將大量減少目錄資源的損耗,每寫(xiě)完一個(gè)歷史文件后往索引子隊(duì)列里面寫(xiě)入一個(gè)索引頭,如圖3所示,該索引頭可以是歷史文件的全部描述信息,也可以是從描述信息中選取的一部分信息,例如歷史文件的發(fā)送人標(biāo)識(shí)、群組標(biāo)識(shí)、起始位置、文件偏移、文件類(lèi)型、發(fā)送時(shí)間、校驗(yàn)摘要等。
索引頭的具體格式如下:
struct{
uint32 userid;//用戶ID
uint32 chatroom;//群組
uint64 start;//起始偏移
uint32 len;//結(jié)束偏移量差
uint32 sendtime;//發(fā)送時(shí)間
uint16 type;//類(lèi)型
uint16 checksum;//校驗(yàn)碼
unit32 extend;//擴(kuò)展
}head。
由于上述索引頭采用內(nèi)存對(duì)齊的方式,輸出或?qū)懭霙](méi)有任何額外的損耗。并且,針對(duì)userid和chatroom構(gòu)建btree索引,便可以實(shí)現(xiàn)通過(guò)單個(gè)用戶訪問(wèn)自己的歷史文件或群組的歷史文件。
具體的,上述S14中的定期將至少一個(gè)預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息寫(xiě)入磁盤(pán)中進(jìn)行存檔,具體包括:
監(jiān)控設(shè)定周期是否到期;
若設(shè)定周期到期,檢測(cè)每個(gè)預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小;
將剩余緩存空間大小小于設(shè)定數(shù)值的預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息按照設(shè)定規(guī)則寫(xiě)入磁盤(pán)中進(jìn)行存檔。
由于待存檔的歷史文件及其描述信息的大小并沒(méi)有固定規(guī)律,因此無(wú)需等到每個(gè)預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小為零時(shí)再將該預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息寫(xiě)入磁盤(pán),只要剩余緩存空間大小小于設(shè)定數(shù)值時(shí)即可,設(shè)定周期和設(shè)定數(shù)值可以根據(jù)實(shí)際需 要進(jìn)行設(shè)定。
將預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息寫(xiě)入磁盤(pán)進(jìn)行存檔的具體實(shí)現(xiàn)過(guò)程為:輸出剩余緩存空間大小小于設(shè)定數(shù)值的預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息;以每個(gè)歷史文件的描述信息中的發(fā)送時(shí)間命名對(duì)應(yīng)的歷史文件及其描述信息;將命名后的歷史文件及其描述信息按照發(fā)送時(shí)間的先后順序分別進(jìn)行歸檔。
可以但不限于將歷史文件的描述信息中的發(fā)送時(shí)間作為輸出的歷史文件和描述信息的文件名,格式為yyyyMMddHHmm,歷史文件和描述信息的文件名相同,后綴不同。在將命名后的歷史文件及其描述信息進(jìn)行歸檔時(shí),可以但不限于按照發(fā)送時(shí)間進(jìn)行歸檔,具體的歸檔方式有多種,下面列舉兩種方式進(jìn)行說(shuō)明,若以小時(shí)為單位進(jìn)行規(guī)律,歸檔的目錄結(jié)構(gòu)為/data/yyyy/MM/dd/hh/;若以天為單位進(jìn)行歸檔,歸檔的目錄結(jié)構(gòu)為/data/yyyy/MM/dd/等等。
由于歷史文件與描述信息的文件名相同,可保證能夠獲取到歸檔的歷史文件的物理地址,也就確保能獲取到歸檔的歷史文件。
本申請(qǐng)實(shí)施例還提供另一種文件存檔方法,如圖4所示,在圖1的基礎(chǔ)上,還包括如下步驟:
S15:接收用戶發(fā)送的歷史文件獲取請(qǐng)求。
當(dāng)用戶需要獲取某個(gè)歷史文件時(shí),可以向服務(wù)器發(fā)送歷史文件獲取請(qǐng)求。
S16:根據(jù)歷史文件獲取請(qǐng)求獲取描述信息。
服務(wù)器根據(jù)該歷史文件獲取請(qǐng)求獲取描述信息,歷史文件獲取請(qǐng)求中可以攜帶用戶標(biāo)識(shí)、群組標(biāo)識(shí)、發(fā)送時(shí)間等等信息,服務(wù)器可以根據(jù)這些信息獲取描述信息。
S17:從高速緩存中查找與描述信息名稱相同的歷史文件。
為了節(jié)省歷史文件的獲取時(shí)間,可以設(shè)置高速緩存,在高速緩存中緩存最近一段時(shí)間用戶獲取的歷史文件。在服務(wù)器確定描述信息后,可以首先在高速緩存中查找是否存在與描述信息名稱相同的歷史文件。
S18:若在高速緩存中查找到與描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給用戶;若在高速緩存中未查找到與描述信息名稱相同的歷史文件,根據(jù)描述信息從磁盤(pán)中查找與描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給用戶并保存在高速緩存中。
相關(guān)技術(shù)中,需要借助文件目錄管理系統(tǒng)或文件分布式系統(tǒng)對(duì)歷史文件及其描述信息進(jìn)行存檔,當(dāng)用戶再次查詢和使用歷史文件時(shí),服務(wù)器需要加載與該用戶標(biāo)識(shí)對(duì)應(yīng)的目錄 下的全部描述信息,然后在從中找到所需歷史文件的位置,最后獲取用戶需要的歷史文件發(fā)送給用戶,當(dāng)與該用戶標(biāo)識(shí)對(duì)應(yīng)的目錄下的描述信息的數(shù)量很多時(shí),服務(wù)器需要耗費(fèi)很多時(shí)間才能找到用戶需要的歷史文件,這就會(huì)嚴(yán)重影響用戶體驗(yàn);通過(guò)本申請(qǐng)實(shí)施例的方式,無(wú)需加載該用戶標(biāo)識(shí)對(duì)應(yīng)的目錄下的全部描述信息,而是直接根據(jù)歷史文件獲取請(qǐng)求確定描述信息,從而可以快速地讀取歷史文件,并發(fā)送給用戶,滿足用戶再次查詢和使用的需求,很好地提升了用戶體驗(yàn)。
本申請(qǐng)實(shí)施例還提供再一種文件存檔方法,如圖5所示,在圖1的基礎(chǔ)上,還包括如下步驟:
S19:統(tǒng)計(jì)已有時(shí)段內(nèi)接收到的歷史文件的大小及其增長(zhǎng)率。
S20:根據(jù)已有時(shí)段內(nèi)接收到的歷史文件的大小及其增長(zhǎng)率確定在未來(lái)時(shí)段內(nèi)磁盤(pán)的容量是否滿足需求。
S21:若在未來(lái)時(shí)段內(nèi)磁盤(pán)的容量不滿足需求,則對(duì)磁盤(pán)進(jìn)行擴(kuò)容。
若磁盤(pán)的剩余容量不滿足擴(kuò)容要求,則刪除磁盤(pán)中時(shí)間最早一天的歷史文件及其對(duì)應(yīng)的描述信息,從而釋放磁盤(pán)的存儲(chǔ)空間存儲(chǔ)新的歷史文件。已有時(shí)段和未來(lái)時(shí)段可以根據(jù)需要進(jìn)行設(shè)定,例如,已有時(shí)段設(shè)定為最近一個(gè)月,未來(lái)時(shí)段設(shè)定為未來(lái)一個(gè)月。
假設(shè),最近一個(gè)月內(nèi)接收到的歷史文件的大小為100M,最近一個(gè)月接收到的歷史文件的增長(zhǎng)率為1.05倍/天,那么,未來(lái)一個(gè)月內(nèi)需要的磁盤(pán)的存儲(chǔ)空間為(1.05+1.05^2+..1.05^30)*100M,從而求出擴(kuò)容需要的存儲(chǔ)空間,并根據(jù)該存儲(chǔ)空間對(duì)磁盤(pán)進(jìn)行擴(kuò)容。
基于同一發(fā)明構(gòu)思,本申請(qǐng)實(shí)施例還提供一種文件讀取方法,該方法與上述文件存檔方法相對(duì)應(yīng),流程如6所示,具體包括如下步驟:
S61:接收用戶發(fā)送的歷史文件獲取請(qǐng)求。
S62:根據(jù)歷史文件獲取請(qǐng)求獲取描述信息。
S63:從高速緩存中查找與描述信息名稱相同的歷史文件。
S64:若在高速緩存中查找到與描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給用戶;若在高速緩存中未查找到與描述信息名稱相同的歷史文件,根據(jù)描述信息從磁盤(pán)中查找與描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給用戶并保存在高速緩存中。
相關(guān)技術(shù)中,需要借助借助文件目錄管理系統(tǒng)或文件分布式系統(tǒng)對(duì)歷史文件及其描述信息進(jìn)行存檔,當(dāng)用戶再次查詢和使用歷史文件時(shí),服務(wù)器需要加載與該用戶標(biāo)識(shí)對(duì)應(yīng)的 目錄下的全部描述信息,然后在從中找到所需歷史文件的位置,最后獲取用戶需要的歷史文件發(fā)送給用戶,當(dāng)與該用戶標(biāo)識(shí)對(duì)應(yīng)的目錄下的描述信息的數(shù)量很多時(shí),服務(wù)器需要耗費(fèi)很多時(shí)間才能找到用戶需要的歷史文件,這就會(huì)嚴(yán)重影響用戶體驗(yàn);通過(guò)本申請(qǐng)實(shí)施例的方式,無(wú)需加載該用戶標(biāo)識(shí)對(duì)應(yīng)的目錄下的全部描述信息,而是直接根據(jù)歷史文件獲取請(qǐng)求確定描述信息,從而可以快速地讀取歷史文件,并發(fā)送給用戶,滿足用戶再次查詢和使用的需求,很好地提升了用戶體驗(yàn)。
基于同一發(fā)明構(gòu)思,本申請(qǐng)實(shí)施例還提供一種文件存檔裝置,該裝置與如圖1所示的文件存檔方法相對(duì)應(yīng),該裝置的結(jié)構(gòu)如7圖所示,包括:
第一獲取單元71,用于獲取待存檔的歷史文件及其描述信息;
選取單元72,用于從至少一個(gè)預(yù)設(shè)緩存隊(duì)列中選取一個(gè)預(yù)設(shè)緩存隊(duì)列,得到選定緩存隊(duì)列;
第一寫(xiě)入單元73,用于將歷史文件及其描述信息寫(xiě)入選定緩存隊(duì)列中;以及,
第二寫(xiě)入單元74,用于定期將至少一個(gè)預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息寫(xiě)入磁盤(pán)中進(jìn)行存檔。
該方案中,無(wú)需借助文件目錄管理系統(tǒng)或文件分布式系統(tǒng)對(duì)歷史文件及其描述信息進(jìn)行存檔,從而不會(huì)占用很多目錄資源,相應(yīng)地也減少訪問(wèn)延遲。
具體的,上述選取單元72,用于從至少一個(gè)預(yù)設(shè)緩存隊(duì)列中選取一個(gè)預(yù)設(shè)緩存隊(duì)列,得到選定緩存隊(duì)列,具體用于:
若至少一個(gè)預(yù)設(shè)緩存隊(duì)列形成環(huán)形隊(duì)列,確定當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小是否超過(guò)歷史文件的大小,若當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小超過(guò)歷史文件的大小,則將當(dāng)前預(yù)設(shè)緩存隊(duì)列確定為選定緩存隊(duì)列;若當(dāng)前預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小小于歷史文件的大小,則將環(huán)形隊(duì)列中位于當(dāng)前預(yù)設(shè)緩存隊(duì)列之后的預(yù)設(shè)緩存隊(duì)列確定為選定緩存隊(duì)列;或者,
確定每個(gè)預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大小,選取剩余緩存空間大小超過(guò)歷史文件的大小的一個(gè)預(yù)設(shè)緩存隊(duì)列,得到選定緩存隊(duì)列。
具體的,上述第一寫(xiě)入單元73,用于將歷史文件及其描述信息寫(xiě)入選定緩存隊(duì)列中,具體用于:
將歷史文件寫(xiě)入選定緩存隊(duì)列的文件子隊(duì)列中;
將歷史文件的描述信息以內(nèi)存對(duì)齊的格式寫(xiě)入選定緩存隊(duì)列的索引子隊(duì)列中。
具體的,上述第二寫(xiě)入單元74,用于定期將至少一個(gè)預(yù)設(shè)緩存隊(duì)列中的歷史文件及其 描述信息寫(xiě)入磁盤(pán)中進(jìn)行存檔,具體用于:
監(jiān)控設(shè)定周期是否到期;
若設(shè)定周期到期,檢測(cè)每個(gè)預(yù)設(shè)緩存隊(duì)列的剩余緩存空間大??;
將剩余緩存空間大小小于設(shè)定數(shù)值的預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息按照設(shè)定規(guī)則寫(xiě)入磁盤(pán)中進(jìn)行存檔。
具體的,上述第二寫(xiě)入單元74,用于將剩余緩存空間大小小于設(shè)定數(shù)值的預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息按照設(shè)定規(guī)則寫(xiě)入磁盤(pán)中進(jìn)行存檔,具體用于:
輸出剩余緩存空間大小小于設(shè)定數(shù)值的預(yù)設(shè)緩存隊(duì)列中的歷史文件及其描述信息;
以每個(gè)歷史文件的描述信息中的發(fā)送時(shí)間命名對(duì)應(yīng)的歷史文件及其描述信息;
將命名后的歷史文件及其描述信息按照發(fā)送時(shí)間的先后順序分別進(jìn)行歸檔。
本申請(qǐng)實(shí)施例還提供另一種文件存檔裝置,該裝置與圖7所示的裝置相同的單元省略不表,該裝置的結(jié)構(gòu)如圖8所示,在圖7所示的裝置的基礎(chǔ)上,還包括:
接收單元75,用于接收用戶發(fā)送的歷史文件獲取請(qǐng)求;
第二獲取單元76,用于根據(jù)歷史文件獲取請(qǐng)求獲取描述信息;
查找單元77,用于從高速緩存中查找與描述信息名稱相同的歷史文件;
發(fā)送單元78,用于若在高速緩存中查找到與描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給用戶;若在高速緩存中未查找到與描述信息名稱相同的歷史文件,根據(jù)描述信息從磁盤(pán)中查找與描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給用戶并保存在高速緩存中。
本申請(qǐng)實(shí)施例還提供再一種文件存檔裝置,該裝置與圖7所示的裝置相同的單元省略不表,該裝置的結(jié)構(gòu)如圖9所示,在圖7所示的裝置的基礎(chǔ)上,還包括:
統(tǒng)計(jì)單元79,用于統(tǒng)計(jì)已有時(shí)段內(nèi)接收到的歷史文件的大小及其增長(zhǎng)率;
確定單元80,用于根據(jù)已有時(shí)段內(nèi)接收到的歷史文件的大小及其增長(zhǎng)率確定在未來(lái)時(shí)段內(nèi)磁盤(pán)的容量是否滿足需求;
擴(kuò)容單元81,用于若在未來(lái)時(shí)段內(nèi)磁盤(pán)的容量不滿足需求,則對(duì)磁盤(pán)進(jìn)行擴(kuò)容。
基于同一發(fā)明構(gòu)思,本申請(qǐng)實(shí)施例還提供一種文件讀取裝置,該裝置與如圖6所示的文件讀取方法相對(duì)應(yīng),該裝置的結(jié)構(gòu)如10圖所示,包括:
接收單元101,用于接收用戶發(fā)送的歷史文件獲取請(qǐng)求;
獲取單元102,用于根據(jù)歷史文件獲取請(qǐng)求獲取描述信息;
查找單元103,用于從高速緩存中查找與描述信息名稱相同的歷史文件;
發(fā)送單元104,用于若在高速緩存中查找到與描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給用戶;若在高速緩存中未查找到與描述信息名稱相同的歷史文件,根據(jù)描述信息從磁盤(pán)中查找與描述信息名稱相同的歷史文件,將查找到的歷史文件發(fā)送給用戶并保存在高速緩存中。
相關(guān)技術(shù)中,需要借助文件目錄管理系統(tǒng)或文件分布式系統(tǒng)對(duì)歷史文件及其描述信息進(jìn)行存檔,當(dāng)用戶再次查詢和使用歷史文件時(shí),服務(wù)器需要加載與該用戶標(biāo)識(shí)對(duì)應(yīng)的目錄下的全部描述信息,然后在從中找到所需歷史文件的位置,最后獲取用戶需要的歷史文件發(fā)送給用戶,當(dāng)與該用戶標(biāo)識(shí)對(duì)應(yīng)的目錄下的描述信息的數(shù)量很多時(shí),服務(wù)器需要耗費(fèi)很多時(shí)間才能找到用戶需要的歷史文件,這就會(huì)嚴(yán)重影響用戶體驗(yàn);通過(guò)本申請(qǐng)實(shí)施例的方式,無(wú)需加載該用戶標(biāo)識(shí)對(duì)應(yīng)的目錄下的全部描述信息,而是直接根據(jù)歷史文件獲取請(qǐng)求確定描述信息,從而可以快速地讀取歷史文件,并發(fā)送給用戶,滿足用戶再次查詢和使用的需求,很好地提升了用戶體驗(yàn)。
上述說(shuō)明示出并描述了本申請(qǐng)的優(yōu)選實(shí)施例,但如前所述,應(yīng)當(dāng)理解本申請(qǐng)并非局限于本文所披露的形式,不應(yīng)看作是對(duì)其他實(shí)施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構(gòu)想范圍內(nèi),通過(guò)上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識(shí)進(jìn)行改動(dòng)。而本領(lǐng)域人員所進(jìn)行的改動(dòng)和變化不脫離本申請(qǐng)的精神和范圍,則都應(yīng)在本申請(qǐng)所附權(quán)利要求的保護(hù)范圍內(nèi)。