ClickHouse Materialized Views Tức Thời: Định Cỡ `AggregatingMergeTree` Trên ClickHouseCalc
Trong mô hình định lượng ClickHouseCalc, Materialized View của ClickHouse hoạt động như bộ kích hoạt ngay trên luồng ghi — chuyển hóa từng lô khớp lệnh đầu vào thành trạng thái `AggregatingMergeTree` siêu gọn trước cả khi gộp xuống đĩa.
Bảng Định Cỡ Đĩa Nén & RAM ClickHouseCalc Cho materialized-views-realtime-bi
| Quy Mô Luồng Ghi | Dữ Liệu Thô | Đĩa Nén MergeTree | Cấu Hình RAM & vCPU | Đối Chiếu Chi Phí (2026-11-12) |
|---|---|---|---|---|
| 100M Ticks/Day + 4 MVs (365d · 38 GB/d) | 13.87 TB Raw Ticks | 1.35 TB Gen4 NVMe (LZ4 + DoubleDelta) | 32 GB RAM / 8 vCPU | ~$1,950/tháng Cloud Warehouse vs $37.50–$58/tháng UltaHost VDS |
| 1B Ticks/Day + 8 MVs (365d · 380 GB/d) | 138.7 TB Raw Ticks | 10.6 TB NVMe (ZSTD-3 + 22% Buffer) | 64–128 GB RAM / 24 vCPU | ~$11,400/tháng Cloud Warehouse vs $109.00/tháng InterServer Ryzen |
Bảng Nến 1 Phút `AggregatingMergeTree` & View Tự Động Trên ClickHouseCalc
CREATE TABLE market.ohlcv_1m_target
(
symbol LowCardinality(String),
bucket DateTime CODEC(DoubleDelta, LZ4),
open_price AggregateFunction(argMin, Float64, DateTime64(9)),
high_price SimpleAggregateFunction(max, Float64),
low_price SimpleAggregateFunction(min, Float64),
close_price AggregateFunction(argMax, Float64, DateTime64(9)),
volume SimpleAggregateFunction(sum, Float64)
)
ENGINE = AggregatingMergeTree
PARTITION BY toYYYYMM(bucket)
ORDER BY (symbol, bucket);
CREATE MATERIALIZED VIEW market.ohlcv_1m_mv TO market.ohlcv_1m_target AS
SELECT
symbol,
toStartOfMinute(exchange_ts) AS bucket,
argMinState(price, exchange_ts) AS open_price,
max(price) AS high_price,
min(price) AS low_price,
argMaxState(price, exchange_ts) AS close_price,
sum(qty) AS volume
FROM market.raw_ticks
GROUP BY symbol, bucket;
Danh Mục Tinh Chỉnh MergeTree ClickHouseCalc Cho materialized-views-realtime-bi
- Luôn gom lô khi ghi vào bảng gốc (`>= 10.000` dòng mỗi block) vì mỗi lần insert đều sinh ra một part tương ứng trên toàn bộ các Materialized View gắn kèm.
- Bật `parallel_view_processing = 1` trên máy chủ từ 8 vCPU trở lên để nhiều Materialized View tính toán song song trên các nhân vật lý.
- Kết hợp TTL ngắn 14–30 ngày cho bảng `raw_ticks` chi tiết với lưu trữ nhiều năm trên bảng tổng hợp nến 1 phút `ohlcv_1m_target`.
Câu Hỏi Kỹ Thuật ClickHouseCalc Về materialized-views-realtime-bi
- Tại sao ClickHouseCalc lưu ý bắt buộc dùng hậu tố `-Merge` khi truy vấn bảng tổng hợp `AggregatingMergeTree`?
-
Tiến trình gộp Part chạy nền bất đồng bộ nên một khóa `(symbol, bucket)` có thể đang nằm trên vài part chưa gộp hết; dùng `GROUP BY symbol, bucket` kèm `argMinMerge()` giúp hợp nhất kết quả chính xác ngay lúc đọc.
- Trong trường hợp nào ClickHouseCalc ưu tiên `LZ4` hơn `ZSTD(3)` cho phân vùng khớp lệnh tài chính nóng?
-
Với phân vùng nóng 7 ngày nhận dữ liệu thời gian tăng dần liên tục, bộ mã hóa `DoubleDelta` đã triệt tiêu phần lớn byte dư thừa còn `LZ4` giữ mức tiêu thụ CPU ghi ở ngưỡng thấp nhất.