ClickHouse 介紹:
- ClickHouse 是 2016 年由俄羅斯搜索引擎Yandex 內部項目開發的關聯型的 OLAP 數據庫。
- ClickHouse 是 ClickStream 和 Data WareHouse 的組合。以極高的查詢速度和性能而聞名。
- 許多公司如 Uber、Slack、Tesla、Tencent、Tiktok、Cloudflare 等都在生產中使用 ClickHouse。
- 其中 Tiktok 更是 ClickHouse 深度使用者,並且 Tiktok 在 ClickHouse 基礎上做了更多的擴展,例如加入雲端的架構等等,推出另外款名稱為 ByteHouse 產品,功能更加強大,不過需要另外收費
OLAP 介紹:
概念: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 |
從上表中可以看出列儲存模式的儲存方式,會將每一列的資料連續存成一組。這種設計可以讓你很快的得到一整列的資訊,例如只要知道 id 就可以快速取得整列的資訊,包含 Name、Age、Sex 欄位資料。
缺點為使用空間較大,因為需要紀錄整列的數據,所以成本會比較大。查詢部份,就算不是篩選全部的欄位,也會需要先掃描整列資料,再依語法過濾需要的欄位,所以當資料過於龐大時會很耗時間。
Columnar 介紹:
- 行的儲存模式,會將來自同一行的資料儲存成一組
- 其特性適合對大數據進行分析和複雜查詢
- Cassandra、HBase、Clickhouse 都屬於 Columnar 的資料庫
從上圖可以看出 Columnar 是將一行一行的資料紀錄成一組,這種儲存方式在對於需要對資料做計算處理或是模糊搜尋的情境中,只需要針對特定的欄位去搜索就行了,不用像列儲存模式需要把整列資料全部掃描完才能夠做運算,所以速度會快比較快。
Row-oriented V.S Columnar:
Row-oriented
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 的安裝,目前實做是用 docker 來啟動 ClickHouse 的服務,先 pull clickhouse-server 的 image 並且預留 8123 和 9000 port 供 ClickHouse 使用。
這邊另外裝了 Tabix 套件,這個是 ClickHouse 的 GUI,可以讓使用者用介面方式去操作 ClickHouse 的資料,Tabix 可以直接透過修改 ClickHouse Config 設定就能建置起來。
上圖是 docker-compose.yml 有關 ClickHouse 的配置,這邊特別將 Config 印射出來,是因為 ClickHouse 相關內部的設定都可以在這邊做調整。
ClickHouse 在 Container 操作:
- 進入 ClickHouse 的 container
- 輸入 clickhouse-client 指令進入操作的命令列
- 輸入要查的 sql 語法
- 顯示查詢結果
- 顯示查詢的筆數、讀取速度、數據大小等資訊
ClickHouse 在 Tabix 操作:
可以使用 Tabix 已介面的方式操作 ClickHouse,使用 Tabix 前需要先登入,輸入自訂的連線名稱、連線 URL、帳號 (default) 密碼 (無)。
登入後就可以在上方輸入 sql 相關語法,執行後下方會出現查詢結果,包含查詢筆數、讀取速度、數據大小等資訊。 Tabix 特別的地方是可以將資訊轉換成圖表分析,如下圖。
ClickHouse 於 Laravel 應用:
- glushkovds/phpclickhouse-laravel - 整合 clickHouse 到 Laravel 專案上

資料寫入:
Model 建置:
查詢、新增範例 (原生語法):
0 Comments:
張貼留言