麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

日志記錄方法、日志查詢方法及系統的制作方法

文檔序號:6377879閱讀:627來源:國知局
專利名稱:日志記錄方法、日志查詢方法及系統的制作方法
技術領域
本發明涉及日志處理領域,更為具體地,涉及一種日志記錄方法及裝置、一種日志查詢方法及裝置以及具有上述裝置的日志系統。
背景技術
日志系統負責接收網關發送的日志數據,按照一定格式存儲所接收的日志數據,并且提供對日志數據的查詢功能。網關發送的日志數據通常包括三種類型管理日志,運行日志和訪問日志。管理日志記錄的是網關的管理員對網關的管理操作,運行日志記錄的是網關本身運行過程中發生的事件,而訪問日志記錄的是通過網關的訪問事件,通常一個會話會產生一條訪問日志。通常情況下,網關的管理日志和運行日志不會很多,而訪問日志每秒可能達到成千上萬條。 圖I示出了網關發送的日志數據的一個示例。如圖I所示,在該日志數據中包括的字段是時間,模塊,等級,源IP,目的IP,目的端口,協議和動作。目前的日志系統主要運行在Linux/Unix或者Windows服務器上,采用關系數據庫來實現對日志數據的存儲和查詢功能。另外,為了提高日志的查詢性能,還會為關系數據庫建立索引。然而,基于關系數據庫實現的日志系統的性能差。一方面,在基于關系數據庫實現的日志系統中,日志數據的插入性能差。如果為了提高日志的查詢性能而給關系數據庫建立索引,則日志數據的插入性能會進一步下降。此外,關系數據庫的插入性能還會隨著記錄的增多而下降。另一方面,即使為數據庫建立索引,隨著所記錄的日志增多,查詢性能仍然無法滿足要求。此外,基于關系數據庫實現的日志系統的存儲空間(例如,磁盤空間)利用率低。在基于關系數據庫實現的日志系統中,為了提高日志的查詢性能,必須為關系數據庫建立搜索引,此時會明顯增大關系數據庫文件所占用的存儲空間,從而使得日志系統的存儲空間利用率低。

