來(lái)源:北大青鳥(niǎo)總部 2020年09月02日 14:44
在玩手機(jī)的同時(shí),有木有發(fā)現(xiàn)它很懂你的心,給你推薦的內(nèi)容基本是你可以接受的?甚至還有點(diǎn)讓你小心動(dòng),偶爾也讓你有點(diǎn)小驚喜,讓你不得不感嘆系統(tǒng)的強(qiáng)大“太厲害了,居然
那么ClickHouse到底是什么呢?它有什么特性可以獲得如此多大廠的青睞、互聯(lián)網(wǎng)企業(yè)的使用呢?今天我們就來(lái)詳細(xì)介紹這款數(shù)據(jù)庫(kù)。
ClickHouse是用于聯(lián)機(jī)分析(即OLAP,OnLineAnalyticalProcessing)的列式數(shù)據(jù)庫(kù)管理系統(tǒng)DBMS。OLAP與OLTP是相對(duì)的,OLAP主要是用于讀取數(shù)據(jù)、進(jìn)行數(shù)據(jù)分析,輔助運(yùn)營(yíng)決策分析;OLTP(OnLineTransaction Processing)聯(lián)機(jī)事務(wù)處理是進(jìn)行事務(wù)的增刪改查操作,比如在電商系統(tǒng)中進(jìn)行商品的購(gòu)買(mǎi)、庫(kù)存減少等。
在OLAP場(chǎng)景中側(cè)重于對(duì)數(shù)據(jù)的分析,因此讀數(shù)據(jù)操作是多于寫(xiě)數(shù)據(jù)的。在數(shù)據(jù)一次性寫(xiě)入后,數(shù)據(jù)工程師需要從各個(gè)角度對(duì)數(shù)據(jù)進(jìn)行挖掘、分析,直到發(fā)現(xiàn)其中的業(yè)務(wù)變化趨勢(shì),對(duì)于數(shù)據(jù)的讀取是非常頻繁,而且不需要數(shù)據(jù)的更新,也不需要事務(wù)來(lái)強(qiáng)調(diào)一致性,只要獲取到數(shù)據(jù)就好啦,ClickHouse非常適合作為底層數(shù)據(jù)庫(kù)提供支持。
所謂列式數(shù)據(jù)庫(kù)指的是數(shù)據(jù)在數(shù)據(jù)庫(kù)中存儲(chǔ)的方式。在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)如Mysql中,數(shù)據(jù)是按行來(lái)存儲(chǔ)的,而在列式數(shù)據(jù)庫(kù)如ClickHouse中,數(shù)據(jù)是按列來(lái)存儲(chǔ)的。這樣存儲(chǔ)的好處就是在做數(shù)據(jù)分析時(shí)選擇某幾列來(lái)作為分析屬性,獲取數(shù)據(jù)非???,延遲低,如果按行讀取,每次只能讀取一個(gè)數(shù)據(jù),有10000條就需要讀取1000次,降低了效率。
在分析場(chǎng)景下,列式數(shù)據(jù)庫(kù)還有很多其它的優(yōu)點(diǎn),比如低成本、低帶寬、低延時(shí)。在列式數(shù)據(jù)庫(kù)中我們知道同一列的數(shù)據(jù)都是一個(gè)類型的,那么可以將它進(jìn)行壓縮,在同樣的存儲(chǔ)空間下可以放更多的數(shù)據(jù),既節(jié)省了網(wǎng)絡(luò)帶寬,也提高了數(shù)據(jù)的cache命中率,更容易更快的獲取到數(shù)據(jù)。
介紹了ClickHouse的基本特性之后,我們?cè)購(gòu)拇鎯?chǔ)層和計(jì)算層看看它又給我們帶來(lái)哪些驚喜呢?在存儲(chǔ)層它實(shí)現(xiàn)了數(shù)據(jù)有序存儲(chǔ)、主鍵索引、稀疏索引、數(shù)據(jù)分區(qū)分片、主備復(fù)制等功能。
所謂數(shù)據(jù)的有序存儲(chǔ)指的是數(shù)據(jù)在建表時(shí)可以將數(shù)據(jù)按照某些列進(jìn)行排序,排序之后,相同類型的數(shù)據(jù)在磁盤(pán)上有序的存儲(chǔ),在進(jìn)行范圍查詢時(shí)所獲取的數(shù)據(jù)都存儲(chǔ)在一個(gè)或若干個(gè)連續(xù)的空間內(nèi),極大的減少了磁盤(pán)IO時(shí)間;所謂數(shù)據(jù)分區(qū)分片,指的是在ClickHouse的部署模式上支持單機(jī)模式和分布式集群模式,在分布式中會(huì)把數(shù)據(jù)分為多個(gè)分片,并且分布到不同的節(jié)點(diǎn)上,它提供了豐富的分片策略,包含random隨機(jī)分片(將寫(xiě)入數(shù)據(jù)隨機(jī)分發(fā)到集群中的某個(gè)節(jié)點(diǎn))、constant固定分片(將寫(xiě)入數(shù)據(jù)分發(fā)到某個(gè)固定節(jié)點(diǎn))、columnvalue分片(將寫(xiě)入數(shù)據(jù)按某一列的值進(jìn)行hash分片)、自定義表達(dá)式分片(將寫(xiě)入數(shù)據(jù)按照自定義的規(guī)則進(jìn)行hash分片)。
在計(jì)算層ClickHouse提供了多核并行、分布式計(jì)算、近似計(jì)算、復(fù)雜數(shù)據(jù)類型支持等技術(shù)能力,最大化程度利用CPU資源,提升系統(tǒng)查詢速度。所謂多核并行指的是在ClickHouse中數(shù)據(jù)是被分成了多個(gè)分區(qū),查詢某條數(shù)據(jù)時(shí)通過(guò)多分區(qū)的數(shù)據(jù)利用CPU的多核同時(shí)并行處理獲取數(shù)據(jù),降低了查詢時(shí)長(zhǎng);所謂分布式計(jì)算指的是ClickHouse將查詢?nèi)蝿?wù)拆分成多個(gè)子任務(wù)下發(fā)到多個(gè)集群中進(jìn)行多機(jī)并行處理,最后匯聚結(jié)果給到用戶,提供最近hostname規(guī)則(即將任務(wù)下發(fā)到機(jī)器最近的hostname節(jié)點(diǎn))、inorder(即按順序進(jìn)行分發(fā),當(dāng)某個(gè)分片不可用時(shí),下發(fā)到下一個(gè)分片);所謂近似計(jì)算指的是犧牲一定的精確度獲取數(shù)據(jù),在海量數(shù)據(jù)的分析中,其實(shí)并不需要非常精準(zhǔn)的數(shù)據(jù),近似數(shù)據(jù)足以分析決策,ClickHouse提供了中位數(shù)、分位數(shù)等多種聚合函數(shù),極大的提高了查詢性能,減輕了計(jì)算壓力。
ClickHouse的發(fā)展可謂是非??焖?,除了各個(gè)大廠都在使用之外,在社區(qū)方面,github標(biāo)記為星級(jí)項(xiàng)目的人超過(guò)9000,成為最受開(kāi)源的項(xiàng)目之一。它是一套完整的解決方案,自帶存儲(chǔ)能力、計(jì)算能力,自己實(shí)現(xiàn)了分布式計(jì)算、分布式集群部署,完全高可用,真可謂是簡(jiǎn)單靈活又不失強(qiáng)大!
在云計(jì)算、大數(shù)據(jù)的互聯(lián)網(wǎng)時(shí)代,數(shù)據(jù)分析成為了一項(xiàng)尤其重要的能力,如果你還會(huì)這么一門(mén)大數(shù)據(jù)庫(kù)技術(shù),毫無(wú)疑問(wèn),絕對(duì)會(huì)為你的簡(jiǎn)歷加分喔,畢竟阿里、騰訊、頭條、快手都已經(jīng)在使用ClickHouse了呀~