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

发布时间:2026/9/2 17:26:01

【量化系统从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 对应没有多用户并发。边界写清楚该换什么、什么时候换都是现成的答案。

相关新闻

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

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

2026/9/2 17:26:01

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

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

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

2026/9/2 17:26:01

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

【无人机避障系统】基于人工势场法 + 交替侧边绕行避障、局部极小值逃逸机制、阵风扰动、机载激光雷达的低空无人机避障规划附Matlab代码

【无人机避障系统】基于人工势场法 + 交替侧边绕行避障、局部极小值逃逸机制、阵风扰动、机载激光雷达的低空无人机避障规划附Matlab代码

2026/9/2 17:16:00

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、算法改进、程序设计科研仿真。 🍎完整代码获取 定制创新 论文复现私信 🍊个人信条:做科研,博学之、审问之、慎思之、明辨…

Live机架搭建全攻略:从虚拟通道到效果器链的延迟排查实践

Live机架搭建全攻略:从虚拟通道到效果器链的延迟排查实践

2026/9/2 18:46:04

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

人工智能、机器学习与深度学习:核心概念解析与实战对比

人工智能、机器学习与深度学习:核心概念解析与实战对比

2026/9/2 18:46:04

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

AI叙事提示词拆解:从分镜脚本到TTS配音的完整生成管线

AI叙事提示词拆解:从分镜脚本到TTS配音的完整生成管线

2026/9/2 18:46:04

如果现在拿到这样一句话——“五岁时,我就立刻被西班牙人剪了朋克头发,当时我愁眉苦脸,被送到了欧洲演戏Leon,结果正当我与杀手里昂产生了感情时,娜塔莉波特曼将我替换了下来,下半部由她主演”——你会怎么…

Inno Setup安装界面美化实战:从默认风格到VCL样式定制

Inno Setup安装界面美化实战:从默认风格到VCL样式定制

2026/9/2 18:46:04

简介:一套专门用于InnoSetup安装与卸载界面美化的资源包,面向需要改善软件安装体验的开发者、界面设计师,以及基于NW.js框架打包应用的团队。资源包将设计、脚本与测试串联起来:其中包含二十个设计源文件,可以借助图像…

索引贴与标签贴的工程化应用:构建个人知识管理系统的九种方法

索引贴与标签贴的工程化应用:构建个人知识管理系统的九种方法

2026/9/2 18:46:04

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

Nastool v2 部署实战:用 Docker 打造 NAS 全自动媒体管家

Nastool v2 部署实战:用 Docker 打造 NAS 全自动媒体管家

2026/9/2 18:36:04

每一位玩 NAS 的朋友,几乎都会经历同一个过程:装了群晖、飞牛、极空间或绿联,配好了硬盘,然后开始折腾下载、刮削、整理、推送。一开始手动操作还挺有成就感,时间一长就会发现,找资源、下载、改名、刮削海报…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/2 10:08:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/2 12:11:52

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/1 23:49:08

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

2026/9/2 0:04:59

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

2026/9/2 0:04:59

这次我们来看一个很实用的 DeepSeek 落地场景:用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务,标题写得很直白,但背后其实是一整套可以复用的技术流程:字幕解析、模型调用、批量…

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

2026/9/2 0:04:59

当你家里摆着一台天猫精灵,却总希望语音助手偶尔“不正经”一点,不用官方腔回答问题,而是张口就接几句搞笑段子,会是什么体验?我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱,而是直…

远程协作的工作台整理

远程协作的工作台整理

2026/9/2 6:21:32

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/2 6:21:32

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/2 2:45:06

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…