日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
OLAP和OLTP的本質區(qū)別,一篇文章講明白

現代工程界普遍認為,數據庫系統可以在廣義上分為聯機事務處理(Online Transaction Process,OLTP)和聯機分析處理(Online Analyze Process,OLAP)兩種面向不同領域的數據庫,OLAP數據庫也被稱為數據倉庫。從產品上看,有專門面向OLTP的數據庫,例如MySQL、PostgreSQL、Oracle等,也有專門面向OLAP的數據庫,例如Hive、Greenplum、HBase、ClickHouse等。還有一種嘗試統一兩大類型的HATP(Hybird Analyze Transaction Process)系統,例如TiDB、OceanBase等。

表1-1列出了OLAP和OLTP的一些對比。近年來,隨著技術的發(fā)展,OLAP和OLTP之間的界限也在不斷模糊,幾年前OLAP數據庫都不支持事務,近幾年已經出現了一些支持簡單事務的OLAP引擎,ClickHouse也將簡單的事務支持列入Roadmap。另外,隨著分布式技術的發(fā)展,部分OLTP數據庫也能處理更大的數據,甚至廠商推出的HATP數據庫,從而直接打破了兩者的界限。

▼表1-1 OLAP和OLTP的對比

OLAP

OLTP

用途

數據倉庫

事務數據庫

數據容量

大,PB級

小,GB級,部分能達到TB級

事務能力

弱(或無)

分析能力

弱,只能做簡單的分析

并發(fā)數

數據質量

相對低

數據來源

各業(yè)務數據庫

各業(yè)務系統

OLAP和OLTP在功能上越來越趨于一致,使得在有些場景下OLAP和OLTP可以相互取代,這是否意味著原有分類方法失效了呢?是否未來就不再需要數倉或者不再需要事務數據庫?ClickHouse的極致性能優(yōu)化能否推動OLAP和OLTP融合?回答這些問題需要理清OLAP和OLTP分類的本質。

OLTP數據庫在進行數據庫設計時使用實體-關系模型(Entity-Relationship Model,E-R Model,簡稱ER模型)。在ER模型的建模過程中有一個非常重要的規(guī)范化過程。規(guī)范化的目的在于通過一系列手段使得數據庫設計符合數據規(guī)范化(Normal Form,NF)的原則。簡單地說,規(guī)范化是將數據表從低范式變成高范式的過程。一般情況下,在OLTP中通常將數據規(guī)范化為第三范式(3NF)。

一、數據三范式

在規(guī)范化的過程中經常使用范式的概念,在數據庫理論中共有6種范式,下面挑選3種常用的范式做簡單介紹以方便讀者理解后續(xù)內容。

1、第一范式

第一范式指表中的每個屬性都不可分割,滿足上述條件即滿足第一范式。表1-2展示了一個不滿足第一范式的例子,由于本例中的標簽字還可以細分為性別、年齡、是否為VIP用戶等多個屬性,因此不滿足第一范式。

▼表1-2 不滿足第一范式的用戶標簽表

2、第二范式

第二范式是在第一范式的基礎上,當表中的所有屬性都被主鍵的所有部分唯一確定,即為滿足第二范式。表1-3展示了一個不滿足第二范式的例子,本例中用戶ID和標簽ID組成了主鍵,標簽名稱這兩個屬性只依賴于標簽ID,用戶所在地只依賴于用戶ID,這兩個屬性都不依賴由用戶ID和標簽ID組成的主鍵。從而不滿足第二范式。刪除標簽名稱和用戶所在地即可使得表格滿足第二范式。

▼表1-3 不滿足第二范式的用戶標簽表

3、第三范式

第三范式是在第二范式的基礎上,當表中的屬性不依賴除主鍵外的其他屬性,即為滿足第三范式。表1-3中,來源名稱是不滿足第三范式的,因為來源名稱依賴于來源ID,所以需要將來源ID刪除。表1-3經過規(guī)范化之后的合格數據表應該是如表1-4、表1-5所示。

▼表1-4 合格的用戶標簽表

