GaiaEx AcademyGaiaEx Academy
KDB+/Q: ngôn ngữ của cơ sở dữ liệu tick
Lập Trình ViênLập Trình11 min read

KDB+/Q: ngôn ngữ của cơ sở dữ liệu tick

Cách Wall Street lưu trữ và truy vấn hàng tỷ điểm dữ liệu thị trường

Chia Sẻ Bài Viết

KDB+ và Q trong một phút

KDB+ là một cơ sở dữ liệu chuỗi thời gian hướng cột (column-oriented); Q là ngôn ngữ vector của nó. Các công ty sell-side và buy-side đã áp dụng nó cho lưu trữ tick, join, và phân tích cuộn (rolling analytics) nơi việc quét theo cột thắng các vòng lặp theo từng dòng.

Hiệu năng đến từ bố cục theo cột, việc sử dụng mạnh tay memory mapping, và các nguyên hàm vector được triển khai gần với phần cứng. Đây không phải là một sự thay thế OLTP tổng quát; nó được điều chỉnh cho các chuỗi thời gian chủ yếu là ghi thêm (append-heavy).

Bố cục theo cột (khái niệm) sym A A B time t₁ t₂ t₃ price p₁ p₂ p₃ Phép toán vector chạm vào các mảng liền kề → quét thân thiện với cache Schema và kiểu dữ liệu vẫn quan trọng: danh sách sym tệ tốn không gian
Các bảng là các vector cột; phân tích lọc và tổng hợp theo cột và theo thời gian.

Kiến thức cơ bản về Q

Q ngắn gọn và tính toán từ phải sang trái. Vector là kiểu dữ liệu gốc; các vòng lặp vẫn tồn tại nhưng các đường dẫn nóng tránh dùng chúng. Bảng là các từ điển (dictionary) của các cột, điều này khớp với cách dữ liệu tick được lưu trữ.

prices: 100.5 101.2 99.8
avg prices
deltas prices

Q dễ đọc đến từ các hàm nhỏ và các bình luận (comment) — riêng mật độ code không phải là một đức tính tốt trong các codebase chia sẻ.

Tickerplant, RDB, HDB

Một mô hình phổ biến: một tickerplant nạp các luồng dữ liệu và phân phát cho các subscriber; một cơ sở dữ liệu thời gian thực (RDB) giữ phiên hiện tại; một cơ sở dữ liệu lịch sử (HDB) lưu trữ lịch sử được phân vùng trên đĩa. Các quy trình cuối ngày sẽ cuộn RT vào các phân vùng HDB.

select last price by sym from trades where time > .z.t - 00:05

Crypto không bao giờ đóng cửa, vì vậy ranh giới "phiên" là các lựa chọn vận hành, không phải hồi chuông mở/đóng của sàn giao dịch.

Pipeline tick (bộ ba cổ điển) Feed handler Chuẩn hóa symbol Đóng dấu thời gian tại ranh giới Tickerplant Log + pub/sub Không lưu trữ dài hạn RDB + HDB Trong ngày vs lịch sử Phân vùng theo ngày Phục hồi khoảng trống dùng log; xác minh khoảng trống feed và các bản sửa muộn Feed crypto có thể bùng nổ: định cỡ buffer và back-pressure
Việc tách biệt thời gian thực và lịch sử giữ các đường dẫn nóng nhỏ gọn và các truy vấn có thể dự đoán được.

Nơi nó xuất hiện

Các công ty sử dụng KDB+ cho các dashboard giám sát, phân tích báo giá, và các tập dữ liệu nghiên cứu. Tên gọi và cách triển khai khác nhau; mô hình chung là cắt lát và phân tích nhanh trên tick và lệnh.

Các nền tảng crypto tạo ra dữ liệu liên tục — hãy lên kế hoạch lưu trữ, chơi lại (replay), và xuất dữ liệu tuân thủ từ trước.

Chi phí cấp phép và các lựa chọn thay thế

Cấp phép thương mại và tuyển dụng chuyên biệt là những chi phí thực tế. Các lựa chọn mở (ClickHouse, Timescale, QuestDB, DuckDB trên Parquet) đánh đổi sự phù hợp hệ sinh thái để lấy giá thành. Hãy benchmark trên tổ hợp truy vấn của riêng bạn, không phải theo các slide của nhà cung cấp.

Các stack dữ liệu tick trong crypto

Nhiều nhóm kết hợp Kafka hoặc Redpanda với lưu trữ theo cột và các engine SQL. Nguyên tắc bất biến từ KDB+ vẫn áp dụng: phân vùng theo thời gian, giữ schema chặt chẽ, và đo độ trễ đầu-cuối từ dấu thời gian của sàn giao dịch đến kết quả truy vấn.

Người dùng API của GaiaEx nên ghi lại dấu thời gian server và các định danh trình tự nếu được cung cấp — sự tương quan tốt hơn việc đoán.