一、是什么
ClickHouse是一個開源的列式數(shù)據(jù)庫管理系統(tǒng),專門設(shè)計用于處理大規(guī)模數(shù)據(jù)分析和OLAP(在線分析處理)工作負載。它最初由俄羅斯的Yandex公司開發(fā)冀自,并于2016年發(fā)布為開源項目。
二秒啦、有什么特點
列式存儲:ClickHouse以列式存儲方式組織數(shù)據(jù)熬粗,這意味著相同列中的數(shù)據(jù)存儲在一起,這種存儲方式在分析查詢和聚合操作中非常高效余境。
高性能:ClickHouse被設(shè)計成能夠處理非常大的數(shù)據(jù)集驻呐,并能夠快速執(zhí)行復(fù)雜的分析查詢。它通過使用多核CPU和高度優(yōu)化的查詢執(zhí)行引擎來實現(xiàn)高性能葛超。
支持SQL:ClickHouse支持SQL查詢語言暴氏,這使得它易于使用和集成到現(xiàn)有的數(shù)據(jù)分析工具和應(yīng)用程序中延塑。
分布式架構(gòu):ClickHouse可以輕松擴展到多個節(jié)點绣张,以處理大規(guī)模數(shù)據(jù)集。它支持數(shù)據(jù)分片关带、負載均衡和故障容忍侥涵,以確保高可用性和可伸縮性。
實時數(shù)據(jù)導(dǎo)入:ClickHouse支持實時數(shù)據(jù)導(dǎo)入宋雏,可以從各種數(shù)據(jù)源實時接收數(shù)據(jù)芜飘,這對于處理流式數(shù)據(jù)和實時分析非常有用。
開源:ClickHouse是開源的磨总,可以免費使用和定制嗦明,因此它在許多組織中得到了廣泛的應(yīng)用。
三蚪燕、常用的業(yè)務(wù)場景
- 數(shù)據(jù)倉庫: ClickHouse可以用作企業(yè)數(shù)據(jù)倉庫娶牌,用于存儲和分析大規(guī)模的歷史數(shù)據(jù)奔浅。它支持高性能的復(fù)雜查詢和聚合操作,有助于發(fā)現(xiàn)數(shù)據(jù)中的趨勢和洞察诗良。
- 實時報告和儀表盤: ClickHouse可以用于構(gòu)建實時報告和儀表盤汹桦,通過實時數(shù)據(jù)導(dǎo)入和快速查詢執(zhí)行,幫助業(yè)務(wù)決策者實時監(jiān)控業(yè)務(wù)績效鉴裹。
- 廣告分析: 在廣告技術(shù)領(lǐng)域舞骆,ClickHouse可用于跟蹤廣告活動的效果,分析點擊率径荔、轉(zhuǎn)化率和ROI等關(guān)鍵指標督禽。
- 日志分析: ClickHouse非常適合處理大量日志數(shù)據(jù),例如服務(wù)器日志总处、應(yīng)用程序日志和網(wǎng)絡(luò)流量日志赂蠢。它能夠快速執(zhí)行日志分析查詢,幫助識別問題和異常辨泳。
- 事件追蹤: 許多應(yīng)用程序需要追蹤用戶活動和事件虱岂。ClickHouse可以用于存儲和分析這些事件數(shù)據(jù),以提供洞察用戶行為和趨勢的見解菠红。
- 時序數(shù)據(jù)分析: 時序數(shù)據(jù)(例如傳感器數(shù)據(jù)第岖、監(jiān)控數(shù)據(jù)、時間序列數(shù)據(jù)庫中的數(shù)據(jù))的存儲和分析是ClickHouse的另一個強大用途试溯。它支持時間窗口查詢和聚合蔑滓,使其成為處理時序數(shù)據(jù)的理想選擇。
- 數(shù)據(jù)湖分析: ClickHouse可以與數(shù)據(jù)湖架構(gòu)集成遇绞,用于在數(shù)據(jù)湖中存儲和分析大規(guī)模數(shù)據(jù)集键袱。
- 在線廣告投放: ClickHouse可以幫助廣告技術(shù)公司實時調(diào)整廣告投放策略,以提高廣告的定位精度和效率摹闽。
- 金融分析: 金融領(lǐng)域需要處理大量的交易和市場數(shù)據(jù)蹄咖。ClickHouse可以用于執(zhí)行復(fù)雜的金融分析,例如風(fēng)險評估付鹿、投資組合優(yōu)化和市場趨勢分析澜汤。
- 運營分析: 企業(yè)可以使用ClickHouse來分析運營數(shù)據(jù),包括庫存管理舵匾、供應(yīng)鏈優(yōu)化和客戶關(guān)系管理俊抵。
總之,ClickHouse在需要大規(guī)模數(shù)據(jù)存儲坐梯、高性能查詢和實時數(shù)據(jù)分析的各種業(yè)務(wù)場景中都可以發(fā)揮作用徽诲。它的設(shè)計使其適用于處理大數(shù)據(jù)和復(fù)雜分析需求的情況。
四、為什么它可以查詢的這么快谎替?
列式存儲: 列式存儲轩拨,減少I/O操作和數(shù)據(jù)傳輸量。ClickHouse采用列式存儲院喜,這意味著它將相同列的數(shù)據(jù)存儲在一起亡蓉,而不是行式存儲中將整行數(shù)據(jù)存儲在一起。這種列式存儲方式使得只需讀取和解析實際需要的列數(shù)據(jù)喷舀,從而減少了I/O操作和數(shù)據(jù)傳輸量砍濒。這對于數(shù)據(jù)分析查詢非常高效,因為通常只需要一部分列數(shù)據(jù)來回答查詢硫麻。
數(shù)據(jù)壓縮: 壓縮減少傳輸時間爸邢。ClickHouse使用高度優(yōu)化的壓縮算法件豌,將數(shù)據(jù)在存儲時壓縮睬关,這不僅減小了磁盤占用空間敷存,還減少了數(shù)據(jù)傳輸時間懒浮。在查詢時,ClickHouse能夠在內(nèi)存中快速解壓數(shù)據(jù)太抓,從而加快查詢速度棚菊。
多核并行處理: 數(shù)據(jù)存在分布式多態(tài)服務(wù)器上卿操,利用多臺服務(wù)器的CPU并行查詢柳洋。ClickHouse充分利用多核CPU和多線程技術(shù)待诅,可以并行執(zhí)行查詢操作。這意味著可以同時處理多個查詢片段熊镣,提高了查詢性能卑雁。
合并操作: 按照查詢條件只查詢某些數(shù)據(jù)塊的數(shù)據(jù),掃描的數(shù)據(jù)范圍會變小绪囱。ClickHouse使用合并操作來優(yōu)化查詢测蹲,避免不必要的數(shù)據(jù)移動。它將數(shù)據(jù)按塊(block)存儲鬼吵,并在查詢時盡可能使用整個塊扣甲。這減少了不必要的數(shù)據(jù)復(fù)制和操作。
索引技術(shù): ClickHouse支持索引而柑,這可以加速某些查詢文捶,特別是在過濾條件上使用索引列時荷逞。索引使得數(shù)據(jù)的查找更加高效媒咳,從而加速了查詢。
向量化執(zhí)行: ClickHouse使用向量化查詢執(zhí)行种远,這意味著它可以在一次操作中處理多個數(shù)據(jù)點涩澡,而不是逐個處理。這種向量化執(zhí)行方式減少了CPU指令的開銷坠敷,提高了查詢速度妙同。
數(shù)據(jù)分區(qū)和負載均衡: ClickHouse支持數(shù)據(jù)分區(qū)和負載均衡射富,可以將數(shù)據(jù)分散存儲在多個節(jié)點上,并在查詢時將工作負載均衡分配到不同的節(jié)點上粥帚。這有助于水平擴展和提高查詢性能胰耗。
五、clickhouse的底層數(shù)據(jù)存儲
數(shù)據(jù)在clickhouse以何種形式被存儲要看使用的是什么表引擎芒涡。表引擎柴灯,決定了一張 數(shù)據(jù)表最終的性格,它擁有何種特性费尽、數(shù)據(jù)以何種形式被存儲以及如何被加載赠群。
5.1 MergeTree家族(合并樹)
之所以說是合并樹家族,是因為MergeTree衍生了好幾個與之類似的引擎旱幼。
MergeTree 最基礎(chǔ)的版本,支持數(shù)據(jù)分區(qū),后臺自動合并查描。
ReplacingMergeTree: 支持替換舊數(shù)據(jù)的MergeTree。在同一個分區(qū)內(nèi)柏卤,clickhouse在后臺合并數(shù)據(jù)的時候會刪除重復(fù)數(shù)據(jù)冬三,注意這里是同一個分區(qū)內(nèi)的去重效果。
SummingMergeTree: 支持把多行數(shù)據(jù)合并求和的MergeTree缘缚。在合并分區(qū)的時候长豁,將同一分組下的多行數(shù)據(jù)提前匯總合并成一行,這樣減少了數(shù)據(jù)行忙灼,又降低了后續(xù)匯總查詢的開銷匠襟。
AggregatingMergeTree: 支持聚合的MergeTree。將需要聚合的數(shù)據(jù)預(yù)先計算出來该园,并將結(jié)果保存起來酸舍,在后續(xù)進行聚合查詢的時候直接使用結(jié)果數(shù)據(jù)。
CollapsingMergeTree: 支持數(shù)據(jù)折疊(意思就是以增代刪)的MergeTree里初。它通過定義一個sign標志位字段啃勉,記錄數(shù)據(jù)行的狀態(tài),如果sign標記為1双妨,則表示這是一行有效的數(shù)據(jù)淮阐,如果是-1,則表示這行數(shù)據(jù)需要被刪除刁品。CollapsingMergeTree合并數(shù)據(jù)時泣特,同一分區(qū),sign為1和-1的數(shù)據(jù)會被抵消刪除挑随。猶如折疊一般状您。這個引擎還有個使用條件,就是對于寫入數(shù)據(jù)的順序有嚴格的要求,如果先寫入sign=-1的數(shù)據(jù)膏孟,在寫入sign=1的數(shù)據(jù)眯分,則不能夠折疊。所以如果你寫入數(shù)據(jù)是用的多線程寫入柒桑,大概率有問題弊决。
-
VersionedCollapsingMergeTree:結(jié)合版本控制的CollapsingMergeTree。這個就是為了解決上面說的寫入順序的問題魁淳。加了個版本號丢氢。數(shù)據(jù)會自動按照orderby version,這樣就有確定的順序先改。
......等等
image.png
5.2 Memory(內(nèi)存)
自行了解下面的存儲結(jié)構(gòu)