TSO DossierTimescaleOps Hồ Sơ Định Cỡ Chuỗi Thời Gian Cảm Biến IoT & Hypertable PostgreSQL
English Dossier (EN)
TS-02 // OHLCV-CAGG // TỔNG HỢP ĐA TẦNG • CONTINUOUS AGGREGATES TỰ ĐỘNG

Hồ Sơ Định Cỡ Bảng Tick & Tự Động Hóa Nến OHLCV (Continuous Aggregates)

Thiết kế hệ thống tổng hợp khung thời gian 1m/5m/1h tự động từ luồng dữ liệu tần suất cao bằng Continuous Aggregates của TimescaleDB trên TimescaleOps.

Quét trực tiếp hàng trăm triệu dòng dữ liệu thô mỗi lần tải biểu đồ 30 ngày gây lãng phí nhân CPU và cạnh tranh I/O với luồng ghi trực tiếp. Continuous Aggregates tính sẵn các khung thời gian đã đóng và chỉ ghép thêm phần dữ liệu mới nhất ở phút hiện tại.

Ma Trận Định Cỡ Phần Cứng Tất Định Trên TimescaleOps: TS-02 // OHLCV-CAGG
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
50 Streams • 1K events/s 7d / 1d 8 GB DDR5 128 GB Local NVMe Vultr HF 8GB / Hostinger KVM 2
250 Streams • 10K events/s 1d 16 GB DDR5 384 GB Local NVMe Vultr HF 16GB (3.5GHz+)
1,000 Streams • 50K events/s 6h 32 GB DDR5 2 TB NVMe / ZFS InterServer Ryzen 64GB
High-Density 150K events/s 6h / 1h 64 GB DDR5 6 TB ZFS Vault InterServer Bare-Metal + Vultr Ingest
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 — Real-Time 1-Minute OHLCV + Weighted Average Continuous Aggregate
CREATE MATERIALIZED VIEW ohlcv_1m
WITH (timescaledb.continuous, timescaledb.materialized_only = false) AS
SELECT
  time_bucket('1 minute', ts) AS bucket,
  symbol_id,
  venue_id,
  first(last_px, ts) AS open,
  max(last_px) AS high,
  min(last_px) AS low,
  last(last_px, ts) AS close,
  sum(last_qty) AS volume,
  sum(last_px * last_qty) / NULLIF(sum(last_qty), 0) AS vwap
FROM market_ticks_ohlcv
GROUP BY bucket, symbol_id, venue_id
WITH NO DATA;

SELECT add_continuous_aggregate_policy('ohlcv_1m',
  start_offset => INTERVAL '2 hours',
  end_offset   => INTERVAL '1 minute',
  schedule_interval => INTERVAL '1 minute');

1. Đặt Trạm Thu Thập TimescaleDB Trên Hạ Tầng Xung Nhịp Đơn Nhân Cao & Local NVMe

Tiến trình phân tích luồng dữ liệu và chèn lô COPY vào PostgreSQL phụ thuộc lớn vào xung nhịp đơn nhân CPU. Đặt máy chủ thu thập trên ổ Local NVMe xung nhịp 3.5GHz+ gần nguồn phát dữ liệu giúp giảm hàng đợi TCP.

2. Tổng Hợp Đa Tầng (Hierarchical Continuous Aggregates) Trong TimescaleDB

Từ TimescaleDB 2.9+, bạn có thể tạo khung tổng hợp 1 phút (ohlcv_1m) từ bảng gốc, sau đó xây tiếp các bảng 15m, 1h, 1d chồng trực tiếp lên ohlcv_1m để tiến trình làm mới chỉ đọc 60 dòng mỗi giờ thay vì quét lại dữ liệu thô.

3. Bật Nén Cột TimescaleDB Cho Cả Bảng Gốc Lẫn Bảng Tổng Hợp Lịch Sử

Bản thân mỗi Continuous Aggregate cũng là một hypertable. Kết hợp nén cột sau 7 ngày cho bảng thô và sau 14 ngày cho bảng ohlcv_1m giúp lưu trữ nhiều năm dữ liệu tổng hợp rất gọn nhẹ.

Câu Hỏi Kỹ Thuật Về TS-02 // OHLCV-CAGG Trên TimescaleOps

Nên lưu mã định danh trong hypertable TimescaleDB dạng TEXT hay số nguyên INT?

Hãy ánh xạ chuỗi ký tự sang bảng danh mục dùng khóa SMALLINT hoặc INT. Khóa số nguyên giúp thu gọn kích thước chỉ mục B-tree trên RAM.

Làm sao ghi 50.000 dòng/giây từ Python hoặc Rust vào TimescaleDB hiệu quả?

Gom đệm 2.000–10.000 dòng trong RAM (hoặc chu kỳ 250ms) rồi đẩy xuống bằng giao thức nhị phân COPY của PostgreSQL thay vì chạy từng lệnh INSERT lẻ.

Cờ materialized_only = false có làm chậm truy vấn Continuous Aggregate không?

Không đáng kể nếu bạn giữ end_offset ở mức 1 phút, vì khi đó PostgreSQL chỉ quét thêm tối đa 60 giây cuối của bảng nóng.