宋瑜輝
摘? 要:在輔助決策系統(tǒng)中,傳統(tǒng)的關系型數(shù)據庫已經難以滿足對海量日志數(shù)據的管理,非關系型數(shù)據庫的出現(xiàn),為大規(guī)模數(shù)據存儲挖掘問題提供了卓有成效的解決方案。文章著重分析非關系數(shù)據庫MongoDB的特點和優(yōu)勢,通過存儲和檢索算法設計和實際的海量日志數(shù)據查詢性能仿真,提出將MongoDB數(shù)據庫應用于輔助決策系統(tǒng)中,有效提高了大規(guī)模日志數(shù)據存儲和分析效率。
關鍵詞:MongoDB;輔助決策;日志
中圖分類號:TP311.13? ? ? 文獻標志碼:A? ? ? ?文章編號:2095-2945(2019)33-0005-04
Abstract: In the auxiliary decision-making system, the traditional relational database has been difficult to meet the management of massive log data, the emergence of non-relational database, which provides a fruitful solution for the problem of large-scale data storage mining. This paper focuses on the characteristics and advantages of non-relational database MongoDB. Through the design of storage and retrieval algorithm and the simulation of massive log data query performance, this paper proposes to apply MongoDB database to auxiliary decision-making system. It effectively improves the efficiency of large-scale log data storage and analysis.?Keywords: MongoDB; aided decision-making; log
引言
國家電網的經營輔助分析決策支持系統(tǒng)是展現(xiàn)財務管理信息,全面實施財務分析,科學支持財務相關決策,輔助生成管理報告的專業(yè)化、一體化、集成化管理平臺。隨著多年信息化建設和企業(yè)信息化的不斷發(fā)展,輔助決策系統(tǒng)中積累了大量的日志信息,包括系統(tǒng)的運行情況日志、業(yè)務訪問日志、賬戶管理日志、登錄認證日志等等。
這些日志信息真實的記錄了每個用戶的訪問行為,分析這些數(shù)據具有重要的意義:首先,通過收集和分析用戶行為數(shù)據,可以及時掌握用戶的需求變化,按照用戶需求來優(yōu)化和升級應用和服務,不斷提高服務質量和滿足用戶不斷變化需求的能力,持續(xù)改善用戶體驗,達到增加用戶粘性,減少用戶流失的目的。其次,通過對收集到的各種日志數(shù)據進行挖掘,能發(fā)現(xiàn)系統(tǒng)的潛在問題,通過日志分析,可以發(fā)現(xiàn)系統(tǒng)中軟件、硬件和系統(tǒng)的問題,監(jiān)控系統(tǒng)中發(fā)生的時間,檢查錯誤發(fā)生的原因,幫助追蹤軟件發(fā)生的問題;因此,這些日志數(shù)據的存儲和分析具有重要的意義。
傳統(tǒng)解決日志存儲和分析的方法主要是將日志數(shù)據存放到關系型數(shù)據庫中,如Oracle數(shù)據庫或MySQL數(shù)據庫,關系型數(shù)據庫對結構化數(shù)據的支持較好,能采用SQL標準語法進行數(shù)據的檢索查詢和分析;但是隨著企業(yè)信息化的發(fā)展和業(yè)務的廣泛應用,其產生的數(shù)據量呈指數(shù)增長,對于這些海量數(shù)據的存儲和檢索統(tǒng)計的任務也日益增多,如何快速存儲、檢索、統(tǒng)計這些海量日志數(shù)據,從中獲取知識并產生商業(yè)價值,成為企業(yè)急需解決的問題。傳統(tǒng)存儲到關系型數(shù)據庫的技術對于海量數(shù)據的處理已不能夠滿足要求,不但開發(fā)成本高、效率低、擴展性能差,最大的問題是難以滿足業(yè)務發(fā)展需求,數(shù)據量一旦增大,這部分問題將成為瓶頸。然而,隨著非關系型數(shù)據庫的出現(xiàn),基于分布式思想的MongoDB文檔數(shù)據庫能夠很好的解決這個難題,且其具有以下優(yōu)勢:成本低、擴展性能好、數(shù)據安全可靠、支持非結構化數(shù)據存儲和檢索等。
因此,本文提出一種基于MongoDB數(shù)據存儲和檢索海量日志數(shù)據的技術,通過存儲和檢索算法設計和實際的海量日志數(shù)據查詢性能仿真,展示了本文設計的海量日志數(shù)據庫查詢方法的高效性和準確性。
1 海量日志數(shù)據存儲需求分析
國家電網的經營輔助分析決策支持系統(tǒng)中的日志主要包括以下內容:用戶賬戶ID、事件類型、事件產生的時間、事件的內容、操作是否成功、請求的來源(如請求的IP地址),其他附屬的實踐屬性信息等;由于在實際生產中客戶的需求經常不同,因此不同類型日志常常要求增加一些額外的附屬信息以便于日后分析,因此不同類型日志格式并不完全相同;因此傳統(tǒng)的結構化日志存儲并不適用這種非結構化日志數(shù)據的存儲。
目前,經營輔助分析決策支持系統(tǒng)中的日志的主要需求如下:(1)不同類型的日志格式不完全相同;(2)能夠存儲海量上億級的日志數(shù)據;數(shù)據能保存1至3年;(3)存儲海量日志數(shù)據的寫入性能要求高效;(4)能夠通過多種條件組合檢索日志信息;(5)具有日志分類匯總統(tǒng)計功能;
(6)當主機資源達到瓶頸時,能通過動態(tài)擴展主機方式增加系統(tǒng)的性能。
2 設計與實現(xiàn)
經營輔助分析決策支持系統(tǒng)中海量日志數(shù)據的管理和應用方向集中在兩個領域。第一,在線處理數(shù)據操作,日志的并發(fā)寫入操作,海量數(shù)據檢索查詢操作。第二,海量數(shù)據分析相關,針對海量日志數(shù)據的挖掘、復雜的分析計算; 分布式數(shù)據庫則是針對海量大數(shù)據管理誕生的,強調滿足大數(shù)據在實時高并發(fā)請求壓力下的交互業(yè)務場景。由于分布式數(shù)據庫的落地更簡單,開發(fā)運維上更接近于傳統(tǒng)數(shù)據管理系統(tǒng)。
2.1 MongoDB介紹
MongoDB是一個基于分布式文件存儲的數(shù)據庫。由C++語言編寫。為應用提供可擴展的高性能數(shù)據存儲解決方案。MongoDB是非關系數(shù)據庫當中功能最豐富,最像關系數(shù)據庫的。它可以存儲比較復雜的數(shù)據類型。最大的特點是它支持的查詢語言非常強大,還支持對數(shù)據建立索引。
MongoDB集群包括以下幾個組件:
(1)分片節(jié)點:用來存儲數(shù)據,為了提供系統(tǒng)可用性和數(shù)據一致性,一個生產環(huán)境的分片集群,通常每個分片是一個副本集。
(2)查詢路由:指客戶端應用訪問每個分片的路徑。
(3)配置服務器:存儲集群的元數(shù)據,這些數(shù)據包含了集群數(shù)據集到各分片的映射關系。查詢路由就是通過這些元數(shù)據到特定的分片上執(zhí)行指定的數(shù)據操作。
MongoDB總體架構如圖1所示。
MongoDB功能如下:(1)面向集合的存儲:適合存儲對象及 JSON 形式的數(shù)據。(2)動態(tài)查詢:MongoDB 支持豐富的查詢表達式。查詢指令使用 JSON 形式的標記,可輕易查詢文檔中內嵌的對象及數(shù)組。(3)完整的索引支持:包括文檔內嵌對象及數(shù)組。MongoDB 的查詢優(yōu)化器會分析查詢表達式,并生成一個高效的查詢計劃。(4)查詢監(jiān)視:MongoDB 包含一系列監(jiān)視工具用于分析數(shù)據庫操作的性能。(5)復制及自動故障轉移:MongoDB 數(shù)據庫支持服務器之間的數(shù)據復制,支持主-從模式及服務器之間的相互復制。復制的主要目標是提供冗余及自動故障轉移。(6)高效的傳統(tǒng)存儲方式:支持二進制數(shù)據及大型對象(如照片或圖片)。(7)自動分片以支持云級別的伸縮性:自動分片功能支持水平的數(shù)據庫集群,可動態(tài)添加額外的機器。
MongoDB特點如下:(1)面向集合(Collenction-Orented)。(2)數(shù)據被分組存儲在數(shù)據集中,被稱為一個集合(Collenction)。每個集合在數(shù)據庫中都有一個唯一的標識名,并且可以包含無限數(shù)目的文檔。集合的概念類似關系型數(shù)據庫(RDBMS)里的表(table),不同的是它不需要定義任何模式(schema)。(3)模式自由(schema-free)。(4)意味著對于存儲在 MongoDB 數(shù)據庫中的文件,不需提前定義它的任何結構定義。(5)文檔型。(6)存儲的數(shù)據是鍵-值對的集合,鍵是字符串,值可以是數(shù)據類型集合里的任意類型,包括數(shù)組和文檔。這個數(shù)據格式稱作“BSON”即“Binary Serialized dOcument Notation.”
2.2 日志表設計
2.2.1 表模型設計
表名t_log,由于不同類型的日志格式不同,以下是公共部分的定義:
2.2.2 表分片設計
由于海量日志需要存儲較長時間,因此需要支持數(shù)據分片功能,未來當集群主機性能到達瓶頸時可以輕松的增加主機節(jié)點方式擴展,因此需要對日志表進行數(shù)據分片。
一般來說,完美的分片鍵將會有下列的特征:(1)所有的插入、更新以及刪除將會均勻分發(fā)到集群中的所有分片中。(2)所有的查詢將會在集群中的所有分片中平均地分發(fā)。(3)所有的操作將會只面向相關的分片:更新或者刪除操作將不會發(fā)送到一個沒有存儲被修改數(shù)據的分片上。(4)一個查詢將不會被送到沒有存儲被查詢數(shù)據的分片上。
好的分片鍵的五個準則如下:(1)分片鍵基數(shù)。(2)寫分布。(3)讀分布。(4)定向讀。(5)讀本地性。分片鍵的選擇原則如下:(1)不要選時間日期,選盡可能使數(shù)據分散的字段。(2)分析下最常見的查詢,防止使用單一自增的字段,避免新增數(shù)據始終路由到一個分片,造成寫熱點。(3)如果有范圍查詢的,最好包含一個對應的業(yè)務字段,避免查詢的時候數(shù)據太分散。
綜上所述,分片的語句定義如下:對數(shù)據庫啟用分片:sh.enableSharding(“fzjcdb”);日志表分片鍵建立主鍵:db.t_log.createIndex({workid: 1, _id:1})日志表建立分片sh.shardCollection(“fzjcdb.t_log”, {workid: 1, _id:1} )
2.3 日志表分析
由于業(yè)務要求對日志表有統(tǒng)計分析的需求,因此需要MongoDB中的日志表也能支持按小時,按天,按月的統(tǒng)計分析。
針對統(tǒng)計分析,MongoDB中聚合(aggregate)主要用于處理數(shù)據(諸如統(tǒng)計平均值,求和等),并返回計算后的數(shù)據結果。類似關系型數(shù)據庫中的分組求和函數(shù)。
常見的MongoDB的聚合操作和MySQL的查詢對比如表2。
3 系統(tǒng)測試結果分析
測試實驗分10線程,100線程,200線程并發(fā)測試,分別監(jiān)控各主機CPU,IO,網絡變化。
4 結束語
本文主要提出了一種基于MongoDB存儲和分析輔助決策系統(tǒng)中的海量日志的高效計算和分析方法。通過對海量日志數(shù)據進行數(shù)據分片設計,使得海量日志的存儲具有高擴展性,高性能等優(yōu)點的同時也具有一定的統(tǒng)計分析查詢支持的功能,通過壓力測試驗證,這種存儲海量日志的方式較好,滿足高性能寫入和查詢的需求。
參考文獻:
[1]李紀偉,段中帥,王順曄.非結構化數(shù)據庫MongoDB的數(shù)據存儲[J].電腦知識與技術,2018,14(27):7-9.
[2]張路路.基于MongoDB的大數(shù)據存儲方法研究與應用[D].成都理工大學,2015.
[3]馮國瑞,王亮.基于大數(shù)據和云計算的電網財務系統(tǒng)決策研究[J].通信電源技術,2017,34(01):113-115.
[4]王昌照.基于大數(shù)據的“三統(tǒng)一”配電網規(guī)劃輔助決策系統(tǒng)[J].供用電,2017,34(01):32-37+23.
[5]毋毅,趙康.基于大數(shù)據平臺的電網全業(yè)務數(shù)據分析域研究[J].電腦知識與技術,2016,12(34):15-17.