一個(gè)比 MySQL 快 800 多倍的數(shù)據(jù)庫(kù)...
點(diǎn)擊藍(lán)色“黃小斜學(xué)Java”關(guān)注我喲
加個(gè)“星標(biāo)”,每天和你一起多進(jìn)步一點(diǎn)點(diǎn)!
大家好呀!今天給大家科普一個(gè)速度快到飛起的數(shù)據(jù)庫(kù)——ClickHouse。
你可能沒有用過 ClickHouse ,但是一定聽過它的名字。

為了拓展一下自己的知識(shí)面,前段時(shí)間,我找到了 《ClickHouse 原理解析和應(yīng)用實(shí)踐》這本書來看。寫的真心不錯(cuò)!
這篇文章我簡(jiǎn)單從一個(gè) ClickHouse 初學(xué)者的角度,給小伙伴們科普一下 OLAP、OLTP 以及 ClickHouse 的前世今生和應(yīng)用場(chǎng)景。
個(gè)人能力有限。如果文章有任何需要補(bǔ)充/完善/修改的地方,歡迎在評(píng)論區(qū)指出,共同進(jìn)步!
OLAP 介紹
為了將企業(yè)的數(shù)據(jù)有效整合,快速制作出報(bào)表以供數(shù)據(jù)分析/決策使用,誕生了一個(gè)叫做 OLAP(Online Analytical Processing,聯(lián)機(jī)分析處理)系統(tǒng)的概念,也叫做現(xiàn)代 BI(Business Intelligence,商業(yè)智能)系統(tǒng)。

與 OLAP 相對(duì)應(yīng)的還有一個(gè)叫做 OLTP(Online Transaction Processing ,聯(lián)機(jī)事務(wù)處理)的概念。這個(gè)我們平時(shí)日常接觸的就比較多了,像企業(yè)的 ERP,CRM,OA 等系統(tǒng)都屬于 OLTP 系統(tǒng)。
OLTP & OLAP
簡(jiǎn)單總結(jié)一下:
OLTP :可以保證操作的事務(wù)性,通常需要用到傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)比如 MySQL,主要操作是增刪改查(比如添加用戶、用戶之間轉(zhuǎn)賬)。OLTP 通常處理的數(shù)據(jù)量不會(huì)很大,因?yàn)閿?shù)據(jù)量大了之后 OLTP 數(shù)據(jù)庫(kù)的響應(yīng)一般會(huì)非常慢。 OLAP :對(duì)數(shù)據(jù)做分析然后得出一些結(jié)果比如數(shù)據(jù)報(bào)表,主要操作是查詢(比如生成網(wǎng)站的流量分析報(bào)告)。OLAP 處理的數(shù)據(jù)量往往很大,并且 OLAP 處理的數(shù)據(jù)對(duì)象是數(shù)據(jù)倉(cāng)庫(kù)(data warehouse)中的數(shù)據(jù)。
數(shù)據(jù)倉(cāng)庫(kù)
OLAP 系統(tǒng)一般以數(shù)據(jù)倉(cāng)庫(kù)作為基礎(chǔ)。數(shù)據(jù)倉(cāng)庫(kù)是為了將分散的數(shù)據(jù)匯聚到一處,將它們統(tǒng)一存儲(chǔ)起來。

數(shù)據(jù)倉(cāng)庫(kù)的構(gòu)建通常還會(huì)涉及到 ETL 的過程。ETL 即數(shù)據(jù)抽?。‥xtract)、轉(zhuǎn)換(Transform)、裝載(Load)。
下面這張圖片來自:What is a Data Warehouse? | IBM[1]

大部分用于 OLTP 的數(shù)據(jù)庫(kù)都可以執(zhí)行 OLAP 相關(guān)的操作,只不過,效率通常都比較低,畢竟, 這不是它們所擅長(zhǎng)的地方。
OLAP 分類
主流的 OLAP 可以分為 3 類 ROLAP、MOLAP、HOLAP。
ROLAP ( Relational OLAP,關(guān)系型 OLAP )
對(duì)數(shù)據(jù)不進(jìn)行預(yù)處理,實(shí)時(shí)聚合計(jì)算,靈活性更好!適用于 對(duì)查詢模式不固定、查詢靈活性要求高的場(chǎng)景。常見的 ROLAP 有 Presto,Impala,Clickhouse 等等。
MOLAP ( Multi-dimensional OLAP ,多維 OLAP)
會(huì)對(duì)數(shù)據(jù)預(yù)處理,這提高了查詢性能,同時(shí)也降低了靈活性。適用于查詢場(chǎng)景相對(duì)固定并且對(duì)查詢性能要求非常高的場(chǎng)景。常見的 MOLAP 有 Druid,Kylin,Doris 等等。
HOLAP ( Hybrid OLAP ,混合型 OLAP)
混合類型 OLAP。通常情況下,查詢聚合性數(shù)據(jù)的時(shí)候,使用 MOLAP 技術(shù);當(dāng)查詢明細(xì)數(shù)據(jù)時(shí),使用 ROLAP 技術(shù)。在給定使用場(chǎng)景的前提下,以達(dá)到查詢性能的最優(yōu)化。
相關(guān)閱讀推薦:《什么是 OLAP?主流八大開源 OLAP 技術(shù)架構(gòu)對(duì)比》[2]
ClickHouse
簡(jiǎn)介
ClickHouse 是 Yandex(俄羅斯的一家做搜索引擎的公司)公司的一個(gè)產(chǎn)品,誕生于自家的在線流量分析產(chǎn)品—Yandex.Metrica。

