Clickhouse的特點
2.1列式存儲
Id | Name | Age |
---|---|---|
1 | 張三 | 18 |
2 | 李四 | 22 |
3 | 王五 | 34 |
- 采用行式存儲時,資料在磁盤上的組織結構為: 好處是想查某個人所有的屬性時,可以通過一次磁盤查找加順序讀取就可以。但是當想查所有人的年齡時,需要不停的查找,或者全表掃描才行,周遊的很多資料都是不需要的。
- 而采用列式存儲時,資料在磁盤上的組織結構為: 這時想查所有人的年齡隻需把年齡那一列拿出來就可以了
列式儲存的好處:
- 對于列的聚合,計數,求和等統計操作原因優于行式存儲。
- 由于某一列的資料類型都是相同的,針對于資料存儲更容易進行資料壓縮,每一列選擇更優的資料壓縮算法,大大提高了資料的壓縮比重。
- 由于資料壓縮比更好,一方面節省了磁盤空間,另一方面對于cache也有了更大的發揮空間。
2.2DBMS功能
- ClickHouse支援基于SQL的聲明式查詢語言,該語言大部分情況下是與SQL标準相容的。
- 支援的查詢包括 GROUP BY,ORDER BY,IN,JOIN以及非相關子查詢。
-
。不支援視窗函數和相關子查詢
2.3多樣化引擎
clickhouse和mysql類似,把表級的存儲引擎插件化,根據表的不同需求可以設定不同的存儲引擎。
目前包括合并樹、日志、接口和其他四大類20多種引擎
2.4高吞吐寫入能力
ClickHouse采用類
LSM Tree
的結構,資料寫入後定期在背景Compaction。
通過類LSM tree的結構,ClickHouse在資料導入時全部是順序append寫,寫入後資料段不可更改,在背景compaction時也是多個段 merge sort後順序寫回磁盤。
順序寫的特性,充分利用了磁盤的吞吐能力,即便在HDD上也有着優異的寫入性能。
官方公開benchmark測試顯示能夠達到50MB-200MB/s的寫入吞吐能力,按照每行100Byte估算,大約相當于50W-200W條/s的寫入速度。
2.5資料分區和線程并行
ClickHouse将資料劃分為多個partition,每個partition再進一步劃分為多個index granularity(粒度),然後通過多個CPU核心分别處理其中的一部分來實作并行資料處理。
在這種設計下,單條Query就能利用整機所有CPU。極緻的并行處理能力,極大的降低了查詢延時。
是以,clickhouse即使對于大量資料的查詢也能夠化整為零平行處理。
但是有一個弊端就是對于單條查詢使用多cpu,就不利于同時并發多條查詢。是以對于
高qps的查詢業務,clickhouse并不是強項
。
2.6一些不足
- 沒有完整的事務支援。
- 缺少高頻率,低延遲的修改或删除已存在資料的能力。僅能用于批量删除或修改資料,但這符合 GDPR。
- 稀疏索引使得ClickHouse不适合通過其鍵檢索單行的點查詢。