列式數(shù)據(jù)庫ClickHouse,大寬表聚合、報表一下全搞定
一、前言
現(xiàn)在數(shù)據(jù)庫的種類也是特別的多,大致的類別包括:
- 關(guān)系型數(shù)據(jù)庫( MySQL、Oracle、PostgreSQL)。
- 非關(guān)系型數(shù)據(jù)庫(Redis、MongoDB、Cassandra、Neo4j)。
- 全文搜索引擎和分布式文檔存儲系統(tǒng)(Elasticsearch )。
- 列式數(shù)據(jù)庫(ClickHouse)。
每種都在各自的領域表現(xiàn)出色,但當涉及到大規(guī)模數(shù)據(jù)分析和復雜查詢時,ClickHouse 出現(xiàn)在了舞臺上。
ClickHouse 使用列式存儲,這意味著它可以高效地執(zhí)行聚合、過濾和排序操作。
「面試經(jīng)常問到大寬表查詢聚合怎么辦,這不是解決方案來了嘛??!」
今天我們就一起來深入了解一下ClickHouse !看的人多的話,下期出實戰(zhàn)哈!
二、ClickHouse簡介
ClickHouse
是一款由俄羅斯搜索引擎公司 Yandex 開發(fā)的開源列式數(shù)據(jù)庫管理系統(tǒng)(DBMS)。發(fā)布于2016年,是使用 C++ 編程語言開發(fā)的。它的設計目標是用于高性能的大規(guī)模數(shù)據(jù)分析和查詢,類似SQL語法降低開發(fā)和學習成本。
「ClickHouse 是用于實時應用程序和分析的速度最快、資源效率最高的開源數(shù)據(jù)庫?!?/p>
「Github的start數(shù)量已經(jīng):30.6k」
官網(wǎng)地址:https://clickhouse.com/
三、OLAP
簡介
說起列式數(shù)據(jù)庫,就不得不說OLAP,列式型數(shù)據(jù)庫天然適合OLAP場景,下面我們一起了解一下什么是OLAP!
OLAP(聯(lián)機分析處理)是一種強大的數(shù)據(jù)處理分析方法,特別適用于需要深入探索大量多維數(shù)據(jù)的應用場景,如業(yè)務智能、數(shù)據(jù)倉庫、銷售分析、財務報告等。OLAP 技術(shù)允許用戶從不同的角度、維度和層次來查看和分析數(shù)據(jù),以發(fā)現(xiàn)潛在的關(guān)聯(lián)、趨勢和模式,從而更好地做出決策。
場景特性
- 表很“寬”,這意味著它們包含大量列。
- 數(shù)據(jù)集很大,處理單個查詢時查詢需要高吞吐量(每臺服務器每秒高達數(shù)十億行)。
- 列值相當小:數(shù)字和短字符串(例如,每個 URL 60 字節(jié))。
- 查詢提取大量行,但只提取一小部分列。
- 對于簡單查詢,允許 50 毫秒左右的延遲。
- 每個查詢有一張大表;除了一張大表外,所有表都很小。
- 查詢結(jié)果明顯小于源數(shù)據(jù)。換句話說,數(shù)據(jù)經(jīng)過過濾或聚合,因此結(jié)果適合單個服務器的 RAM。
- 查詢相對較少(通常每臺服務器每秒數(shù)百個查詢或更少)。
- 插入發(fā)生在相當大的批次(> 1000 行)中,而不是單行。
- 事務不是必須的。
為什么適合OLAP
面向列的數(shù)據(jù)庫更適合 OLAP 場景:它們處理大多數(shù)查詢的速度至少快 100 倍。下面詳細解釋了原因,但事實更容易直觀地展示:
制作了一個動態(tài)圖片能夠直觀的看到比行式數(shù)據(jù)庫效率高很多!
四、業(yè)務場景
我們單獨講業(yè)務場景的話有點單調(diào),我們一般喜歡拿它和Elasticsearch 進行比較!
ClickHouse 和 Elasticsearch 都是用于數(shù)據(jù)存儲和查詢的強大工具,但它們在業(yè)務場景和使用方面有一些不同之處。
以下是 ClickHouse 和 Elasticsearch 的業(yè)務場景對比:
「ClickHouse:」
- 數(shù)據(jù)倉庫和大規(guī)模數(shù)據(jù)分析:ClickHouse 是一個出色的大規(guī)模數(shù)據(jù)分析工具,特別適用于存儲和查詢歷史數(shù)據(jù)。它支持復雜的 SQL 查詢,可以執(zhí)行聚合、過濾、排序等操作,是構(gòu)建數(shù)據(jù)倉庫的理想選擇。
- 時序數(shù)據(jù)分析:ClickHouse 的列式存儲結(jié)構(gòu)和高性能使其非常適合處理時序數(shù)據(jù),如傳感器數(shù)據(jù)、監(jiān)控數(shù)據(jù)、日志數(shù)據(jù)等。
- 報表生成:如果你需要生成復雜的報表和分析結(jié)果,ClickHouse 可以提供高性能的數(shù)據(jù)檢索和處理能力。
- 數(shù)據(jù)壓縮和存儲優(yōu)化:ClickHouse 使用快速壓縮算法,可以大幅減小存儲空間占用,降低硬件成本。
- 復雜查詢:ClickHouse 支持復雜的查詢和聚合操作,適用于需要深入分析數(shù)據(jù)的場景。
「Elasticsearch:」
- 全文搜索和文本分析:Elasticsearch 是一個出色的全文搜索引擎,專注于文本數(shù)據(jù)的高級搜索、分析和相關(guān)性排序。它通常用于構(gòu)建搜索引擎、日志分析和全文搜索應用。
- 實時數(shù)據(jù)分析:Elasticsearch 支持實時數(shù)據(jù)分析,可以實時監(jiān)控、查詢和可視化數(shù)據(jù)。它在監(jiān)控、日志分析和實時數(shù)據(jù)倉庫等場景中表現(xiàn)出色。
- 數(shù)據(jù)探索:Elasticsearch 提供了靈活的數(shù)據(jù)探索能力,用戶可以通過自由組合查詢條件來探索數(shù)據(jù)。
- 非結(jié)構(gòu)化數(shù)據(jù):Elasticsearch 適用于非結(jié)構(gòu)化或半結(jié)構(gòu)化數(shù)據(jù),如日志、社交媒體數(shù)據(jù)、文檔等。
- 數(shù)據(jù)可視化:結(jié)合 Kibana 工具,Elasticsearch 可以用于創(chuàng)建交互式數(shù)據(jù)可視化儀表板。
- 高并發(fā)查詢:相對于ClickHouse 更適合高并發(fā)下的查詢。
五、拓展
當然我們也有列式存儲,字節(jié)在 ClickHouse 架構(gòu)基礎上進行了升級,于 2020 年在內(nèi)部啟動了 ByConity 項目,并于 2023 年 1 月發(fā)布 Beta 版本,5月底正式對外開源。
ByConity官網(wǎng)地址:https://byconity.github.io/zh-cn/。
ByConity 是字節(jié)跳動開源的云原生數(shù)據(jù)倉庫,它采用計算-存儲分離的架構(gòu),支持多個關(guān)鍵功能特性,如「計算存儲分離、彈性擴縮容、租戶資源隔離和數(shù)據(jù)讀寫的強一致性」等。
通過利用主流的 OLAP 引擎優(yōu)化,如「列存儲、向量化執(zhí)行、MPP 執(zhí)行、查詢優(yōu)化」等,ByConity 可以提供「優(yōu)異的讀寫性能」。
ByConity
字節(jié)也在內(nèi)部準備從ClickHouse 全面切換為ByConity。
我們本次了解一下ClickHouse,后面再深入學習一下ByConity!
五、總結(jié)
綜上所述,ClickHouse 更適用于大規(guī)模數(shù)據(jù)分析、數(shù)據(jù)倉庫、復雜查詢、大寬表聚合、報表等場景,而 Elasticsearch 更適用于全文搜索、實時數(shù)據(jù)分析、日志分析和數(shù)據(jù)探索等場景。
大家根據(jù)自己的業(yè)務具體使用那個即可!