本發(fā)明涉及計算機
技術領域:
:,尤其涉及一種日志文件的寫入方法及裝置。
背景技術:
::目前,大多數(shù)計算機在出現(xiàn)系統(tǒng)意外崩潰的問題后,在下一次啟動時會經(jīng)歷一個漫長的檢查系統(tǒng)數(shù)據(jù)結構完整性的過程,以防止計算機數(shù)據(jù)丟失,但是由于檢查的耗時較久,用戶體驗并不理想。技術實現(xiàn)要素:本發(fā)明的主要目的在于提供一種日志文件寫入方法及裝置,旨在提高系統(tǒng)根據(jù)日志文件提高數(shù)據(jù)恢復的工作效率。為實現(xiàn)上述目的,本發(fā)明提供的一種日志文件的寫入方法,其特征在于,所述日志文件的寫入方法包括如下步驟:記錄系統(tǒng)執(zhí)行操作指令產(chǎn)生的操作事件;將所述操作事件按預設規(guī)則寫入至后臺數(shù)據(jù)庫中,并在磁盤中形成日志文件。優(yōu)選地,所述后臺數(shù)據(jù)庫為LevelDB。優(yōu)選地,所述將所述操作事件按預設規(guī)則寫入至后臺數(shù)據(jù)庫中,并在磁盤中形成日志文件包括:將所述操作事件寫入Log文件中;在寫入Log文件成功后將所述操作事件插入內(nèi)存的Memtable中;當Memtable插入的操作事件達到預設界限后轉換為ImmutableMemtable;將ImmutableMemtable的操作事件導出至磁盤中。優(yōu)選地,所述操作指令為查詢指令。優(yōu)選地,所述查詢指令包括中央處理器占用率、內(nèi)存占用率、磁盤占用率、服務器信息塊服務是否啟動、近距離無線通信服務是否設置成功、通用網(wǎng)絡文件系統(tǒng)是否設置成功中的至少一種。此外,為實現(xiàn)上述目的,本發(fā)明還提供一種日志文件的寫入裝置,所述日志文件的寫入裝置包括記錄模塊和寫入模塊,其中:所述記錄模塊,用于記錄系統(tǒng)執(zhí)行操作指令產(chǎn)生的操作事件;所述寫入模塊,用于將所述操作事件按預設規(guī)則寫入至后臺數(shù)據(jù)庫中,并在磁盤中形成日志文件。優(yōu)選地,所述后臺數(shù)據(jù)庫為LevelDB。優(yōu)選地,所述寫入模塊包括寫入單元、插入單元、轉換單元和導出單元,其中:所述寫入單元,用于將所述操作事件寫入Log文件中;所述插入單元,在寫入Log文件成功后將所述操作事件插入內(nèi)存的Memtable中;所述轉換單元,當Memtable插入的操作事件達到預設界限后轉換為ImmutableMemtable;所述導出單元,將ImmutableMemtable的操作事件導出至磁盤中。優(yōu)選地,所述操作指令為查詢指令。優(yōu)選地,所述查詢指令包括中央處理器占用率、內(nèi)存占用率、磁盤占用率、服務器信息塊服務是否啟動、近距離無線通信服務是否設置成功、通用網(wǎng)絡文件系統(tǒng)是否設置成功中的至少一種。本發(fā)明利用日志文件對系統(tǒng)的操作事件進行記錄,使得系統(tǒng)在下一次啟動時根據(jù)日志文件就能夠快速的恢復系統(tǒng)的數(shù)據(jù)。此外,將操作事件記錄于LevelDB中,利用了LevelDB先往Log文件寫入并在成功后將記錄插入內(nèi)存中Memtable的特性,使得在系統(tǒng)崩潰后的恢復過程中,可以從Log文件中恢復內(nèi)存中Memtable的數(shù)據(jù),避免數(shù)據(jù)的丟失。寫入裝置與LevelDB屬于同一設備,日志文件寫入LevelDB的速度不依賴帶寬、且LevelDB在一次寫入過程中只涉及一次磁盤順序和一次內(nèi)存寫入,因此寫入速度快,提高了日志文件的寫入效率。附圖說明圖1為本發(fā)明日志文件的寫入方法一實施例的流程示意圖;圖2為本發(fā)明日志文件的寫入方法另一實施例的流程示意圖;圖3為本發(fā)明日志文件的寫入方法另一實施例中LevelDB的原理圖;圖4為本發(fā)明日志文件的寫入裝置一實施例的功能模塊示意圖;圖5為本發(fā)明日志文件的寫入裝置另一實施例中寫入模塊的細化功能模塊示意圖。本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結合實施例,參照附圖做進一步說明。具體實施方式應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明提供一種日志文件的寫入方法,參照圖1,在一實施例中,該日志文件的寫入方法包括:步驟S10,記錄系統(tǒng)執(zhí)行操作指令產(chǎn)生的操作事件;本實施例的日志文件的寫入方法可用于計算機、手機、平板電腦等具有操作系統(tǒng)的電子設備,適用的操作系統(tǒng)包括IOS系統(tǒng)、Android系統(tǒng)、Windows系統(tǒng)等。操作指令可以是系統(tǒng)產(chǎn)生的也可以是用戶對系統(tǒng)進行操作而產(chǎn)生的。系統(tǒng)根據(jù)所述操作指令進行相應的操作事件來實現(xiàn)操作指令預定所要達到的功能。通過監(jiān)控并記錄操作系統(tǒng)中執(zhí)行操作指令而產(chǎn)生的操作事件,使得在系統(tǒng)崩潰或出現(xiàn)異常時,下一次啟動系統(tǒng)能夠根據(jù)記錄下來的操作事件將系統(tǒng)恢復至崩潰之前的狀態(tài)。步驟S20,將所述操作事件按預設規(guī)則寫入至后臺數(shù)據(jù)庫中,并在磁盤中形成日志文件。將操作事件按時間的先后順序寫入至后臺數(shù)據(jù)庫中,并將操作事件導出至磁盤中形成日志文件。所述日志文件能夠被系統(tǒng)讀取,系統(tǒng)根據(jù)所述日志文件能夠恢復系統(tǒng)中的數(shù)據(jù)信息,避免了系統(tǒng)通過檢查系統(tǒng)數(shù)據(jù)結構完整性的過程。本發(fā)明利用日志文件對系統(tǒng)的操作事件進行記錄,使得系統(tǒng)在下一次啟動時根據(jù)日志文件就能夠快速的恢復系統(tǒng)的數(shù)據(jù)。通過時間順序寫入能夠方便系統(tǒng)根據(jù)時間線索查找對應的操作事件。進一步地,請參照圖2,基于本發(fā)明日志文件的寫入方法一實施例,在本發(fā)明日志文件的寫入方法另一實施例中,將LevelDB作為后臺數(shù)據(jù)庫,所述步驟S20包括:步驟S21,將所述操作事件寫入Log文件中;步驟S22,在寫入Log文件成功后將所述操作事件插入內(nèi)存的Memtable中;步驟S23,當Memtable插入的操作事件達到預設界限后轉換為ImmutableMemtable;步驟S24,將ImmutableMemtable的操作事件導出至磁盤中形成日志文件。請參照圖3,所述LevelDB包括位于內(nèi)存中的Memtable、ImmutableMemtable和位于磁盤中的Log文件、SSTable文件。當記錄的所述操作事件以KV(Key:Value)的形式寫入LevelDB時首先寫入Log文件中,成功后將所述操作事件插入內(nèi)存的Memtable中。Log文件在系統(tǒng)中的主要是用于系統(tǒng)崩潰時不丟失數(shù)據(jù),現(xiàn)有技術中沒有Log文件,寫入的所述操作事件保存在內(nèi)存中,此時如果系統(tǒng)崩潰,內(nèi)存中的數(shù)據(jù)還沒來得及備份至磁盤中就會丟失數(shù)據(jù),為避免這種情況,在寫入內(nèi)存之前先將所述操作事件記錄到Log文件,然后再記入內(nèi)存的Memtable中,這樣即使系統(tǒng)崩潰也能夠從Log文件中恢復內(nèi)存中Memtable的數(shù)據(jù),不會造成數(shù)據(jù)丟失,提高了下一次啟動時系統(tǒng)的數(shù)據(jù)恢復程度。當Memtable插入的數(shù)據(jù)占用內(nèi)存到了預設界限后,需要將內(nèi)存的操作事件導出到外存文件中,LevelDB會生成新的Log文件和Memtable來保存新的操作事件,之前的Memtable就成為ImmutableMemtable。所述ImmutableMemtable的內(nèi)容是不可更改的,只能讀不能寫或者刪除。LevelDB后臺調度會將ImmutableMemtable的操作事件導出至磁盤,形成一個新的SSTable文件。所述SSTable文件是由內(nèi)存中的數(shù)據(jù)不斷導出并進行Compaction操作形成的,所述SSTable中的所有文件是一種層級結構,第一層為level0、第二層為level1以此類推,層級逐漸增高。所述SSTable文件是有序的,Key小的記錄排在Key大的之前,各層的SSTable都是如此,但是要注意一點:level0的SSTable文件和其他level的文件相比有特殊性,level0內(nèi)的.sst文件其中的兩個文件可能存在Key重疊的情況,例如:有兩個level0的.sst文件A和文件B,文件A的Key范圍是{bar,car},文件B的Key范圍是{blue,samecity},那么很可能兩個文件都存在Key=“blood”的操作事件。所有的KV數(shù)據(jù)都是存儲在Memtable、ImmutableMemtable和SSTable中的,LevelDB的Memtable提供了將KV數(shù)據(jù)寫入,刪除以及讀取KV數(shù)據(jù)的操作接口,但是事實上Memtable并不存在真正的刪除操作,刪除某個Key的Value在Memtable內(nèi)是作為插入一條記錄實施的,會打上一個Key的刪除標記,并不做具體地刪除記錄,后臺會在之后的Compaction過程中去掉這個鍵值。所述Compaction操作即對多個文件采用多路歸并排序的方式,依次找出其中最小的Key記錄,也就是對多個文件中的所有KV數(shù)據(jù)重新進行排序。之后采取一定的標準判斷這個Key是否還需要保存,如果判斷沒有保存價值,那么直接拋掉,如果覺得還需要繼續(xù)保存,那么就將其寫入levelL+1層中新生成的一個SSTable文件中。就這樣對KV數(shù)據(jù)一一處理,形成了一系列新的L+1層數(shù)據(jù)文件,之前的L層文件和L+1層參與Compaction的文件數(shù)據(jù)此時已經(jīng)沒有意義了,所以全部刪除。這樣就完成了L層和L+1層文件記錄的合并過程。LevelDB的Memtable中的KV數(shù)據(jù)是根據(jù)Key大小有序存儲的,在系統(tǒng)插入新的KV數(shù)據(jù)時,LevelDB要把這個KV數(shù)據(jù)插到合適的位置上以保持這種Key有序性。其實,LevelDB的Memtable只是一個接口類,真正的操作是通過背后的SkipList來做的,包括插入操作和讀取操作等,所以Memtable的核心數(shù)據(jù)結構是一個SkipList。SkipList是平衡樹的一種替代數(shù)據(jù)結構,但是和紅黑樹不相同的是,SkipList對于樹的平衡的實現(xiàn)是基于一種隨機化的算法的,這樣也就是說SkipList的插入和刪除的工作是比較簡單的。SkipList不僅是維護有序數(shù)據(jù)的一個簡單實現(xiàn),而且相比較平衡樹來說,在插入數(shù)據(jù)的時候可以避免頻繁的樹節(jié)點調整操作,所以寫入效率是很高的,LevelDB整體而言是個高寫入系統(tǒng),SkipList在其中應該也起到了很重要的作用。Redis為了加快插入操作,也使用了SkipList來作為內(nèi)部實現(xiàn)數(shù)據(jù)結構。具體地,插入操作:舉一個插入操作Put(Key,Value)來說,完成插入操作包含兩個具體步驟:首先是將這條KV數(shù)據(jù)以順序寫的方式追加到Log文件末尾,盡管這是一個磁盤讀寫操作,但是因為文件的順序追加寫入效率是很高的,所以并不會導致寫入速度的降低;第二個步驟是:如果寫入Log文件成功,那么將這條KV數(shù)據(jù)插入內(nèi)存中的Memtable中,所述Memtable只是一層封裝,其內(nèi)部其實是一個Key有序的SkipList列表,插入一條新記錄的過程也很簡單,即先查找合適的插入位置,然后修改相應的鏈接指針將新記錄插入即可。完成這一步,寫入記錄就算完成了,所以一個插入記錄操作涉及一次磁盤文件追加寫和內(nèi)存SkipList插入操作,這是為何LevelDB寫入速度如此高效的根本原因。本實施例中,將LevelDB作為存儲操作事件的后臺數(shù)據(jù)庫,利用了LevelDB先往Log文件寫入并在成功后將記錄插入內(nèi)存中Memtable的特性,使得在系統(tǒng)崩潰后的恢復過程中,可以從Log文件中恢復內(nèi)存中Memtable的數(shù)據(jù),避免數(shù)據(jù)的丟失。寫入裝置與LevelDB屬于同一設備,日志文件寫入LevelDB的速度不依賴帶寬、且LevelDB在一次寫入過程中只涉及一次磁盤順序和一次內(nèi)存寫入,寫入速度快,提高了日志文件的寫入效率。進一步地,所述操作指令為查詢指令。所述查詢指令可以為用戶對電子設備的狀態(tài)進行查詢,具體地,可以是對具有查詢功能的應用程序進行點擊,根據(jù)用戶點擊的窗口發(fā)出對應的查詢指令。查詢步驟包括:根據(jù)所述查詢指令運行對應的腳本命令,并得到查詢結果;將所述查詢結果放置在緩沖區(qū)內(nèi);通過多線程讀取緩沖區(qū)內(nèi)的所述查詢結果。寫入裝置會在各步驟進行的同時將數(shù)據(jù)寫入后臺數(shù)據(jù)庫中。所述查詢指令包括中央處理器占用率、內(nèi)存占用率、磁盤占用率、服務器信息塊服務是否啟動、近距離無線通信服務是否設置成功、通用網(wǎng)絡文件系統(tǒng)是否設置成功等。本發(fā)明還提供一種日志文件寫入裝置,請參照圖4,在一實施例中,本發(fā)明提供的日志文件寫入裝置100包括記錄模塊10和寫入模塊20,其中:所述記錄模塊10,用于記錄系統(tǒng)執(zhí)行操作指令產(chǎn)生的操作事件;本實施例的日志文件的寫入方法可用于計算機、手機、平板電腦等具有操作系統(tǒng)的電子設備,適用的操作系統(tǒng)包括IOS系統(tǒng)、Android系統(tǒng)、Windows系統(tǒng)等。操作指令可以是系統(tǒng)產(chǎn)生的也可以是用戶對系統(tǒng)進行操作而產(chǎn)生的。系統(tǒng)根據(jù)所述操作指令進行相應的操作事件來實現(xiàn)操作指令預定所要達到的功能。通過監(jiān)控并記錄操作系統(tǒng)中執(zhí)行操作指令而產(chǎn)生的操作事件,使得在系統(tǒng)崩潰或出現(xiàn)異常時,下一次啟動系統(tǒng)能夠根據(jù)記錄下來的操作事件將系統(tǒng)恢復至崩潰之前的狀態(tài)。所述寫入模塊20,用于將所述操作事件按預設規(guī)則寫入至后臺數(shù)據(jù)庫中,并在磁盤中形成日志文件。將操作事件按時間的先后順序寫入至后臺數(shù)據(jù)庫中,并將操作事件導出至磁盤中形成日志文件。所述日志文件能夠被系統(tǒng)讀取,系統(tǒng)根據(jù)所述日志文件能夠恢復系統(tǒng)中的數(shù)據(jù)信息,避免了系統(tǒng)通過檢查系統(tǒng)數(shù)據(jù)結構完整性的過程。本發(fā)明利用日志文件對系統(tǒng)的操作事件進行記錄,使得系統(tǒng)在下一次啟動時根據(jù)日志文件就能夠快速的恢復系統(tǒng)的數(shù)據(jù)。通過時間順序寫入能夠方便系統(tǒng)根據(jù)時間線索查找對應的操作事件。進一步地,請參照圖5,基于本發(fā)明日志文件的寫入裝置一實施例,本實施例中提供的本發(fā)明日志文件的寫入裝置另一實施例中,將LevelDB作為后臺數(shù)據(jù)庫,所述寫入模塊20包括寫入單元21、插入單元22、轉換單元23和導出單元24,其中:所述寫入單元21,用于將所述操作事件寫入Log文件中;所述插入單元22,在寫入Log文件成功后將所述操作事件插入內(nèi)存的Memtable中;所述轉換單元23,當Memtable插入的操作事件達到預設界限后轉換為ImmutableMemtable;所述導出單元24,將ImmutableMemtable的操作事件導出至磁盤中形成日志文件。所述LevelDB包括位于內(nèi)存中的Memtable、ImmutableMemtable和位于磁盤中的Log文件、SSTable文件。當記錄的所述操作事件以KV(Key:Value)的形式寫入LevelDB時首先寫入Log文件中,成功后將所述操作事件插入內(nèi)存的Memtable中。Log文件在系統(tǒng)中的主要是用于系統(tǒng)崩潰時不丟失數(shù)據(jù),現(xiàn)有技術中沒有Log文件,寫入的所述操作事件保存在內(nèi)存中,此時如果系統(tǒng)崩潰,內(nèi)存中的數(shù)據(jù)還沒來得及備份至磁盤中就會丟失數(shù)據(jù),為避免這種情況,在寫入內(nèi)存之前先將所述操作事件記錄到Log文件,然后再記入內(nèi)存的Memtable中,這樣即使系統(tǒng)崩潰也能夠從Log文件中恢復內(nèi)存中Memtable的數(shù)據(jù),不會造成數(shù)據(jù)丟失,提高了下一次啟動時系統(tǒng)的數(shù)據(jù)恢復程度。當Memtable插入的數(shù)據(jù)占用內(nèi)存到了預設界限后,需要將內(nèi)存的操作事件導出到外存文件中,LevelDB會生成新的Log文件和Memtable來保存新的操作事件,之前的Memtable就成為ImmutableMemtable。所述ImmutableMemtable的內(nèi)容是不可更改的,只能讀不能寫或者刪除。LevelDB后臺調度會將ImmutableMemtable的操作事件導出至磁盤,形成一個新的SSTable文件。所述SSTable文件是由內(nèi)存中的數(shù)據(jù)不斷導出并進行Compaction操作形成的,所述SSTable中的所有文件是一種層級結構,第一層為level0、第二層為level1以此類推,層級逐漸增高。所述SSTable文件是有序的,Key小的記錄排在Key大的之前,各層的SSTable都是如此,但是要注意一點:level0的SSTable文件和其他level的文件相比有特殊性,level0內(nèi)的.sst文件其中的兩個文件可能存在Key重疊的情況,例如:有兩個level0的.sst文件A和文件B,文件A的Key范圍是{bar,car},文件B的Key范圍是{blue,samecity},那么很可能兩個文件都存在Key=“blood”的操作事件。所有的KV數(shù)據(jù)都是存儲在Memtable、ImmutableMemtable和SSTable中的,LevelDB的Memtable提供了將KV數(shù)據(jù)寫入,刪除以及讀取KV數(shù)據(jù)的操作接口,但是事實上Memtable并不存在真正的刪除操作,刪除某個Key的Value在Memtable內(nèi)是作為插入一條記錄實施的,會打上一個Key的刪除標記,并不做具體地刪除記錄,后臺會在之后的Compaction過程中去掉這個鍵值。所述Compaction操作即對多個文件采用多路歸并排序的方式,依次找出其中最小的Key記錄,也就是對多個文件中的所有KV數(shù)據(jù)重新進行排序。之后采取一定的標準判斷這個Key是否還需要保存,如果判斷沒有保存價值,那么直接拋掉,如果覺得還需要繼續(xù)保存,那么就將其寫入levelL+1層中新生成的一個SSTable文件中。就這樣對KV數(shù)據(jù)一一處理,形成了一系列新的L+1層數(shù)據(jù)文件,之前的L層文件和L+1層參與Compaction的文件數(shù)據(jù)此時已經(jīng)沒有意義了,所以全部刪除。這樣就完成了L層和L+1層文件記錄的合并過程。LevelDB的Memtable中的KV數(shù)據(jù)是根據(jù)Key大小有序存儲的,在系統(tǒng)插入新的KV數(shù)據(jù)時,LevelDB要把這個KV數(shù)據(jù)插到合適的位置上以保持這種Key有序性。其實,LevelDB的Memtable只是一個接口類,真正的操作是通過背后的SkipList來做的,包括插入操作和讀取操作等,所以Memtable的核心數(shù)據(jù)結構是一個SkipList。SkipList是平衡樹的一種替代數(shù)據(jù)結構,但是和紅黑樹不相同的是,SkipList對于樹的平衡的實現(xiàn)是基于一種隨機化的算法的,這樣也就是說SkipList的插入和刪除的工作是比較簡單的。SkipList不僅是維護有序數(shù)據(jù)的一個簡單實現(xiàn),而且相比較平衡樹來說,在插入數(shù)據(jù)的時候可以避免頻繁的樹節(jié)點調整操作,所以寫入效率是很高的,LevelDB整體而言是個高寫入系統(tǒng),SkipList在其中應該也起到了很重要的作用。Redis為了加快插入操作,也使用了SkipList來作為內(nèi)部實現(xiàn)數(shù)據(jù)結構。具體地,插入操作:舉一個插入操作Put(Key,Value)來說,完成插入操作包含兩個具體步驟:首先是將這條KV數(shù)據(jù)以順序寫的方式追加到Log文件末尾,盡管這是一個磁盤讀寫操作,但是因為文件的順序追加寫入效率是很高的,所以并不會導致寫入速度的降低;第二個步驟是:如果寫入Log文件成功,那么將這條KV數(shù)據(jù)插入內(nèi)存中的Memtable中,所述Memtable只是一層封裝,其內(nèi)部其實是一個Key有序的SkipList列表,插入一條新記錄的過程也很簡單,即先查找合適的插入位置,然后修改相應的鏈接指針將新記錄插入即可。完成這一步,寫入記錄就算完成了,所以一個插入記錄操作涉及一次磁盤文件追加寫和內(nèi)存SkipList插入操作,這是為何LevelDB寫入速度如此高效的根本原因。本實施例中,將LevelDB作為存儲操作事件的后臺數(shù)據(jù)庫,利用了LevelDB先往Log文件寫入并在成功后將記錄插入內(nèi)存中Memtable的特性,使得在系統(tǒng)崩潰后的恢復過程中,可以從Log文件中恢復內(nèi)存中Memtable的數(shù)據(jù),避免數(shù)據(jù)的丟失。寫入裝置與LevelDB屬于同一設備,日志文件寫入LevelDB的速度不依賴帶寬、且LevelDB在一次寫入過程中只涉及一次磁盤順序和一次內(nèi)存寫入,寫入速度快,提高了日志文件的寫入效率。進一步地,所述操作指令為查詢指令。所述查詢指令可以為用戶對電子設備的狀態(tài)進行查詢,具體地,可以是對具有查詢功能的應用程序進行點擊,根據(jù)用戶點擊的窗口發(fā)出對應的查詢指令。查詢步驟包括:根據(jù)所述查詢指令運行對應的腳本命令,并得到查詢結果;將所述查詢結果放置在緩沖區(qū)內(nèi);通過多線程讀取緩沖區(qū)內(nèi)的所述查詢結果。寫入裝置會在各步驟進行的同時將數(shù)據(jù)寫入后臺數(shù)據(jù)庫中。所述查詢指令包括中央處理器占用率、內(nèi)存占用率、磁盤占用率、服務器信息塊服務是否啟動、近距離無線通信服務是否設置成功、通用網(wǎng)絡文件系統(tǒng)是否設置成功等。以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結構或等效流程變換,或直接或間接運用在其他相關的
技術領域:
:,均同理包括在本發(fā)明的專利保護范圍內(nèi)。當前第1頁1 2 3 當前第1頁1 2 3