本篇內(nèi)容介紹了“ClickHouse的優(yōu)缺點(diǎn)和核心特性是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站制作、做網(wǎng)站與策劃設(shè)計(jì),荔灣網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:荔灣等地區(qū)。荔灣做網(wǎng)站價(jià)格咨詢:028-86922220
ClickHouse全稱是Click Stream,Data Warehouse,簡稱ClickHouse就是基于頁面的點(diǎn)擊事件流,面向數(shù)據(jù)倉庫進(jìn)行OLAP分析。ClickHouse是一款開源的數(shù)據(jù)分析數(shù)據(jù)庫,由戰(zhàn)斗民族俄羅斯Yandex公司研發(fā)的,Yandex是做搜索引擎的,就類似與Google,百度等。
我們都知道搜索引擎的營收主要來源與流量和廣告業(yè)務(wù),所以搜索引擎公司會(huì)著重分析用戶網(wǎng)路流量,像Google有Anlytics,百度有百度統(tǒng)計(jì),那么Yandex就對應(yīng)于Yandex.Metrica。ClickHouse就式在Yandex.Metrica下產(chǎn)生的技術(shù)。
根據(jù)官網(wǎng)的介紹(
https://clickhouse.tech/benchmark/dbms/),ClickHouse在相同的服務(wù)器配置與數(shù)據(jù)量下,平均響應(yīng)速度:
Vertica的2.63倍(Vertica是一款收費(fèi)的列式存儲(chǔ)數(shù)據(jù)庫)
InfiniDB的17倍(可伸縮的分析數(shù)據(jù)庫引擎,基于MySQL搭建)
MonetDB的27倍(開源的列式數(shù)據(jù)庫)
Hive的126倍
MySQL的429倍
Greenplum的10倍
Spark的1倍
ClickHouse主要特點(diǎn)
ROLAP(關(guān)系型的聯(lián)機(jī)分析處理,和它一起比較的還有OLTP聯(lián)機(jī)事務(wù)處理,我們常見的ERP,CRM系統(tǒng)就屬于OLTP)
在線實(shí)時(shí)查詢
完整的DBMS(關(guān)系數(shù)據(jù)庫)
列式存儲(chǔ)(區(qū)別與HBase,ClickHouse的是完全列式存儲(chǔ),HBase具體說是列族式存儲(chǔ))
不需要任何數(shù)據(jù)預(yù)處理
支持批量更新
擁有完善的SQl支持和函數(shù)
支持高可用(多主結(jié)構(gòu),在后面的結(jié)構(gòu)設(shè)計(jì)中會(huì)講到)
不依賴Hadoop復(fù)雜生態(tài)(像ES一樣,開箱即用)
一些不足
不支持事務(wù)(這其實(shí)也是大部分OLAP數(shù)據(jù)庫的缺點(diǎn))
不擅長根據(jù)主鍵按行粒度查詢(但是支持這種操作)
不擅長按行刪除數(shù)據(jù)(但是支持這種操作)
ClickHouse基礎(chǔ)架構(gòu)

Column和Field是ClickHouse數(shù)據(jù)最基礎(chǔ)的映射單元。內(nèi)存中的一列數(shù)據(jù)由一個(gè)Column對象表示。Column對象分為接口和實(shí)現(xiàn)兩個(gè)部分,在IColumn接口對象中,定義了對數(shù)據(jù)進(jìn)行各種關(guān)系運(yùn)算的方法。在大多數(shù)場合,ClickHouse都會(huì)以整列的方式操作數(shù)據(jù),但凡事也有例外。如果需要操作單個(gè)具體的數(shù)值 ( 也就是單列中的一行數(shù)據(jù) ),則需要使用Field對象,F(xiàn)ield對象代表一個(gè)單值。與Column對象的泛化設(shè)計(jì)思路不同,F(xiàn)ield對象使用了聚合的設(shè)計(jì)模式。在Field對象內(nèi)部聚合了Null、UInt64、String和Array等13種數(shù)據(jù)類型及相應(yīng)的處理邏輯。
數(shù)據(jù)的序列化和反序列化工作由DataType負(fù)責(zé)。IDataType接口定義了許多正反序列化的方法,它們成對出現(xiàn)。IDataType也使用了泛化的設(shè)計(jì)模式,具體方法的實(shí)現(xiàn)邏輯由對應(yīng)數(shù)據(jù)類型的實(shí)例承載。DataType雖然負(fù)責(zé)序列化相關(guān)工作,但它并不直接負(fù)責(zé)數(shù)據(jù)的讀取,而是轉(zhuǎn)由從Column或Field對象獲取。
ClickHouse內(nèi)部的數(shù)據(jù)操作是面向Block對象進(jìn)行的,并且采用了流的形式。Block對象可以看作數(shù)據(jù)表的子集。Block對象的本質(zhì)是由數(shù)據(jù)對象、數(shù)據(jù)類型和列名稱組成的三元組,即Column、DataType及列名稱字符串。僅通過Block對象就能完成一系列的數(shù)據(jù)操作。Block并沒有直接聚合Column和DataType對象,而是通過ColumnWithTypeAndName對象進(jìn)行間接引用。Block流操作有兩組頂層接口:IBlockInputStream負(fù)責(zé)數(shù)據(jù)的讀取和關(guān)系運(yùn)算,IBlockOutputStream負(fù)責(zé)將數(shù)據(jù)輸出到下一環(huán)節(jié)。IBlockInputStream接口定義了讀取數(shù)據(jù)的若干個(gè)read虛方法,而具體的實(shí)現(xiàn)邏輯則交由它的實(shí)現(xiàn)類來填充。IBlockInputStream接口總共有60多個(gè)實(shí)現(xiàn)類,這些實(shí)現(xiàn)類大致可以分為三類:
第一類用于處理數(shù)據(jù)定義的DDL操作
第二類用于處理關(guān)系運(yùn)算的相關(guān)操作
第三類則是與表引擎呼應(yīng),每一種表引擎都擁有與之對應(yīng)的BlockInputStream實(shí)現(xiàn)
IBlockOutputStream的設(shè)計(jì)與IBlockInputStream如出一轍。這些實(shí)現(xiàn)類基本用于表引擎的相關(guān)處理,負(fù)責(zé)將數(shù)據(jù)寫入下一環(huán)節(jié)或者最終目的地。
在數(shù)據(jù)表的底層設(shè)計(jì)中并沒有所謂的Table對象,它直接使用IStorage接口指代數(shù)據(jù)表。表引擎是ClickHouse的一個(gè)顯著特性,不同的表引擎由不同的子類實(shí)現(xiàn)。IStorage接口負(fù)責(zé)數(shù)據(jù)的定義、查詢與寫入。IStorage負(fù)責(zé)根據(jù)AST查詢語句的指示要求,返回指定列的原始數(shù)據(jù)。后續(xù)的加工、計(jì)算和過濾則由下面介紹的部分進(jìn)行。
Parser分析器負(fù)責(zé)創(chuàng)建AST對象;而Interpreter解釋器則負(fù)責(zé)解釋AST,并進(jìn)一步創(chuàng)建查詢的執(zhí)行管道。它們與IStorage一起,串聯(lián)起了整個(gè)數(shù)據(jù)查詢的過程。Parser分析器可以將一條SQL語句以遞歸下降的方法解析成AST語法樹的形式。不同的SQL語句,會(huì)經(jīng)由不同的Parser實(shí)現(xiàn)類解析。Interpreter解釋器的作用就像Service服務(wù)層一樣,起到串聯(lián)整個(gè)查詢過程的作用,它會(huì)根據(jù)解釋器的類型,聚合它所需要的資源。首先它會(huì)解析AST對象;然后執(zhí)行"業(yè)務(wù)邏輯" ( 例如分支判斷、設(shè)置參數(shù)、調(diào)用接口等 );最終返回IBlock對象,以線程的形式建立起一個(gè)查詢執(zhí)行管道。
6.Functions 與Aggregate Functions
ClickHouse主要提供兩類函數(shù)—普通函數(shù)(Functions)和聚合函數(shù)(Aggregate Functions)。普通函數(shù)由IFunction接口定義,擁有數(shù)十種函數(shù)實(shí)現(xiàn),采用向量化的方式直接作用于一整列數(shù)據(jù)。聚合函數(shù)由IAggregateFunction接口定義,相比無狀態(tài)的普通函數(shù),聚合函數(shù)是有狀態(tài)的。以COUNT聚合函數(shù)為例,其AggregateFunctionCount的狀態(tài)使用整型UInt64記錄。聚合函數(shù)的狀態(tài)支持序列化與反序列化,所以能夠在分布式節(jié)點(diǎn)之間進(jìn)行傳輸,以實(shí)現(xiàn)增量計(jì)算。
ClickHouse的集群由分片 ( Shard ) 組成,而每個(gè)分片又通過副本 ( Replica ) 組成。這種分層的概念,在一些流行的分布式系統(tǒng)中十分普遍。這里有幾個(gè)與眾不同的特性。ClickHouse的1個(gè)節(jié)點(diǎn)只能擁有1個(gè)分片,也就是說如果要實(shí)現(xiàn)1分片、1副本,則至少需要部署2個(gè)服務(wù)節(jié)點(diǎn)。分片只是一個(gè)邏輯概念,其物理承載還是由副本承擔(dān)的。 ClickHouse 表引擎
MergeTree :允許您依據(jù)主鍵和日期創(chuàng)建索引,并進(jìn)行實(shí)時(shí)的數(shù)據(jù)更新操作。MergeTree 是 ClickHouse 里最為先進(jìn)的表引擎。
ReplacingMergeTree :該引擎和MergeTree的不同之處在于它會(huì)刪除具有相同主鍵的重復(fù)項(xiàng)。數(shù)據(jù)的去重只會(huì)在合并的過程中出現(xiàn)。有一些數(shù)據(jù)可能仍未被處理。因此,ReplacingMergeTree適用于在后臺(tái)清除重復(fù)的數(shù)據(jù)以節(jié)省空間,但是它不保證沒有重復(fù)的數(shù)據(jù)出現(xiàn)。在一定程度上可以彌補(bǔ)clickhouse不能對數(shù)據(jù)做更新的操作,可以用做在數(shù)據(jù)過多重復(fù)場景對數(shù)據(jù)進(jìn)行去重。
SummingMergeTree:表的數(shù)據(jù)片段時(shí),ClickHouse 會(huì)把所有具有相同主鍵的行合并為一行,該行包含了被合并的行中具有數(shù)值數(shù)據(jù)類型的列的匯總值。如果主鍵的組合方式使得單個(gè)鍵值對應(yīng)于大量的行,則可以顯著的減少存儲(chǔ)空間并加快數(shù)據(jù)查詢的速度,對于不可加的列,會(huì)取一個(gè)最先出現(xiàn)的值。對某個(gè)字段長期的匯總查詢場景。
AggregatingMergeTree :該引擎繼承自 MergeTree,并改變了數(shù)據(jù)片段的合并邏輯。ClickHouse 會(huì)將相同主鍵的所有行(在一個(gè)數(shù)據(jù)片段內(nèi))替換為單個(gè)存儲(chǔ)一系列聚合函數(shù)狀態(tài)的行。可以使用 AggregatingMergeTree 表來做增量數(shù)據(jù)統(tǒng)計(jì)聚合,包括物化視圖的數(shù)據(jù)聚合。引擎需使用 AggregateFunction 類型來處理所有列。如果要 按一組規(guī)則來合并減少行數(shù),則使用 AggregatingMergeTree 是合適的。對于AggregatingMergeTree不能直接使用insert來查詢寫入數(shù)據(jù)。一般是用insert select。但更常用的是創(chuàng)建物化視圖 ,做增量數(shù)據(jù)統(tǒng)計(jì)聚合,包括物化視圖的數(shù)據(jù)聚合。
Distributed 分布式引擎本身不存儲(chǔ)數(shù)據(jù), 但可以在多個(gè)服務(wù)器上進(jìn)行分布式查詢。讀是自動(dòng)并行的。讀取時(shí),遠(yuǎn)程服務(wù)器表的索引(如果有的話)會(huì)被使用。分布式引擎參數(shù):服務(wù)器配置文件中的集群名,遠(yuǎn)程數(shù)據(jù)庫名,遠(yuǎn)程表名,數(shù)據(jù)分片鍵。
“ClickHouse的優(yōu)缺點(diǎn)和核心特性是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
網(wǎng)頁標(biāo)題:ClickHouse的優(yōu)缺點(diǎn)和核心特性是什么
地址分享:http://chinadenli.net/article30/ihpppo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、靜態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、虛擬主機(jī)、Google、網(wǎng)頁設(shè)計(jì)公司
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源:
創(chuàng)新互聯(lián)