在《clickhouse專欄》上一篇文章中《資料庫、資料倉儲之間的區別與聯絡》,我們介紹了什麼是資料庫,什麼是資料倉儲,二者的區別聯絡。clickhouse的定位是「資料倉儲」,所以理解了上一篇的內容,其實就能夠知道clickhouse適用於什麼樣的應用場景,不適合什麼樣的應用場景。
下面本節我們就來繼續為大家介紹clickhouse的一些非常有意義的特性,來幫助大家更深入的理解ck的應用場景,以及它為什麼被稱為「效能怪獸」。
clickhouse的效能之所以彪悍,其列式儲存設計是非常重要的原因之一。給大家舉一個例子,假如我們現在有一張學生資訊表student
id | name | age |
---|---|---|
1 | 小紅 | 7 |
2 | 小明 | 8 |
3 | lucy | 7 |
如果這張表採用行式資料儲存,其在磁碟上的結構是下面這樣的:
如果這張表採用列式資料儲存,其在磁碟上的結構是下面這樣的:
對比上面的兩張圖我們可以看到,採用列式儲存的優點。
目前開源世界裡的大部分的列式儲存資料庫是不支援SQL的,即使很多號稱支援SQL,其實支援SQL也是偽SQL,並且支援能力有限。
但是經過筆者的實驗,clikhouse對於標準SQL的支援已經可以與傳統的關係型資料庫媲美,雖然對於資料倉儲click house,我更建議大家使用寬表進行資料儲存,但是不代表ck不具備多表關聯查詢的能力。
可以存取:https://clickhouse.com/benchmark/dbms/ ,獲取click house官方線上的針對各種資料統計型SQL的效能對比。
clikhouse不僅支援單機模式,也支援分散式分片資料儲存的叢集模式。資料以分片的行式,儲存在多臺伺服器節點上面,因此ck可以利用叢集伺服器的規模計算能力,快速的做出資料統計結果的響應。ck資料分片分散式儲存的機制,使得clickhouse具備了橫向擴充套件,海量資料分析處理的能力。
資料分片包括很多的方式,比如:資料隨機寫入不同伺服器分片儲存上、資料被髮往指定的伺服器分片儲存之上、資料按照hash值進行分片、當然我們還可以自定義資料分片的方式。
分散式資料儲存將資料分散到叢集內的各個伺服器上(以分片(shard)的行式存在),為了保證資料的安全,每一個分片又有多個副本(replica),副本也是分散式儲存的,這樣即使部分伺服器宕機,仍然可以保障ck叢集可用。
與傳統的RMDB資料庫不同的是,clickhouse支援在建表的時候就通過sort by關鍵字指定排序欄位。這樣在資料入表的時候,實際是先進行了排序操作,按照排序欄位進行排序後的資料有序存放。
後續在進行資料查詢、過濾、統計的時候,就能夠有效的、快速的獲取連續的資料塊中的資料,提升查詢統計的效能。這種按序儲存的特性其實還是有非常廣泛的應用場景的,比如:股票K線圖都是按照交易日時間排序的,預設排序欄位、按序儲存有效的提升了統計效能。
在資料統計分析的資料庫中,通常我們需要資料TTL能力,也就是說:某些資料達到一定的儲存週期之後自動刪除。ck就提供了這種能力,降低了系統運維人員的工作難度。
ck支援以下幾種粒度的TTL
限於博文篇幅,更多精彩內容我就不一一列舉了,推薦閱讀
《原創精品視訊及配套檔案:springboot-已錄製97節(免費)》
等等等等