GaiaEx AcademyGaiaEx Academy
KDB+/Q:tick 数据库的语言
开发者编程11 min read

KDB+/Q:tick 数据库的语言

华尔街如何存储与查询数十亿条市场数据

分享文章

一分钟看懂 KDB+ 与 Q

KDB+ 是一款面向列的时序数据库;Q 是它的向量语言。卖方和买方机构用它来做 tick 数据存储、表连接,以及滚动分析——在这些场景下,按列扫描比逐行循环更快。

它的性能来自列式布局、对内存映射的激进运用,以及贴近底层实现的向量原语。它并不是通用 OLTP 的替代品;它专为以追加为主的时序数据调优。

Columnar layout (conceptual) sym A A B time t₁ t₂ t₃ price p₁ p₂ p₃ Vector ops touch contiguous arrays → cache-friendly scans Schema and types still matter: bad sym lists cost space
表就是列向量;分析沿着列与时间做过滤和聚合。

Q 基础

Q 简洁,且从右向左求值。向量是原生类型;循环虽然存在,但热点路径会避开它们。表是列的字典,这正好契合 tick 数据的存储方式。

prices: 100.5 101.2 99.8
avg prices
deltas prices

可读的 Q 代码来自小函数和注释——在共享代码库里,单纯追求代码密度并不是优点。

Tickerplant、RDB、HDB

一种常见的模式:tickerplant 负责接入行情并分发给订阅者;实时数据库(RDB)保存当前交易时段的数据;历史数据库(HDB)在磁盘上以分区方式存储历史数据。日终流程会把实时数据滚入 HDB 分区。

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

加密市场从不收盘,所以「交易时段」的边界是运维上的选择,而不是交易所的开收盘铃声。

Tick pipeline (classic three-piece) Feed handlers Normalize symbols Timestamp at boundary Tickerplant Log + pub/sub No long-term store RDB + HDB Intraday vs history Partition by date Gap recovery uses logs; verify feed gaps and late corrections Crypto feeds can burst: size buffers and back-pressure
把实时与历史分开,能让热点路径保持精简、让查询表现可预测。

它出现在哪里

各家机构用 KDB+ 来做监控看板、报价分析和研究数据集。具体名称和部署方式各不相同,但模式都一样:对 tick 和订单做快速切片与多维分析。

加密交易场所会持续产生数据——请提前规划好数据保留、回放和合规导出。

许可成本与替代方案

商业许可和专业人才招聘都是实打实的成本。开源替代方案(ClickHouse、Timescale、QuestDB、基于 Parquet 的 DuckDB)用生态契合度换来更低的价格。请基于你自己的查询组合来做基准测试,而不是看厂商的宣传幻灯片。

加密 tick 数据技术栈

许多团队把 Kafka 或 Redpanda 与列式存储和 SQL 引擎搭配使用。KDB+ 时代的那条不变法则依然适用:按时间分区、保持 schema 严格,并测量从交易所时间戳到查询结果的端到端延迟。

GaiaEx API 的使用者如果能拿到服务器时间戳和序列标识符,就应该把它们记录下来——做关联远胜于靠猜。