根據(jù) ClickHouse 官方文檔[3]介紹:ClickHouse 是一個(gè)用于聯(lián)機(jī)分析(OLAP)的 MPP 架構(gòu)的列式數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)。
目前的話,國(guó)內(nèi)有很多公司都在使用 ClickHouse ,比如騰訊、字節(jié)、金數(shù)據(jù)、B 站。
下面是騰訊音樂對(duì) ClickHouse 實(shí)踐:

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

前世今生
其實(shí),ClickHouse 的誕生也是一步一步改進(jìn)現(xiàn)有系統(tǒng)之后得到的產(chǎn)物!
Yandex.Metrica 的第一版架構(gòu)其實(shí)是基于 MySQL(ROLAP) 來做的。
后來,這一版架構(gòu)出現(xiàn)了瓶頸,數(shù)據(jù)量過多(5800 億)導(dǎo)致分析報(bào)告的耗費(fèi)時(shí)間過長(zhǎng)。即使對(duì)這一版架構(gòu)進(jìn)行了大量?jī)?yōu)化之后,耗費(fèi)時(shí)間也僅僅是提高到了 26 秒。
于是,Yandex.Metrica 的研發(fā)團(tuán)隊(duì)開始另辟蹊徑了!
他們自研了一個(gè)叫做 Metrage(MOLAP) 的新系統(tǒng)。Metrage 的架構(gòu)設(shè)計(jì)和 MySQl 差別很大,就比如它使用的是 LSM 樹作為索引結(jié)構(gòu)而不是 B+ 樹。
Metrage 雖然解決了性能問題,但是,產(chǎn)品方面又有了新的需求。
Metrage 只支持聚合數(shù)據(jù)查詢,因此只有固定的報(bào)表分析功能,非常不靈活。我們希望可以有一個(gè)系統(tǒng)支持處理自定義報(bào)告這類。
于是,Yandex.Metrica 又自主研發(fā)出了 OLAPServer(HOLAP) 系統(tǒng)。并且,OLAPServer 使用 SQL 作為查詢語言。
OLAPServer 系統(tǒng)專為非聚合數(shù)據(jù)使用,實(shí)時(shí)聚合性能非常強(qiáng)!
不過,OLAPServer 也有缺陷比如缺少對(duì)數(shù)據(jù)類型的支持(只支持一種數(shù)據(jù)類型)。并且,功能也比較簡(jiǎn)陋,僅僅支持一些簡(jiǎn)單的功能,并沒有一個(gè) DBMS 應(yīng)該有的基本管理功能比如 DDL 查詢。
于是,Yandex.Metrica 繼續(xù)在 OLAPServer 的基礎(chǔ)上進(jìn)一步完善,最終打造出了 ClickHouse(ROLAP)。
為什么這么快?
ClickHouse 官方給出了一份非常詳細(xì)的 ClickHouse 性能測(cè)試圖,并提供了和其他常見數(shù)據(jù)庫(kù)的對(duì)比。
性能報(bào)告地址:https://clickhouse.tech/benchmark/dbms/ 。
通過這份報(bào)告,可以非常直觀地感受到 ClickHouse 到底是有多快!

