一并思、是什么
ClickHouse是一個(gè)開(kāi)源的列式數(shù)據(jù)庫(kù)管理系統(tǒng),專(zhuān)門(mén)設(shè)計(jì)用于處理大規(guī)模數(shù)據(jù)分析和OLAP(在線分析處理)工作負(fù)載。它最初由俄羅斯的Yandex公司開(kāi)發(fā),并于2016年發(fā)布為開(kāi)源項(xiàng)目夕冲。
二、有什么特點(diǎn)
列式存儲(chǔ):ClickHouse以列式存儲(chǔ)方式組織數(shù)據(jù)裂逐,這意味著相同列中的數(shù)據(jù)存儲(chǔ)在一起,這種存儲(chǔ)方式在分析查詢(xún)和聚合操作中非常高效泣栈。
高性能:ClickHouse被設(shè)計(jì)成能夠處理非常大的數(shù)據(jù)集卜高,并能夠快速執(zhí)行復(fù)雜的分析查詢(xún)。它通過(guò)使用多核CPU和高度優(yōu)化的查詢(xún)執(zhí)行引擎來(lái)實(shí)現(xiàn)高性能南片。
支持SQL:ClickHouse支持SQL查詢(xún)語(yǔ)言掺涛,這使得它易于使用和集成到現(xiàn)有的數(shù)據(jù)分析工具和應(yīng)用程序中。
分布式架構(gòu):ClickHouse可以輕松擴(kuò)展到多個(gè)節(jié)點(diǎn)疼进,以處理大規(guī)模數(shù)據(jù)集薪缆。它支持?jǐn)?shù)據(jù)分片、負(fù)載均衡和故障容忍伞广,以確保高可用性和可伸縮性拣帽。
實(shí)時(shí)數(shù)據(jù)導(dǎo)入:ClickHouse支持實(shí)時(shí)數(shù)據(jù)導(dǎo)入,可以從各種數(shù)據(jù)源實(shí)時(shí)接收數(shù)據(jù)嚼锄,這對(duì)于處理流式數(shù)據(jù)和實(shí)時(shí)分析非常有用减拭。
開(kāi)源:ClickHouse是開(kāi)源的,可以免費(fèi)使用和定制区丑,因此它在許多組織中得到了廣泛的應(yīng)用拧粪。
三修陡、常用的業(yè)務(wù)場(chǎng)景
數(shù)據(jù)倉(cāng)庫(kù): ClickHouse可以用作企業(yè)數(shù)據(jù)倉(cāng)庫(kù),用于存儲(chǔ)和分析大規(guī)模的歷史數(shù)據(jù)可霎。它支持高性能的復(fù)雜查詢(xún)和聚合操作魄鸦,有助于發(fā)現(xiàn)數(shù)據(jù)中的趨勢(shì)和洞察。
實(shí)時(shí)報(bào)告和儀表盤(pán): ClickHouse可以用于構(gòu)建實(shí)時(shí)報(bào)告和儀表盤(pán)癣朗,通過(guò)實(shí)時(shí)數(shù)據(jù)導(dǎo)入和快速查詢(xún)執(zhí)行拾因,幫助業(yè)務(wù)決策者實(shí)時(shí)監(jiān)控業(yè)務(wù)績(jī)效。
廣告分析: 在廣告技術(shù)領(lǐng)域斯棒,ClickHouse可用于跟蹤廣告活動(dòng)的效果盾致,分析點(diǎn)擊率、轉(zhuǎn)化率和ROI等關(guān)鍵指標(biāo)荣暮。
日志分析: ClickHouse非常適合處理大量日志數(shù)據(jù)庭惜,例如服務(wù)器日志、應(yīng)用程序日志和網(wǎng)絡(luò)流量日志穗酥。它能夠快速執(zhí)行日志分析查詢(xún)护赊,幫助識(shí)別問(wèn)題和異常。
事件追蹤: 許多應(yīng)用程序需要追蹤用戶活動(dòng)和事件砾跃。ClickHouse可以用于存儲(chǔ)和分析這些事件數(shù)據(jù)骏啰,以提供洞察用戶行為和趨勢(shì)的見(jiàn)解。
時(shí)序數(shù)據(jù)分析: 時(shí)序數(shù)據(jù)(例如傳感器數(shù)據(jù)抽高、監(jiān)控?cái)?shù)據(jù)判耕、時(shí)間序列數(shù)據(jù)庫(kù)中的數(shù)據(jù))的存儲(chǔ)和分析是ClickHouse的另一個(gè)強(qiáng)大用途。它支持時(shí)間窗口查詢(xún)和聚合翘骂,使其成為處理時(shí)序數(shù)據(jù)的理想選擇壁熄。
數(shù)據(jù)湖分析: ClickHouse可以與數(shù)據(jù)湖架構(gòu)集成,用于在數(shù)據(jù)湖中存儲(chǔ)和分析大規(guī)模數(shù)據(jù)集碳竟。
在線廣告投放: ClickHouse可以幫助廣告技術(shù)公司實(shí)時(shí)調(diào)整廣告投放策略草丧,以提高廣告的定位精度和效率。
金融分析: 金融領(lǐng)域需要處理大量的交易和市場(chǎng)數(shù)據(jù)莹桅。ClickHouse可以用于執(zhí)行復(fù)雜的金融分析昌执,例如風(fēng)險(xiǎn)評(píng)估、投資組合優(yōu)化和市場(chǎng)趨勢(shì)分析诈泼。
運(yùn)營(yíng)分析: 企業(yè)可以使用ClickHouse來(lái)分析運(yùn)營(yíng)數(shù)據(jù)懂拾,包括庫(kù)存管理、供應(yīng)鏈優(yōu)化和客戶關(guān)系管理厂汗。
總之委粉,ClickHouse在需要大規(guī)模數(shù)據(jù)存儲(chǔ)、高性能查詢(xún)和實(shí)時(shí)數(shù)據(jù)分析的各種業(yè)務(wù)場(chǎng)景中都可以發(fā)揮作用娶桦。它的設(shè)計(jì)使其適用于處理大數(shù)據(jù)和復(fù)雜分析需求的情況贾节。
四汁汗、為什么它可以查詢(xún)的這么快?
列式存儲(chǔ): 列式存儲(chǔ)栗涂,減少I(mǎi)/O操作和數(shù)據(jù)傳輸量知牌。ClickHouse采用列式存儲(chǔ),這意味著它將相同列的數(shù)據(jù)存儲(chǔ)在一起斤程,而不是行式存儲(chǔ)中將整行數(shù)據(jù)存儲(chǔ)在一起角寸。這種列式存儲(chǔ)方式使得只需讀取和解析實(shí)際需要的列數(shù)據(jù),從而減少了I/O操作和數(shù)據(jù)傳輸量忿墅。這對(duì)于數(shù)據(jù)分析查詢(xún)非常高效扁藕,因?yàn)橥ǔV恍枰徊糠至袛?shù)據(jù)來(lái)回答查詢(xún)。
數(shù)據(jù)壓縮: 壓縮減少傳輸時(shí)間疚脐。ClickHouse使用高度優(yōu)化的壓縮算法亿柑,將數(shù)據(jù)在存儲(chǔ)時(shí)壓縮,這不僅減小了磁盤(pán)占用空間棍弄,還減少了數(shù)據(jù)傳輸時(shí)間望薄。在查詢(xún)時(shí),ClickHouse能夠在內(nèi)存中快速解壓數(shù)據(jù)呼畸,從而加快查詢(xún)速度痕支。
多核并行處理: 數(shù)據(jù)存在分布式多態(tài)服務(wù)器上,利用多臺(tái)服務(wù)器的CPU并行查詢(xún)蛮原。ClickHouse充分利用多核CPU和多線程技術(shù)卧须,可以并行執(zhí)行查詢(xún)操作。這意味著可以同時(shí)處理多個(gè)查詢(xún)片段儒陨,提高了查詢(xún)性能故慈。
合并操作: 按照查詢(xún)條件只查詢(xún)某些數(shù)據(jù)塊的數(shù)據(jù),掃描的數(shù)據(jù)范圍會(huì)變小框全。ClickHouse使用合并操作來(lái)優(yōu)化查詢(xún),避免不必要的數(shù)據(jù)移動(dòng)干签。它將數(shù)據(jù)按塊(block)存儲(chǔ)津辩,并在查詢(xún)時(shí)盡可能使用整個(gè)塊。這減少了不必要的數(shù)據(jù)復(fù)制和操作容劳。
索引技術(shù): ClickHouse支持索引喘沿,這可以加速某些查詢(xún),特別是在過(guò)濾條件上使用索引列時(shí)竭贩。索引使得數(shù)據(jù)的查找更加高效蚜印,從而加速了查詢(xún)。
向量化執(zhí)行: ClickHouse使用向量化查詢(xún)執(zhí)行留量,這意味著它可以在一次操作中處理多個(gè)數(shù)據(jù)點(diǎn)窄赋,而不是逐個(gè)處理哟冬。這種向量化執(zhí)行方式減少了CPU指令的開(kāi)銷(xiāo),提高了查詢(xún)速度忆绰。
數(shù)據(jù)分區(qū)和負(fù)載均衡: ClickHouse支持?jǐn)?shù)據(jù)分區(qū)和負(fù)載均衡浩峡,可以將數(shù)據(jù)分散存儲(chǔ)在多個(gè)節(jié)點(diǎn)上,并在查詢(xún)時(shí)將工作負(fù)載均衡分配到不同的節(jié)點(diǎn)上错敢。這有助于水平擴(kuò)展和提高查詢(xún)性能翰灾。
五、clickhouse的底層數(shù)據(jù)存儲(chǔ)
數(shù)據(jù)在clickhouse以何種形式被存儲(chǔ)要看使用的是什么表引擎稚茅。表引擎纸淮,決定了一張 數(shù)據(jù)表最終的性格,它擁有何種特性亚享、數(shù)據(jù)以何種形式被存儲(chǔ)以及如何被加載咽块。
5.1 MergeTree家族(合并樹(shù))
之所以說(shuō)是合并樹(shù)家族,是因?yàn)镸ergeTree衍生了好幾個(gè)與之類(lèi)似的引擎虹蒋。
MergeTree 最基礎(chǔ)的版本,支持?jǐn)?shù)據(jù)分區(qū),后臺(tái)自動(dòng)合并糜芳。
ReplacingMergeTree: 支持替換舊數(shù)據(jù)的MergeTree。在同一個(gè)分區(qū)內(nèi)魄衅,clickhouse在后臺(tái)合并數(shù)據(jù)的時(shí)候會(huì)刪除重復(fù)數(shù)據(jù)峭竣,注意這里是同一個(gè)分區(qū)內(nèi)的去重效果。
SummingMergeTree: 支持把多行數(shù)據(jù)合并求和的MergeTree晃虫。在合并分區(qū)的時(shí)候皆撩,將同一分組下的多行數(shù)據(jù)提前匯總合并成一行,這樣減少了數(shù)據(jù)行哲银,又降低了后續(xù)匯總查詢(xún)的開(kāi)銷(xiāo)扛吞。
AggregatingMergeTree: 支持聚合的MergeTree。將需要聚合的數(shù)據(jù)預(yù)先計(jì)算出來(lái)荆责,并將結(jié)果保存起來(lái)滥比,在后續(xù)進(jìn)行聚合查詢(xún)的時(shí)候直接使用結(jié)果數(shù)據(jù)。
CollapsingMergeTree: 支持?jǐn)?shù)據(jù)折疊(意思就是以增代刪)的MergeTree做院。它通過(guò)定義一個(gè)sign標(biāo)志位字段盲泛,記錄數(shù)據(jù)行的狀態(tài),如果sign標(biāo)記為1键耕,則表示這是一行有效的數(shù)據(jù)寺滚,如果是-1,則表示這行數(shù)據(jù)需要被刪除屈雄。CollapsingMergeTree合并數(shù)據(jù)時(shí)村视,同一分區(qū),sign為1和-1的數(shù)據(jù)會(huì)被抵消刪除酒奶。猶如折疊一般蚁孔。這個(gè)引擎還有個(gè)使用條件奶赔,就是對(duì)于寫(xiě)入數(shù)據(jù)的順序有嚴(yán)格的要求,如果先寫(xiě)入sign=-1的數(shù)據(jù)勒虾,在寫(xiě)入sign=1的數(shù)據(jù)纺阔,則不能夠折疊。所以如果你寫(xiě)入數(shù)據(jù)是用的多線程寫(xiě)入修然,大概率有問(wèn)題笛钝。
-
VersionedCollapsingMergeTree:結(jié)合版本控制的CollapsingMergeTree。這個(gè)就是為了解決上面說(shuō)的寫(xiě)入順序的問(wèn)題愕宋。加了個(gè)版本號(hào)玻靡。數(shù)據(jù)會(huì)自動(dòng)按照orderby version,這樣就有確定的順序中贝。
......等等
MergeTree的存儲(chǔ)結(jié)構(gòu).png