ClickHouse 介紹:
- ClickHouse 是 2016 年由俄羅斯搜索引擎Yandex 內部項目開發的關聯型的 OLAP 數據庫。
- ClickHouse 是 ClickStream 和 Data WareHouse 的組合。以極高的查詢速度和性能而聞名。
- 許多公司如 Uber、Slack、Tesla、Tencent、Tiktok、Cloudflare 等都在生產中使用 ClickHouse。
- 其中 Tiktok 更是 ClickHouse 深度使用者,並且 Tiktok 在 ClickHouse 基礎上做了更多的擴展,例如加入雲端的架構等等,推出另外款名稱為 ByteHouse 產品,功能更加強大,不過需要另外收費
OLAP 介紹:
概念:OLAP 又稱為線上分析處理,主要是用於快速分析大數據的技術,利用多維的角度去分析數據,從而幫助用戶可更好的透過數據發現趨勢走向,做出基於數據資料的決策。
特點:- 多維數據分析 - 提供多維數據分析的功能,能以不同的維度對數據進行分析。例如可以按照時間、地區、產品類別等多個維度進行數據分析,以此深入了解數據之間的關係和趨勢。
- 複雜分析功能 - 提供了包括分組、聚合、過濾和排序等操作。可以讓使用者根據具體的業務需求,進行多層次的分析,透過了解數據的細節來發現其中的模式和彼此間的關聯性。
- 決策支持 - 廣泛應用於決策支持系統中,幫助使用者做出基於數據資料的決策。通過多維分析資料,讓使用者可以更好地理解企業的業務運作和趨勢,從而做出更明智的決策。
- 快速查詢 - 系統通常具有快速查詢的能力,這是因為有預先聚集、快速索引和並行處理等技術。讓使用者可以在短時間內查詢大量數據,而不必擔心系統的速度問題。
- 多維數據分析 - 提供多維數據分析的功能,能以不同的維度對數據進行分析。例如可以按照時間、地區、產品類別等多個維度進行數據分析,以此深入了解數據之間的關係和趨勢。
- 複雜分析功能 - 提供了包括分組、聚合、過濾和排序等操作。可以讓使用者根據具體的業務需求,進行多層次的分析,透過了解數據的細節來發現其中的模式和彼此間的關聯性。
- 決策支持 - 廣泛應用於決策支持系統中,幫助使用者做出基於數據資料的決策。通過多維分析資料,讓使用者可以更好地理解企業的業務運作和趨勢,從而做出更明智的決策。
- 快速查詢 - 系統通常具有快速查詢的能力,這是因為有預先聚集、快速索引和並行處理等技術。讓使用者可以在短時間內查詢大量數據,而不必擔心系統的速度問題。
Row-oriented 介紹:
- 將每列的資料存成一組,顧名思義它會將同一列的數據連續的儲存起來變成同一組
- 適合在需要有 transaction 並且會頻繁異動資料的場景中使用
- MySQL、PostgreSQL 都屬於 Row-oriented 的資料庫
ID
Name
Age
Sex
1
Amy
25
Female
2
Jhon
30
Male
3
Mark
28
Male
從上表中可以看出列儲存模式的儲存方式,會將每一列的資料連續存成一組。這種設計可以讓你很快的得到一整列的資訊,例如只要知道 id 就可以快速取得整列的資訊,包含 Name、Age、Sex 欄位資料。缺點為使用空間較大,因為需要紀錄整列的數據,所以成本會比較大。查詢部份,就算不是篩選全部的欄位,也會需要先掃描整列資料,再依語法過濾需要的欄位,所以當資料過於龐大時會很耗時間。
ID | Name | Age | Sex |
1 | Amy | 25 | Female |
2 | Jhon | 30 | Male |
3 | Mark | 28 | Male |
Columnar 介紹:
- 行的儲存模式,會將來自同一行的資料儲存成一組
- 其特性適合對大數據進行分析和複雜查詢
- Cassandra、HBase、Clickhouse 都屬於 Columnar 的資料庫
Row-oriented V.S Columnar:
ClickHouse 和 MySQL 比較:
ClickHouse | MySQL | |
儲存模式 | Columnar | Row-oriented |
資料庫類型 | 倉庫型數據(OLAP) | 關聯式資料庫(OLTP) |
索引差異 | 稀疏索引 | B+ Tree |
適用情境 | 大數據分析並且無需頻繁異動資料場景。 | 需即時更新資料並且有 transaction 需求場景。 |
分散式架構 | 原始設計就為分散式資料庫 | 需額外套件擴展實現 |
ClickHouse 優點:
- 有完整的 DBMS 功能 - DBMS 全名又叫做資料庫管理系統,主要功能可以有效的管理和操作資料庫,確保資料的安全性、一致性和可用性,讓使用者可以很好的管理和控制資料庫。
- 無須預先處理資料 - 可以直接處理原始數據資料,不需要再對資料做任何的預先處理或是轉換。意味著可以直接將即時生成的大量資料直接導入到 ClickHouse 中,就可以做查詢操作,而不用再等待資料處理完成後才能使用,使得資料轉移能更快速和便利。
- 使用 Columnar 存儲模式 - Columnar 更適合用於大數據和有複雜查詢的情境來做使用,查詢速度會更加快速且有效率。
- 充分的利用所有可用的資源 - 其底層技術可以同时利用多个 CPU 核心和磁碟資源來執行查詢的操作,以此加速數據查詢的處理速度。
- 不依賴複雜生態系 - 不需要像其他分散式資料庫一樣,需要依賴過於複雜的生態系統,例如 Hadoop。可以獨立運作,並且更輕鬆的佈署和管理,減少系統的複雜性和維護的成本。
ClickHouse 缺點:
- 不適合頻繁的資料異動 - 在 ClickHouse 中異動資料算是很耗效能的操作,當發生異動時不管是 delete 或是 update, ClickHouse 都需調整相關的索引值,並且重新規劃資料分區,所以要是頻繁的異動資料,會嚴重影響系統穩定性和可用性。
- 異動資料為非同步操作 - ClickHouse 在實際更新時,並不會真的刪除資料,而是會新增一筆新的資料,並且將對應的原始的資料做刪除標記。ClickHouse 底層會不定時的批次處理需要刪除的資料,這樣就會導致資料在合併前,可能會出現資料重複的情況,要解決這個情況,就必須要要在查詢時另外做處理,例如下 Distinct 去重或是 ClickHouse 提供的 FINAL 和 OPTIMIZE 語法強制合併資料。
- 不支援 transaction - 因為上述所說缺點,導致 ClickHouse 無法支援 transaction。
- 需要耗費大量的計算和儲存資源 - ClickHouse 不管是查詢單筆或是好幾千萬筆,都會用盡資源去查詢,如此就會導致當查詢筆數很少時,也需要耗費大量的資源。
安裝 ClickHouse 和 Tabix:
- docker pull yandex/clickhouse-server
- 拉取 ClickHouse 的 image 檔案 - docker run -d -p 8123:8123 -p 9000:9000 --name clickhouse yandex/clickhouse-server
- 啟動 ClickHouse 服務 - 調整 clickhouse-server 的 config.xml 設定
- 調整 ClickHouse config.xml 檔,啟用 Tabix GUI
ClickHouse 在 Container 操作:
- 進入 ClickHouse 的 container
- 輸入 clickhouse-client 指令進入操作的命令列
- 輸入要查的 sql 語法
- 顯示查詢結果
- 顯示查詢的筆數、讀取速度、數據大小等資訊