Hướng Dẫn Định Cỡ QuestDB Giao Thức ILP Cho Luồng Ghi Tốc Độ Cao
Hồ sơ TimescaleOps hướng dẫn định cỡ phân vùng cột QuestDB chuẩn SIMD, cấu hình mmap RAM, nén ZFS zstd-3 và truy vấn ASOF JOIN.
Khi luồng dữ liệu thuần ghi nối tiếp (append-only) vượt ngưỡng 150.000 sự kiện/giây trên một máy đơn lẻ và cần phép nối thời gian ASOF JOIN mà không dùng khóa ngoại quan hệ, kiến trúc phân vùng cột mmap của QuestDB kết hợp nén ZFS là lựa chọn chuyên biệt.
| 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 |
|---|---|---|---|---|
| 25K events/s ILP | PARTITION BY DAY |
16 GB DDR5 | 384 GB Local NVMe | Vultr HF 16GB |
| 150K events/s ILP | PARTITION BY DAY / HOUR |
32–64 GB DDR5 | 768 GB Local NVMe | Vultr HF 32GB / UltaHost VDS 64GB |
| 500K events/s Firehose | PARTITION BY HOUR |
128 GB DDR5 | 4–10 TB ZFS LZ4/ZSTD | InterServer Bare-Metal Ryzen 128GB |
| Multi-Year Cold Replay | PARTITION BY DAY + ZFS |
64 GB DDR5 | 12 TB ZFS Pool | InterServer Price-Lock Storage |
-- Create partitioned columnar table with explicit SYMBOL dictionary capacity
CREATE TABLE l1_quotes (
ts TIMESTAMP,
venue SYMBOL CAPACITY 32 CACHE,
pair SYMBOL CAPACITY 2048 CACHE INDEX,
bid DOUBLE,
ask DOUBLE,
bid_size DOUBLE,
ask_size DOUBLE
) TIMESTAMP(ts) PARTITION BY DAY WAL DEDUP UPSERT KEYS(ts, venue, pair);
-- Align each event against the most recent prevailing reference quote via ASOF JOIN
SELECT t.ts, t.pair, t.price, q.bid, q.ask, (q.ask - q.bid) AS spread
FROM trades t ASOF JOIN l1_quotes q ON (venue, pair);
1. Phân Bổ Đúng JVM Heap Và Bộ Đệm Mmap Của Nhân Linux Cho QuestDB
Theo tài liệu kiến trúc bộ nhớ của QuestDB, các cột dữ liệu được đọc ghi ngoài vùng nhớ Java qua cơ chế mmap. Chỉ nên giữ JVM -Xmx khoảng 4 GB – 8 GB và dành trên 75% RAM DDR5 cho Linux Page Cache giữ các phân vùng đang mở.
2. Kết Hợp Phân Vùng QuestDB Mã Nguồn Mở Với Nén ZFS zstd-3
QuestDB mã nguồn mở ghi các tệp cột nhị phân theo từng thư mục ngày/giờ. Đặt thư mục dữ liệu trên phân vùng OpenZFS bật compression=zstd-3 và recordsize=128K giúp tiết kiệm đáng kể dung lượng ổ cứng.
3. Khai Báo Chuẩn QuestDB SYMBOL CAPACITY Tránh Dựng Lại Bảng Băm
Chỉ dùng kiểu SYMBOL cho các trường hữu hạn phần tử (mã trạm, loại cảm biến, tên sàn) và khai báo trước tham số CAPACITY cao hơn số lượng khóa thực tế.
Câu Hỏi Kỹ Thuật Về TS-03 // QUESTDB-ILP Trên TimescaleOps
Khi nào nên chọn QuestDB thay vì hypertable của TimescaleDB?
Chọn QuestDB khi luồng dữ liệu thuần ghi nối tiếp tốc độ rất cao và cần ASOF JOIN mà không cần khóa ngoại quan hệ ACID, PostGIS hay cập nhật dòng phức tạp của PostgreSQL.
QuestDB có tự lọc trùng lặp khi bộ thu thập kết nối lại và gửi trùng mẫu không?
Có. Bảng chuẩn WAL của QuestDB hỗ trợ từ khóa DEDUP UPSERT KEYS(ts, symbol) giúp loại bỏ bản ghi trùng ngay trong đường ống ghi.
Cấu hình hệ tệp NVMe và ZFS nào phù hợp cho QuestDB và TimescaleDB trên TimescaleOps?
Dùng XFS/ext4 gắn cờ noatime trên ổ Local NVMe đơn lẻ, hoặc cấu hình ZFS ashift=12, recordsize=128K, compression=zstd-3 cho kho lưu trữ nhiều Terabyte.