什么是clickhouse?
ClickHouse 是一個(gè)列式存儲(chǔ)的高效能分析性數(shù)據(jù)管理系統(tǒng)觉痛,具有
原生的向量化執(zhí)行引擎,Developed by Yandex, opne source since 2016
官網(wǎng): ClickHouse is a column-oriented database management system (DBMS) for
online analytical processing of queries (OLAP)
為什么clickhouse脫穎而出
感人的性能
-
與一些同類(lèi)型產(chǎn)品對(duì)比
-
與其他分析型數(shù)據(jù)庫(kù)對(duì)比
可以看出clickhouse在性能上有非常卓越的表現(xiàn)。但是這并不意味著它可以代替其他的查詢(xún)數(shù)據(jù)庫(kù)球榆。
特性
數(shù)據(jù)壓縮充易、磁盤(pán)存儲(chǔ)
在一些列式數(shù)據(jù)庫(kù)管理系統(tǒng)中(例如InfiniDB CE和MonetDB) 并沒(méi)有使用數(shù)據(jù)壓縮。但是, 若想達(dá)到比較優(yōu)異的性能裁着,數(shù)據(jù)壓縮確實(shí)起到了至關(guān)重要的作用繁涂。
許多的列式數(shù)據(jù)庫(kù)(如 SAP HANA, Google PowerDrill)只能在內(nèi)存中工作,這種方式會(huì)造成比實(shí)際更多的設(shè)備預(yù)算二驰。ClickHouse被設(shè)計(jì)用于工作在傳統(tǒng)磁盤(pán)上的系統(tǒng)扔罪,它提供每GB更低的存儲(chǔ)成本,但如果有可以使用SSD和內(nèi)存桶雀,它也會(huì)合理的利用這些資源
提供 LZ4矿酵、ZSTD 兩種數(shù)據(jù)壓縮格式
支持SQL
ClickHouse支持基于SQL的聲明式查詢(xún)語(yǔ)言,該語(yǔ)言大部分情況下是與SQL標(biāo)準(zhǔn)兼容的矗积。
支持的查詢(xún)包括 GROUP BY全肮,ORDER BY,IN漠魏,JOIN以及非相關(guān)子查詢(xún)倔矾。
絕大部分查詢(xún)基本和常用的mysql一樣,可以省去大部分同學(xué)的學(xué)習(xí)成本柱锹。不僅如此提供了強(qiáng)大的函數(shù)支查詢(xún)能力哪自,更豐富的存儲(chǔ)格式,例如array多維數(shù)組禁熏、json壤巷、tuple、set等瞧毙。
ps:我們就用這個(gè)解決了變態(tài)的產(chǎn)品提的變態(tài)需求,實(shí)時(shí)查詢(xún)千億數(shù)據(jù)下根據(jù)數(shù)組下標(biāo)的等值查詢(xún)和數(shù)據(jù)包含的范圍查詢(xún)胧华。性能還不錯(cuò)
多核心并行處理
ClickHouse會(huì)使用服務(wù)器上一切可用的資源,從而以最自然的方式并行處理大型查詢(xún)
向量化引擎
為了高效的使用CPU宙彪,數(shù)據(jù)不僅僅按列存儲(chǔ)矩动,同時(shí)還按向量(列的一部分)進(jìn)行處理,這樣可以更加高效地使用CPU
索引
主鍵
ClickHouse支持主鍵索引释漆,它將每列數(shù)據(jù)按照index granularity(默認(rèn)8192行)進(jìn)行劃分悲没,會(huì)為每個(gè)數(shù)據(jù)片段創(chuàng)建一個(gè)索引文件,索引文件包含每個(gè)索引行(『標(biāo)記』)的主鍵值男图。索引行號(hào)定義為 n * index_granularity 示姿。當(dāng)數(shù)據(jù)被插入到表中時(shí)甜橱,會(huì)分成數(shù)據(jù)片段并按主鍵的字典序排序。例如栈戳,主鍵是 (CounterID, Date) 時(shí)岂傲,片段中數(shù)據(jù)按 CounterID 排序,具有相同 CounterID 的部分按 Date 排序子檀。
但是值得注意的是:ClickHouse 不要求主鍵惟一镊掖。所以,你可以插入多條具有相同主鍵的行命锄。要想實(shí)現(xiàn)去重效果堰乔,需要結(jié)合具體的表引擎ReplacingMergeTree、CollapsingMergeTree脐恩、VersionedCollapsingMergeTree實(shí)現(xiàn)镐侯。
稀疏索引
ClickHouse支持對(duì)任意列創(chuàng)建任意數(shù)量的稀疏索引。其中被索引的value可以是任意的合法SQL Expression驶冒,并不僅僅局限于對(duì)column value本身進(jìn)行索引苟翻。之所以叫稀疏索引,是因?yàn)樗举|(zhì)上是對(duì)一個(gè)完整index granularity(默認(rèn)8192行)的統(tǒng)計(jì)信息骗污,并不會(huì)具體記錄每一行在文件中的位置崇猫。
支持近似計(jì)算
ClickHouse提供各種各樣在允許犧牲數(shù)據(jù)精度的情況下對(duì)查詢(xún)進(jìn)行加速的方法:
- 用于近似計(jì)算的各類(lèi)聚合函數(shù),如:distinct values, medians, quantiles
- 基于數(shù)據(jù)的部分樣本進(jìn)行近似查詢(xún)需忿。這時(shí)诅炉,僅會(huì)從磁盤(pán)檢索少部分比例的數(shù)據(jù)。
- 不使用全部的聚合條件屋厘,通過(guò)隨機(jī)選擇有限個(gè)數(shù)據(jù)聚合條件進(jìn)行聚合涕烧。這在數(shù)據(jù)聚合條件滿(mǎn)足某些分布條件下,在提供相當(dāng)準(zhǔn)確的聚合結(jié)果的同時(shí)降低了計(jì)算資源的使用汗洒。
豐富的表引擎
clickhouse 不僅擁有自己強(qiáng)大的MergeTree家族的多種引擎外议纯,還提供了豐富的外部引擎供我們選擇,包括但不限于:kafka溢谤、HDFS瞻凤、Mysql。
但是使用外部引擎的時(shí)世杀,性能自然會(huì)不如本地存儲(chǔ)阀参。
MergeTree引擎家族中很有很多優(yōu)秀的引擎
比如:
適合人物畫(huà)像的AggregatingMergeTree引擎
可自定義去重的SummingMergeTree引擎
折疊樹(shù)CollapsingMergeTree
用于Graphite監(jiān)控的GraphiteMergeTree引擎
。瞻坝。蛛壳。
這些都具有數(shù)據(jù)副本的能力 Replicated*
官方推薦的適合大多數(shù)場(chǎng)景的依然是MergeTree引擎,其家族中其他引擎大多也是在其基礎(chǔ)上做的封裝。
除此之外炕吸,還有分布式的表引擎。Distributed
Distributed是一種邏輯表引擎勉痴,并不存儲(chǔ)數(shù)據(jù)赫模。創(chuàng)建該表引擎時(shí),會(huì)指向已配置的分片集蒸矛,要查詢(xún)的時(shí)候瀑罗,它會(huì)向每個(gè)分片發(fā)起查詢(xún)并最終匯總集合然后返回。
這里配置分片集可超靈活的配置雏掠,不用的時(shí)候可以刪除斩祭。以后會(huì)單獨(dú)來(lái)介紹該引擎的使用。
數(shù)據(jù)分區(qū)PARTITION
ClickHouse支持PARTITION BY子句乡话,在建表時(shí)可以指定按照任意合法表達(dá)式進(jìn)行數(shù)據(jù)分區(qū)操作摧玫,比如通過(guò)toYYYYMM()將數(shù)據(jù)按月進(jìn)行分區(qū)、toMonday()將數(shù)據(jù)按照周幾進(jìn)行分區(qū)绑青。分區(qū)條件查詢(xún)诬像,只能讀取包含適當(dāng)分區(qū)數(shù)據(jù)塊,而不掃描過(guò)多的數(shù)據(jù)闸婴。靈活的使用坏挠,可以大大提升查詢(xún)的性能。
限制
沒(méi)有完美的設(shè)計(jì)邪乍,只有適合的設(shè)計(jì)降狠。
clickhouse也有自己的限制。
- 不支持事務(wù)
- 缺少高頻率庇楞,低延遲的修改或刪除已存在數(shù)據(jù)的能力榜配。僅能用于批量刪除或修改數(shù)據(jù)(性能不太好)
- 稀疏索引使得ClickHouse不適合通過(guò)其鍵檢索單行的點(diǎn)查詢(xún)
- 不支持大量的并發(fā)請(qǐng)求。每秒上百甚至更少
總結(jié)
- 使用建議
- 數(shù)據(jù)被添加到數(shù)據(jù)庫(kù)姐刁,基本不怎么修改芥牌。
- 查詢(xún)并發(fā)相對(duì)不高。
- 大寬表存儲(chǔ)聂使,少部分字段使用壁拉。
- 批量操作,更新或者刪除柏靶。
- 列值相對(duì)小弃理,數(shù)字或者短字符串。
- 無(wú)事務(wù)處理屎蜓。
- 推薦場(chǎng)景
用于存儲(chǔ)數(shù)據(jù)和統(tǒng)計(jì)數(shù)據(jù)使用
用戶(hù)行為數(shù)據(jù)記錄和分析工作
日志分析
其他
Clickhouse官方還貼心給出中文官方文檔痘昌,就是看著不太順眼,還是英文的舒服。
隨著開(kāi)源辆苔,國(guó)內(nèi)各大廠(chǎng)商都紛紛跟進(jìn)算灸,在頭條、騰訊驻啤、攜程菲驴、快手都有大規(guī)模使用。
目前阿里云已經(jīng)率先推出了ClickHouse的云托管產(chǎn)品骑冗,處于公測(cè)階段赊瞬。感興趣的小伙伴可以去使用,一起學(xué)習(xí)贼涩。
如有錯(cuò)誤巧涧,希望大家批評(píng)指正。