當你的 ClickHouse 資料規模從 GB、TB 成長到 PB 時,如何妥善分配 SSD、HDD、甚至雲端冷儲存資源,變得至關重要。ClickHouse 透過 Storage Policies (儲存政策),提供了極為靈活的磁碟分層架構,不僅能優化查詢效能,也能大幅降低儲存成本。
Storage Policies 是 ClickHouse 內部管理資料儲存位置與分層邏輯的配置機制。它將磁碟資源劃分為不同層級(Volumes),並根據資料大小、TTL、Merge 條件等動態將資料移動至不同層級磁碟。
你可以做到:
<storage_configuration>
<disks>
<disk_ssd>
<path>/var/lib/clickhouse/ssd/</path>
</disk_ssd>
<disk_hdd>
<path>/var/lib/clickhouse/hdd/</path>
</disk_hdd>
<disk_s3>
<type>s3</type>
<endpoint>https://s3.amazonaws.com/your-bucket/</endpoint>
<access_key_id>YOUR_KEY</access_key_id>
<secret_access_key>YOUR_SECRET</secret_access_key>
</disk_s3>
</disks>
<policies>
<tiered_policy>
<volumes>
<hot>
<disk>disk_ssd</disk>
</hot>
<cold>
<disk>disk_hdd</disk>
<max_data_part_size_bytes>5000000000</max_data_part_size_bytes>
</cold>
<archive>
<disk>disk_s3</disk>
</archive>
</volumes>
</tiered_policy>
</policies>
</storage_configuration>
層級 | 磁碟類型 | 適用資料 | 說明 |
---|---|---|---|
Hot | SSD | 近 7 天高頻查詢資料 | 保證讀取速度與低延遲 |
Cold | HDD | 歷史數據或低頻查詢資料 | 儲存成本較低,適合冷資料 |
Archive | S3 | 歸檔資料、不常查詢但需長期保留 | 跨區域備份、儲存無上限、成本最低 |
CREATE TABLE user_logs
(
EventDate DateTime,
UserID UInt64,
Action String
) ENGINE = MergeTree
ORDER BY (UserID, EventDate)
SETTINGS storage_policy = 'tiered_policy'
TTL EventDate + INTERVAL 7 DAY TO VOLUME 'cold',
EventDate + INTERVAL 30 DAY TO VOLUME 'archive';
這樣設計後:
SELECT
name AS table_name,
disk_name,
count() AS parts
FROM system.parts
WHERE active AND table = 'user_logs'
GROUP BY table_name, disk_name;
能夠即時掌握資料是儲存在 SSD、HDD,還是 S3。
ClickHouse 提供了 system.storage_policies
系統表,讓你能夠隨時檢查 Storage Policies 與 Volume 配置,並了解磁碟資源的優先順序與分層邏輯。
system.storage_policies
欄位解讀欄位名稱 | 說明 |
---|---|
policy_name | 儲存政策名稱。 |
volume_name | 所屬 Volume 名稱。 |
volume_priority | Volume 優先順序,數字越小優先度越高 (0 最優先)。 |
disks | 該 Volume 內包含的磁碟列表。 |
volume_type | Volume 類型 (JBOD, SINGLE_DISK, UNKNOWN)。 |
max_data_part_size | 該 Volume 可儲存的最大 Data Part 大小 (0 代表無上限)。 |
move_factor | 當 Volume 剩餘空間不足 (Free Space Ratio 超過此值) 時,ClickHouse 會將資料移動到下一個 Volume。 |
prefer_not_to_merge | 是否避免在該 Volume 進行 Merge(理論上不建議啟用)。 |
perform_ttl_move_on_insert | 插入資料時若符合 TTL 規則是否立即執行移動。 |
load_balancing | 當 Volume 中包含多顆磁碟時,資料寫入的負載平衡策略(ROUND_ROBIN 或 LEAST_USED)。 |
SELECT
policy_name,
volume_name,
volume_priority,
disks,
volume_type,
max_data_part_size,
move_factor,
load_balancing
FROM system.storage_policies
WHERE policy_name = 'tiered_policy';
ClickHouse 的 Storage Policies 不僅僅是磁碟資源管理工具,更是「大規模數據儲存成本優化策略」的核心武器。只要正確設計,就能讓你的 ClickHouse 叢集具備自動儲存分層、效能與成本兼顧的絕佳特性。