優(yōu)點:
- 真正的列式DBMS 除了數(shù)據(jù)本身外不應(yīng)該存在其他額外的數(shù)據(jù)。
這意味著為了避免在值旁邊存儲它們的長度“number”,你必須支持固定長度數(shù)值類型。
- 數(shù)據(jù)壓縮:數(shù)據(jù)壓縮存儲在性能方面發(fā)揮著關(guān)鍵作用
- 數(shù)據(jù)的磁盤存儲:工作在傳統(tǒng)磁盤上的系統(tǒng)
- 多核心并行處理:大型查詢以一種自然的方式并行化,占用當(dāng)前服務(wù)器上可用的所有必要資源
- 多服務(wù)器分布式處理:在ClickHouse中,數(shù)據(jù)可以保存在不同的shard上,每一個shard都由一組用于容錯的replica組成,查詢可以并行的在所有shard上進(jìn)行處理
- 支持SQL:ClickHouse支持基于SQL的查詢語言,該語言大部分情況下是與SQL標(biāo)準(zhǔn)兼容的。 支持的查詢包括 GROUP BY,ORDER BY,IN,JOIN以及非相關(guān)子查詢。 不支持窗口函數(shù)和相關(guān)子查詢
- 向量引擎:為了高效的使用CPU,數(shù)據(jù)不僅僅按列存儲,同時還按向量(列的一部分)進(jìn)行處理 - 實時的數(shù)據(jù)更新 ClickHouse支持在表中定義主鍵。
為了使查詢能夠快速在主鍵中進(jìn)行范圍查找,數(shù)據(jù)總是以增量的方式有序的存儲在MergeTree中。因此,數(shù)據(jù)可以持續(xù)不斷高效的寫入到表中,并且寫入的過程中不會存在任何加鎖的行為
- 索引 按照主鍵對數(shù)據(jù)進(jìn)行排序,使能夠以幾十毫秒的低延遲對數(shù)據(jù)進(jìn)行特定值查找或范圍查找
- 適合在線查詢 在線查詢意味著在沒有對數(shù)據(jù)做任何預(yù)處理的情況下以極低的延遲處理查詢并將結(jié)果加載到用戶的頁面中 - 支持近似計算 ClickHouse提供各種各樣在允許犧牲數(shù)據(jù)精度的情況下對查詢進(jìn)行加速的方法:
1、用于近似計算的各類聚合函數(shù),如:distinct values, medians, quantiles
2、 基于數(shù)據(jù)的部分樣本進(jìn)行近似查詢。這時,僅會從磁盤檢索少部分比例的數(shù)據(jù)。
3、 不使用全部的聚合條件,通過隨機(jī)選擇有限個數(shù)據(jù)聚合條件進(jìn)行聚合。這在數(shù)據(jù)聚合條件滿足某些分布條件下,在提供相當(dāng)準(zhǔn)確的聚合結(jié)果的同時降低了計算資源的使用。
缺點:
- 沒有完整的事物支持
- 缺少高頻率,低延遲的修改或刪除已存在數(shù)據(jù)的能力。僅能用于批量刪除或修改數(shù)據(jù)
- 稀疏索引使得ClickHouse不適合通過其鍵檢索單行的點查詢