ClickHouse到底牛逼在哪裡?為什麼比MySQL快831倍

ClickHouse到底牛逼在哪裡?為什麼比MySQL快831倍!

這兩年 ClickHouse 非常的火,尤其是在大資料領域。

剛好這兩天也有群友在群裡說起 ClickHouse,這款來自俄羅斯 Yandex 的開源資料庫產品效能強的一批,宣稱比 MySQL 快 831 倍。今天我們就扯一扯 ClickHouse 到底好在哪裡?

Yandex

在開始之前,我們先說一下 Yandex 這家公司,他是俄羅斯的一家網際網路巨頭公司,雖然在國際上沒什麼名氣,但在俄羅斯,他就是老大,是俄羅斯排名第一的搜尋引擎公司。是和谷歌、百度一樣的存在。ClickHouse 誕生於 2016 年,就是來自於 Yandex 公司。

老毛子在國際網際網路上,雖然沒有像中美這樣具有統治地位的網際網路公司,但是老毛子的一些開源軟體的效能還是槓槓的。比如,大名鼎鼎的 Nginx,再比如我們今天要討論的 ClickHouse,所以,ClickHouse 還是非常值得一學的。

ClickHouse

ClickHouse 主要用於線上分析處理查詢(OLAP),能夠使用 SQL 查詢實時生成分析資料報告。

和我們常見的關係型資料庫非常不同。比如,MySQL,Postgresql,SQL Server 等資料庫採用的都是行式儲存,而 ClickHouse 採用的確是列式儲存。下面我們透過一個簡單的例子,來比較它們的不同。

ClickHouse到底牛逼在哪裡?為什麼比MySQL快831倍

如上述表格所示,傳統的 MySQL 資料庫的每一行資料都是物理的儲存在一起的。如果我要去 id 等於 10000 這一條資料的 name 列,那我就必須要把這一行資料讀取出來,然後取 name 列。

再比如,下面的 SQL:

SELECT name FROM xttblog where id > 10000;

在眾多的資料中,我只取一列,但我需要把每條資料都讀取出來。

基於上面傳統資料庫的一些特點,ClickHouse 另闢蹊徑,推出了列式儲存。

ClickHouse到底牛逼在哪裡?為什麼比MySQL快831倍

看上圖的列式儲存示例,完全和 MySQL 等資料庫不同。當我執行下面的 SQL 時,查詢效率非常的高!

SELECT name FROM xttblog where id > 10000;

由於 name 列的資料都儲存在一起,因此效率大大地超過了傳統的資料庫。

ClickHouse到底牛逼在哪裡?為什麼比MySQL快831倍

除了邏輯上的不同,磁碟上的組織結構也大不一樣。

ClickHouse到底牛逼在哪裡?為什麼比MySQL快831倍

除了列式儲存上的不同,ClickHouse 還有高效的資料壓縮,預設使用LZ4演算法,總體壓縮比可達 8:1。ClickHouse 還採用了分散式多主架構提高併發效能,ClickHouse使讀請求可以隨機打到任意節點,均衡讀壓力,寫請求也無需轉發到master節點,不會產生單點壓力。

ClickHouse 還有向量引擎,利用 SIMD 指令實現平行計算。對多個數據塊來說,一次 SIMD 指令會同時操作多個塊,大大減少了命令執行次數,縮短了計算時間。向量引擎在結合多核後會將 ClickHouse 的效能淋漓盡致地發揮出來。

ClickHouse 在索引上也有不同,採用了稀疏索引及跳數索引。同時還有很多 MergeTree,提供海量業務場景支援。

基於以上特點,ClickHouse 在包含 count、sum、group by、order by 等情況的查詢對比,同等條件下,ClickHouse 的查詢效能異常強悍,官網上的資料顯示,是同等條件下 MySQL 的 831 倍。

ClickHouse到底牛逼在哪裡?為什麼比MySQL快831倍

ClickHouse到底牛逼在哪裡?為什麼比MySQL快831倍

更多的對比資料,建議大家去官網上檢視。

哎,又要內捲起來了。