
1) 【一句话结论】:为中低频策略回测数据仓库,推荐采用时序数据库(如InfluxDB)作为核心存储,结合列式数据库(如ClickHouse)设计数据模型,事实表为时间序列表存储回测指标,维度表为列式表存储策略特征,以高效支持时间序列查询与维度分析。
2) 【原理/概念讲解】:中低频策略的核心数据是时间序列(如每日回测收益、夏普比率),时序数据库(如InfluxDB)专为时间序列设计,支持按时间切片查询(如按天、周聚合),写入高效(T+0,即写入后立即可用),适合存储大量时间序列数据。列式数据库(如ClickHouse)采用列存储,对宽表(维度多)的聚合查询性能优异,通过列压缩减少存储空间,加速计算。类比:时序数据像流水线上的产品,按时间顺序记录,时序库是专门处理流水线的传送带,能快速按时间取数据;列式数据库像分类档案,按列(维度)整理,方便快速查找和汇总档案内容。
3) 【对比与适用场景】:
| 数据库类型 | 定义 | 核心特性 | 适用场景 | 注意点 |
|---|---|---|---|---|
| 关系型(如MySQL) | 结构化数据,ACID事务 | 支持复杂查询、事务一致性 | 事务密集型、结构化数据(如用户信息、交易记录) | 查询时间序列数据效率低,聚合慢 |
| 时序数据库(如InfluxDB) | 专为时间序列设计 | 时间切片查询优化、T+0写入、支持标签 | 时间序列数据(如传感器数据、策略回测指标) | 不适合非时间序列查询,写入复杂数据(如JSON)效率低 |
| 列式数据库(如ClickHouse) | 列存储,压缩 | 列压缩、并行计算、宽表聚合 | 宽表查询(维度多)、聚合分析 | 写入性能一般,列删除后数据不可恢复 |
4) 【示例】:数据模型设计。
strategy_backtest_fact(时间序列表)timestamp(时间戳,主键)、strategy_id(策略ID)、return(日收益)、sharpe(夏普比率)、max_drawdown(最大回撤)。strategy_dim(列式表)strategy_id(主键)、params(策略参数,JSON列)、assets(标的资产列表)、period(回测周期)。INSERT "strategy_backtest" "return","sharpe","max_drawdown" INTO "strategy_backtest_fact" VALUES 1688888888888, 0.05, 1.2, 0.8
SELECT * FROM strategy_dim WHERE strategy_id = 123
5) 【面试口播版答案】:
面试官您好,针对中低频策略回测数据仓库,我会选择时序数据库(如InfluxDB)作为核心存储,结合列式数据库(如ClickHouse)设计数据模型。理由是中低频策略的核心数据是时间序列(如每日回测收益、夏普比率),时序数据库专为时间序列优化,支持高效时间切片查询(如按天聚合),写入高效(T+0)。同时,策略的维度信息(如策略参数、标的资产)属于宽表,用列式数据库存储,列压缩和并行计算能加速维度表的查询。数据模型上,事实表为时间序列表,包含时间戳、策略ID、回测指标;维度表为列式表,存储策略特征,通过外键关联。这样既能高效存储时间序列数据,又能快速查询维度信息,满足回测分析需求。
6) 【追问清单】:
7) 【常见坑/雷区】: