Hồ Sơ Nén Cột Trong TimescaleDB (Toán Học Chọn Khóa segmentby & orderby)
Hồ sơ kỹ thuật TimescaleOps giải thích mã hóa Gorilla XOR, Delta-of-Delta, từ điển ZSTD và quy tắc tối thiểu 100 dòng mỗi nhóm compress_segmentby.
Đưa nhầm cột có giá trị duy nhất vào compress_segmentby sẽ làm vỡ các lô mảng cột 1.000 dòng của TimescaleDB và làm mất hiệu quả nén. Hồ sơ này phân tích cơ chế Gorilla XOR, Delta-of-Delta, ZSTD và câu lệnh SQL kiểm tra tỷ lệ nén từng chunk.
| Quy Mô Luồng Mẫu | Chu Kỳ Chunk / Phân Vùng | RAM DDR5 Khuyến Nghị | Dung Lượng Ổ Đĩa Ước Tính | Cấu Hình Hạ Tầng Tham Chiếu |
|---|---|---|---|---|
| 10K/s • 1 Year Retention | 3.6 TB Raw -> ~345 GB |
16 GB DDR5 | ~420 GB NVMe | Hostinger KVM 8 / InterServer |
| 10K/s • 5 Years Retention | 18.1 TB Raw -> ~1.41 TB |
16–32 GB DDR5 | 2 TB ZFS Pool | InterServer Ryzen Storage |
| 50K/s • 1 Year Retention | 18.1 TB Raw -> ~1.73 TB |
32 GB DDR5 | 2.2 TB NVMe / ZFS | InterServer Dedicated Ryzen |
| 50K/s • 5 Years Retention | 90.6 TB Raw -> ~7.1 TB |
64 GB DDR5 | 10 TB Price-Lock ZFS | InterServer Bare-Metal 2x10TB |
ALTER TABLE market_ticks_ohlcv SET (
timescaledb.compress,
timescaledb.compress_segmentby = 'symbol_id, venue_id',
timescaledb.compress_orderby = 'ts DESC'
);
SELECT add_compression_policy('market_ticks_ohlcv', INTERVAL '7 days');
-- Audit exact uncompressed vs compressed byte totals on your hypertable
SELECT
pg_size_pretty(before_compression_total_bytes) AS raw_size,
pg_size_pretty(after_compression_total_bytes) AS compressed_size,
round((1 - after_compression_total_bytes::numeric / before_compression_total_bytes) * 100, 2) AS saved_pct
FROM hypertable_compression_stats('market_ticks_ohlcv');
1. Quy Tắc compress_segmentby Trong TimescaleDB: Tối Thiểu 100 Dòng Mỗi Nhóm Trong Chunk
TimescaleDB gom các dòng có cùng khóa compress_segmentby trong một chunk rồi đóng gói tối đa 1.000 giá trị liên tiếp thành một mảng cột nén. Nếu đưa cột mã sự kiện duy nhất (UUID) vào segmentby khiến mỗi nhóm chỉ có vài dòng, hiệu suất nén sẽ sụt giảm nghiêm trọng. Chỉ đưa vào segmentby các khóa thực thể lọc trong WHERE (như device_id, meter_id) phát sinh tối thiểu 100 mẫu mỗi chunk.
2. Cơ Chế Nén Delta-of-Delta (Thời Gian) & Gorilla XOR (Số Thực) Của TimescaleDB
Chuỗi mốc thời gian lấy mẫu đều đặn có sai phân bậc hai gần bằng 0, giúp Delta-of-Delta thu gọn 8 byte TIMESTAMPTZ xuống còn vài bit, trong khi Gorilla XOR triệt tiêu các bit trùng lặp giữa hai giá trị cảm biến liền kề.
3. Cô Lập Tiến Trình Nén Nền TimescaleDB Bằng Nhân CPU Vật Lý Riêng
Khi chunk hết hạn cửa sổ nóng, worker nền phải sắp xếp và nén hàng triệu bản ghi. Sử dụng VDS nhân riêng (UltaHost) hoặc máy vật lý Ryzen (InterServer) giúp luồng ghi trực tiếp không bị tranh chấp CPU.
Câu Hỏi Kỹ Thuật Về TS-06 // GORILLA-ZSTD Trên TimescaleOps
Có thể chạy lệnh ALTER TABLE ADD COLUMN trên hypertable TimescaleDB đã bật nén không?
Được. TimescaleDB 2.x cho phép thêm cột mới tức thì bằng siêu dữ liệu mặc định mà không bắt giải nén lại toàn bộ chunk lịch sử.
Cột thời gian ts nên đặt ở compress_segmentby hay compress_orderby trong TimescaleDB?
Tuyệt đối không đặt cột ts vào compress_segmentby. Luôn khai báo ts DESC trong compress_orderby để thuật toán Delta-of-Delta và bộ lọc biên thời gian hoạt động đúng.
Cần cấp bao nhiêu tiến trình timescaledb.max_background_workers cho lịch nén cột?
Nên đặt timescaledb.max_background_workers tối thiểu bằng 8 trong postgresql.conf để tiến trình nén tự động không phải xếp hàng chờ lịch làm mới Continuous Aggregates.