为什么历史行情可以放在数据湖里,但线上 API 还需要专门的数据库?

数据库选型:时序库与 OLAP

约 9 分钟5 道自测更新于 2026-10-28

一句话记住选库先从查询、写入、更新和运维约束出发;时序库和列式 OLAP 各有长处,排序键应匹配最常见的过滤条件,不能只看单次跑分。

01学完你能做到

区分 OLTP、OLAP 和时序数据库的适用场景;理解 ClickHouse 的排序键、稀疏索引和数据片段合并;根据查询、写入、更新、延迟和运维约束做数据库选型。

02这课解决什么问题

为什么历史行情可以放在数据湖里,但线上 API 还需要专门的数据库?数据 API 常见的是按代码和时间范围查询、全市场聚合和高并发读取,这些请求不适合每次打开对象存储文件完成。

03从 OLTP 到 OLAP、时序库

  • OLTP:面向频繁的小事务和单行更新,重视事务一致性。
  • OLAP:面向大范围扫描、聚合和分析,通常读多写少。
  • 时序数据库:围绕时间戳、标签和数值设计,常提供时间切片、降采样或 ASOF JOIN 等能力,具体功能依产品而异。
  • 列式数据库:按列存储和压缩,适合只读部分字段并扫描大量记录。

ClickHouse 的 MergeTree 系列表引擎会把每批写入形成数据片段,后台再合并片段。建表时的 ORDER BY (code, ts) 决定磁盘上的排序键,稀疏主键索引按数据颗粒记录标记,不是每行一个索引。查询条件与排序键匹配时,能减少需要读取的数据范围。

ASOF JOIN 用“不晚于某时刻的最近记录”做时间关联,例如把成交配上当时最新快照。使用它仍要检查时区、证券映射、可用时间和陈旧度。

04常见架构和选型

常见分工是“湖存全量、库存热数据”:数据湖保留完整历史供批量分析,数据库保存近期或高频访问数据服务 API。也可以采用单库方案,但要用真实访问模式验证。

方案可能适合需要承担的代价
ClickHouse大范围聚合、全市场横截面、较高并发分析查询不适合频繁改单行,集群运维需要能力
时序数据库时间序列点查、降采样、时间关联生态、授权和集群能力因产品而异
PostgreSQL/TimescaleDB团队熟悉 SQL 和 PostgreSQL 生态超大规模扫描的成本要实测
DuckDB单机研究、嵌入式分析不是线上高并发服务端

不要只凭数据量或一次跑分决定技术栈,还要评估写入批次、更新和删除、备份恢复、高可用、监控、人才和授权成本。

05代码:排序键影响扫描

CREATE TABLE ticks
(
    code String,
    ts DateTime64(3, 'Asia/Shanghai'),
    price Float64,
    volume UInt32
)
ENGINE = MergeTree
PARTITION BY toDate(ts)
ORDER BY (code, ts);

SELECT toStartOfMinute(ts) AS minute,
       argMin(price, ts) AS open,
       max(price) AS high,
       min(price) AS low,
       argMax(price, ts) AS close,
       sum(volume) AS volume
FROM ticks
WHERE code = '600001.SH'
GROUP BY minute
ORDER BY minute;

这里的 argMin 和 argMax 是按时间取价格的聚合写法。实际使用要确认同一时间戳的并列处理、价格单位、数据排序和迟到修订规则。

频繁小批量插入会产生很多数据片段,后台合并压力升高。对外部数据库写入时,流处理的“精确一次”也不能自动保证外部系统没有重复,仍需事务、幂等键或版本去重。

06延伸阅读

07一分钟讲给别人

试着用自己的话讲一遍行情数据读多写多、按时间扫并做聚合,所以常评估列式 OLAP 或时序库,而不是只用事务库。ClickHouse 的排序键例如 `(code, ts)` 能帮助查一只股票时少读数据块。常见架构是湖存全量、库存热数据;选型还要看运维、备份、授权和更新难度。

想一想

5 道自测

先在心里答一遍,再展开对照。能说清理由,比答对数字更重要。

  1. 01OLTP 和 OLAP 的主要差异是什么?

  2. 02`ORDER BY (code, ts)` 为什么可能有利于单只股票查询?

  3. 03ClickHouse 为什么不适合频繁改单行?

  4. 04ASOF JOIN 解决什么类型的关联?

  5. 05为什么不能只看一次跑分选数据库?

已看 0/5 题

练动手练习

任务:为“查单只股票 30 天分钟线”和“查某天全市场涨幅前 50”各写一条代表性查询,比较两种排序键的利弊;列出你会在压测中记录的延迟、吞吐、资源和恢复指标。

完成这一课

完成这一课

读完讲义、看完自测答案,这一课就算学完了。

  • 读完讲义
  • 看完全部自测

本课为投资者教育内容,案例数字均为示意,不构成任何投资建议,也不承诺收益。规则和费率会变,实际操作前请以交易所、监管机构和产品的最新公告为准。