ClickHouse到底牛逼在哪里?為什么比MySQL快831倍!
ClickHouse到底牛逼在哪里?為什么比MySQL快831倍!
這兩年 ClickHouse 非常的火,尤其是在大數(shù)據(jù)領(lǐng)域。
剛好這兩天也有群友在群里說起 ClickHouse,這款來自俄羅斯 Yandex 的開源數(shù)據(jù)庫產(chǎn)品性能屌爆了,宣稱比 MySQL 快 831 倍。今天我們就扯一扯 ClickHouse 到底好在哪里?
Yandex
在開始之前,我們先說一下 Yandex 這家公司,他是俄羅斯的一家互聯(lián)網(wǎng)巨頭公司,雖然在國際上沒什么名氣,但在俄羅斯,他就是老大,是俄羅斯排名第一的搜索引擎公司。是和谷歌、百度一樣的存在。ClickHouse 誕生于 2016 年,就是來自于 Yandex 公司。
老毛子在國際互聯(lián)網(wǎng)上,雖然沒有像中美這樣具有統(tǒng)治地位的互聯(lián)網(wǎng)公司,但是老毛子的一些開源軟件的性能還是杠杠的。比如,大名鼎鼎的 Nginx,再比如我們今天要討論的 ClickHouse,所以,ClickHouse 還是非常值得一學(xué)的。
ClickHouse
ClickHouse 主要用于在線分析處理查詢(OLAP),能夠使用 SQL 查詢實時生成分析數(shù)據(jù)報告。
和我們常見的關(guān)系型數(shù)據(jù)庫非常不同。比如,MySQL,Postgresql,SQL Server 等數(shù)據(jù)庫采用的都是行式存儲,而 ClickHouse 采用的確實列式存儲。下面我們通過一個簡單的例子,來比較它們的不同。

如上述表格所示,傳統(tǒng)的 MySQL 數(shù)據(jù)庫的每一行數(shù)據(jù)都是物理的存儲在一起的。如果我要取 id 等于 10000 這一條數(shù)據(jù)的 name 列,那我就必須要把這一行數(shù)據(jù)讀取出來,然后取 name 列。
再比如,下面的 SQL:
SELECT name FROM xttblog where id > 10000;
在眾多的數(shù)據(jù)中,我只取一列,但我需要把每條數(shù)據(jù)都讀取出來。
基于上面?zhèn)鹘y(tǒng)數(shù)據(jù)庫的一些特點,ClickHouse 另辟蹊徑,推出了列式存儲。
| 行號 | 0 | 1 | N |
|---|---|---|---|
| 主鍵id | 10000 | 10001 | ... |
| name | 業(yè)余草 | 濤哥 | ... |
| title | 測試 | hello | ... |
| status | 1 | 0 | ... |
| create_time | 2021-05-29 | 2021-05-29 | ... |
看上圖的列式存儲示例,完全和 MySQL 等數(shù)據(jù)庫不同。當(dāng)我執(zhí)行下面的 SQL 時,查詢效率非常的高!
SELECT name FROM xttblog where id > 10000;
由于 name 列的數(shù)據(jù)都存儲在一起,因此效率大大的超過了傳統(tǒng)的數(shù)據(jù)庫。

除了邏輯上的不同,磁盤上的組織結(jié)構(gòu)也大不一樣。

除了列式存儲上的不同,ClickHouse 還有高效的數(shù)據(jù)壓縮,默認(rèn)使用LZ4算法,總體壓縮比可達(dá) 8:1。ClickHouse 還采用了分布式多主架構(gòu)提高并發(fā)性能,ClickHouse使讀請求可以隨機(jī)打到任意節(jié)點,均衡讀壓力,寫請求也無需轉(zhuǎn)發(fā)到master節(jié)點,不會產(chǎn)生單點壓力。
ClickHouse 還有向量引擎,利用 SIMD 指令實現(xiàn)并行計算。對多個數(shù)據(jù)塊來說,一次 SIMD 指令會同時操作多個塊,大大減少了命令執(zhí)行次數(shù),縮短了計算時間。向量引擎在結(jié)合多核后會將 ClickHouse 的性能淋漓盡致的發(fā)揮出來。
ClickHouse 在索引上也有不同,采用了稀疏索引及跳數(shù)索引。同時還有很多 MergeTree,提供海量業(yè)務(wù)場景支持。
基于以上特點,ClickHouse 在包含 count、sum、group by、order by 等情況的查詢對比,同等條件下,ClickHouse 的查詢性能異常強(qiáng)悍,官網(wǎng)上的數(shù)據(jù)顯示,是同等條件下 MySQL 的 831 倍。


更多的對比數(shù)據(jù),建議大家去官網(wǎng)上查看。
哎,又要內(nèi)卷起來了。
