ClickHouse的查詢(xún)性能優(yōu)勢(shì)
01 向量化引擎
在存儲(chǔ)引擎的設(shè)計(jì)上,ClickHouse采用了基于列存儲(chǔ)的存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)。列存儲(chǔ)在很多場(chǎng)景中極大地降低了數(shù)據(jù)分析過(guò)程中讀取的數(shù)據(jù)量,圖1展示了列存儲(chǔ)相比于行存儲(chǔ)減少數(shù)據(jù)量的原理。明顯地,在寬表場(chǎng)景下,由于行存儲(chǔ)在抽取某些列時(shí)必須讀取該行的所有列,因此讀取了大量無(wú)效的數(shù)據(jù)(圖1種行存方案中未加▲的深色方塊數(shù)據(jù)為無(wú)效的不參與計(jì)算的列),從而降低了讀取效率。
▲圖1 列存和行存的對(duì)比
在計(jì)算引擎的設(shè)計(jì)上,ClickHouse首次使用了向量化計(jì)算引擎。向量化計(jì)算引擎的計(jì)算原理如圖2所示,借助CPU提供的SIMD技術(shù),可以充分發(fā)揮現(xiàn)代計(jì)算機(jī)體系架構(gòu)的優(yōu)勢(shì),最大限度地壓榨單機(jī)性能。
▲圖2 SIMD加速原理示意圖
而ClickHouse對(duì)單機(jī)性能的壓榨,使得ClickHouse可以在單機(jī)部署的情況下處理非常大量的數(shù)據(jù),在實(shí)際使用中,基本上百億以下的數(shù)據(jù)表,都可以使用單機(jī)解決。這種程度的單機(jī)處理能力已經(jīng)可以滿(mǎn)足非常多企業(yè)的需要。這也很大程度上解決了傳統(tǒng)大數(shù)據(jù)數(shù)倉(cāng)帶來(lái)的效率低和成本高的問(wèn)題。
02 高效的數(shù)據(jù)壓縮
列存儲(chǔ)為ClickHouse帶來(lái)的另一個(gè)非常明顯的優(yōu)勢(shì)就是大幅度提高了數(shù)據(jù)壓縮空間。列存儲(chǔ)的本質(zhì)是將同一列的數(shù)據(jù)存儲(chǔ)在連續(xù)的空間,相比于行存儲(chǔ),列存儲(chǔ)在連續(xù)的空間上更有規(guī)律。而規(guī)律的存儲(chǔ),帶來(lái)了更大的壓縮率。從而大幅減少壓縮后的數(shù)據(jù)大小,極大地減少了磁盤(pán)的I/O時(shí)間。
作者在實(shí)際項(xiàng)目中,基本都能做到8:1的壓縮比,即8T的數(shù)據(jù)只需要1T的存儲(chǔ)空間即可。這個(gè)提高了計(jì)算效率的同時(shí)也降低了存儲(chǔ)成本的。相比于Hadoop的三副本策略,存儲(chǔ)成本大幅降低。
讀者可能會(huì)存在這個(gè)疑問(wèn):Hadoop的三副本能保證數(shù)據(jù)不丟失,而ClickHouse的存儲(chǔ)是無(wú)法保證數(shù)據(jù)不丟失的,那么二者是否不能放在一起比較?這個(gè)疑問(wèn)是有一定道理的,二者應(yīng)用場(chǎng)景不同,面臨的問(wèn)題也不同。Hadoop如果需要發(fā)揮能力,必須有一個(gè)龐大的集群來(lái)攤銷(xiāo)低效率帶來(lái)的額外處理時(shí)間,這意味著集群中任何一臺(tái)機(jī)器出現(xiàn)故障,都有可能導(dǎo)致集群不可用,從概率學(xué)上看,假設(shè)一臺(tái)機(jī)器的故障率是1%,那么100臺(tái)機(jī)器中有一臺(tái)出現(xiàn)故障的概率已經(jīng)接近100%了。由此可見(jiàn),在一個(gè)龐大的Hadoop集群中是必須考慮機(jī)器故障的。
而ClickHouse則不同,ClickHouse在設(shè)計(jì)時(shí)傾向于榨干單機(jī)性能,在很多場(chǎng)景下用單機(jī)解決問(wèn)題。這種設(shè)計(jì)使得單機(jī)ClickHouse出現(xiàn)故障的概率只有1%,可以在一定程度上忽略機(jī)器故障。當(dāng)然,具體場(chǎng)景需要讀者依據(jù)業(yè)務(wù)需求進(jìn)行分析,如果確實(shí)需要保證數(shù)據(jù)不丟失,可以使用RAID在物理層面提供保障,也可以使用ClickHouse提供的復(fù)制表從軟件上來(lái)解決該問(wèn)題。總之,ClickHouse提供了比較靈活的機(jī)制。
03 高效的I/O優(yōu)化
超高的壓縮率為ClickHouse帶來(lái)到了更低的數(shù)據(jù)存儲(chǔ)成本和更低的I/O時(shí)間,同時(shí)也帶來(lái)了計(jì)算時(shí)的額外開(kāi)銷(xiāo)——解壓。數(shù)據(jù)壓縮后存儲(chǔ)到磁盤(pán)上,意味著壓縮的數(shù)據(jù)被讀取后無(wú)法直接獲取內(nèi)容,也就無(wú)法參與分析的計(jì)算,必須經(jīng)過(guò)解壓還原原始數(shù)據(jù),才可以參與計(jì)算分析。那么如何最大限度地減少壓縮時(shí)間,甚至在數(shù)據(jù)被程序讀取前就過(guò)濾掉一部分不相關(guān)的數(shù)據(jù),成為具備壓縮能力的存儲(chǔ)引擎的一大挑戰(zhàn)。
ClickHouse通過(guò)基于LSM技術(shù)的稀疏索引來(lái)應(yīng)對(duì)這個(gè)挑戰(zhàn)。通過(guò)LSM技術(shù),保證數(shù)據(jù)寫(xiě)入磁盤(pán)前就已經(jīng)按照要求做好了排序,這意味著數(shù)倉(cāng)中非常常見(jiàn)的范圍查詢(xún)場(chǎng)景可以減少非常大量的I/O時(shí)間,從而提升查詢(xún)速度。
本文摘編自《ClickHouse性能之巔:從架構(gòu)設(shè)計(jì)解讀性能之謎》,經(jīng)出版方授權(quán)發(fā)布。(書(shū)號(hào):9787111716587)轉(zhuǎn)載請(qǐng)保留文章出處。
關(guān)于作者:陳峰,資深大數(shù)據(jù)專(zhuān)家和架構(gòu)師,ClickHouse技術(shù)專(zhuān)家,滴普科技(2B領(lǐng)域獨(dú)角獸)合伙人兼首席架構(gòu)師?!禖lickHouse性能之巔:從架構(gòu)設(shè)計(jì)解讀性能之謎》作者。