文章目錄
ClickHouse 使用 MySql Database Engine
之前筆記 ClickHouse 在彙總資料時的效能優勢 紀錄到 ClickHouse 與 MySql 在特定查詢情境的效能差異,查閱官網文件時,發現 ClickHouse 除了支援自有的 table engine 之外,也支援其他 DB 的 engine 其中還有兩種類型:Database Engine
與 Table Engine
,所以今天就來紀錄一下 ClickHouse 如何使用 MySql Database Engine 與 MySql Table Engine 之間的效能差異
基本環境說明
- macOS Sonoma 14.2.1 (Apple M2 Pro)
- OrbStack Version 1.2.0 (16496)
- .NET SDK 8.0.100
- JetBrains Rider 2023.3.2
Container Images
- clickhouse/clickhouse-server:23.11.3.23
- mysql:8.2
NuGet Library
- BenchmarkDotNet 0.13.12
- ClickHouse.Client 7.0.0
- MySql.Data 8.3.0
docker-compose.yml
MySql DDL
測試資料
產生一億筆資料
設定方式
Database Engine
詳細內容請參考官網文件 DatabaseEngines:MySQL
語法
範例
Table Engine
詳細內容請參考官網文件 TableEngin:MySQL
語法
範例
效能比較
程式碼
比較結果
心得
僅支援以下 data type,其他 MySQL data type 皆會被視為 string,使用時需要自行做型別轉換,難免會有效能耗損的問題
MySQL ClickHouse UNSIGNED TINYINT UInt8 TINYINT Int8 UNSIGNED SMALLINT UInt16 SMALLINT Int16 UNSIGNED INT, UNSIGNED MEDIUMINT UInt32 INT, MEDIUMINT Int32 UNSIGNED BIGINT UInt64 BIGINT Int64 FLOAT Float32 DOUBLE Float64 DATE Date DATETIME, TIMESTAMP DateTime BINARY FixedString 原本想要比照之前筆記 :依時間區間過濾資料,但我嘗試了
BETWEEN
與>=
跟<=
,都無法正確查到資料,不知道是我使用方式不對,還是 mysql engine 對於 date 的比對有額外的處理方式,所以就先不將這個部分納入比較雖然簡單的
WHERE
相關條件 (=
,!=
,>
,>=
,<
,<=
) 是在 MySQL 上執行,但相同查詢在 ClickHouse 相較於 MySQL 快上近 50%,雖然比不上直接查詢 ClickHouse 動輒幾十甚至上百倍的差距,但也不失為一個選擇ClickHouse MySql engine (database engine 與 table engine) 都支援
SELECT
與INSERT
指令,但RENAME
、CREATE TABLE
、ALTER
則不行
完整程式碼請參考:GitHub:yowko/ClickHouseMySqlEngineBenchmark
參考資訊
文章作者 Yowko Tsai
上次更新 2024-01-15
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。