?一.?概述
隨著物聯(lián)網(wǎng)IOT時(shí)代的來(lái)臨,IOT設(shè)備感知和報(bào)警存儲(chǔ)的數(shù)據(jù)越來(lái)越大,有用的價(jià)值數(shù)據(jù)需要數(shù)據(jù)分析師去分析。大數(shù)據(jù)分析成了非常重要的環(huán)節(jié)。當(dāng)然近兩年開啟的開源大潮,為大數(shù)據(jù)分析工程師提供了十分富余的工具。但這同時(shí)也增加了開發(fā)者選擇合適的工具的難度,尤其對(duì)于新入行的開發(fā)者來(lái)說(shuō)。學(xué)習(xí)成本,框架的多樣化和復(fù)雜度成了很大的難題。例如kafka,hdfs,spark,hive 等等組合才能產(chǎn)生最后的分析結(jié)果。把各種開源框架、工具、庫(kù)、平臺(tái)人工整合到一起所需工作之復(fù)雜,是大數(shù)據(jù)領(lǐng)域開發(fā)和數(shù)據(jù)分析師常有的抱怨之一,也是他們支持大數(shù)據(jù)分析平臺(tái)簡(jiǎn)單化和統(tǒng)一化的首要原因。
二.Clickhouse 發(fā)展歷史
Yandex在2016年6月15日開源了一個(gè)數(shù)據(jù)分析的數(shù)據(jù)庫(kù),名字叫做ClickHouse,這對(duì)保守俄羅斯人來(lái)說(shuō)是個(gè)特大事。更讓人驚訝的是,這個(gè)列式存儲(chǔ)數(shù)據(jù)庫(kù)的跑分要超過(guò)很多流行的商業(yè)MPP數(shù)據(jù)庫(kù)軟件,例如Vertica。如果你沒有聽過(guò)Vertica,那你一定聽過(guò) Michael Stonebraker,2014年圖靈獎(jiǎng)的獲得者,PostgreSQL和Ingres發(fā)明者(Sybase和SQL Server都是繼承 Ingres而來(lái)的), Paradigm4和SciDB的創(chuàng)辦者。Michael Stonebraker于2005年創(chuàng)辦Vertica公司,后來(lái)該公司被HP收購(gòu),HP Vertica成為MPP列式存儲(chǔ)商業(yè)數(shù)據(jù)庫(kù)的高性能代表,F(xiàn)acebook就購(gòu)買了Vertica數(shù)據(jù)用于用戶行為分析。
三.Clickhouse 支持特性剖析
在看Clickhouse 運(yùn)行場(chǎng)景之前要了解技術(shù)的功能特性以及弊端是一個(gè)技術(shù)架構(gòu)以及開發(fā)人員所要了解的。只有”知己知彼”才可以”百戰(zhàn)不殆”,接下來(lái)我們看一下Clickhouse的具體特點(diǎn);
?? 1.真正的面向列的DBMS
?? 2.數(shù)據(jù)高效壓縮
?? 3.磁盤存儲(chǔ)的數(shù)據(jù)
?? 4.多核并行處理
?? 5.在多個(gè)服務(wù)器上分布式處理
?? 6.SQL語(yǔ)法支持
?? 7.向量化引擎
?? 8.實(shí)時(shí)數(shù)據(jù)更新
?? 9.索引
?? 10.適合在線查詢
?? 11.支持近似預(yù)估計(jì)算
?? 12.支持嵌套的數(shù)據(jù)結(jié)構(gòu)
?? 支持?jǐn)?shù)組作為數(shù)據(jù)類型
?? 13.支持限制查詢復(fù)雜性以及配額
?? 14.復(fù)制數(shù)據(jù)復(fù)制和對(duì)數(shù)據(jù)完整性的支持
#我們來(lái)看看其中的一些功能:
1.真正的面向列的DBMS
在一個(gè)真正的面向列的DBMS中,沒有任何“垃圾”存儲(chǔ)在值中。例如,必須支持定長(zhǎng)數(shù)值,以避免在數(shù)值旁邊存儲(chǔ)長(zhǎng)度“數(shù)字”。例如,十億個(gè)UInt8類型的值實(shí)際上應(yīng)該消耗大約1 GB的未壓縮磁盤空間,否則這將強(qiáng)烈影響CPU的使用。由于解壓縮的速度(CPU使用率)主要取決于未壓縮的數(shù)據(jù)量,所以即使在未壓縮的情況下,緊湊地存儲(chǔ)數(shù)據(jù)(沒有任何“垃圾”)也是非常重要的。
因?yàn)橛行┫到y(tǒng)可以單獨(dú)存儲(chǔ)單獨(dú)列的值,但由于其他場(chǎng)景的優(yōu)化,無(wú)法有效處理分析查詢。例如HBase,BigTable,Cassandra和HyperTable。在這些系統(tǒng)中,每秒鐘可以獲得大約十萬(wàn)行的吞吐量,但是每秒不會(huì)達(dá)到數(shù)億行。
另外,ClickHouse是一個(gè)DBMS,而不是一個(gè)單一的數(shù)據(jù)庫(kù)。ClickHouse允許在運(yùn)行時(shí)創(chuàng)建表和數(shù)據(jù)庫(kù),加載數(shù)據(jù)和運(yùn)行查詢,而無(wú)需重新配置和重新啟動(dòng)服務(wù)器。
2.數(shù)據(jù)壓縮
一些面向列的DBMS(InfiniDB CE和MonetDB)不使用數(shù)據(jù)壓縮。但是,數(shù)據(jù)壓縮確實(shí)提高了性能。
3.磁盤存儲(chǔ)的數(shù)據(jù)
許多面向列的DBMS(SAP HANA和GooglePowerDrill)只能在內(nèi)存中工作。但即使在數(shù)千臺(tái)服務(wù)器上,內(nèi)存也太小,無(wú)法在Yandex.Metrica中存儲(chǔ)所有瀏覽量和會(huì)話。
4.多核并行處理
多核多節(jié)點(diǎn)并行化大型查詢。
5.在多個(gè)服務(wù)器上分布式處理
上面列出的列式DBMS幾乎都不支持分布式處理。在ClickHouse中,數(shù)據(jù)可以駐留在不同的分片上。每個(gè)分片可以是用于容錯(cuò)的一組副本。查詢?cè)谒蟹制喜⑿刑幚?。這對(duì)用戶來(lái)說(shuō)是透明的。
6.SQL支持
如果你熟悉標(biāo)準(zhǔn)的SQL,我們不能真正談?wù)揝QL的支持。NULL不支持。所有的函數(shù)都有不同的名字。JOIN支持。子查詢?cè)贔ROM,IN,JOIN子句中被支持;標(biāo)量子查詢支持。關(guān)聯(lián)子查詢不支持。
7.向量化引擎
數(shù)據(jù)不僅按列存儲(chǔ),而且由矢量 - 列的部分進(jìn)行處理。這使我們能夠?qū)崿F(xiàn)高CPU性能。
8.實(shí)時(shí)數(shù)據(jù)更新
ClickHouse支持主鍵表。為了快速執(zhí)行對(duì)主鍵范圍的查詢,數(shù)據(jù)使用合并樹(MergeTree)進(jìn)行遞增排序。由于這個(gè)原因,數(shù)據(jù)可以不斷地添加到表中。添加數(shù)據(jù)時(shí)無(wú)鎖處理。
9.索引
例如,帶有主鍵可以在特定的時(shí)間范圍內(nèi)為特定客戶端(Metrica計(jì)數(shù)器)抽取數(shù)據(jù),并且延遲時(shí)間小于幾十毫秒。
10.支持在線查詢
這讓我們使用該系統(tǒng)作為Web界面的后端。低延遲意味著可以無(wú)延遲實(shí)時(shí)地處理查詢,而Yandex.Metrica界面頁(yè)面正在加載(在線模式)。
11.支持近似計(jì)算
1.系統(tǒng)包含用于近似計(jì)算各種值,中位數(shù)和分位數(shù)的集合函數(shù)。
2.支持基于部分(樣本)數(shù)據(jù)運(yùn)行查詢并獲得近似結(jié)果。在這種情況下,從磁盤檢索比例較少的數(shù)據(jù)。
3.支持為有限數(shù)量的隨機(jī)密鑰(而不是所有密鑰)運(yùn)行聚合。在數(shù)據(jù)中密鑰分發(fā)的特定條件下,這提供了相對(duì)準(zhǔn)確的結(jié)果,同時(shí)使用較少的資源。
12.數(shù)據(jù)復(fù)制和對(duì)數(shù)據(jù)完整性的支持。
使用異步多主復(fù)制。寫入任何可用的副本后,數(shù)據(jù)將分發(fā)到所有剩余的副本。系統(tǒng)在不同的副本上保持相同的數(shù)據(jù)。數(shù)據(jù)在失敗后自動(dòng)恢復(fù)
ClickHouse的不完美:
?? 1.不支持事物。
?? 2.不支持Update/Delete操作。
?? 3.支持有限操作系統(tǒng)。
現(xiàn)在支持ubuntu,centos 需要自己編譯,不過(guò)有熱心人已經(jīng)編譯好了,拿來(lái)用就行。對(duì)于Windows? 不支持。
四.ClickHouse應(yīng)用場(chǎng)景
自從ClickHouse2016年6月15日開源后,ClickHouse中文社區(qū)隨后成立。中文開源組開始以易觀,??低?美團(tuán),新浪,京東,58,騰訊,酷狗音樂和俄羅斯開源社區(qū)等人員組成,隨著開源社區(qū)的不斷活躍,陸續(xù)有神州數(shù)碼,青云,PingCAP,中軟國(guó)際等公司成員加入以及其他公司成員加入。初始在群里討論技術(shù)后續(xù)有一些大型公司陸續(xù)運(yùn)用到項(xiàng)目中,介于分享不方便問(wèn)題解決,建立了相應(yīng)的論壇。根據(jù)交流得知一些大公司已經(jīng)運(yùn)用。
#可以應(yīng)用以下場(chǎng)景:
1.電信行業(yè)用于存儲(chǔ)數(shù)據(jù)和統(tǒng)計(jì)數(shù)據(jù)使用。
2.新浪微博用于用戶行為數(shù)據(jù)記錄和分析工作。
3.用于廣告網(wǎng)絡(luò)和RTB,電子商務(wù)的用戶行為分析。
4.信息安全里面的日志分析。
5.檢測(cè)和遙感信息的挖掘。
6.商業(yè)智能。
7.網(wǎng)絡(luò)游戲以及物聯(lián)網(wǎng)的數(shù)據(jù)處理和價(jià)值數(shù)據(jù)分析。
8.最大的應(yīng)用來(lái)自于Yandex的統(tǒng)計(jì)分析服務(wù)Yandex.Metrica,類似于谷歌Analytics(GA),或友盟統(tǒng)計(jì),小米統(tǒng)計(jì),幫助網(wǎng)站或移動(dòng)應(yīng)用進(jìn)行數(shù)據(jù)分析和精細(xì)化運(yùn)營(yíng)工具,據(jù)稱Yandex.Metrica為世界上第二大的網(wǎng)站分析平臺(tái)。ClickHouse在這個(gè)應(yīng)用中,部署了近四百臺(tái)機(jī)器,每天支持200億的事件和歷史總記錄超過(guò)13萬(wàn)億條記錄,這些記錄都存有原始數(shù)據(jù)(非聚合數(shù)據(jù)),隨時(shí)可以使用SQL查詢和分析,生成用戶報(bào)告。
五.ClickHouse 和一些技術(shù)的比較
1.商業(yè)OLAP數(shù)據(jù)庫(kù)
例如:HP Vertica, Actian the Vector,
區(qū)別:ClickHouse是開源而且免費(fèi)的
2.云解決方案
例如:亞馬遜RedShift和谷歌的BigQuery
區(qū)別:ClickHouse可以使用自己機(jī)器部署,無(wú)需為云付費(fèi)
3.Hadoop生態(tài)軟件
例如:Cloudera Impala, Spark SQL, Facebook Presto , Apache Drill
區(qū)別:
ClickHouse支持實(shí)時(shí)的高并發(fā)系統(tǒng)
ClickHouse不依賴于Hadoop生態(tài)軟件和基礎(chǔ)
ClickHouse支持分布式機(jī)房的部署
4.開源OLAP數(shù)據(jù)庫(kù)
例如:InfiniDB, MonetDB, LucidDB
區(qū)別:這些項(xiàng)目的應(yīng)用的規(guī)模較小,并沒有應(yīng)用在大型的互聯(lián)網(wǎng)服務(wù)當(dāng)中,相比之下,ClickHouse的成熟度和穩(wěn)定性遠(yuǎn)遠(yuǎn)超過(guò)這些軟件。
5.開源分析,非關(guān)系型數(shù)據(jù)庫(kù)
例如:Druid , Apache Kylin
區(qū)別:ClickHouse可以支持從原始數(shù)據(jù)的直接查詢,ClickHouse支持類SQL語(yǔ)言,提供了傳統(tǒng)關(guān)系型數(shù)據(jù)的便利。
六.總結(jié)
在大數(shù)據(jù)分析領(lǐng)域中,傳統(tǒng)的大數(shù)據(jù)分析需要不同框架和技術(shù)組合才能達(dá)到最終的效果,在人力成本,技術(shù)能力和硬件成本上以及維護(hù)成本讓大數(shù)據(jù)分析變得成為昂貴的事情。讓很多中小型企業(yè)非??鄲?,不得不被迫租賃第三方大型公司的數(shù)據(jù)分析服務(wù)。
ClickHouse開源的出現(xiàn)讓許多想做大數(shù)據(jù)并且想做大數(shù)據(jù)分析的很多公司和企業(yè)耳目一新。ClickHouse 正是以不依賴Hadoop 生態(tài)、安裝和維護(hù)簡(jiǎn)單、查詢速度快、可以支持SQL等特點(diǎn)在大數(shù)據(jù)分析領(lǐng)域越走越遠(yuǎn)。
#