發明內容
鑒于上述,本發明的目的在于提供一種日志記錄方法及裝置,該方法及裝置能夠減少索引文件所占用的存儲空間。本發明的另一目的在于提供一種日志查詢方法及裝置,該方法及裝置能夠提高日志的查詢性能。本發明的另一目的在于提供包括上述裝置的日志系統。根據本發明的一個方面,提供了一種日志記錄方法,包括從所獲取的日志中獲取該日志中的各個字段的字段取值;將所獲取的日志插入到日志數據文件中,所述日志數據文件與多個預先創建的索引文件相關聯地存儲在存儲裝置中;記錄所述日志在所述日志數據文件中的寫入位置距離所述日志數據文件的起始位置的偏移量;以及將各個字段的字段取值和日志的偏移量相關聯地寫入到對應的索引文件中,每個字段對應一個索引文件,其中,所述多個索引文件中的至少一個索引文件是主索引文件,在所述主索引文件中,還與對應字段的字段取值和日志的偏移量相關聯地寫入所述日志的長度。在上述方面的一個或多個示例中,在非主索引文件中,還與對應字段的字段取值和日志的偏移量相關聯地寫入所述日志的長度。在上述方面的一個或多個示例中,所述字段包括時間類型字段、枚舉類型字段和變量類型字段,對于時間類型字段,所獲取的字段取值是日志的起始時間和結束時間,對于枚舉類型字段,所獲取的字段取值是字段的枚舉類型,以及對于變量類型字段,所獲取的字段取值是變量值。在上述方面的一個或多個示例中,所述與時間索引對應的索引文件、所述與枚舉類型字段對應的索引文件采用數組方式,以及所述與變量類型字段對應的索引文件采用HASH表的方式。·根據本發明的另一方面,提供了一種日志記錄裝置,包括字段取值獲取單元,用于從所獲取的日志中獲取該日志中的各個字段的字段取值;日志插入單元,用于將所獲取的日志插入到日志數據文件中,所述日志數據文件與多個預先創建的索引文件相關聯地存儲在存儲裝置中;記錄單元,用于記錄所述日志在所述日志數據文件中的寫入位置距離所述日志數據文件的起始位置的偏移量;以及索引文件寫入單元,用于將各個字段的字段取值和日志的偏移量相關聯地寫入到對應的索引文件中,每個字段對應一個索引文件,其中,所述多個索引文件中的至少一個索引文件是主索引文件,在對應的索引文件是主索引文件時,所述索引文件寫入單元還用于將所述日志的長度與對應字段的字段取值和日志的偏移量相關聯地寫入到所述主索引文件中。在上述方面的一個或多個示例中,在非主索引文件中,還與對應字段的字段取值和日志的偏移量相關聯地寫入所述日志的長度。根據本發明的另一方面,提供了一種日志查詢方法,所述日志按照如上所述的方法進行記錄,所述日志查詢方法包括根據用戶輸入的多個查詢條件,在對應的索引文件中讀取滿足單個查詢條件的所有日志偏移量,以得到與該單個查詢條件對應的日志偏移量集合;計算所讀取的所有日志偏移量集合的交集;根據所計算出的日志偏移量集合的交集,獲取與該交集中的日志偏移量對應的主索引文件;以及根據所獲取的主索引文件中的日志偏移量和日志長度,從所述日志數據文件中讀取滿足多個查詢條件的日志。在上述方面的一個或多個示例中,計算所讀取的所有日志偏移量集合的交集包括對所獲取的日志偏移量集合,按照所包含的數據元素的個數從小到大進行排序;以及針對排序后的日志偏移量集合,迭代計算排序后的日志偏移量集合中的前兩個日志偏移量集合的交集,直到針對所有所獲取的日志偏移量集合完成迭代計算,其中,每次迭代計算的結果替換進行本次迭代計算的兩個日志偏移量集合,作為下次迭代計算時的第一個日志偏移量集合。在上述方面的一個或多個示例中,兩個日志偏移量集合之間的交集采用二分法計算,以及在進行二分法時,對于在先日志偏移量集合的第一個元素,二分法的開始和結束位置分別為在后日志偏移量集合的第一個元素和最后一個元素;對于所述在先日志偏移量集合的除了第一個元素之外的元素,二分法的開始位置是前一次二分法查找的結果位置,結束位置是在先日志偏移量集合的最后一個元素。根據本發明的另一方面,提供了一種日志查詢裝置,所述日志按照如上所述的方法進行記錄,所述日志查詢裝置包括日志偏移量獲取單元,用于根據用戶輸入的多個查詢條件,在對應的索引文件中讀取滿足單個查詢條件的所有日志偏移量,以得到與該單個查詢條件對應的日志偏移量集合;交集計算單元,用于計算所讀取的所有日志偏移量集合的交集;主索引文件獲取單元,用于根據所計算出的日志偏移量集合的交集,獲取與該交集中的日志偏移量對應的主索引文件;以及日志讀取單元,用于根據所獲取的主索引文件中的日志偏移量和日志長度,從所述日志數據文件中讀取滿足多個查詢條件的日志。在上述方面的一個或多個示例中,所述交集計算單元包括排序模塊,用于對所獲取的日志偏移量集合,按照所包含的數據元素的個數從小到大進行排序;以及迭代計算模塊,用于針對排序后的日志偏移量集合,迭代計算排序后的日志偏移量集合中的前兩個日志偏移量集合的交集,直到針對所有所獲取的日志偏移量集合完成迭代計算,其中,每次迭代計算的結果替換進行本次迭代計算的兩個日志偏移量集合,作為下次迭代計算時的第一 個日志偏移量集合。根據本發明的另一方面,提供了一種日志系統,包括如上所述的日志記錄裝置;以及如上所述的日志查詢裝置。利用上述日志記錄方法及裝置,按照日志數據文件與日志索引文件結合的方式對日志進行記錄,從而無需基于關系數據庫進行存儲,由此減少索引文件所占用的存儲空間。利用上述日志查詢方法及裝置,通過獲取滿足多個查詢條件的偏移量之間的交集來讀取滿足多個查詢條件的日志,可以顯著提高日志的查詢性能。為了實現上述以及相關目的,本發明的一個或多個方面包括后面將詳細說明并在權利要求中特別指出的特征。下面的說明以及附圖詳細說明了本發明的某些示例性方面。然而,這些方面指示的僅僅是可使用本發明的原理的各種方式中的一些方式。此外,本發明旨在包括所有這些方面以及它們的等同物。


