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