這么說吧,ClickHouse 在相同的服務(wù)器配置與數(shù)據(jù)量(1000 萬)下,平均響應(yīng)速度是 MySQL 的 400 多倍,當(dāng)數(shù)據(jù)量達(dá)到 1 億的話,平均響應(yīng)速度是 MySQL 的 800 多倍。
不談具體的技術(shù)與架構(gòu),ClickHouse 之所以能夠這么快主要得益于下面幾點(diǎn)(結(jié)合《ClickHouse 原理解析與應(yīng)用實(shí)踐》所做的總結(jié)):
特殊場(chǎng)景特殊對(duì)待 :同一個(gè)場(chǎng)景的不同狀況,選擇使用不同的實(shí)現(xiàn)方式,盡可能將性能最大化。比如去重計(jì)數(shù) uniqCombined()函數(shù),會(huì)根據(jù)數(shù)據(jù)量的不同選擇不同的算法:當(dāng)數(shù)據(jù)量較小的時(shí)候,會(huì)選擇Array保存;當(dāng)數(shù)據(jù)量中等的時(shí)候,會(huì)選擇HashSet;而當(dāng)數(shù)據(jù)量很大的時(shí)候,則使用HyperLogLog算法。勇于嘗鮮,不行就換 : ClickHouse 會(huì)優(yōu)先使用最合適、最快的算法。如果市面上出現(xiàn)了可能會(huì)更好用的新算法的話,ClickHouse 通常會(huì)立即將其納入并進(jìn)行驗(yàn)證。效果不錯(cuò)的話,就繼續(xù)用著。效果不行的話,就直接踢掉。 持續(xù)測(cè)試,持續(xù)改進(jìn) :優(yōu)秀的軟件不是一朝一夕形成的,需要不斷的測(cè)試改進(jìn)。
適用場(chǎng)景
ClickHouse 雖然性能很強(qiáng),查詢速度和 MySQL 這類關(guān)系型數(shù)據(jù)庫(kù)完全不是一個(gè)量級(jí)。
但是,ClickHouse 并不可以取代 MySQL 這類關(guān)系型數(shù)據(jù)庫(kù),它們是互補(bǔ)的關(guān)系。
ClickHouse 作為一款 OLAP 數(shù)據(jù)庫(kù),其應(yīng)用場(chǎng)景主要就是數(shù)據(jù)分析比如廣告流量分析,不適用于 OLTP 事務(wù)性操作的場(chǎng)景,因?yàn)椋恢С质聞?wù)并且對(duì)按行刪除數(shù)據(jù)不夠友好!
文章推薦
推薦一些不錯(cuò)的好文和書籍,方便大家繼續(xù)深入學(xué)習(xí)。
中文 :
OLAP 數(shù)倉(cāng)入門問答-基礎(chǔ)篇[4] (寫的非常好 ??) 秒級(jí)去重:ClickHouse 在騰訊海量游戲營(yíng)銷活動(dòng)分析中的應(yīng)用[5] 數(shù)據(jù)分析引擎黑馬 ClickHouse 最新技術(shù)的實(shí)踐與應(yīng)用[6] ClickHouse 在有贊的實(shí)踐之路[7] 伴魚事件分析平臺(tái):設(shè)計(jì)篇[8] :伴魚的事件分析平臺(tái)用到了 ClickHouse 來存儲(chǔ)數(shù)據(jù)。 ClickHouse 官方文檔(中文版)[9] 漫談 ClickHouse 在實(shí)時(shí)分析系統(tǒng)中的定位與作用[10] :《 ClickHouse 原理解析與應(yīng)用實(shí)踐》作者朱凱[11]大佬的一次視頻分享。
英文 :
How ClickHouse saved our data[12] Introducing ClickHouse -- The Fastest Data Warehouse You've Never Heard Of (Robert Hodges, Altinity)[13] :油管上的一個(gè)視頻。
參考資料
What is a Data Warehouse? | IBM: https://www.ibm.com/cloud/learn/data-warehouse
[2]《什么是 OLAP?主流八大開源 OLAP 技術(shù)架構(gòu)對(duì)比》: https://segmentfault.com/a/1190000040428093
[3]ClickHouse 官方文檔: https://clickhouse.tech/docs/zh/
[4]OLAP 數(shù)倉(cāng)入門問答-基礎(chǔ)篇: https://zhuanlan.zhihu.com/p/144926830
[5]秒級(jí)去重:ClickHouse 在騰訊海量游戲營(yíng)銷活動(dòng)分析中的應(yīng)用: https://segmentfault.com/a/1190000037699772
[6]數(shù)據(jù)分析引擎黑馬 ClickHouse 最新技術(shù)的實(shí)踐與應(yīng)用: https://segmentfault.com/a/1190000040054934
[7]ClickHouse 在有贊的實(shí)踐之路: https://tech.youzan.com/clickhouse-zai-you-zan-de-shi-jian-zhi-lu/
[8]伴魚事件分析平臺(tái):設(shè)計(jì)篇: https://tech.ipalfish.com/blog/2021/06/21/event-analytics-design/
[9]ClickHouse 官方文檔(中文版): https://clickhouse.tech/docs/zh/
[10]漫談 ClickHouse 在實(shí)時(shí)分析系統(tǒng)中的定位與作用: 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/
— 【 THE END 】— 本公眾號(hào)全部博文已整理成一個(gè)目錄,請(qǐng)?jiān)诠娞?hào)里回復(fù)「m」獲?。?/span> 最近面試BAT,整理一份面試資料《Java面試BATJ通關(guān)手冊(cè)》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。
獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù) PDF 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。
謝謝支持喲 (*^__^*)
