小編給大家分享一下clickhouse是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創(chuàng)新互聯(lián)是少有的成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)、營(yíng)銷型企業(yè)網(wǎng)站、重慶小程序開(kāi)發(fā)公司、手機(jī)APP,開(kāi)發(fā)、制作、設(shè)計(jì)、賣鏈接、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,從2013年開(kāi)始,堅(jiān)持透明化,價(jià)格低,無(wú)套路經(jīng)營(yíng)理念。讓網(wǎng)頁(yè)驚喜每一位訪客多年來(lái)深受用戶好評(píng)
Yandex在2016年6月15日開(kāi)源的一個(gè)數(shù)據(jù)分析的數(shù)據(jù)庫(kù),名字叫做ClickHouse
ClickHouse從OLAP場(chǎng)景需求出發(fā),定制開(kāi)發(fā)了一套全新的高效列式存儲(chǔ)引擎,并且實(shí)現(xiàn)了數(shù)據(jù)有序存儲(chǔ)、主鍵索引、稀疏索引、數(shù)據(jù)Sharding、數(shù)據(jù)Partitioning、TTL、主備復(fù)制等豐富功能。以上功能共同為ClickHouse極速的分析性能奠定了基礎(chǔ)。
相比于行式存儲(chǔ),列式存儲(chǔ)在分析場(chǎng)景下有著許多優(yōu)良的特性。
1)如前所述,分析場(chǎng)景中往往需要讀大量行但是少數(shù)幾個(gè)列。在行存模式下,數(shù)據(jù)按行連續(xù)存儲(chǔ),所有列的數(shù)據(jù)都存儲(chǔ)在一個(gè)block中,不參與計(jì)算的列在IO時(shí)也要全部讀出,讀取操作被嚴(yán)重放大。而列存模式下,只需要讀取參與計(jì)算的列即可,極大的減低了IO cost,加速了查詢。
2)同一列中的數(shù)據(jù)屬于同一類型,壓縮效果顯著。列存往往有著高達(dá)十倍甚至更高的壓縮比,節(jié)省了大量的存儲(chǔ)空間,降低了存儲(chǔ)成本。
3)更高的壓縮比意味著更小的data size,從磁盤中讀取相應(yīng)數(shù)據(jù)耗時(shí)更短。
4)自由的壓縮算法選擇。不同列的數(shù)據(jù)具有不同的數(shù)據(jù)類型,適用的壓縮算法也就不盡相同。可以針對(duì)不同列類型,選擇最合適的壓縮算法。
5)高壓縮比,意味著同等大小的內(nèi)存能夠存放更多數(shù)據(jù),系統(tǒng)cache效果更好。
官方數(shù)據(jù)顯示,通過(guò)使用列存,在某些分析場(chǎng)景下,能夠獲得100倍甚至更高的加速效應(yīng)。
ClickHouse支持在建表時(shí),指定將數(shù)據(jù)按照某些列進(jìn)行sort by。
排序后,保證了相同sort key的數(shù)據(jù)在磁盤上連續(xù)存儲(chǔ),且有序擺放。在進(jìn)行等值、范圍查詢時(shí),where條件命中的數(shù)據(jù)都緊密存儲(chǔ)在一個(gè)或若干個(gè)連續(xù)的Block中,而不是分散的存儲(chǔ)在任意多個(gè)Block, 大幅減少需要IO的block數(shù)量。另外,連續(xù)IO也能夠充分利用操作系統(tǒng)page cache的預(yù)取能力,減少page fault。
ClickHouse支持主鍵索引,它將每列數(shù)據(jù)按照index granularity(默認(rèn)8192行)進(jìn)行劃分,每個(gè)index granularity的開(kāi)頭第一行被稱為一個(gè)mark行。主鍵索引存儲(chǔ)該mark行對(duì)應(yīng)的primary key的值。
對(duì)于where條件中含有primary key的查詢,通過(guò)對(duì)主鍵索引進(jìn)行二分查找,能夠直接定位到對(duì)應(yīng)的index granularity,避免了全表掃描從而加速查詢。
但是值得注意的是:ClickHouse的主鍵索引與MySQL等數(shù)據(jù)庫(kù)不同,它并不用于去重,即便primary key相同的行,也可以同時(shí)存在于數(shù)據(jù)庫(kù)中。要想實(shí)現(xiàn)去重效果,需要結(jié)合具體的表引擎ReplacingMergeTree、CollapsingMergeTree、VersionedCollapsingMergeTree實(shí)現(xiàn),我們會(huì)在未來(lái)的文章系列中再進(jìn)行詳細(xì)解讀。
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ì)具體記錄每一行在文件中的位置。目前支持的稀疏索引類型包括:
minmax: 以index granularity為單位,存儲(chǔ)指定表達(dá)式計(jì)算后的min、max值;在等值和范圍查詢中能夠幫助快速跳過(guò)不滿足要求的塊,減少IO。
set(max_rows):以index granularity為單位,存儲(chǔ)指定表達(dá)式的distinct value集合,用于快速判斷等值查詢是否命中該塊,減少IO。
ngrambf_v1(n, size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed):將string進(jìn)行ngram分詞后,構(gòu)建bloom filter,能夠優(yōu)化等值、like、in等查詢條件。
tokenbf_v1(size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed): 與ngrambf_v1類似,區(qū)別是不使用ngram進(jìn)行分詞,而是通過(guò)標(biāo)點(diǎn)符號(hào)進(jìn)行詞語(yǔ)分割。
bloom_filter([false_positive]):對(duì)指定列構(gòu)建bloom filter,用于加速等值、like、in等查詢條件的執(zhí)行。
ClickHouse支持單機(jī)模式,也支持分布式集群模式。在分布式模式下,ClickHouse會(huì)將數(shù)據(jù)分為多個(gè)分片,并且分布到不同節(jié)點(diǎn)上。不同的分片策略在應(yīng)對(duì)不同的SQL Pattern時(shí),各有優(yōu)勢(shì)。ClickHouse提供了豐富的sharding策略,讓業(yè)務(wù)可以根據(jù)實(shí)際需求選用。
1) random隨機(jī)分片:寫入數(shù)據(jù)會(huì)被隨機(jī)分發(fā)到分布式集群中的某個(gè)節(jié)點(diǎn)上。
2) constant固定分片:寫入數(shù)據(jù)會(huì)被分發(fā)到固定一個(gè)節(jié)點(diǎn)上。
3)column value分片:按照某一列的值進(jìn)行hash分片。
4)自定義表達(dá)式分片:指定任意合法表達(dá)式,根據(jù)表達(dá)式被計(jì)算后的值進(jìn)行hash分片。
數(shù)據(jù)分片,讓ClickHouse可以充分利用整個(gè)集群的大規(guī)模并行計(jì)算能力,快速返回查詢結(jié)果。
更重要的是,多樣化的分片功能,為業(yè)務(wù)優(yōu)化打開(kāi)了想象空間。比如在hash sharding的情況下,JOIN計(jì)算能夠避免數(shù)據(jù)shuffle,直接在本地進(jìn)行l(wèi)ocal join; 支持自定義sharding,可以為不同業(yè)務(wù)和SQL Pattern定制最適合的分片策略;利用自定義sharding功能,通過(guò)設(shè)置合理的sharding expression可以解決分片間數(shù)據(jù)傾斜問(wèn)題等。
另外,sharding機(jī)制使得ClickHouse可以橫向線性拓展,構(gòu)建大規(guī)模分布式集群,從而具備處理海量數(shù)據(jù)的能力。
ClickHouse支持PARTITION BY子句,在建表時(shí)可以指定按照任意合法表達(dá)式進(jìn)行數(shù)據(jù)分區(qū)操作,比如通過(guò)toYYYYMM()將數(shù)據(jù)按月進(jìn)行分區(qū)、toMonday()將數(shù)據(jù)按照周幾進(jìn)行分區(qū)、對(duì)Enum類型的列直接每種取值作為一個(gè)分區(qū)等。
數(shù)據(jù)Partition在ClickHouse中主要有兩方面應(yīng)用:
在partition key上進(jìn)行分區(qū)裁剪,只查詢必要的數(shù)據(jù)。靈活的partition expression設(shè)置,使得可以根據(jù)SQL Pattern進(jìn)行分區(qū)設(shè)置,最大化的貼合業(yè)務(wù)特點(diǎn)。
對(duì)partition進(jìn)行TTL管理,淘汰過(guò)期的分區(qū)數(shù)據(jù)。
在分析場(chǎng)景中,數(shù)據(jù)的價(jià)值隨著時(shí)間流逝而不斷降低,多數(shù)業(yè)務(wù)出于成本考慮只會(huì)保留最近幾個(gè)月的數(shù)據(jù),ClickHouse通過(guò)TTL提供了數(shù)據(jù)生命周期管理的能力。
ClickHouse支持幾種不同粒度的TTL:
1) 列級(jí)別TTL:當(dāng)一列中的部分?jǐn)?shù)據(jù)過(guò)期后,會(huì)被替換成默認(rèn)值;當(dāng)全列數(shù)據(jù)都過(guò)期后,會(huì)刪除該列。
2)行級(jí)別TTL:當(dāng)某一行過(guò)期后,會(huì)直接刪除該行。
3)分區(qū)級(jí)別TTL:當(dāng)分區(qū)過(guò)期后,會(huì)直接刪除該分區(qū)。
ClickHouse采用類LSM Tree的結(jié)構(gòu),數(shù)據(jù)寫入后定期在后臺(tái)Compaction。通過(guò)類LSM tree的結(jié)構(gòu),ClickHouse在數(shù)據(jù)導(dǎo)入時(shí)全部是順序append寫,寫入后數(shù)據(jù)段不可更改,在后臺(tái)compaction時(shí)也是多個(gè)段merge sort后順序?qū)懟卮疟P。順序?qū)懙奶匦?,充分利用了磁盤的吞吐能力,即便在HDD上也有著優(yōu)異的寫入性能。
官方公開(kāi)benchmark測(cè)試顯示能夠達(dá)到50MB-200MB/s的寫入吞吐能力,按照每行100Byte估算,大約相當(dāng)于50W-200W條/s的寫入速度。
在分析場(chǎng)景中,刪除、更新操作并不是核心需求。ClickHouse沒(méi)有直接支持delete、update操作,而是變相支持了mutation操作,語(yǔ)法為alter table delete where filter_expr
,alter table update col=val where filter_expr
。
目前主要限制為刪除、更新操作為異步操作,需要后臺(tái)compation之后才能生效。
ClickHouse通過(guò)主備復(fù)制提供了高可用能力,主備架構(gòu)下支持無(wú)縫升級(jí)等運(yùn)維操作。而且相比于其他系統(tǒng)它的實(shí)現(xiàn)有著自己的特色:
1)默認(rèn)配置下,任何副本都處于active模式,可以對(duì)外提供查詢服務(wù);
2)可以任意配置副本個(gè)數(shù),副本數(shù)量可以從0個(gè)到任意多個(gè);
3)不同shard可以配置不提供副本個(gè)數(shù),用于解決單個(gè)shard的查詢熱點(diǎn)問(wèn)題;
ClickHouse在計(jì)算層做了非常細(xì)致的工作,竭盡所能榨干硬件能力,提升查詢速度。它實(shí)現(xiàn)了單機(jī)多核并行、分布式計(jì)算、向量化執(zhí)行與SIMD指令、代碼生成等多種重要技術(shù)。
ClickHouse將數(shù)據(jù)劃分為多個(gè)partition,每個(gè)partition再進(jìn)一步劃分為多個(gè)index granularity,然后通過(guò)多個(gè)CPU核心分別處理其中的一部分來(lái)實(shí)現(xiàn)并行數(shù)據(jù)處理。
在這種設(shè)計(jì)下,單條Query就能利用整機(jī)所有CPU。極致的并行處理能力,極大的降低了查詢延時(shí)。
除了優(yōu)秀的單機(jī)并行處理能力,ClickHouse還提供了可線性拓展的分布式計(jì)算能力。ClickHouse會(huì)自動(dòng)將查詢拆解為多個(gè)task下發(fā)到集群中,然后進(jìn)行多機(jī)并行處理,最后把結(jié)果匯聚到一起。
在存在多副本的情況下,ClickHouse提供了多種query下發(fā)策略:
隨機(jī)下發(fā):在多個(gè)replica中隨機(jī)選擇一個(gè);
最近hostname原則:選擇與當(dāng)前下發(fā)機(jī)器最相近的hostname節(jié)點(diǎn),進(jìn)行query下發(fā)。在特定的網(wǎng)絡(luò)拓?fù)湎拢梢越档途W(wǎng)絡(luò)延時(shí)。而且能夠確保query下發(fā)到固定的replica機(jī)器,充分利用系統(tǒng)cache。
in order:按照特定順序逐個(gè)嘗試下發(fā),當(dāng)前一個(gè)replica不可用時(shí),順延到下一個(gè)replica。
first or random:在In Order模式下,當(dāng)?shù)谝粋€(gè)replica不可用時(shí),所有workload都會(huì)積壓到第二個(gè)Replica,導(dǎo)致負(fù)載不均衡。first or random解決了這個(gè)問(wèn)題:當(dāng)?shù)谝粋€(gè)replica不可用時(shí),隨機(jī)選擇一個(gè)其他replica,從而保證其余replica間負(fù)載均衡。另外在跨region復(fù)制場(chǎng)景下,通過(guò)設(shè)置第一個(gè)replica為本region內(nèi)的副本,可以顯著降低網(wǎng)絡(luò)延時(shí)。
ClickHouse不僅將數(shù)據(jù)按列存儲(chǔ),而且按列進(jìn)行計(jì)算。傳統(tǒng)OLTP數(shù)據(jù)庫(kù)通常采用按行計(jì)算,原因是事務(wù)處理中以點(diǎn)查為主,SQL計(jì)算量小,實(shí)現(xiàn)這些技術(shù)的收益不夠明顯。但是在分析場(chǎng)景下,單個(gè)SQL所涉及計(jì)算量可能極大,將每行作為一個(gè)基本單元進(jìn)行處理會(huì)帶來(lái)嚴(yán)重的性能損耗:
1)對(duì)每一行數(shù)據(jù)都要調(diào)用相應(yīng)的函數(shù),函數(shù)調(diào)用開(kāi)銷占比高;
2)存儲(chǔ)層按列存儲(chǔ)數(shù)據(jù),在內(nèi)存中也按列組織,但是計(jì)算層按行處理,無(wú)法充分利用CPU cache的預(yù)讀能力,造成CPU Cache miss嚴(yán)重;
3)按行處理,無(wú)法利用高效的SIMD指令;
ClickHouse實(shí)現(xiàn)了向量執(zhí)行引擎(Vectorized execution engine),對(duì)內(nèi)存中的列式數(shù)據(jù),一個(gè)batch調(diào)用一次SIMD指令(而非每一行調(diào)用一次),不僅減少了函數(shù)調(diào)用次數(shù)、降低了cache miss,而且可以充分發(fā)揮SIMD指令的并行能力,大幅縮短了計(jì)算耗時(shí)。向量執(zhí)行引擎,通常能夠帶來(lái)數(shù)倍的性能提升。
以上是“clickhouse是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當(dāng)前名稱:clickhouse是什么
標(biāo)題網(wǎng)址:http://aaarwkj.com/article36/iipcsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、商城網(wǎng)站、搜索引擎優(yōu)化、外貿(mào)建站、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)