一篇帶你了解OLTP vs. OLAP
背景
隨著大數(shù)據(jù)技術在各行各業(yè)的深入應用,對于海量數(shù)據(jù)的分析需求也愈加凸顯,OLAP技術也逐漸走入人們的視野,OLTP和OLAP看起來相似,但指的是不同類型的數(shù)據(jù)庫系統(tǒng)。它們都是在線處理系統(tǒng)。本文將介紹一下二者的區(qū)別
OLTP
介紹
OLTP,也叫聯(lián)機事務處理(Online Transaction Processing),表示事務性非常高的系統(tǒng),一般都是高可用的在線系統(tǒng),以小的事務以及小的查詢?yōu)橹鳎u估其系統(tǒng)的時候,一般看其每秒執(zhí)行的Transaction以及Execute SQL的數(shù)量。在這樣的系統(tǒng)中,單個數(shù)據(jù)庫每秒處理的Transaction往往超過幾百個,或者是幾千個,Select 語句的執(zhí)行量每秒幾千甚至幾萬個。典型的OLTP系統(tǒng)有電子商務系統(tǒng)、銀行、證券等,如美國eBay的業(yè)務數(shù)據(jù)庫,關系型數(shù)據(jù)庫(mysql、PostgreSQL、DB2、Oracle...)就是很典型的OLTP數(shù)據(jù)庫。
特點
- 支持大量并發(fā)用戶定期添加和修改數(shù)據(jù)。
- 反映隨時變化的單位狀態(tài),但不保存其歷史記錄。
- 包含大量數(shù)據(jù),其中包括用于驗證事務的大量數(shù)據(jù)。
- 可以進行優(yōu)化以對事務活動做出響應。
- 提供用于支持單位日常運營的技術基礎結構。
- 個別事務能夠很快地完成,并且只需訪問相對較少的數(shù)據(jù)。
- 實時性要求高。
- 交易一般是確定的,所以OLTP是對確定性的數(shù)據(jù)進行存取。
- 并發(fā)性要求高并且嚴格的要求事務的完整、安全性。
OLTP系統(tǒng)
數(shù)據(jù)庫設計要求
- 良好的數(shù)據(jù)存儲:對于 OLTP 系統(tǒng),輸入/輸出瓶頸是一個尤為關心的問題,原因在于修改整個數(shù)據(jù)庫中數(shù)據(jù)的用戶很多。確定數(shù)據(jù)的可能訪問模式,并將經常訪問的數(shù)據(jù)放在一起。在此過程中,可輔以文件組和 RAID系統(tǒng)
- 支持高并發(fā):在事務期間,避免用戶交互。無論何時,只要有可能,就通過執(zhí)行單個存儲過程來處理整個事務。在事務內對表的引用順序可能會影響并發(fā)性。將對經常訪問的表的引用置于事務的末尾,以便將控制鎖的持續(xù)時間減至最短。
- 數(shù)據(jù)備份:OLTP 系統(tǒng)一般要求故障率要極地,為達到此目的,停機時間要保持最小。盡管 Microsoft SQL Server 2000 可以在數(shù)據(jù)庫正在使用時對其進行備份,但是應將備份過程安排在活動不頻繁時進行,以使對用戶的影響減至最小。
- 數(shù)據(jù)庫高度規(guī)范化:盡可能減少冗余信息以提高更新的速度,從而提高并發(fā)性。減少數(shù)據(jù)還可以提高備份的速度,因為只需要備份更少的數(shù)據(jù)。
- 減少歷史或聚合數(shù)據(jù):可以將很少引用的數(shù)據(jù)歸檔到單獨的數(shù)據(jù)庫中,或者從經常更新的表中移出,這將保持表盡可能地小,從而縮短備份時間,改善查詢性能。
- 合理利用索引:避免對經常更新的表進行過多的索引,應該保持索引范圍應較窄。
OLAP
介紹
OLAP(On-line Analytical Processing,聯(lián)機分析處理)是在基于數(shù)據(jù)倉庫多維模型的基礎上實現(xiàn)的面向分析的各類操作的集合,60年代,關系數(shù)據(jù)庫之父E.F.Codd提出了關系模型,促進了聯(lián)機事務處理(OLTP)的發(fā)展(數(shù)據(jù)以表格的形式而非文件方式存儲)。1993年,E.F.Codd提出了OLAP概念,認為OLTP已不能滿足終端用戶對數(shù)據(jù)庫查詢分析的需要,OLAP的優(yōu)勢是基于數(shù)據(jù)倉庫面向主題、集成的、保留歷史及不可變更的數(shù)據(jù)存儲,以及多維模型多視角多層次的數(shù)據(jù)組織形式,如果脫離了這兩點,OLAP將不復存在,也就沒有優(yōu)勢可言。在實際的商業(yè)分析中,OLAP聯(lián)機分析更多的是指對數(shù)據(jù)分析的一種解決方案。目前大數(shù)據(jù)業(yè)內非常流行的開源OLAP引擎Hive、SparkSQL、FlinkSQL、Clickhouse、Elasticsearch、Druid、Kylin、Presto、Impala分等,但是可以說目前沒有一個引擎能在數(shù)據(jù)量,靈活程度和性能上做到完美,用戶需要根據(jù)自己的需求進行選型。
特點
- 快速性:用戶對OLAP的快速反應能力有很高的要求。系統(tǒng)應能在5秒內對用戶的大部分分析要求做出反應。
- 可分析性:OLAP系統(tǒng)應能處理與應用有關的任何邏輯分析和統(tǒng)計分析。
- 多維性:多維性是OLAP的關鍵屬性。系統(tǒng)必須提供對數(shù)據(jù)的多維視圖和分析,包括對層次維和多重層次維的完全支持。
- 信息性:不論數(shù)據(jù)量有多大,也不管數(shù)據(jù)存儲在何處,OLAP系統(tǒng)應能及時獲得信息,并且管理大容量信息。
分類
OLAP 是一種讓用戶可以從不同視角方便快捷地分析數(shù)據(jù)的計算方法。主流的 OLAP 可以分為3類:多維OLAP ( Multi-dimensional OLAP )、關系型OLAP ( Relational OLAP ) 和混合OLAP ( Hybrid OLAP ) 三大類。
- 多維OLAP ( MOLAP,Multi-dimensional OLAP ):MOLAP基于直接支持多維數(shù)據(jù)和操作的本機邏輯模型。數(shù)據(jù)物理上存儲在多維數(shù)組中, 并且使用定位技術來訪問它們。MOLAP的典型代表是:Druid 和 Kylin。MOLAP一般會根據(jù)用戶定義的數(shù)據(jù)維度、度量(也可以叫指標)在數(shù)據(jù)寫入時生成預聚合數(shù)據(jù);Query查詢到來時,實際上查詢的是預聚合的數(shù)據(jù)而不是原始明細數(shù)據(jù),在查詢模式相對固定的場景中,這種優(yōu)化提速很明顯。優(yōu)點性能高,支持復雜的跨維計算與多用戶讀寫,缺點:難以達到TB 級,缺乏數(shù)據(jù)模型和數(shù)據(jù)訪問的標準
- 關系型OLAP ( ROLAP,Relational OLAP ):關系OLAP(ROLAP)是中間服務器, 它們位于關系后端服務器和用戶前端工具之間,其使用關系或擴展關系DBMS來保存和處理倉庫數(shù)據(jù), 并使用OLAP中間件來提供丟失的數(shù)據(jù)。ROLAP的典型代表是:Presto,Impala,GreenPlum,Clickhouse,Elasticsearch,Hive,Spark SQL,F(xiàn)link SQL。優(yōu)點:沒有大小限制,可以通過SQL實現(xiàn)詳細數(shù)據(jù)與概要數(shù)據(jù)的存儲,缺點:不支持有關預計算的讀寫操作,無法完成維之間的計算。
- 混合OLAP ( HOLAP,Hybrid OLAP ):混合 OLAP,是 MOLAP 和 ROLAP 的一種融合。當查詢聚合性數(shù)據(jù)的時候,使用MOLAP 技術;當查詢明細數(shù)據(jù)時,使用 ROLAP 技術。在給定使用場景的前提下,以達到查詢性能的最優(yōu)化,混合 OLAP的優(yōu)勢在于其很好的結合了MOLAP和ROLAP的優(yōu)勢之處,劣勢恰恰在于其由于集成了MOLAP和ROLAP,本身的體系結構會非常復雜
OLAP系統(tǒng)
OLAP數(shù)據(jù)層次劃分
- 維度(Dimension):是用戶觀察數(shù)據(jù)的特定角度,是問題的一類屬性,屬性集合構成一個維度(時間維、地理維等)
- 維度的層次(Level):用戶觀察數(shù)據(jù)的某個特定角度(即某個維度)還可能存在細節(jié)程度不同的各個描述方面(時間維包括日期、月份、季度、年)
- 維度的成員(Member):即維度的一個取值,是數(shù)據(jù)項在某個維度中位置的描述,如“某年某月某日”是在時間維度上的位置描述
- 度量(Measure):多維數(shù)組的取值。
OLAP多維數(shù)據(jù)結構
- 超立方結構(Hypercube):超立方結構指用三維或更多的維數(shù)來描述一個對象,每個維彼此垂直。數(shù)據(jù)的測量值發(fā)生在維的交叉點上,數(shù)據(jù)空間的各個部分都有相同的維屬性。(收縮超立方結構。這種結構的數(shù)據(jù)密度更大,數(shù)據(jù)的維數(shù)更少,并可加入額外的分析維)。
- 多立方結構(Multicube):即將超立方結構變?yōu)樽恿⒎浇Y構。面向某一特定應用對維進行分割, 它具有很強的靈活性,提高了數(shù)據(jù)(特別是稀疏數(shù)據(jù))的分析效率。
OLAP多維數(shù)據(jù)分析
- 切片和切塊(Slice and Dice):在多維數(shù)據(jù)結構中,按二維進行切片,按三維進行切塊,可得到所需要的數(shù)據(jù)。如在“城市、產品、時間”三維立方體中進行切塊和切片,可得到各城市、各產品的銷售情況。
- 鉆取(Drill):鉆取包含向下鉆取(Drill-down)和向上鉆取(Drill-up)/上卷(Roll-up)操作, 鉆取的深度與維所劃分的層次相對應。
- 旋轉(Rotate)/轉軸(Pivot):通過旋轉可以得到不同視角的數(shù)據(jù)。
總結
OLTP是傳統(tǒng)的關系型數(shù)據(jù)庫的主要應用,主要是基本的、日常的事務處理,例如銀行交易。OLAP是數(shù)據(jù)倉庫系統(tǒng)的主要應用,支持復雜的分析操作,側重決策支持,并且提供直觀易懂的查詢結果。 OLTP 系統(tǒng)強調數(shù)據(jù)庫內存效率,強調內存各種指標的命令率,強調綁定變量,強調并發(fā)操作;OLAP 系統(tǒng)則強調數(shù)據(jù)分析,強調SQL執(zhí)行市場,強調磁盤I/O,強調分區(qū)等。 OLTP系統(tǒng)最容易出現(xiàn)瓶頸的地方就是CPU與磁盤。 OLTP適用于數(shù)據(jù)量少,DML頻繁,并行事務處理多的場景。OLAP適用數(shù)據(jù)量大,DML少。