專利名稱:一種靈活日志的存貯和獲取方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種靈活日志的存貯和獲取方法。
背景技術(shù):
增量日志,是指日志文件中的內(nèi)容會(huì)隨著時(shí)間的增加而增加,并非固定提供給一次性讀取。日志文件作為數(shù)據(jù)溝通媒介,也就是說由一個(gè)或者一系列程序進(jìn)行操作,產(chǎn)生一定的數(shù)據(jù)信息,存貯入日志文件,然后由一個(gè)或者多個(gè)文件,將數(shù)據(jù)讀取,使得能夠進(jìn)行一系列的操作。目前比較常用日志的記錄方式,大致有以下幾種1.將一堆內(nèi)容順序的將內(nèi)容寫入日志,然后另外一個(gè)程序讀取指定日志,獲取內(nèi)容。此為記錄成單一的日志文件。2.將日志文件按時(shí)間分割,比如按月、日、小時(shí)等,記錄成為多個(gè)文件。3.日志文件以內(nèi)容的某種標(biāo)識(shí)分割,比如唯一 ID、類型等記錄成為多個(gè)文件。
單一日志文件的記錄,當(dāng)日志量過大,會(huì)造成單一文件過大,造成日志內(nèi)容的讀取和查找困難,也會(huì)有多進(jìn)程寫文件造成的日志內(nèi)容不完整的問題。多個(gè)文件記錄,首先根據(jù)規(guī)則將文件分割成多個(gè)小文件,增加單個(gè)文件處理能力,而且數(shù)據(jù)散列得當(dāng),會(huì)減少文件獨(dú)占造成的數(shù)據(jù)不完整問題。但是,文件散列,會(huì)造成文件內(nèi)容索引困難,當(dāng)文件數(shù)量過多,管理也會(huì)成為問題。當(dāng)針對(duì)數(shù)據(jù)文件某個(gè)通用的標(biāo)識(shí)進(jìn)行操作時(shí),需要打開和分析每一個(gè)文件,獲得想要的內(nèi)容。比如當(dāng)時(shí)數(shù)據(jù)的長(zhǎng)度、寫入時(shí)間、數(shù)據(jù)某個(gè)指定類型等,獲得起來都很復(fù)雜,都需要找到相應(yīng)的文件,在一堆文件中找到指定的內(nèi)容,然后進(jìn)行比對(duì),效率非常的低。多個(gè)程序同時(shí)讀同一套增量日志文件的時(shí)候,會(huì)因?yàn)槿罩竟?jié)點(diǎn)而需要進(jìn)行單獨(dú)記錄,導(dǎo)致多套程序和多個(gè)日志,需要的日志節(jié)點(diǎn)記錄成為多對(duì)多的關(guān)系,無論用那種方式直接記錄記錄節(jié)點(diǎn),都是一筆額外的開銷,而且會(huì)引起附帶問題。
發(fā)明內(nèi)容
針對(duì)以上現(xiàn)有技術(shù)的不足,本發(fā)明提供一種靈活日志的存貯和獲取方法,在增量日志文件作為數(shù)據(jù)溝通媒介的情況下,提供一種非單一日志文件的存貯和讀取方法,實(shí)現(xiàn)讀寫異步,提高日志的讀寫能力,保障日志讀寫的完整可靠。本發(fā)明的目的通過以下技術(shù)方案來實(shí)現(xiàn)—種靈活日志的存貯和獲取方法,該方法包括數(shù)據(jù)的寫入過程和數(shù)據(jù)的讀取過程,所述數(shù)據(jù)的寫入過程包括I)根據(jù)數(shù)據(jù)提供的類型和唯一標(biāo)識(shí)將此數(shù)據(jù)寫入相應(yīng)的數(shù)據(jù)文件,得到數(shù)據(jù)日志文件并獲取數(shù)據(jù)日志文件的相關(guān)信息;2)打開數(shù)據(jù)日志文件,將文件指針移動(dòng)到文件末尾,記錄一下文件指針在當(dāng)前文件的位置,寫入數(shù)據(jù)內(nèi)容標(biāo)識(shí)框的開頭,然后寫入日志數(shù)據(jù),數(shù)據(jù)內(nèi)容標(biāo)識(shí)框的結(jié)尾,關(guān)閉數(shù)據(jù)日志文件;
3)打開總的索引日志文件,將索引日志文件指針移動(dòng)到索引日志文件最后,同時(shí)移動(dòng)到新的一行,此處是為了此次數(shù)據(jù)與之前數(shù)據(jù)的區(qū)分而通過換行的方式,也可以直接移動(dòng)到最后的新一行,根據(jù)規(guī)則寫入剛才獲得到的數(shù)據(jù)信息,然后關(guān)閉索引文件。所述數(shù)據(jù)的讀取過程包括I)定時(shí)讀取總的索引日志文件;2)從總的索引日志文件中讀取一行,同時(shí)將下一行的行號(hào)寫入自己的日志文件;3)根據(jù)從總的索引日志文件中讀取的信息內(nèi)容,進(jìn)行數(shù)據(jù)操作判斷,來決定是否讀取數(shù)據(jù)日志文件,如何讀取數(shù)據(jù)日志文件,以及讀取數(shù)據(jù)日志文件之后的操作;4)如果需要讀取數(shù)據(jù)日志文件,則根據(jù)從總的索引日志文件中獲得的文件名稱和文件位標(biāo)識(shí),知道從哪個(gè)數(shù)據(jù)日志文件的什么位置開始讀取數(shù)據(jù),找到配對(duì)的數(shù)據(jù)內(nèi)容標(biāo)識(shí)框來獲得一起完整的數(shù)據(jù)內(nèi)容,然后根據(jù)數(shù)據(jù)內(nèi)容來進(jìn)行后續(xù)操作; 5)根據(jù)已經(jīng)定義好的標(biāo)記來判斷,如果不需要讀取數(shù)據(jù)日志文件,則直接進(jìn)行下一行總的索引日志文件日志的讀取。進(jìn)一步,所述數(shù)據(jù)寫入過程步驟I中的數(shù)據(jù)日志文件的相關(guān)信息包括數(shù)據(jù)日志的文件名、內(nèi)容寫入的指針位置及需要的特殊數(shù)據(jù)標(biāo)識(shí)。進(jìn)一步,所述數(shù)據(jù)寫入過程步驟3中數(shù)據(jù)信息包括數(shù)據(jù)文件名稱標(biāo)識(shí)、數(shù)據(jù)文件此次寫入文件的開始位置、特殊數(shù)據(jù)標(biāo)識(shí)、寫入時(shí)間中的一項(xiàng)或多項(xiàng)。進(jìn)一步,所述數(shù)據(jù)讀取過程步驟5中定義好的標(biāo)記包括特殊數(shù)據(jù)標(biāo)識(shí)。本發(fā)明的優(yōu)點(diǎn)在于由于增加了索引機(jī)制,使得文件的讀取更加迅速,在讀取真正的數(shù)據(jù)文件之前,已經(jīng)通過少量數(shù)據(jù)來判斷是否需要讀取大的數(shù)據(jù)文件。減少了讀取每個(gè)增量數(shù)據(jù)文件的表示記錄,減少了空間的占用,減少了磁盤的讀取。大大降低了復(fù)雜數(shù)據(jù)日志的訪問次數(shù)和數(shù)據(jù)
傳輸量。
圖I :本發(fā)明方法流程圖。
具體實(shí)施例方式本發(fā)明引入了索引和數(shù)據(jù)內(nèi)容標(biāo)識(shí)框,當(dāng)日志散列記錄的時(shí)候,每個(gè)記錄數(shù)據(jù)的文件都有一個(gè)規(guī)則的唯一表示,例如使用數(shù)據(jù)提供的數(shù)據(jù)類型和唯一標(biāo)識(shí)ID,日志文件名字例如為type_l. log type_2. log。所謂的索引概念,是指一個(gè)總的索引日志文件,例如名字起為index, log,里面放置的內(nèi)容為以下內(nèi)容每行存放一個(gè)數(shù)據(jù)索引,為了便于數(shù)據(jù)索引讀取。數(shù)據(jù)內(nèi)容存放在哪個(gè)文件的標(biāo)識(shí),比如type、id,通過這個(gè)標(biāo)標(biāo)識(shí)可以找到相應(yīng)的文件。數(shù)據(jù)文件存入相應(yīng)文件的開始行數(shù)或者寫入內(nèi)容的位置標(biāo)識(shí)。附加信息,比如針對(duì)此種數(shù)據(jù)進(jìn)行的動(dòng)作,數(shù)據(jù)記錄的時(shí)間,數(shù)據(jù)長(zhǎng)度等,用于快速的數(shù)據(jù)篩選和處理。數(shù)據(jù)內(nèi)容標(biāo)識(shí)框,是用在具體的數(shù)據(jù)文件存貯時(shí)候。在每次記錄數(shù)據(jù)文件的開始和結(jié)束,加上特定的表示,將數(shù)據(jù)內(nèi)容框起來,用于分隔每次寫入的數(shù)據(jù),便于獲取數(shù)據(jù)的時(shí)候,保證數(shù)據(jù)完整性。以下對(duì)寫入數(shù)據(jù)和讀取數(shù)據(jù)進(jìn)行說明。寫入數(shù)據(jù)I.獲得數(shù)據(jù)之后,根據(jù)數(shù)據(jù)提供的類型(type)和唯一標(biāo)識(shí)(ID)知道了將此數(shù)據(jù)寫入那個(gè)數(shù)據(jù)文件。2.根據(jù)獲得的數(shù)據(jù),可以得到數(shù)據(jù)相關(guān)內(nèi)容,比如數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)中某個(gè)標(biāo)識(shí)字段等等跟數(shù)據(jù)相關(guān)的所有信息。3.打開數(shù)據(jù)記錄文件,將文件指針移動(dòng)到文件末尾,記錄一下文件指針在當(dāng)前文件的位置,寫入數(shù)據(jù)內(nèi)容標(biāo)識(shí)框的開頭,然后寫入日志數(shù)據(jù),然后寫入數(shù)據(jù)內(nèi)容標(biāo)識(shí)框的結(jié)尾,關(guān)閉數(shù)據(jù)文件?!?.打開index, log的索引文件,將文件指針移動(dòng)到文件最后,同時(shí)移動(dòng)到新的一行,根據(jù)規(guī)則寫入剛才獲得到的數(shù)據(jù)信息,然后關(guān)閉索引文件。一次數(shù)據(jù)文件寫入結(jié)束。讀取數(shù)據(jù)I.定時(shí)讀取index, log的記錄文件。2.從index, log中讀取一行,同時(shí)將下一行的行號(hào)寫入自己的日志文件。3.根據(jù)從index, log中讀取的信息內(nèi)容,進(jìn)行數(shù)據(jù)操作判斷,來決定是否讀取數(shù)據(jù)日志文件,如何讀取數(shù)據(jù)日志文件,以及讀取數(shù)據(jù)日志文件之后的操作。當(dāng)然,還可以根據(jù)標(biāo)識(shí)來決定是否需要讀取數(shù)據(jù)日志文件。4.如果需要讀取數(shù)據(jù)文件,則根據(jù)從index, log中獲得的文件名稱和文件位標(biāo)識(shí),知道從哪個(gè)文件的哪個(gè)開始讀取數(shù)據(jù),找到配對(duì)的數(shù)據(jù)內(nèi)容標(biāo)識(shí)框來獲得一起完整的數(shù)據(jù)內(nèi)容。然后根據(jù)數(shù)據(jù)內(nèi)容來進(jìn)行后續(xù)操作。5.如果不需要讀取數(shù)據(jù)文件,則直接進(jìn)行下一行index, log日志的讀取。下面以一個(gè)寫日志程序,兩個(gè)讀日志程序?yàn)槔龑?duì)本發(fā)明進(jìn)行說明。一個(gè)寫日志程序一下簡(jiǎn)稱為MIS,根據(jù)monitor獲得數(shù)據(jù)信息,寫入日志文件,讀日志程序一下簡(jiǎn)稱為draw (用于畫圖)和alarm (用于報(bào)警)。實(shí)現(xiàn)過程I. mis程序,每5分鐘定時(shí)執(zhí)行一次,執(zhí)行配置好的monitor,獲得相應(yīng)的信息,數(shù)據(jù)內(nèi)容包含執(zhí)行結(jié)果的所有內(nèi)容,例如服務(wù)器信息、服務(wù)器狀態(tài)、要監(jiān)控的數(shù)據(jù)內(nèi)容、是否要報(bào)警、是否畫圖。2. mis程序?qū)懭氲娜罩疚募Q為monitor_id. log。3.本次試用數(shù)據(jù)內(nèi)容標(biāo)識(shí)框開始為結(jié)束為4.使用的日志索引文件為index, log。5. Mis系統(tǒng)將數(shù)據(jù)內(nèi)容加上數(shù)據(jù)數(shù)據(jù)內(nèi)容標(biāo)識(shí)框?qū)懭雖onitor_id. log中,同時(shí)將數(shù)據(jù)ID、是否報(bào)警(O不報(bào)警I報(bào)警)、是否畫圖(O不畫圖I畫圖)、數(shù)據(jù)記錄開始位置,寫入到 index, log 中。6. Mis系統(tǒng)寫入文件的過程,不理會(huì)有多少個(gè)程序讀取日志。7. Draw和alarm的日志讀入方式一致。均只關(guān)注index, log文件,每隔一分鐘讀取一次index, log文件,判斷最后一行位置是否大于本程序記錄的標(biāo)識(shí)。如果等于則等待一分鐘后繼續(xù)讀取,如果發(fā)現(xiàn)的大于,則進(jìn)行index。Log文件的讀取。8. Draw和alarm根據(jù)自身記錄的index, log日志記錄開始處,獲得一行記錄,根據(jù)標(biāo)示判斷是否要畫圖或者報(bào)警。如果不畫圖和報(bào)警,則讀取下一跳記錄。如果進(jìn)行畫圖和報(bào)警,則根據(jù)內(nèi)容,找到相對(duì)應(yīng)的id,拼成monitor_id. log來找到log文件,同時(shí)根據(jù)文件指針位置,找到從哪里開始獲取數(shù)據(jù),先找到然后一直尋找,直到找到###end###,獲得一次完整的日志數(shù)據(jù)。9. Draw和alarm根據(jù)日志數(shù)據(jù)內(nèi)容,進(jìn)行自身的畫圖和報(bào)警工作。10. Draw和alarm讀取index, log的程序,如果發(fā)現(xiàn)讀取index, log并未讀取到尾部,則繼續(xù)讀取,同時(shí)吧每次讀取的行數(shù)開頭記錄本身的標(biāo)識(shí)文件,然后重復(fù)之前是否報(bào)警和畫圖的判斷,直到index, log被讀取到了尾部,則讀取程序Draw和alarm休息一秒,然后繼續(xù)之前的動(dòng)作,循環(huán)進(jìn)行數(shù)據(jù)讀取。
·
假如寫了一萬個(gè)文件,有10組程序來讀取,之前的方法,10組程序?qū)⒁蝗f個(gè)程序讀取一邊,則首先要產(chǎn)生10* —萬的數(shù)據(jù)標(biāo)識(shí)記錄。而管理數(shù)據(jù)標(biāo)識(shí)記錄本身,就是一個(gè)復(fù)雜的過程。本發(fā)明只需要10組程序針對(duì)一個(gè)數(shù)據(jù)索引文件index, log寫一個(gè)自身的讀取表示即可,減少的數(shù)據(jù)量為10* —萬-10 ;這里牽涉到數(shù)據(jù)內(nèi)容以及磁盤讀寫此數(shù)。如果數(shù)據(jù)中有一種判斷,來判定是否要讀取日志文件,而每次的數(shù)據(jù)內(nèi)容為1K,假定有50%的數(shù)據(jù)文件不需要讀取,則本發(fā)明可以減少10* —萬*50%*lk的數(shù)據(jù)傳輸量。本發(fā)明是以多文件散列為基礎(chǔ),在需要眾多文件需要進(jìn)行頻繁讀寫時(shí),而且文件讀寫的入口單一的情況下,提供一種基于索引的文件存貯和讀取方式,不僅便于散列的存貯文件,還能實(shí)現(xiàn)輕松的讀取需要的日志。應(yīng)當(dāng)理解,以上借助優(yōu)選實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行的詳細(xì)說明是示意性的而非限制性的。本領(lǐng)域的普通技術(shù)人員在閱讀本發(fā)明說明書的基礎(chǔ)上可以對(duì)各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種靈活日志的存貯和獲取方法,其特征在于,該方法包括數(shù)據(jù)的寫入過程和數(shù)據(jù)的讀取過程, 所述數(shù)據(jù)的寫入過程包括 1)根據(jù)數(shù)據(jù)提供的類型和唯一標(biāo)識(shí)將此數(shù)據(jù)寫入相應(yīng)的數(shù)據(jù)文件,得到數(shù)據(jù)日志文件并獲取數(shù)據(jù)日志文件的相關(guān)信息; 2)打開數(shù)據(jù)日志文件,將文件指針移動(dòng)到文件末尾,記錄一下文件指針在當(dāng)前文件的位置,寫入數(shù)據(jù)內(nèi)容標(biāo)識(shí)框的開頭,然后寫入日志數(shù)據(jù),數(shù)據(jù)內(nèi)容標(biāo)識(shí)框的結(jié)尾,關(guān)閉數(shù)據(jù)日志文件; 3)打開總的索引日志文件,將索引日志文件指針移動(dòng)到索引日志文件最后,同時(shí)移動(dòng)到新的一行,根據(jù)規(guī)則寫入剛才獲得到的數(shù)據(jù)信息,然后關(guān)閉索引文件; 所述數(shù)據(jù)的讀取過程包括 1)定時(shí)讀取總的索引日志文件; 2)從總的索引日志文件中讀取一行,同時(shí)將下一行的行號(hào)寫入自己的日志文件; 3)根據(jù)從總的索引日志文件中讀取的信息內(nèi)容,進(jìn)行數(shù)據(jù)操作判斷,來決定是否讀取數(shù)據(jù)日志文件,如何讀取數(shù)據(jù)日志文件,以及讀取數(shù)據(jù)日志文件之后的操作; 4)如果需要讀取數(shù)據(jù)日志文件,則根據(jù)從總的索引日志文件中獲得的文件名稱和文件位標(biāo)識(shí),知道從哪個(gè)數(shù)據(jù)日志文件的什么位置開始讀取數(shù)據(jù),找到配對(duì)的數(shù)據(jù)內(nèi)容標(biāo)識(shí)框來獲得一起完整的數(shù)據(jù)內(nèi)容,然后根據(jù)數(shù)據(jù)內(nèi)容來進(jìn)行后續(xù)操作; 5)根據(jù)已經(jīng)定義好的標(biāo)記來判斷,如果不需要讀取數(shù)據(jù)日志文件,則直接進(jìn)行下一行總的索引日志文件日志的讀取。
2.根據(jù)權(quán)利要求I所述的一種靈活日志的存貯和獲取方法,其特征在于,所述數(shù)據(jù)寫入過程步驟I中的數(shù)據(jù)日志文件的相關(guān)信息包括數(shù)據(jù)日志的文件名、內(nèi)容寫入的指針位置及需要的特殊數(shù)據(jù)標(biāo)識(shí)。
3.根據(jù)權(quán)利要求I所述的一種靈活日志的存貯和獲取方法,其特征在于,所述數(shù)據(jù)寫入過程步驟3中數(shù)據(jù)信息包括數(shù)據(jù)文件名稱標(biāo)識(shí)、數(shù)據(jù)文件此次寫入文件的開始位置、特殊數(shù)據(jù)標(biāo)識(shí)、寫入時(shí)間中的一項(xiàng)或多項(xiàng)。
4.根據(jù)權(quán)利要求I所述的一種靈活日志的存貯和獲取方法,其特征在于,所述數(shù)據(jù)讀取過程步驟5中定義好的標(biāo)記包括特殊數(shù)據(jù)標(biāo)識(shí)。
全文摘要
本發(fā)明涉及一種靈活日志的存貯和獲取方法,該方法包括數(shù)據(jù)的寫入過程和數(shù)據(jù)的讀取過程。本發(fā)明基于多文件散列的基礎(chǔ),在需要眾多文件需要進(jìn)行頻繁讀寫時(shí),而且文件讀寫的入口單一的情況下,提供一種基于索引的文件存貯和讀取方式,不僅便利的散列存貯文件,還能實(shí)現(xiàn)輕松的讀取需要的日志。
文檔編號(hào)G06F11/34GK102880718SQ20121038717
公開日2013年1月16日 申請(qǐng)日期2012年10月12日 優(yōu)先權(quán)日2012年10月12日
發(fā)明者潘海東, 梅春, 任劍鋒 申請(qǐng)人:互動(dòng)在線(北京)科技有限公司