ClickHouse核心功能介紹
-
完備的DBMS功能
ClickHouse擁有完備的DBMS數(shù)據(jù)庫(kù)管理系統(tǒng)(Database Management System),基本功能如下所示:
DDL(數(shù)據(jù)定義語(yǔ)言):可以動(dòng)態(tài)地創(chuàng)建、修改或刪除數(shù)據(jù)庫(kù)、表和視圖,而無(wú)須重啟服務(wù)。
DML(數(shù)據(jù)操作語(yǔ)言):可以動(dòng)態(tài)查詢(xún)、插入、修改或刪除數(shù)據(jù)。
權(quán)限控制:可以按照用戶(hù)粒度設(shè)置數(shù)據(jù)庫(kù)或者表的操作權(quán)限,保障數(shù)據(jù)的安全性。
數(shù)據(jù)備份與恢復(fù):提供了數(shù)據(jù)備份導(dǎo)出與導(dǎo)入恢復(fù)機(jī)制,滿足生產(chǎn)環(huán)境的要求。
分布式管理:提供集群模式,能夠自動(dòng)管理多個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)。
ClickHouse擁有完備的DBMS數(shù)據(jù)庫(kù)管理系統(tǒng)(Database Management System),基本功能如下所示:
DDL(數(shù)據(jù)定義語(yǔ)言):可以動(dòng)態(tài)地創(chuàng)建、修改或刪除數(shù)據(jù)庫(kù)、表和視圖,而無(wú)須重啟服務(wù)。
DML(數(shù)據(jù)操作語(yǔ)言):可以動(dòng)態(tài)查詢(xún)、插入、修改或刪除數(shù)據(jù)。
權(quán)限控制:可以按照用戶(hù)粒度設(shè)置數(shù)據(jù)庫(kù)或者表的操作權(quán)限,保障數(shù)據(jù)的安全性。
數(shù)據(jù)備份與恢復(fù):提供了數(shù)據(jù)備份導(dǎo)出與導(dǎo)入恢復(fù)機(jī)制,滿足生產(chǎn)環(huán)境的要求。
分布式管理:提供集群模式,能夠自動(dòng)管理多個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)。
-
列式存儲(chǔ)與數(shù)據(jù)壓縮
ClickHouse是一款使用列式存儲(chǔ)的數(shù)據(jù)庫(kù),數(shù)據(jù)按列進(jìn)行組織,屬于同一列的數(shù)據(jù)會(huì)被保存在一起,列與列之間也會(huì)由不同的文件分別保存。
在執(zhí)行數(shù)據(jù)查詢(xún)時(shí),列式存儲(chǔ)可以減少數(shù)據(jù)掃描范圍和數(shù)據(jù)傳輸時(shí)的大小,提高了數(shù)據(jù)查詢(xún)的效率。
ClickHouse是一款使用列式存儲(chǔ)的數(shù)據(jù)庫(kù),數(shù)據(jù)按列進(jìn)行組織,屬于同一列的數(shù)據(jù)會(huì)被保存在一起,列與列之間也會(huì)由不同的文件分別保存。
在執(zhí)行數(shù)據(jù)查詢(xún)時(shí),列式存儲(chǔ)可以減少數(shù)據(jù)掃描范圍和數(shù)據(jù)傳輸時(shí)的大小,提高了數(shù)據(jù)查詢(xún)的效率。
-
向量化執(zhí)行引擎
ClickHouse利用CPU的SIMD指令實(shí)現(xiàn)了向量化執(zhí)行。SIMD的全稱(chēng)是Single Instruction Multiple Data,即用單條指令操作多條數(shù)據(jù),通過(guò)數(shù)據(jù)并行以提高性能的一種實(shí)現(xiàn)方式 ( 其他的還有指令級(jí)并行和線程級(jí)并行 ),它的原理是在CPU寄存器層面實(shí)現(xiàn)數(shù)據(jù)的并行操作。
ClickHouse利用CPU的SIMD指令實(shí)現(xiàn)了向量化執(zhí)行。SIMD的全稱(chēng)是Single Instruction Multiple Data,即用單條指令操作多條數(shù)據(jù),通過(guò)數(shù)據(jù)并行以提高性能的一種實(shí)現(xiàn)方式 ( 其他的還有指令級(jí)并行和線程級(jí)并行 ),它的原理是在CPU寄存器層面實(shí)現(xiàn)數(shù)據(jù)的并行操作。
-
關(guān)系模型與SQL查詢(xún)
ClickHouse完全使用SQL作為查詢(xún)語(yǔ)言,提供了標(biāo)準(zhǔn)協(xié)議的SQL查詢(xún)接口,使得現(xiàn)有的第三方分析可視化系統(tǒng)可以輕松與它集成對(duì)接。
同時(shí)ClickHouse使用了關(guān)系模型,所以將構(gòu)建在傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)或數(shù)據(jù)倉(cāng)庫(kù)之上的系統(tǒng)遷移到ClickHouse的成本會(huì)變得更低。
ClickHouse完全使用SQL作為查詢(xún)語(yǔ)言,提供了標(biāo)準(zhǔn)協(xié)議的SQL查詢(xún)接口,使得現(xiàn)有的第三方分析可視化系統(tǒng)可以輕松與它集成對(duì)接。
同時(shí)ClickHouse使用了關(guān)系模型,所以將構(gòu)建在傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)或數(shù)據(jù)倉(cāng)庫(kù)之上的系統(tǒng)遷移到ClickHouse的成本會(huì)變得更低。
-
數(shù)據(jù)分片與分布式查詢(xún)
ClickHouse集群由一到多個(gè)分片組成,而每個(gè)分片則對(duì)應(yīng)了ClickHouse的一個(gè)服務(wù)節(jié)點(diǎn)。分片的數(shù)量上限取決于節(jié)點(diǎn)數(shù)量(一個(gè)分片只能對(duì)應(yīng)一個(gè)服務(wù)節(jié)點(diǎn))。
ClickHouse提供了本地表 (Local Table)與分布式表 (Distributed Table)的概念。一張本地表等同于一份數(shù)據(jù)的分片。而分布式表本身不存儲(chǔ)任何數(shù)據(jù),它是本地表的訪問(wèn)代理,其作用類(lèi)似分庫(kù)中間件。借助分布式表,能夠代理訪問(wèn)多個(gè)數(shù)據(jù)分片,從而實(shí)現(xiàn)分布式查詢(xún)。
ClickHouse集群由一到多個(gè)分片組成,而每個(gè)分片則對(duì)應(yīng)了ClickHouse的一個(gè)服務(wù)節(jié)點(diǎn)。分片的數(shù)量上限取決于節(jié)點(diǎn)數(shù)量(一個(gè)分片只能對(duì)應(yīng)一個(gè)服務(wù)節(jié)點(diǎn))。
ClickHouse提供了本地表 (Local Table)與分布式表 (Distributed Table)的概念。一張本地表等同于一份數(shù)據(jù)的分片。而分布式表本身不存儲(chǔ)任何數(shù)據(jù),它是本地表的訪問(wèn)代理,其作用類(lèi)似分庫(kù)中間件。借助分布式表,能夠代理訪問(wèn)多個(gè)數(shù)據(jù)分片,從而實(shí)現(xiàn)分布式查詢(xún)。
ClickHouse應(yīng)用場(chǎng)景
ClickHouse適合對(duì)結(jié)構(gòu)定義良好并且不可變的事件/日志流進(jìn)行分析。
-
適用場(chǎng)景
1、網(wǎng)絡(luò)/APP流量分析
2、用戶(hù)行為記錄分析
3、人群預(yù)估、人群畫(huà)像
4、商業(yè)智能(BI)
5、監(jiān)控系統(tǒng)
6、大寬表,單表聚合查詢(xún)
1、網(wǎng)絡(luò)/APP流量分析
2、用戶(hù)行為記錄分析
3、人群預(yù)估、人群畫(huà)像
4、商業(yè)智能(BI)
5、監(jiān)控系統(tǒng)
6、大寬表,單表聚合查詢(xún)
-
不適用場(chǎng)景
1、OLTP
2、key-value高頻訪問(wèn)
3、文檔存儲(chǔ)
4、非結(jié)構(gòu)化數(shù)據(jù)
5、稀疏索引使得不適合通過(guò)其鍵檢索單行的點(diǎn)查詢(xún)
6、不適合頻繁更新和刪除的場(chǎng)景
1、OLTP
2、key-value高頻訪問(wèn)
3、文檔存儲(chǔ)
4、非結(jié)構(gòu)化數(shù)據(jù)
5、稀疏索引使得不適合通過(guò)其鍵檢索單行的點(diǎn)查詢(xún)
6、不適合頻繁更新和刪除的場(chǎng)景
ClickHouse開(kāi)源增強(qiáng)特性
MRS ClickHouse具備集群模式升級(jí)、平滑彈性擴(kuò)容、高可用HA部署等優(yōu)勢(shì)能力,相關(guān)介紹如下:
1、集群模式升級(jí)
如下圖所示,多個(gè)ClickHouse節(jié)點(diǎn)組成的集群,沒(méi)有中心節(jié)點(diǎn),更多的是一個(gè)靜態(tài)資源池的概念,業(yè)務(wù)要使用ClickHouse集群模式,需要預(yù)先在各個(gè)節(jié)點(diǎn)的配置文件中定義cluster信息,等所有參與的節(jié)點(diǎn)達(dá)成共識(shí),業(yè)務(wù)才可以正確的交互訪問(wèn),也就是說(shuō)配置文件中的cluster才是通常理解的“集群”概念。
常見(jiàn)的數(shù)據(jù)庫(kù)系統(tǒng),隱藏了表級(jí)以下的數(shù)據(jù)分區(qū)、副本存儲(chǔ)等細(xì)節(jié),用戶(hù)是無(wú)感知的,而ClickHouse則要求用戶(hù)主動(dòng)來(lái)規(guī)劃和定義數(shù)據(jù)分片(shard)、分區(qū)(partition)、副本(replica)位置等詳細(xì)配置。它的這種類(lèi)似“手動(dòng)擋”的屬性,給用戶(hù)帶來(lái)極不友好的體驗(yàn),所以MRS服務(wù)的ClickHouse實(shí)例對(duì)這些工作做了統(tǒng)一的打包處理,適配成了“自動(dòng)擋”,實(shí)現(xiàn)了統(tǒng)一管理,靈活易用。具體部署形態(tài)上,一個(gè)ClickHouse實(shí)例將包含3個(gè)Zookeeper節(jié)點(diǎn)和多個(gè)ClickHouse節(jié)點(diǎn),采用Dedicated Replica模式,數(shù)據(jù)雙副本高可靠。
2、平滑的彈性擴(kuò)容能力
隨著業(yè)務(wù)的快速增長(zhǎng),面對(duì)集群存儲(chǔ)容量或者CPU計(jì)算資源接近極限等場(chǎng)景,MRS服務(wù)提供了ClickHouse數(shù)據(jù)遷移工具,該工具可以將某幾個(gè)ClickHouseServer實(shí)例節(jié)點(diǎn)上的一個(gè)或多個(gè)MergeTree引擎分區(qū)表的部分分區(qū)遷移至其他ClickHouseServer節(jié)點(diǎn)上相同的表中,以便保障業(yè)務(wù)可用性,實(shí)現(xiàn)了更加平滑的擴(kuò)容能力。
在用戶(hù)對(duì)集群進(jìn)行擴(kuò)容ClickHouse節(jié)點(diǎn)時(shí),可以使用該工具將原節(jié)點(diǎn)上的部分?jǐn)?shù)據(jù)遷移至新增節(jié)點(diǎn)上,從而達(dá)到擴(kuò)容后的數(shù)據(jù)均衡。
3、高可用HA部署架構(gòu)
MRS服務(wù)提供了基于ELB(Elastic Load Balance)的HA部署架構(gòu),可以將用戶(hù)訪問(wèn)流量自動(dòng)分發(fā)到多臺(tái)后端節(jié)點(diǎn),擴(kuò)展系統(tǒng)對(duì)外的服務(wù)能力,實(shí)現(xiàn)更高水平的應(yīng)用容錯(cuò)。如下圖所示,客戶(hù)端應(yīng)用請(qǐng)求集群時(shí),使用ELB來(lái)進(jìn)行流量分發(fā),通過(guò)ELB的輪詢(xún)機(jī)制,寫(xiě)不同節(jié)點(diǎn)上的本地表,讀不同節(jié)點(diǎn)上的分布式表,這樣,無(wú)論集群寫(xiě)入的負(fù)載、讀的負(fù)載以及應(yīng)用接入的高可用性都具備了有力的保障。
ClickHouse集群發(fā)放成功后,每個(gè)ClickHouse實(shí)例節(jié)點(diǎn)對(duì)應(yīng)一個(gè)副本replica,兩個(gè)副本組成一個(gè)shard邏輯分片。