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