▼表1-5 合格的用戶信息表

4、第零范式

不滿足第一范式的所有情況都被稱為第零范式。表1-2所示的是其中一種情況。數據庫理論中并沒有對第零范式的嚴格定義,由于作者在本書寫作過程中會經常使用第零范式的模型設計,因此在本書中,如果沒有特別說明,第零范式特指存在Map或數組結構的一類表。這類“第零范式”的表設計具備一定的實際意義,在作者的工作中,經常會用到這類設計。靈活應用這類第零范式,可能會收獲意想不到效果。

二、規(guī)范化的意義

一般要求在設計業(yè)務數據表時,需要至少設計到第三范式,避免出現數據冗余。從表1-3中不難發(fā)現出現了標簽名稱和來源名稱的冗余。冗余不僅增加了數據大小,更重要的是,冗余的存在會影響數據庫事務,降低數據庫事務性能。

表1-6展示了一個不合格的表設計,請讀者關注最后兩列,很明顯這是不滿足第三范式的一種設計。表中的最后一列“需要權限”用于設置數據權限,表格中的數據意味著第一行和第三行需要admin權限才能查看。正常情況下沒有問題,如果隨著業(yè)務的變化,需要將授權級別為“2 – 非公開”的權限改為admin和manager都有權限查看。對于這種需求,如果使用表1-5的設計,就需要進行全表掃描,將數據表中所有的授權級別為2的數據全部進行修改,這會嚴重降低數據庫性能。

▼表1-6 影響事務性能的表結構

數據庫規(guī)范化的意義在于通過規(guī)范化降低冗余,提高數據庫事務性能。正是基于這個考慮,在數據庫表設計中,會要求將對數據表進行規(guī)范化。

三、規(guī)范化的局限

任何架構在有優(yōu)勢的情況下,一定也會有其局限。對于規(guī)范化的數據表,這句話也同樣適用。規(guī)范化的數據表能夠降低冗余,進而提高事務性能。同時,規(guī)范化的數據表無法支撐分析。

以表1-3~表1-5為例,表1-4和表1-5為表1-3進行規(guī)范化后的合格用戶標簽表。如果需要按照用戶所在城市來統計年齡分布,是無法單獨使用表1-4完成的。必須對表1-4和表1-5進行連接(join)操作,得到的新表才能用于分析。而在絕大多數數據庫系統中,join操作的過程相對于查詢來說比較慢。

四、數倉建模的本質

通過前文的分析,我們可以得出一個推論:高范式的表適合事務處理,而低范式的表適合分析處理。從中我們可以得出數倉建模的本質:逆規(guī)范化。數倉建模本質上就是一個逆規(guī)范化的過程,將來自原始業(yè)務數據庫的規(guī)范化數據還原為低范式的過程,從而用于快速分析。

在實際建模過程中,數倉經常提到的寬表本質上就是一個低范式的表。寬表將所有相關聯的列全部都整合到一張表中,用于未來的分析,這樣做的好處就是所有相關信息都在這張寬表中,理論上在進行分析時就不需要進行任何join操作了,因為可以直接進行相關的分析,所以提高了分析速度。這樣做的缺點就是數據冗余,從而難以支持事務能力。

大部分數據倉庫都是基于低范式數據集進行優(yōu)化的,讀者在使用OLAP引擎時一定要時刻記住這一點,避免將OLTP數據庫中的原始高范式數據直接用于OLAP分析,否則分析效果可能會差強人意。而應該通過逆規(guī)范化的過程將高范式數據集還原為低范式數據集,再由OLAP進行分析。

五、OLTP和OLAP的底層數據模型

OLAP和OLTP的本質區(qū)別在于底層數據模型的不同。OLAP更適合使用低范式的數據表,而OLTP則更適合使用高范式的數據表。無論它們之間的功能是否越來越相似,只要其底層數據模型不同,那么它們之間的區(qū)別就永遠存在,結構決定功能。

ClickHouse是一個面向OLAP的數倉,很多的優(yōu)化都是面向低范式數據模型的,并沒有對高范式數據模型進行很好的優(yōu)化。甚至在有些場景下,ClickHouse的join能力會成為整個系統的瓶頸。

