4. 因子存储架构:列式存储、时序数据库与分层策略

在量化因子库与低延迟评分系统中,存储架构直接决定了因子数据的写入吞吐、查询响应速度以及历史回测的效率。本章深入剖析三种核心存储方案——列式存储(Parquet/Arrow)、时序数据库(InfluxDB/ClickHouse)以及分层存储策略,帮助你在不同场景下做出最优选型。

4.1 列式存储:Parquet 与 Arrow

列式存储是量化因子库的基石。与传统行式存储(如 CSV、MySQL InnoDB)不同,列式存储将同一列的数据连续存放,极大提升了分析型查询的 I/O 效率。

特性 Parquet Arrow
存储格式 磁盘持久化,高压缩比 内存列式,零拷贝
适用场景 历史因子库、批量回测 实时计算、进程间共享
压缩算法 Snappy / Zstd / Gzip 无(内存原生)
Schema 演进 支持(追加列) 需预定义
读取速度 中等(需解压) 极快(内存映射)
实战建议:使用 Parquet 存储日频、周频的历史因子快照,压缩比可达 5:1~10:1;使用 Arrow 作为日内高频因子的内存交换格式,避免序列化开销。

4.2 时序数据库:InfluxDB 与 ClickHouse

当因子数据带有明确的时间戳标签,且需要频繁进行时间窗口聚合(如过去 5 分钟的平均波动率)时,时序数据库(TSDB)是比通用列式存储更优的选择。

4.2.1 InfluxDB:轻量级时序引擎

  • 数据模型:measurement + tag(维度)+ field(指标)+ timestamp。
  • 写入性能:单机每秒可处理数十万点,适合边缘节点或小规模因子流。
  • 查询语言:Flux(功能强但学习曲线陡)或 InfluxQL。
  • 局限:分布式能力较弱,大规模集群需企业版。

4.2.2 ClickHouse:分析型列式数据库

  • 数据模型:MergeTree 家族引擎,按时间分区 + 主键排序。
  • 写入性能:批量写入极佳(建议每批 ≥ 1000 行),支持实时插入。
  • 查询性能:秒级聚合百亿行,适合因子回测与监控看板。
  • 特色功能:物化视图、TTL 自动过期、跳数索引。
对比维度 InfluxDB ClickHouse
写入模式 单点实时写入 批量写入为主
压缩比 中等(约 3:1) 高(约 6:1~10:1)
SQL 兼容 部分(Flux 非标准) 类 SQL(MySQL 协议)
典型延迟 毫秒级(单点) 亚秒级(聚合查询)
运维复杂度 低 中高
避坑提示:不要将 InfluxDB 用于跨多标的复杂 Join 查询;ClickHouse 不适合高频单行写入(每次写入都会生成新 part,导致合并压力)。

4.3 分层存储策略

单一存储方案无法同时满足“低延迟写入”、“高压缩历史存储”和“实时聚合查询”三个目标。分层存储策略将因子数据按时间热度和访问模式划分为三层,每层使用最合适的存储引擎。

分层存储策略架构 热层(Hot Tier)—— 实时因子流 存储引擎:Apache Arrow(内存) + Redis Streams 数据范围:最近 1 小时 ~ 1 天,毫秒级写入与读取 典型场景:实时信号生成、高频交易决策 温层(Warm Tier)—— 日内/日频因子 存储引擎:ClickHouse(MergeTree) / InfluxDB 数据范围:最近 1 天 ~ 30 天,秒级聚合查询 典型场景:盘中监控、因子衰减分析、风险计算 冷层(Cold Tier)—— 历史因子仓库 存储引擎:Apache Parquet(HDFS / S3 / 本地磁盘) 数据范围:30 天以上,高压缩比,低成本存储 典型场景:历史回测、因子研究、监管审计 TTL 过期 / 批量转储 定时归档 / 压缩 回测加载 数据在层间自动迁移:热层 → 温层(按 TTL)→ 冷层(按归档策略),上层可透明查询下层数据

4.4 分层策略实施要点

  1. 数据写入路径:日内因子先写入热层(Arrow/Redis),同时异步复制到温层(ClickHouse);每日收盘后,温层数据批量压缩为 Parquet 并移至冷层。
  2. 查询路由:评分系统根据查询时间范围自动选择存储层——实时查询走热层,近 30 天查询走温层,历史回测走冷层。
  3. TTL 与归档:ClickHouse 使用 TTL event_time + INTERVAL 30 DAY TO DISK 'cold' 自动迁移;冷层 Parquet 文件按日期分区,配合 Hive 分区表或 Presto 查询。
  4. 一致性保证:温层作为权威数据源,热层数据丢失可从温层重放恢复。
性能基准参考:某私募实盘案例中,采用 Arrow(热层)+ ClickHouse(温层)+ Parquet(冷层)三层架构后,因子查询 P99 延迟从 850ms 降至 12ms,历史回测数据加载速度提升 40 倍。

4.5 选型决策矩阵

需求场景 推荐方案 理由
日内高频因子(Tick 级) Arrow + Redis Streams 纳秒级序列化,内存管道
日频因子回测(5 年+) Parquet + Presto/Spark 高压缩,列式扫描,成本低
实时监控看板(秒级刷新) ClickHouse 物化视图 亚秒级聚合,SQL 生态
边缘节点轻量部署 InfluxDB OSS 单机运维简单,写入快
全链路统一存储 分层策略(三层) 兼顾实时、近线和历史

在实际构建因子库时,建议从“温层 + 冷层”起步(ClickHouse + Parquet),待延迟敏感度提升后再引入热层 Arrow。分层不是过度设计,而是量化系统从“能用”走向“高性能”的必经之路。