【量化系统从0到1】存储架构:不选择什么,比选择什么更重要

发布时间:2026/10/24 21:24:50

【量化系统从0到1】存储架构:不选择什么,比选择什么更重要 这套系统是个人量化研究系统单用户日线级别盘后批处理——每天收盘后拉数据、算因子、跑策略、出报告只产出信号和分析报告不做实盘下单。部署在一台 2 核、1GiB 内存的云主机上。存储要装的东西按形态分是五类行情日线 bar、因子bar 的派生特征、财务三大报表和指标、任务与配置运行状态、股票池、分组、元数据与评估结果数据版本、IC 结果。选型最忌讳先定方案再补理由——结论一旦立住理由会自动补齐哪怕在场景里根本不成立。正确顺序是先刻画每类数据的本质特征特征指向什么就用什么。行情追加、不可变、按列扫描行情是最大的一类数据特征最鲜明追加式每天盘后新增一天历史不删除不可变已产生的数据不再修改复权因子偶尔被数据源修正属低频覆盖按列扫描回测与因子计算只消费 open、close、adj_factor 等少数几列其余列不参与计算规模全市场 5695 只股票1992 年至今约 8300 个交易日千万行级前三个特征指向列式、压缩、以文件为单位的不可变存储。parquet列式存储格式恰好是这种形态列存让只读几列只加载那几列行存要整行读入文件不可变让追加一天变成旧文件 新段合并与读操作天然隔离。第四个特征千万行级决定了一件事数据不能整表进内存。机器只有 1GiB 内存消费端全部按批流式处理扫描时只读需要的列——这同样由列式结构支撑。存储容量从来不是问题压缩后单文件数百 MB 级内存才是约束。因子bar 的派生视图因子是 bar 经计算得到的特征序列动量、波动率、量价关系等18 个因子各落一个文件。特征是可重建bar 不变时重跑计算函数得到相同结果缓存带数据版本bar 更新后旧因子自动失效。可重建意味着不需要数据库级别的管理没有事务、没有并发写只有算出来、写文件、按数据版本引用。所以它和行情一样落 parquet每个因子一个文件按列读取。评估结果IC、分层多空落 JSON供界面直接读。财务主键查询 缓存财务和行情是两个极端数据源要求逐股拉取Tushare 财务接口必填股票代码没有全市场批量接口查询形态是主键点查给定股票和报告期取最近 N 期报表需要缓存和增量首次查询拉最近 8 期之后直查缓存全市场刷新按已缓存期数是否足够跳过主键查询 存在则更新upsert 断点续拉这是典型的行存事务场景。SQLite 是最低成本的实现Python 标准库自带零依赖、零独立进程、单文件目前缓存 38MB。任务与配置事务型小数据任务状态进行中/成功/失败、股票池、分组、设置、告警——频繁小写、状态需要事务一致性。调度器、Web 服务、CLI 三个入口同时操作任务表同一时刻只允许一个回测在跑防双跑依赖数据库的锁和事务。它们与财务落在同一个 SQLite 文件里不同表。设计稿曾设想给 SQLite 开 WAL 模式应对读写并发落地时发现不需要单用户、写入量极小、事务短默认模式即可。元数据与评估结果一次写入人读meta.json 记录数据版本、拉取时间、股票池、行数报告头引用它作为可复现锚点ic.json、factor_eval.json 存因子评估结果界面直接读。体量 KB 级、一次写入、主要给人读。JSON 不需要 schema、不需要查询引擎编辑器打开就能看。反向排除特征不匹配的候选正向选型回答特征指向什么反向排除回答特征否定什么。DuckDB 和 PostgreSQL 都进入过候选最终未引入DuckDB解决即席 SQL 查询——用 SQL 直接查 parquet多查询并发毫秒级。我的查询全部是确定性 pipeline拉数→因子→策略→回测→报告没有临时写一句 SQL 探索数据的需求数据已是千万行级但读数据按列流式、按批处理存储不是瓶颈——拉数的瓶颈在数据源限流网络不在存储。查询慢的痛点没有出现。PostgreSQL / MySQL解决多用户并发、在线事务、网络访问。我的场景单用户、批处理写、本地文件即可。引入它们意味着常驻服务进程、账号权限、备份恢复、连接池——在一台 2 核机器上全是纯开销。SQLite 的文件级单写覆盖全部真实需求。设计稿曾给存储设过千万行阈值实际全历史数据已经在千万行级——阈值本身不是判决依据真正触发优化的条件是痛点查询变慢、或单文件读写成为瓶颈。届时再谈 DuckDB 与分区界面要对多用户公开再谈 PostgreSQL。触发条件存在的意义是未来做决定时对照而不是重新争论。落地让选型不翻车的机制选型只是第一步更新与并发才容易出问题增量更新对比已有数据只拉缺失的交易日避免每天全量重拉分片 断点续拉按 60 个交易日切分片每片独立拉取、原子落盘先写临时文件再改名失败重跑只补缺失分片跨进程互斥拉数用文件锁flock保证任意时刻全局只有一个拉取任务调度器、Web、CLI 并发也不超数据源限流备份每次拉数后按日期存一份保留最近 14 份数据损坏可回滚小结选型两步先刻画数据特征特征指向什么用什么再对照排除特征不匹配的不引入。五类数据最终落在三种存储上——parquet、SQLite、JSON——不是这三种技术最好是每类数据的特征恰好指向它们。不选择什么比选择什么更重要因为每个被排除的方案都标记了一个需求边界DuckDB 对应没有查询慢的痛点PostgreSQL 对应没有多用户并发。边界写清楚该换什么、什么时候换都是现成的答案。
延伸阅读

更多相关文章

2026/10/20 2:45:00

Build Your Own Database学习笔记(第三章)

书本链接:03. B-Tree & Crash Recovery | Build Your Own Database FromScratch in Go 如何实现一棵内存中的B树? 实现B树,可以从B树的特性出发,B树是一种多路平衡查找树。“平衡”意味着树的高度将严格限制在O(log N)&…

2026/10/24 6:49:56

ChatGPT Plus/Pro订阅后Codex CLI配置与排错全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 3:57:34

C# 实现 Hex 转 Bin:Intel HEX 解析与固件转换工具实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/24 21:21:34

GPU数据IO加速:共享内存与mmap技术深度解析

1. GPU数据IO加速的核心挑战在深度学习训练和推理场景中,GPU计算能力与数据供给速度的不匹配已成为制约性能的关键瓶颈。当GPU完成一批数据处理后,经常需要等待下一批数据从存储介质加载到显存,这种IO延迟会导致GPU利用率显著下降。实测数据显…

2026/10/24 21:21:34

用llama.cpp和744行代码替代Open WebUI,自建本地AI聊天服务

之前搭本地 AI 聊天服务的时候,我的第一反应也是去装 Open WebUI。功能确实全,但装完用了一阵子,总觉得哪里不对劲:页面重、依赖多、升级频繁,我只想在浏览器里跟本地 Qwen3 模型好好聊个天,不想维护一套复…

2026/10/24 21:21:34

相平面法在车辆动力学控制中的实践与应用

1. 相平面法在车辆动力学控制中的应用概述相平面法作为一种经典的动态系统分析方法,在车辆动力学控制领域展现出独特的价值。特别是在处理"质心侧偏角-质心侧偏角速度"这对关键状态变量时,该方法能够直观地反映车辆横向运动的稳定性特征。我曾…

2026/10/24 21:21:34

前端AI项目开发实战:从概念到核心技术解析

1. 前端AI项目的真伪之辨:从概念到实践最近两年,前端领域涌现出大量标榜"AI驱动"的项目,但实际接触后你会发现,90%的项目只是简单调用了第三方API。这种现象我称之为"伪AI前端"——它们本质上只是传统前端开发…

2026/10/24 21:21:34

Trae AI实战总结:七条经验让代码生成又快又好

先把门槛说清楚:这篇文章不是写给 AI 新手看的功能介绍,而是给我这种已经在用 Trae AI 打工的开发者准备的实战总结。我用 Trae 写过大大小小几十个功能模块,从工具脚本到完整的业务系统都有涉及,踩过的坑确实不少。如果你正准备把…

2026/10/24 21:16:34

电脑怎么连接手机 电脑如何连接手机

电脑怎么连接手机?不少人想要把手机画面投到大屏电脑上,或是异地帮亲友排查手机故障,苦于找不到稳定好用的方案。电脑怎么连接手机更方便?有线传输会被线材距离限制,很多投屏工具功能单一。建议试试无界趣连2.0&#x…

2026/10/23 22:56:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/24 0:02:40

MATLAB缩进快捷键与批量格式化实战指南

1. 被自动缩进折磨的那些年如果你写过MATLAB代码,大概率经历过这种场景:从某个文档、网页或者聊天记录里复制了一段代码,粘贴进编辑器之后,每一行前面都带着莫名其妙的空格,有的行首是四个空格,有的是一个T…

2026/10/24 0:02:40

用Poco实现Qt风格信号与槽的跨平台C++方案

简介:本资源是一份面向C中级开发者的技术实践工程,聚焦于在非Qt框架环境下模拟实现Qt核心通信机制——信号与槽,借助Poco网络库的事件系统完成解耦式对象通信。适用于需在跨平台C项目中引入松耦合回调机制、但受限于无法集成Qt依赖的开发场景…

2026/10/24 0:02:40

ESXi裸机虚拟化安装指南:从硬件兼容到虚拟机部署

1. 为什么还要折腾ESXi:从一台闲置机器说起手里攒了几台淘汰下来的迷你主机,配置不算差,i5加16G内存,扔了可惜,装个桌面系统又觉得浪费。这种场景下,ESXi就成了一个绕不开的选择。它是一套裸机虚拟化平台&a…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