根據下述參照附圖進行的詳細描述,本發明的上述和其他目的、特征和優點將變得更加顯而易見。在附圖中圖I示出了日志的一個示例;圖2示出了根據本發明的實施例的日志記錄方法的流程圖;圖3示出了根據本發明的實施例的日志記錄裝置的方框示意圖;圖4示出了根據本發明實施例的日志查詢方法的流程圖;圖5示出了圖4中的偏移量交集的計算過程的一個示例的流程圖;圖6示出了根據本發明的實施例的日志查詢裝置的方框示意圖;圖7示出了圖6中的交集計算單元的一個實現示例的方框示意圖;和圖8示出了根據本發明的實施例的日志系統的方框示意圖。在所有附圖中相同的標號指示相似或相應的特征或功能。
具體實施方式
下面描述本公開的各個方面。應該明白的是,本文的教導可以以多種多樣形式具體體現,并且在本文中公開的任何具體結構、功能或兩者僅僅是代表性的。基于本文的教導,本領域技術人員應該明白的是,本文所公開的一個方面可以獨立于任何其它方面實現,并且這些方面中的兩個或多個方面可以按照各種方式組合。例如,可以使用本文所闡述的任何數目的方面,實現裝置或實踐方法。另外,可以使用其它結構、功能、或除了本文所闡述的一個或多個方面之外或不是本文所闡述的一個或多個方面的結構和功能,實現這種裝置或實踐這種方法。此外,本文所描述的任何方面可以包括權利要求的至少一個元素。下面將參照圖2到圖7描述本發明的各個實施例。圖2示出了根據本發明的實施例的日志記錄方法的流程圖。如圖2所示,在獲取日志后,例如,從網關接收到日志數據后,在步驟S210中,從所獲取的日志中獲取該日志中的各個字段的字段取值。通常,日志由多個字段構成。所述日志中的字段可以包括時間類型字段、枚舉類型字段和變量類型字段。所述時間類型字段用于記錄日志的時間信息,比如關于日志的發生時間的信息。所述枚舉類型字段可以是日志等級字段、模塊名稱字段等的字段,用于記錄日志等級值、模塊名稱等。變量類型字段可以·是比如IP地址字段、用戶名字段等的字段,用于記錄IP地址、用戶名字等。對于時間類型字段,所獲取的字段取值是日志的發生時間。對于枚舉類型字段,所獲取的字段取值是字段的枚舉類型值,比如日志等級值、模塊名稱等。對于變量類型字段,所獲取的字段取值是變量值,比如IP地址、用戶名等。接著,在步驟S220,將所獲取的日志插入到日志數據文件中。這里,所述日志數據文件用于記錄日志數據,并且與預先創建的索引文件相關聯的存儲在存儲裝置中。通常,在日志數據文件中,每一行寫入一條日志。在其它示例中,在一行中也可以寫入多條日志。所述預先創建的索引文件可以包括與時間類型字段對應的索引文件(下文中稱為時間索引文件)、與枚舉類型字段對應的索引文件以及與變量類型字段對應的索引文件。所述索引文件可以包括主索引文件和非主索引文件。在主索引文件中記錄字段取值、偏移量和日志長度。在非主索引文件中記錄字段取值和偏移量。另外,可選地,在非主索引文件中,可以不記錄日志長度,也可以記錄日志長度。在所述預先創建的索引文件中,至少包括一個主索引文件,比如時間索引文件是主索引文件。在本發明的其它示例中,所述預先創建的索引文件可以都是主索引文件。優選地,所述預先創建的索引文件中僅僅包括一個主索引文件。然后,在步驟S230,記錄所述日志在所述日志數據文件中的寫入位置距離所述日志數據文件的起始位置的偏移量。接著,在步驟S240,從日志中的第一個字段開始,對于每個字段,判斷該字段所對應的索引文件是否是主索引文件。例如,根據字段的類型,確定該字段所對應的索引文件是否是主索引文件。在步驟S240中判斷該字段所對應的索引文件是主索引文件時,在步驟S250,將所獲取的該字段的字段取值、日志的偏移量以及日志長度相關聯地寫入到與該字段對應的主索引文件中。在步驟S240中判斷該字段所對應的索引文件是非主索引文件時,在步驟S260中,將所獲取的該字段的字段取值和日志的偏移量相關聯地寫入到與該字段對應的索引文件中。對于不同類型的索引文件,采用不同的格式。在本發明的一個示例中,時間索引文件和枚舉索引文件采用數組方式。在時間索引文件和枚舉類型文件是主索引文件時,每個數組元素是三元數組,比如,在時間索引文件中,記錄一條日志的起始時間和結束時間、日志的偏移量和日志長度。在枚舉索引文件中,記錄一條日志的枚舉類型(比如日志等級、模塊名稱)、偏移量以及日志長度。比如,對于時間索引文件,如果一條日志發生的時間是0x5059bd05,在日志數據文件中的偏移量是256,長度是100,則在時間索引文件中需要添加12個字節(二進制方式)0x5059bd050x000001000x00000064,時間索引文件是下面數據結構的數組
Struct time—index {
Unsigned int seconds;
Unsiiined int offset;
o,
Unsigned int len;
} °在時間索引文件和枚舉類型文件是非主索引文件時,每個數組元素是二元數組,如,在時間索引文件中,記錄一條日志的起始時間和結束時間和日志的偏移量。在枚舉索
弓丨文件中,記錄一條日志的枚舉類型(比如日志等級、模塊名稱)以及偏移量。變量索引文件采用HASH表方式。在變量索引文件是主索引文件時,HASH表的每個節點記錄了日志字段的鍵值、和該鍵值相對應的所有日志的偏移量以及日志長度。例如用戶名索引文件HASH表中的每個節點記錄了用戶名、該用戶對應的所有日志在日志數據文件中的偏移量以及日志長度。在變量索引文件是非主索引文件時,HASH表的每個節點記錄了日志字段的鍵值以及和該鍵值相對應的所有日志的偏移量。然后,在步驟S270中,判斷是否針對日志中的所有字段都完成上述索引文件寫入過程。如果完成,則流程結束。否則,在步驟S280中,轉到下一字段,然后返回到步驟S240。圖2僅僅是本發明的日志記錄過程的一個實現示例。針對上述示例,還可以進行各種變型。比如,在本發明的一個變型中,可以認為所有索引文件都是主索引文件,從而省略圖2中的步驟S240和步驟S260。在本發明的另一變型中,在步驟S240之前,還可以包括判斷過程,用于對于每個字段,判斷在預先創建的索引文件中是否存在對應的索引文件。在判斷為不存在對應的索引文件時,創建對應的索引文件,并且將該字段的字段取值和日志的偏移量相關聯地寫入到所創建的索引文件中。在存在對應的索引文件時,流程進行到步驟S240。圖3示出了根據本發明的實施例的日志記錄裝置300的方框示意圖。如圖3所示,日志記錄裝置300包括字段取值獲取單元310、日志插入單元320、記錄單元330以及索引文件寫入單元340。字段取值獲取單元310用于從所獲取的日志中獲取該日志中的各個字段的字段取值。日志插入單元320用于將所獲取的日志插入到日志數據文件中,所述日志數據文件與多個預先創建的索引文件相關聯地存儲在存儲裝置中。所述多個預先創建的索引文件中的至少一個索引文件是主索引文件。
記錄單元330用于記錄所述日志在所述日志數據文件中的寫入位置距離所述日志數據文件的起始位置的偏移量。索引文件寫入單元340用于將各個字段的字段取值和日志的偏移量相關聯地寫入到對應的索引文件中,每個字段對應一個索引文件。此外,在對應的索引文件是主索引文件時,所述索引文件寫入單元340還用于將所述日志的長度與對應字段的字段取值和日志的偏移量相關聯地寫入到所述主索引文件中。此外,在本發明的另一實施例中,對于非主索引文件,也可以將所述日志的長度與對應字段的字段取值和日志的偏移量相關聯地寫入到所述非主索引文件中。在本發明的另一示例中,所述日志記錄裝置還可以包括判斷單元(未示出),用于對于每個字段,在將該字段的字段取值和日志的偏移量相關聯地寫入到對應的索引文件中之前,判斷在預先創建的索引文件中是否存在對應的索引文件;以及創建單元(未示出),用于在判斷單元判斷出不存在對應的索引文件時,創建對應的索引文件。在不存在對應的索引文件時,所述索引文件寫入單元340被配置為將該字段的字段取值和日志的偏移量相關 聯地寫入到所創建的索引文件中,以及在存在對應的索引文件時,所述索引文件寫入單元340被配置為將該字段的字段取值和日志的偏移量相關聯地寫入到該對應的索引文件中。圖4示出了根據本發明實施例的日志查詢方法的流程圖。如圖4所示,在利用多個查詢條件對如上參照圖2所述進行記錄的日志進行查詢時,首先,在步驟S410,根據用戶輸入的多個查詢條件,在對應的索引文件中讀取滿足單個查詢條件的所有日志偏移量,以得到與該單個查詢條件對應的日志偏移量集合。所述多個查詢條件可以包括比如與時間相關的查詢條件,與指定等級相關的查詢條件,與用戶名相關的查詢條件等。對于給定起始時間和結束時間日志的查詢條件,在時間索引文件中讀取滿足該查詢條件的所有偏移量,并組成日志偏移量集合offsets」[]。對于指定等級的查詢條件,在日志等級索引文件中讀取滿足該指定等級的所有日志的偏移量,并組成日志偏移量集合0ffsets_2[]。對于給出用戶名的查詢條件,在用戶名索引文件中讀取滿足指定用戶的所有日志的偏移量,并組成日志偏移量offsets_n[]。這里的偏移量offsets_l []、offsets_2[]和偏移量offsets_n[]通常是偏移量集合。然后,在步驟S420,計算所讀取的所有日志偏移量集合的交集,即求偏移量集合offsets_l [], offsets_2 [], ......offsets_n []的交集。在如上求出日志偏移量集合的交集后,在步驟S430,根據所計算出的日志偏移量集合的交集,獲取與該交集中包含的日志偏移量對應的主索引條件。這里,所計算出的交集中可能存在多個日志偏移量,從而可以得到多個主索引條件。然后,在步驟S440,根據所獲取的主索引條件中的日志偏移量以及日志長度,從所述日志數據文件中讀取滿足多個查詢條件的日志。圖5示出了圖4中的偏移量集合交集的計算過程的一個示例的流程圖。如圖5所示,首先,在步驟S421中,對于所獲取的偏移量集合,按照所包含的數組元素的個數從小到大進行排序。假設偏移量集合#&的8_1[]〈#&的8_2[]〈……<0ffsets_n[]。接著,在步驟S423中,將第一個偏移量集合設置為當前偏移量集合,即,將offsets」[]設置為當前偏移量集合。然后,在步驟S425,計算當前偏移量集合與下一偏移量集合的交集,即,在當前偏移量集合是offsets_l [],計算offsets_l []和offsets_2[]的交集。在當前偏移量集合是offsets_l□和offsets_2[]的交集時,計算該交集與offsets_3[]的交集。如此類推。在計算出交集后,在步驟S427中,判斷是否計算出所有偏移量集合的交集。如果已經計算出,則流程結束。否則,流程進行到步驟S429,將計算出的交集作為當前偏移量集合,并且隨后流程返回到步驟S425,繼續進行交集計算。在本發明的另一示例中,在計算兩個偏移量集合offsets_l []和offsets_2 [](假設兩者分別具有M和N個元素)的交集時,如果第一個偏移量集合的元素個數遠小于第二個偏移量集合的元素個數(即M遠小于N),將采用二分法來計算交集。即對于第一個偏移量集合中的每個元素,使用二分法在第二偏移量集合中查找是否存在相同的元素。由于兩個偏移量集合都是單調遞增的,在使用二分法的時候,對于0fTSetS_l[]的第一個元素,二分法的開始和結束位置分別為0fTSetS_2[]的第一個元素和最后一個元 素。對于offsets」[]的第二個元素,二分法的開始位置是前一次二分法查找的結果位置,結束位置還是0ffsetS_2口的最后一個元素。依次下去,由此可以減少二分次數。由于這些數組元素都是單調遞增的,理論上計算兩個遞增數組offsets_m[],offsets_n[](分別具有M和N個元素)交集的時間復雜度最好結果是ο (Μ+Ν),從而減小了計算交集的復雜度。進而提高了查詢性能。圖6示出了根據本發明的實施例的日志查詢裝置600的方框示意圖。如圖6所示,日志查詢裝置600包括日志偏移量獲取單元610、交集計算單元620、主索引文件獲取單元630和日志讀取單元640。日志偏移量獲取單元610用于根據用戶輸入的多個查詢條件,在對應的索引文件中讀取滿足單個查詢條件的所有日志偏移量,以得到與該單個查詢條件對應的日志偏移量集合。交集計算單元620用于計算所讀取的所有日志偏移量集合的交集。主索引文件獲取單元630用于根據所計算出的日志偏移量集合的交集,獲取與該交集中包含的日志偏移量對應的主索引條件。日志讀取單元630用于根據所獲取的主索引條件中的日志偏移量和日志長度,從所述日志數據文件中讀取滿足多個查詢條件的日志。圖6中的交集計算單元可以采用多種方式實現。圖7示出了圖6中的交集計算單元的一個實現示例的方框示意圖。如圖7所示,所述交集計算單元620包括排序模塊621和迭代計算模塊623。排序模塊621用于對所獲取的日志偏移量集合,按照所包含的數據元素的個數從小到大進行排序。迭代計算模塊623用于針對排序后的日志偏移量集合,迭代計算排序后的日志偏移量集合中的前兩個日志偏移量集合的交集,直到針對所有所獲取的日志偏移量集合完成迭代計算,其中,每次迭代計算的結果替換進行本次迭代計算的兩個日志偏移量集合,作為下次迭代計算時的第一個日志偏移量集合。圖8示出了根據本發明的實施例的日志系統10的方框示意圖。如圖8所示,日志系統10包括日志記錄裝置300和日志查詢裝置600。這里,日志系統10中也可以包括日志記錄裝置300和日志查詢裝置的各種變型。利用上述日志記錄方法及裝置,按照日志數據文件與日志索引文件結合的方式對日志進行存儲,從而無需基于關系數據庫進行存儲,由此減少索引文件所占用的存儲空間。利用上述日志查詢方法及裝置,通過獲取滿足多個查詢條件的偏移量之間的交集來讀取滿足多個查詢條件的日志,可以顯著提高日志的查詢性能。經過試驗,采用本發明,可以大幅提高日志系統的性能,并且索引文件占用的磁盤空間不到日志數據文件的20%。利用根據本發明的技術方案,在DELL R71服務器上,對于具有5個字段,長度為128-256字節的日志,插入100萬條日志只需要12秒。而且,根據查詢條件的不同,查詢時間在O. 3毫秒到5毫秒之間。而在相同軟硬件環境下,使用基于關系數據庫(比如sqlite數據庫)的技術方案,在開啟事務的情況下,插入100萬條記錄用時37分53秒,以及查詢時間在3毫秒到15毫秒之間。另外,sqlite數據庫的插入性能隨著插入日志的增加而明顯下降。而采用本發明的方案則幾乎沒有下降。此外,通過采用上述優化之后求多個遞增數組交集的算法,比普通算法性能提升了 3-10倍,使用優化之后的算法,查詢的性能提升了 40%。盡管前面公開的內容示出了本發明的示例性實施例,但是應當注意,在不背離權·利要求限定的本發明的范圍的前提下,可以進行多種改變和修改。根據這里描述的發明實施例的方法權利要求的功能、步驟和/或動作不需以任何特定順序執行。此外,盡管本發明的元素可以以個體形式描述或要求,但是也可以設想多個,除非明確限制為單數。雖然如上參照圖描述了根據本發明的各個實施例進行了描述,但是本領域技術人員應當理解,對上述本發明所提出的各個實施例,還可以在不脫離本發明內容的基礎上做出各種改進。因此,本發明的保護范圍應當由所附的權利要求書的內容確定。
權利要求
1.一種日志記錄方法,包括 從所獲取的日志中獲取該日志中的各個字段的字段取值; 將所獲取的日志插入到日志數據文件中,所述日志數據文件與多個預先創建的索引文件相關聯地存儲在存儲裝置中; 記錄所述日志在所述日志數據文件中的寫入位置距離所述日志數據文件的起始位置的偏移量;以及 將各個字段的字段取值和日志的偏移量相關聯地寫入到對應的索引文件中,每個字段對應一個索引文件, 其中,所述多個索引文件中的至少一個索引文件是主索引文件,在所述主索引文件中,還與對應字段的字段取值和日志的偏移量相關聯地寫入所述日志的長度。
2.如權利要求I所述的日志記錄方法,其中,在非主索引文件中,還與對應字段的字段取值和日志的偏移量相關聯地寫入所述日志的長度。
3.如權利要求I所述的日志記錄方法,其中,所述字段包括時間類型字段、枚舉類型字段和變量類型字段,對于時間類型字段,所獲取的字段取值是日志的起始時間和結束時間,對于枚舉類型字段,所獲取的字段取值是字段的枚舉類型,以及對于變量類型字段,所獲取的字段取值是變量值。
4.如權利要求3所述的日志記錄方法,其中,所述與時間索引對應的索引文件、所述與枚舉類型字段對應的索引文件都采用數組方式,以及所述與變量類型字段對應的索引文件采用HASH表的方式。
5.一種日志記錄裝置,包括 字段取值獲取單元,用于從所獲取的日志中獲取該日志中的各個字段的字段取值; 日志插入單元,用于將所獲取的日志插入到日志數據文件中,所述日志數據文件與多個預先創建的索引文件相關聯地存儲在存儲裝置中; 記錄單元,用于記錄所述日志在所述日志數據文件中的寫入位置距離所述日志數據文件的起始位置的偏移量;以及 索引文件寫入單元,用于將各個字段的字段取值和日志的偏移量相關聯地寫入到對應的索引文件中,每個字段對應一個索引文件, 其中,所述多個索引文件中的至少一個索引文件是主索引文件,在對應的索引文件是主索引文件時,所述索引文件寫入單元還用于將所述日志的長度與對應字段的字段取值和日志的偏移量相關聯地寫入到所述主索引文件中。
6.如權利要求5所述的日志記錄裝置,在非主索引文件中,還與對應字段的字段取值和日志的偏移量相關聯地寫入所述日志的長度。
7.一種日志查詢方法,所述日志按照如權利要求I所述的方法進行記錄,所述日志查詢方法包括 根據用戶輸入的多個查詢條件,在對應的索引文件中讀取滿足單個查詢條件的所有日志偏移量,以得到與該單個查詢條件對應的日志偏移量集合; 計算所讀取的所有日志偏移量集合的交集; 根據所計算出的日志偏移量集合的交集,獲取與該交集中的日志偏移量對應的主索引文件;以及根據所獲取的主索引文件中的日志偏移量和日志長度,從所述日志數據文件中讀取滿足所述多個查詢條件的日志。
8.如權利要求7所述的日志查詢方法,其中,計算所讀取的所有日志偏移量集合的交集包括 對所獲取的日志偏移量集合,按照所包含的數據元素的個數從小到大進行排序;以及 針對排序后的日志偏移量集合,迭代計算排序后的日志偏移量集合中的前兩個日志偏移量集合的交集,直到針對所有所獲取的日志偏移量集合完成迭代計算,其中,每次迭代計算的結果替換進行本次迭代計算的兩個日志偏移量集合,作為下次迭代計算時的第一個日志偏移量集合。
9.如權利要求8所述的日志查詢方法,其中,兩個日志偏移量集合之間的交集采用二分法計算,以及在進行二分法計算時,對于在先日志偏移量集合的第一個元素,二分法的開始和結束位置分別為在后日志偏移量集合的第一個元素和最后一個元素,以及對于所述在先日志偏移量集合的除了第一個元素之外的元素,二分法的開始位置是前一次二分法查找的結果位置,結束位置是在先日志偏移量集合的最后一個元素。
10.一種日志查詢裝置,所述日志按照如權利要求I所述的方法進行記錄,所述日志查詢裝置包括 日志偏移量獲取單元,用于根據用戶輸入的多個查詢條件,在對應的索引文件中讀取滿足單個查詢條件的所有日志偏移量,以得到與該單個查詢條件對應的日志偏移量集合; 交集計算單元,用于計算所讀取的所有日志偏移量集合的交集; 主索引文件獲取單元,用于根據所計算出的日志偏移量集合的交集,獲取與該交集中的日志偏移量對應的主索引文件;以及 日志讀取單元,用于根據所獲取的主索引文件中的日志偏移量和日志長度,從所述日志數據文件中讀取滿足查詢條件的日志。
11.如權利要求10所述的日志查詢裝置,其中,所述交集計算單元包括 排序模塊,用于對所獲取的日志偏移量集合,按照所包含的數據元素的個數從小到大進行排序;以及 迭代計算模塊,用于針對排序后的日志偏移量集合,迭代計算排序后的日志偏移量集合中的前兩個日志偏移量集合的交集,直到針對所有所獲取的日志偏移量集合完成迭代計算,其中,每次迭代計算的結果替換進行本次迭代計算的兩個日志偏移量集合,作為下次迭代計算時的第一個日志偏移量集合。
12.—種日志系統,包括 如權利要求5或6所述的日志記錄裝置;以及 如權利要求10或11所述的日志查詢裝置。
全文摘要
本發明提供了一種日志系統,包括日志記錄裝置和日志查詢裝置。在日志記錄裝置中,記錄單元記錄日志的寫入位置距離日志數據文件的起始位置的偏移量。索引文件寫入單元將各個字段的字段取值、日志偏移量和/或日志長度相關聯地寫入到對應的索引文件中。在日志查詢裝置中,日志偏移量獲取單元根據多個查詢條件,在對應的索引文件中讀取滿足單個查詢條件的所有日志偏移量。交集計算單元計算所讀取的日志偏移量的交集。日志讀取單元根據交集中的日志偏移量,從日志數據文件中讀取滿足多個查詢條件的日志。利用該日志系統,可以顯著提高日志的查詢性能,并且減少索引文件所占用的存儲空間。
文檔編號G06F17/30GK102929936SQ20121036619
公開日2013年2月13日 申請日期2012年9月26日 優先權日2012年9月26日
發明者黃傳輝, 曹斌 申請人:東軟集團股份有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 光泽县| 府谷县| 桦川县| 枣庄市| 广汉市| 搜索| 仙居县| 喀喇沁旗| 内丘县| 漠河县| 白玉县| 鲜城| 利辛县| 永宁县| 天祝| 南昌县| 长子县| 聊城市| 望谟县| 泰宁县| 中方县| 尚义县| 石阡县| 隆林| 钦州市| 阜康市| 漳平市| 洞口县| 汉沽区| 太康县| 岳普湖县| 古田县| 南阳市| 太保市| 屏东县| 宝坻区| 体育| 平邑县| 萝北县| 渑池县| 高碑店市|