吳 飛
(中國直升機設計研究所,江西 景德鎮333001)
隨著企業的業務成熟和數字化轉型的不斷推進,業務系統的數量和存儲的數據量均呈現爆發性增長,結合日益發展成熟的大數據技術和數據中臺概念的落地,企業內部也在構建存儲、管理和利用海量數據的大數據平臺。數據倉庫在大數據環境中承擔著數據存儲的職責,能夠很好地滿足海量數據存儲及分析利用的要求,但是其本身在應用上也存在一定的局限性,主要表現為在海量數據的查詢、狀態管控和展現上存在著效率低下的問題。為了更好地利用大數據的優勢,可以采用多層數據存儲的方式使數據既能完整統一,也能滿足數據快速查詢和分析利用的要求。
大數據作為互聯網發展中的一次技術創新對全社會產生了巨大的沖擊,數據量成倍增長后從量變引起了質變,深刻影響著企業的經營決策活動。“大數據”本身是一個很多技術概念的集合,即不能在有限時間內使用常用工具軟件對數據進行采集、存儲和處理的數據綜合體。大數據一般存在以下4個特點:數據規模大、數據格式多、數據處理快和數據價值低[1]。
(1)數據量大,指涉及的數據體量巨大[2]。企業中的應用系統經過長年累月的使用,積累了越來越多的數據,且隨著日常管理工作的日趨完善,信息系統仍在不斷構建,數據量很容易就達到了PB級,這大大地超過了傳統數據庫所能存儲和分析的量級。
(2)數據類型多,指數據源廣泛且類別各異。企業中的數據已不再僅僅包含數據庫中所存儲的結構化數據,還包括文本等半結構化和音視頻等非結構化數據,同時文本、圖片、音視頻等類型數據的占比日益增加。
(3)數據處理快,指數據分析加工快。企業中每秒都在產生數據,對數據處理的及時性也隨之提出更高的要求,數據處理過慢則影響數據的使用??紤]數據價值的有效性,數據處理遵循1秒定律。
(4)數據價值低,不是指大數據本身沒有價值,而是指有價值的數據在數據量中的占比低。企業中隨著整體數據量的增大,無效的數據也隨之變多,數據的價值需要不斷的整理、挖掘和分析才能得到很好的體現,數據可用性程度較低。
在設計大數據環境下數據的存儲時,將采用的數據存儲分為了三層:操作數據存儲層、數據倉庫層、分析結果存儲層。其中,操作數據存儲層主要使用關系型數據庫,目的是在直接將數據抽取到數據倉庫的過程中增加緩沖,確保數據倉庫的穩定,同時將一些不符合規則的數據篩選出來;大數據倉庫層則是使用Hive(數據倉庫工具)進行數據的存儲,將各類數據匯總后按數據主題分別存儲;分析結果數據存儲層使用的是關系型數據庫和非關系型數據庫組合的方式存儲數據,提供數據給上層應用訪問,詳細的總體設計情況如圖1所示。

