比 MySQL 快 800 多倍?

以下文章來源於JavaGuide ,作者Guide哥

大家好,今天給大家科普一個速度快到飛起的資料庫——ClickHouse。

你可能沒有用過 ClickHouse ,但是一定聽過它的名字。

比 MySQL 快 800 多倍?

為了拓展一下自己的知識面,前段時間,我找到了 《ClickHouse 原理解析和應用實踐》這本書來看。寫得真心不錯!

這篇文章我簡單從一個 ClickHouse 初學者的角度,給小夥伴們科普一下 OLAP、OLTP 以及 ClickHouse 的前世今生和應用場景。

個人能力有限。如果文章有任何需要補充/完善/修改的地方,歡迎在評論區指出,共同進步!

OLAP 介紹

為了將企業的資料有效整合,快速製作出報表以供資料分析/決策使用,誕生了一個叫做

OLAP

(Online Analytical Processing,聯機分析處理)系統的概念,也叫做現代 BI(Business Intelligence,商業智慧)系統。

比 MySQL 快 800 多倍?

與 OLAP 相對應的還有一個叫做

OLTP

(Online Transaction Processing ,聯機事務處理)的概念。這個我們平時日常接觸的就比較多了,像企業的 ERP,CRM,OA 等系統都屬於 OLTP 系統。

OLTP & OLAP

簡單總結一下:

OLTP

:可以保證操作的事務性,通常需要用到傳統的關係型資料庫比如 MySQL,主要操作是增刪改查(比如新增使用者、使用者之間轉賬)。OLTP 通常處理的資料量不會很大,因為資料量大了之後 OLTP 資料庫的響應一般會非常慢。

OLAP

:對資料做分析然後得出一些結果比如資料報表,主要操作是查詢(比如生成網站的流量分析報告)。OLAP 處理的資料量往往很大,並且 OLAP 處理的資料物件是資料倉庫(data warehouse)中的資料。

資料倉庫

OLAP 系統一般以資料倉庫作為基礎。資料倉庫是為了將分散的資料匯聚到一處,將它們統一儲存起來。

比 MySQL 快 800 多倍?

資料倉庫的構建通常還會涉及到 ETL 的過程。ETL 即資料抽取(Extract)、轉換(Transform)、裝載(Load)。

下面這張圖片來自:

What is a Data Warehouse? | IBM[1]

比 MySQL 快 800 多倍?

大部分用於 OLTP 的資料庫都可以執行 OLAP 相關的操作,只不過,效率通常都比較低,畢竟, 這不是它們所擅長的地方。

OLAP 分類

主流的 OLAP 可以分為 3 類 ROLAP、MOLAP、HOLAP。

ROLAP ( Relational OLAP,關係型 OLAP )

對資料不進行預處理,實時聚合計算,靈活性更好!適用於 對查詢模式不固定、查詢靈活性要求高的場景。常見的 ROLAP 有 Presto,Impala,Clickhouse 等等。

MOLAP ( Multi-dimensional OLAP ,多維 OLAP)

會對資料預處理,這提高了查詢效能,同時也降低了靈活性。適用於查詢場景相對固定並且對查詢效能要求非常高的場景。常見的 MOLAP 有 Druid,Kylin,Doris 等等。

HOLAP ( Hybrid OLAP ,混合型 OLAP)

混合型別 OLAP。通常情況下,查詢聚合性資料的時候,使用 MOLAP 技術;當查詢明細資料時,使用 ROLAP 技術。在給定使用場景的前提下,以達到查詢效能的最最佳化。

相關閱讀推薦:

《什麼是 OLAP?主流八大開源 OLAP 技術架構對比》[2]

ClickHouse

簡介

ClickHouse 是 Yandex(俄羅斯的一家做搜尋引擎的公司)公司的一個產品,誕生於自家的線上流量分析產品—Yandex。Metrica。

比 MySQL 快 800 多倍?

根據

ClickHouse 官方文件[3]

介紹:ClickHouse 是一個用於聯機分析(OLAP)的 MPP 架構的列式資料庫管理系統(DBMS)。

目前的話,國內有很多公司都在使用 ClickHouse ,比如騰訊、位元組、金資料、B 站。

下面是騰訊音樂對 ClickHouse 實踐:

比 MySQL 快 800 多倍?

Github 地址:https://github。com/ClickHouse/ClickHouse 。

比 MySQL 快 800 多倍?

騰訊云云資料庫倉庫ClickHouse

前世今生

其實,ClickHouse 的誕生也是一步一步改進現有系統之後得到的產物!

Yandex。Metrica 的第一版架構其實是基於 MySQL(ROLAP) 來做的。

後來,這一版架構出現了瓶頸,資料量過多(5800 億)導致分析報告的耗費時間過長。即使對這一版架構進行了大量最佳化之後,耗費時間也僅僅是提高到了 26 秒。

於是,Yandex。Metrica 的研發團隊開始另闢蹊徑了!

他們自研了一個叫做 Metrage(MOLAP) 的新系統。Metrage 的架構設計和 MySQl 差別很大,就比如它使用的是 LSM 樹作為索引結構而不是 B+ 樹。

Metrage 雖然解決了效能問題,但是,產品方面又有了新的需求。

Metrage 只支援聚合資料查詢,因此只有固定的報表分析功能,非常不靈活。我們希望可以有一個系統支援處理自定義報告這類。

