ClickHouse 是俄羅斯的 Yandex 于 2016 年開(kāi)源的用于在線分析處理查詢(xún)(OLAP :Online Analytical Processing)MPP架構(gòu)的列式存儲(chǔ)數(shù)據(jù)庫(kù)(DBMS:Database Management System),能夠使用 SQL 查詢(xún)實(shí)時(shí)生成分析數(shù)據(jù)報(bào)告。ClickHouse的全稱(chēng)是Click Stream,Data WareHouse。
clickhouse可以做用戶行為分析,流批一體
線性擴(kuò)展和可靠性保障能夠原生支持 shard + replication
clickhouse沒(méi)有走h(yuǎn)adoop生態(tài),采用 Local attached storage 作為存儲(chǔ)
1、列式存儲(chǔ):
行式存儲(chǔ)的好處:
想查找某個(gè)人所有的屬性時(shí),可以通過(guò)一次磁盤(pán)查找加順序讀取就可以;但是當(dāng)想查所有人的年齡時(shí),需要不停的查找,或者全表掃描才行,遍歷的很多數(shù)據(jù)都是不需要的。
列式存儲(chǔ)的好處
1)、對(duì)于列的聚合、計(jì)數(shù)、求和等統(tǒng)計(jì)操作優(yōu)于行式存儲(chǔ)
2)、由于某一列的數(shù)據(jù)類(lèi)型都是相同的,針對(duì)于數(shù)據(jù)存儲(chǔ)更容易進(jìn)行數(shù)據(jù)壓縮,每一列選擇更優(yōu)的數(shù)據(jù)壓縮算法,大大提高了數(shù)據(jù)的壓縮比重
3)、數(shù)據(jù)壓縮比更好,一方面節(jié)省了磁盤(pán)空間,另一方面對(duì)于cache也有了更大的發(fā)揮空間
4)、列式存儲(chǔ)不支持事務(wù)
2、DBMS功能:幾乎覆蓋了標(biāo)準(zhǔn) SQL 的大部分語(yǔ)法,包括 DDL 和 DML、,以及配套的各種函數(shù);用戶管理及權(quán)限管理、數(shù)據(jù)的備份與恢復(fù)
3、多樣化引擎:目前包括合并樹(shù)、日志、接口和其他四大類(lèi)20多種引擎。
4、高吞吐寫(xiě)入能力:
ClickHouse采用類(lèi)LSM Tree的結(jié)構(gòu),數(shù)據(jù)寫(xiě)入后定期在后臺(tái)Compaction。通過(guò)類(lèi) LSM tree的結(jié)構(gòu), ClickHouse在數(shù)據(jù)導(dǎo)入時(shí)全部是順序append寫(xiě),寫(xiě)入后數(shù)據(jù)段不可更改,在后臺(tái)compaction時(shí)也是多個(gè)段merge sort后順序?qū)懟卮疟P(pán)。順序?qū)懙奶匦裕浞掷昧舜疟P(pán)的吞吐能力。
5、數(shù)據(jù)分區(qū)與線程及并行:
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。 極致的并行處理能力,極大的降低了查詢(xún)延時(shí)。
所以, ClickHouse 即使對(duì)于大量數(shù)據(jù)的查詢(xún)也能夠化整為零平行處理。但是有一個(gè)弊端就是對(duì)于單條查詢(xún)使用多cpu,就不利于同時(shí)并發(fā)多條查詢(xún)。所以對(duì)于高 qps 的查詢(xún)業(yè)務(wù)并不是強(qiáng)項(xiàng)。
6、ClickHouse 像很多 OLAP 數(shù)據(jù)庫(kù)一樣,單表查詢(xún)速度優(yōu)于關(guān)聯(lián)查詢(xún),而且 ClickHouse的兩者差距更為明顯。
關(guān)聯(lián)查詢(xún):clickhouse會(huì)將右表加載到內(nèi)存。
1、C++可以利用硬件優(yōu)勢(shì)
2、摒棄了hadoop生態(tài)
3、數(shù)據(jù)底層以列式存儲(chǔ)
4、利用單節(jié)點(diǎn)的多核并行處理
5、為數(shù)據(jù)建立索引一級(jí)、二級(jí)、稀疏索引
6、使用大量的算法處理數(shù)據(jù)
7、支持向量化處理
8、預(yù)先設(shè)計(jì)運(yùn)算模型-預(yù)先計(jì)算
分布式處理數(shù)據(jù)
表引擎是 ClickHouse 的一大特色??梢哉f(shuō), 表引擎決定了如何存儲(chǔ)表的數(shù)據(jù)。包括:
1、數(shù)據(jù)的存儲(chǔ)方式和位置
2、支持哪些查詢(xún)以及如何支持
3、并發(fā)數(shù)據(jù)訪問(wèn)
4、索引的使用
5、是否可以執(zhí)行多線性請(qǐng)求
6、數(shù)據(jù)復(fù)制參數(shù)
引擎決定了數(shù)據(jù)的存儲(chǔ)位置、存儲(chǔ)結(jié)構(gòu)、表的特征(是否修改操作DDL、DDL、是否支持并發(fā)操作)
1、數(shù)據(jù)庫(kù)引擎:數(shù)據(jù)庫(kù)引擎 | ClickHouse文檔
目前支持的數(shù)據(jù)庫(kù)引擎有5種:
1)、Ordinary:默認(rèn)引擎,在絕大多數(shù)情況下我們都會(huì)使用默認(rèn)引擎,使用時(shí)無(wú)須刻意聲明。在此數(shù)據(jù)庫(kù)下可以使用任意類(lèi)型的表引擎。
2)、Dictionary:字典引擎,此類(lèi)數(shù)據(jù)庫(kù)會(huì)自動(dòng)為所有數(shù)據(jù)字典創(chuàng)建它們的數(shù)據(jù)表
3)、Memory:內(nèi)存引擎,用于存放臨時(shí)數(shù)據(jù)。此類(lèi)數(shù)據(jù)庫(kù)下的數(shù)據(jù)表只會(huì)停留在內(nèi)存中,不會(huì)涉及任何磁盤(pán)操作,當(dāng)服務(wù)重啟后數(shù)據(jù)會(huì)被清除
4)、Lazy:日志引擎,此類(lèi)數(shù)據(jù)庫(kù)下只能使用Log系列的表引擎
5)、MySQL:MySQL引擎,將遠(yuǎn)程的MySQL服務(wù)器中的表映射到ClickHouse中,常用語(yǔ)數(shù)據(jù)的合并。
6)、MaterializeMySQL:MySQL數(shù)據(jù)同步;將MySQL數(shù)據(jù)全量或增量方式同步到clickhouse中,解決mysql服務(wù)并發(fā)訪問(wèn)壓力過(guò)大的問(wèn)題
2、表引擎:表引擎 | ClickHouse文檔