TSO DossierTimescaleOps Hồ Sơ Định Cỡ Chuỗi Thời Gian Cảm Biến IoT & Hypertable PostgreSQL
English Dossier (EN)
TS-06 // GORILLA-ZSTD // GORILLA + DELTA-OF-DELTA • ĐÓNG GÓI MẢNG CỘT 1.000 DÒNG

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.

Ma Trận Định Cỡ Phần Cứng Tất Định Trên TimescaleOps: TS-06 // GORILLA-ZSTD
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
Các mốc dung lượng tính theo phương trình tất định của TimescaleOps; biểu phí công khai đối chiếu ngày 2026-11-12 từ trang thanh toán chính thức của hãng (`https://www.hostinger.com/vps-hosting`, `https://www.vultr.com/pricing/`, `https://ultahost.com/vds-hosting`, `https://www.interserver.net/vps/`, `https://chemicloud.com/wordpress-hosting`) — giá khuyến mãi và gia hạn có thể thay đổi.
TimescaleDB SQL — Configure Columnar Compression Policy & Audit Per-Hypertable Ratios
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.