ClickHouse更適合處理低范式數據集,特別是第零范式的數據集。ClickHouse對第零范式的數據集進行了比較多的優(yōu)化。

六、維度建模

在使用OLAP進行數據分析時,需要對原始數據進行維度建模,之后再進行分析。維度建模理論中,基于事實表和維度表構建數據倉庫。在實際操作中,一般會使用ODS(Operational Data Store,運營數據存儲)層、DW(Data Warehouse,數據倉庫)層、ADS(Application Data Service,應用數據服務)層三級結構。

1、ODS層

ODS層一般作為業(yè)務數據庫的鏡像。在項目中,數倉工程師通常通過數據抽取工具(例如Sqoop、DataX等)將業(yè)務庫的數據復制到數倉的ODS層,供后續(xù)建模使用。ODS層的數據結構和業(yè)務數據庫保持一致,建立ODS的原因在于,通過復制一份數據到ODS層,可以避免建模過程直接訪問業(yè)務數據庫,從而對業(yè)務數據庫帶來影響,避免影響線上業(yè)務。

2、 DW層

將數據導入ODS層后,即可對ODS層的數據進行清洗、建模,最終生成DW層的數據。其中生成DW層的本質即為本章提到的逆規(guī)范化的過程。由于ODS中的數據本質上是業(yè)務數據庫的副本,因此ODS中的數據是高范式的數據,不適合進行OLAP分析。這也導致了在進行OLAP分析前需要將高范式的ODS數據通過一些手段逆規(guī)范化到低范式的數據。低范式的數據作為DW層的數據,對外提供分析服務。

在逆規(guī)范化時,可能會產生一些中間結果,這些中間結果也可以存儲于DW層中,因此在DW中有時會再次進行細分,劃分成DWD(Data Warehouse Details,數據倉庫明細)層、DWM(Data Warehouse Middle,數據倉庫中間)層、DWS(Data Warehouse Service,數據倉庫服務)層三個更細分的層次。

ODS層的數據通過清洗后存儲到DWD層,DWD層本質上是一個去除了臟數據的高質量的低范式的數據層。DWD層的數據通過聚合,形成寬表并保存到DWM層中。DWM層已經是低范式的數據層了,可以用于OLAP分析。在某些場景中,可以對DWM層的數據進行業(yè)務重新聚合,以支持更復雜的業(yè)務,此時需要生成的數據保存到DWS層中。

在這3個細分的DW層中,并不是所有場景下都需要齊備的。DW層的本質就是對高范式的數據進行逆規(guī)范化,生成低范式數據的過程。讀者只需要把握住這個核心即可,在實際的維度建模過程中,根據業(yè)務的實際需求進行建模,不需要在所有的場景下都機械地遵循DWD層、DWM層、DWS層的三層架構。

3、ADS層

ADS層保存供業(yè)務使用的數據的結果,DW層的數據可以用于OLAP分析,但分析過程通常比較慢,無法支撐實時的業(yè)務需求,因此需要引入ADS層作為緩存,向上支撐業(yè)務。同樣的,ADS層也不是必須的,需要根據業(yè)務實際來選擇,ClickHouse的高性能計算引擎可以在一定程度上取代ADS層。

ADS層數據本質上面向業(yè)務的,高度業(yè)務化的數據??梢哉J為是基于DW層分析的結果,很多情況下是指標、標簽等計算結果。本書在后續(xù)內容中使用ADS名詞時,如無特殊說明,均指基于DW層分析后的業(yè)務化的結果。

本文摘編自《ClickHouse性能之巔:從架構設計解讀性能之謎》,經出版方授權發(fā)布。

關于作者:陳峰,資深大數據專家和架構師,ClickHouse技術專家,滴普科技(2B領域獨角獸)合伙人兼首席架構師。


文章標題:OLAP和OLTP的本質區(qū)別,一篇文章講明白
標題鏈接:http://www.5511xx.com/article/cceshcg.html