於是,Yandex。Metrica 又自主研發出了 OLAPServer(HOLAP) 系統。並且,OLAPServer 使用 SQL 作為查詢語言。

OLAPServer 系統專為非聚合資料使用,實時聚合效能非常強!

不過,OLAPServer 也有缺陷比如缺少對資料型別的支援(只支援一種資料型別)。並且,功能也比較簡陋,僅僅支援一些簡單的功能,並沒有一個 DBMS 應該有的基本管理功能比如 DDL 查詢。

於是,Yandex。Metrica 繼續在 OLAPServer 的基礎上進一步完善,最終打造出了 ClickHouse(ROLAP)。

為什麼這麼快?

ClickHouse 官方給出了一份非常詳細的 ClickHouse 效能測試圖,並提供了和其他常見資料庫的對比。

效能報告地址:https://clickhouse。tech/benchmark/dbms/ 。

透過這份報告,可以非常直觀地感受到 ClickHouse 到底是有多快!

比 MySQL 快 800 多倍?

這麼說吧,ClickHouse 在相同的伺服器配置與資料量(1000 萬)下,平均響應速度是 MySQL 的 400 多倍,當資料量達到 1 億的話,平均響應速度是 MySQL 的 800 多倍。

不談具體的技術與架構,ClickHouse 之所以能夠這麼快主要得益於下面幾點(結合《ClickHouse 原理解析與應用實踐》所做的總結):

特殊場景特殊對待

:同一個場景的不同狀況,選擇使用不同的實現方式,儘可能將效能最大化。比如去重計數

uniqCombined()

函式,會根據資料量的不同選擇不同的演算法:當資料量較小的時候,會選擇

Array

儲存;當資料量中等的時候,會選擇

HashSet

;而當資料量很大的時候,則使用

HyperLogLog

演算法。

勇於嚐鮮,不行就換

: ClickHouse 會優先使用最合適、最快的演算法。如果市面上出現了可能會更好用的新演算法的話,ClickHouse 通常會立即將其納入並進行驗證。效果不錯的話,就繼續用著。效果不行的話,就直接踢掉。

持續測試,持續改進

:優秀的軟體不是一朝一夕形成的,需要不斷的測試改進。

適用場景

ClickHouse 雖然效能很強,查詢速度和 MySQL 這類關係型資料庫完全不是一個量級。

但是,ClickHouse 並不可以取代 MySQL 這類關係型資料庫,它們是互補的關係。

ClickHouse 作為一款 OLAP 資料庫,其應用場景主要就是資料分析比如廣告流量分析,不適用於 OLTP 事務性操作的場景,因為,它不支援事務並且對按行刪除資料不夠友好!

文章推薦

推薦一些不錯的好文和書籍,方便大家繼續深入學習。

中文

OLAP 數倉入門問答-基礎篇[4]

(寫得非常好 )

秒級去重:ClickHouse 在騰訊海量遊戲營銷活動分析中的應用[5]

資料分析引擎黑馬 ClickHouse 最新技術的實踐與應用[6]

ClickHouse 在有讚的實踐之路[7]

伴魚事件分析平臺:設計篇[8]

:伴魚的事件分析平臺用到了 ClickHouse 來儲存資料。

ClickHouse 官方文件(中文版)[9]

漫談 ClickHouse 在實時分析系統中的定位與作用[10]

:《 ClickHouse 原理解析與應用實踐》作者

朱凱[11]

大佬的一次影片分享。

英文

How ClickHouse saved our data[12]

Introducing ClickHouse -- The Fastest Data Warehouse You've Never Heard Of (Robert Hodges, Altinity)[13]

:油管上的一個影片。

參考資料

[1]

What is a Data Warehouse? | IBM:

https://www。ibm。com/cloud/learn/data-warehouse

[2]

《什麼是 OLAP?主流八大開源 OLAP 技術架構對比》:

https://segmentfault。com/a/1190000040428093

[3]

ClickHouse 官方文件:

https://clickhouse。tech/docs/zh/

[4]

OLAP 數倉入門問答-基礎篇:

https://zhuanlan。zhihu。com/p/144926830

[5]

秒級去重:ClickHouse 在騰訊海量遊戲營銷活動分析中的應用:

https://segmentfault。com/a/1190000037699772

[6]

資料分析引擎黑馬 ClickHouse 最新技術的實踐與應用:

https://segmentfault。com/a/1190000040054934

[7]

ClickHouse 在有讚的實踐之路:

https://tech。youzan。com/clickhouse-zai-you-zan-de-shi-jian-zhi-lu/

[8]

伴魚事件分析平臺:設計篇:

https://tech。ipalfish。com/blog/2021/06/21/event-analytics-design/

[9]

ClickHouse 官方文件(中文版):

https://clickhouse。tech/docs/zh/

[10]

漫談 ClickHouse 在實時分析系統中的定位與作用:

https://www。bilibili。com/video/BV11y4y1C7Us

[11]

朱凱:

https://github。com/nauu

[12]

How ClickHouse saved our data:

https://mux。com/blog/from-russia-with-love-how-clickhouse-saved-our-data/

[13]

Introducing ClickHouse —— The Fastest Data Warehouse You‘ve Never Heard Of (Robert Hodges, Altinity):

https://www。youtube。com/watch?v=fGG9dApIhDU