圖1 數據存儲設計
操作數據存儲層是大數據存儲應用中的一個重要組成部分,也被稱為貼源層。在操作數據存儲層的設計上主要參考了數據倉庫的設計和數據建模方法,方法的比較主要體現在ER模型(實體聯系模型)和維模型上,但是ER模型和維模型在大數據存儲的設計中不是互斥的,ER模型可以完整地展示數據之間的聯系,而維模型可以保留實際的數據結構。因此不能簡單地區分哪種模型更優,需要根據實際應用場景決定使用哪種數據存儲設計,從而使數據更好地反映企業的業務情況。操作數據存儲層具備了數據倉庫和聯機事務處理過程的一些特點,它也是通過集成各業務數據,按主題存儲業務最新和詳細數據的集合,能夠實現全數據臨時存儲以及處理的要求。結合單位內部實際需求,操作數據存儲主要完成了數據緩沖、轉移查詢和數據狀態控制功能。
2.1.1 數據緩沖
大數據環境集成的數據來源十分復雜,一般表現為來源于多個應用系統,且數據的存儲方式、業務模型等都各不相同,從而大大提高了數據抽取的難度。因此,操作數據存儲層用于臨時存儲從業務系統中集成的數據,存儲的數據與源數據的結構一致并且數據的關聯關系也一致,僅對部分字段進行轉換。因此在數據集成時基本不用考慮抽取轉換的過程,更多的關注點在數據集成的方式和頻率、數據量以及源數據的結構。
當源數據應用系統出現問題時,數據緩沖可以確保數據倉庫完全不受影響,而數據倉庫中存放的是完整的、所有的數據,其安全性和穩定性可以得到最好的保證。
2.1.2 轉移查詢
在大數據環境應用之前,各業務系統自身根據業務需要生成大量的分析報表,但是往往有些分析報表非常復雜,業務系統在實現大量復雜sql語句(結構化查詢語言)時對業務系統的運行造成了巨大的壓力。分析查詢操作也可以直接在數據倉庫中進行,然而數據倉庫中數據存儲量大,數據存儲模式不再是關系型而轉變為面向主題的方式,在應對簡單報表生成和查詢時反而顯得效率低下,難以滿足用戶查詢要求。操作數據存儲層的數據從數據結構、數據關聯關系和數據的完整性等方面都和源系統一致,因此可以在操作數據存儲層實現業務系統的報表生成和數據檢索功能,從而減輕業務系統的檢索量。
2.1.3 數據狀態控制
在應用系統眾多的今天,企業內部仍然沒有實現所有業務工作都能使用系統管理,而是通過郵件將Excel表分發到各部門再匯總統計,這部分工作往往由專人負責但是缺乏對數據的管控,數據無法有效地留存和再利用。此類規范性的數據在大數據環境中很受歡迎,數據的質量有保障,也可以很容易地對其進行分析,因此數據錄入必不可少。
數據倉庫中的數據是經過清洗和轉換的,數據錄入的數據不能直接存進數據倉庫,需要經過審批后才能確定為有效數據,這種簡單的審批操作無法直接在數據倉庫中進行。操作數據存儲層可以作為源數據庫存儲錄入的數據,同時使用字段控制數據的狀態滿足數據審批和數據抽取的要求,僅當數據狀態位為“1”時,數據才會從操作數據存儲層中抽取到數據倉庫中。
數據倉庫是一個基于主題存儲的、數據高度集中的、分布式的、全生命周期的存放海量數據的集合,數據倉庫中存放了完整可用的企業數據[3]。數據倉庫和傳統的關系型、非關系型數據庫不同,傳統的數據庫在設計時更多考慮的是系統功能,而數據倉庫存儲數據是按照主題劃分的。業務系統中存儲的數據歸屬于各業務本身,對相同物品的描述、計量方式、存儲類型等方面都存在差異。將存儲在各應用系統中的數據經過數據抽取和轉換后形成一致性的表達,再將數據存儲至數據倉庫進行管理。數據倉庫的數據是全生命周期的,其可以對最新數據進行檢索,也可以對歷史數據進行追溯。數據倉庫存儲的數據理論上不應該再進行修改,當集成的數據源中的數據發生變化后,再加載到數據倉庫時會形成新的數據條目,以此可以追溯數據的變化。但是考慮到數據本身的重要程度遠遠大于數據修改的代價,因此在本單位的數據倉庫設計中主要考慮了數據存儲和少量的數據更改。
2.2.1 數據存儲
數據存儲主要考慮業務的數據模式,根據業務的數據要求確定數據模型,一般建議使用星型模型,即將采集的數據經過預處理存入事實表,少量關鍵信息處理為維表[4]。在信息檢索時可以很方便地對事實表進行操作,不必進行大量的join操作,能夠明顯地提升檢索效率。同時星型模型的事實表可讀性比較好,不用關聯多個表就能獲取大部分核心信息,設計維護都相對簡單。如數據是基于時間維度產生的,就可以將時間信息從數據表中剝離,并以時間信息為維表構建數據存儲模型,將其余信息存入事實表,通過這種存儲方式可以很清晰地對各個歷史時間段內某個主題的數據進行獲取利用。
2.2.2 數據更改
數據倉庫中的數據是從各系統抽取而來的,原則上并不能修改,而且數據倉庫的技術本身也未提供修改的方法,但是考慮到有些集成的數據是通過人工錄入得到的,雖然考慮了數據需要經過審批才能被生效,但是并不能確保數據100%準確無誤。而錯誤的數據存儲進數據倉庫后很可能會對分析計算產生不良的影響,降低分析結果的準確率,因此需要確保數據可以被更改,可以通過維表將需要修改的數據分區進行刪除并重新創建達到數據更改的目的。
分析結果數據存儲層主要是將經過各種算法加工的數據與視覺編碼進行映射后進行存儲,這類結果數據一般有訪問頻率高和獲取速度快兩大使用特點,因此分析結果數據一般存入聯機事務處理數據庫中,以提高需要經常訪問的數據的效率。數據庫的選用和設計完全根據業務需求而定,如經過聯機分析計算后的數據主要被拿來作圖表的呈現和報表的生成,則可以選用關系型數據庫存儲結果數據;若分析后的數據仍然是比較離散的,引用數據者對離散數據還需要進行二次加工和分析,則可以選用非關系型數據庫存儲結果數據。為了滿足數據對應用訪問的要求,分析結果數據存儲層一般采用關系型和非關系型數據庫聯合構建的方式,可以滿足企業內部數據安全、高效使用的要求。
2.3.1 數據安全
數據經過分析處理后存儲到分析結果數據庫中,將數據倉庫和用戶隔離開。用戶訪問需要的數據時只能訪問分析結果,不能直接去訪問數據倉庫,避免了用戶直接連接數據倉庫,保證數據倉庫中的數據無法直接訪問,減少人為修改的可能。同時也可以降低用戶對數據的訪問范圍,對數據的使用無須訪問多個主題中的數據,僅得到結果即可。
2.3.2 高效查詢
數據倉庫本身數據量大,且被設計為給聯機分析處理提供數據支撐,不適合直接作為查詢的源端使用,在獲取數據的基礎上還要再進一步分析計算,最短的時間也在5s以上,這對于使用頁面訪問數據來說是無法接受的,因此需要將計算后的數據存儲在可以高效查詢的數據庫中,以提高數據的訪問和使用效率。
2.3.3 應用解耦
數據經過分析計算后將結果數據存入分析結果數據庫中,再將分析結果取出提供給其他應用使用。通過將各應用與數據倉庫解耦的方式,一方面減少了應用高頻率且重復性強的訪問數據倉庫,減輕數據倉庫的壓力,另一方面當數據倉庫設計發生改變時,應用層仍然可以使用原方式使用數據。
目前,大數據思想已經深入企業中,企業在管理和研發過程中均在探索大數據與實際業務的結合,通過數據存儲的三層設計有效地解決了企業內部對于大數據的存儲和利用問題,為企業更好地利用大數據技術提供了新的思路和解決方法。