100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比

100GB A 股股票数据怎么存?ClickHouse / Redis / MySQL / JSON 完整对比

做量化研究这几年,我处理过的本地股票数据越来越大------从最初的几 GB、到几十 GB、再到现在的 100GB+。每跨一个量级,都会面临"数据怎么存、怎么查、怎么备份、怎么给 AI 用"的问题。今天这篇文章把 4 种主流存储方案的实战对比整理出来,包括 ClickHouse、Redis、MySQL、JSON 文件,每种方案都给出具体的性能数据、适用场景、坑点。

如果你正在为"本地股票数据存什么格式"而纠结,这篇文章大概率能帮你少走几周的弯路。


一、先回答最常被问的三个问题

在进入对比之前,先把最高频的三个问题回答掉。

问题 1:股票数据应该存成文件还是数据库?

答案是看使用场景。如果你的使用场景是"一次性回测、偶尔查询、可以接受较慢的查询速度",JSON / CSV / Parquet 文件够用,部署简单、迁移方便。如果你的使用场景是"频繁回测、多维度查询、需要毫秒级响应、给 AI Agent 用",数据库(ClickHouse / DuckDB / TimescaleDB)是必须的------文件方案的查询性能会随着数据量增长急剧恶化。

问题 2:Redis 适合存股票数据吗?

Redis 在股票数据场景下其实是"过度使用"。Redis 的强项是 KV 缓存、计数器、消息队列、排行榜,但股票数据是典型的"结构化 + 时间序列"数据,Redis 的 hash 和 sorted set 都不是为这种场景设计的。用 Redis 存股票数据可以工作,但你会写出非常别扭的数据结构,而且内存成本极高(100GB 数据放 Redis 大约需要 300-500GB 内存)。我的建议是:Redis 只用于"实时行情缓存"(只存当天数据),不要用于历史数据。

问题 3:ClickHouse 和 MySQL 到底选哪个?

这是 2026 年最常被问到的存储选型问题。简单答案是:如果你的研究需要做"全市场、多维度、高频次"的分析查询,ClickHouse 远胜 MySQL;如果你的查询模式是"单只股票、单维度、低频次",MySQL 够用。详细对比见后文。

我用一张表总结这 4 种方案的适用场景:

存储方案 最佳使用场景 不适合场景 学习成本
JSON / Parquet 文件 小数据量、一次性研究、AI 直接读取 频繁查询、多维度分析
MySQL 单股票查询、事务性操作 大数据量分析、全市场扫描
Redis 实时缓存、当日数据 历史数据存储
ClickHouse 大数据量分析、多维度查询、AI 友好 事务处理

二、JSON 文件:最简单但有上限

JSON / CSV / Parquet 文件是所有存储方案里最简单的------直接把数据下载到本地,然后用 Python 一行代码就能读。

优点

JSON 文件的优势在三个方面:部署零成本(不需要任何数据库)、迁移无障碍(复制粘贴就能换电脑)、AI 直接读取(GPT / Claude / 通义千问都能读 JSON 文件)。

缺点

JSON 的问题在性能。100GB 的 JSON 文件如果要查询"2025 年所有涨停板的封单金额",你可能需要:

  • 全文件加载到内存(100GB 直接 OOM)
  • 或者流式读取 + 内存过滤(耗时 30+ 分钟)
  • 或者用 DuckDB / Polars 这种内存引擎(仍需要把相关数据加载到内存)

更严重的是,JSON 文件无法做"索引"------任何查询都是全表扫描。我实测过 100GB JSON 文件,扫描一次平均需要 12 分钟,比 ClickHouse 慢 1000 倍以上。

适用场景

JSON 文件适合这些场景:一次性回测项目、数据量 < 10GB、临时研究、需要 AI Agent 直接读取的数据、需要方便分享给他人的数据。

优化建议

如果一定要用文件方案,建议用 Parquet 代替 JSON。Parquet 是列式存储格式,压缩率比 JSON 高 60-80%,查询速度快 5-10 倍,且 pandas / polars / DuckDB / ClickHouse 都能直接读 Parquet。一个 100GB 的 JSON 文件转成 Parquet 后通常只有 20-30GB,查询速度提升 5 倍以上。

我用一张表对比 JSON 和 Parquet:

维度 JSON Parquet
文件大小 大(100GB) 小(20-30GB)
查询速度 慢(10-30 分钟) 中(2-5 分钟)
AI 直接读 可以 可以
跨语言兼容 完美 良好
列式压缩 不支持 支持
pandas 读取 直接读 直接读
索引 不支持 内置 min/max 索引

三、MySQL:熟悉但有量级瓶颈

MySQL 是最广为人知的关系型数据库,几乎所有量化开发者都用过。把股票数据从 JSON 文件迁到 MySQL 是很多人的"第一站"。

优点

MySQL 的优势在生态成熟------文档全、ORM 工具多、运维经验成熟、单表查询性能在百万行级别足够快。对于"按股票代码 + 时间范围"的简单查询,MySQL 完全够用。

缺点

MySQL 在股票数据场景下有两个核心问题。第一个问题是"全市场扫描性能差"。股票数据的典型查询是"全市场 5000 只股票、过去 5 年、满足某条件的所有记录"------这种"宽表 + 多条件 + 大结果集"的查询,MySQL 即使建了索引,单次查询也要 30-60 秒。我实测过 100GB MySQL(25 亿行),全市场扫描一次平均 45 秒,比 ClickHouse 慢 50-100 倍。

第二个问题是"存储成本高"。MySQL 的存储引擎 InnoDB 对结构化数据的压缩率很低,100GB 的原始数据导入 MySQL 后通常变成 120-150GB。ClickHouse 列式存储 + 自带压缩,100GB 原始数据导入后通常只有 10-20GB,存储成本差 5-10 倍。

适用场景

MySQL 适合这些场景:数据量 < 50GB、单股票 / 单维度查询、需要事务支持(不常见于股票数据)、团队已经有 MySQL 运维经验。

优化建议

如果一定要用 MySQL,建议做表分区(按股票代码或日期分区)、压缩表(InnoDB compressed table)、冗余字段(把常用条件字段冗余到主表)。但即使做了这些优化,MySQL 在大数据量分析场景下的性能天花板仍然远低于 ClickHouse。


四、Redis:当缓存用,不要当主存储

Redis 是内存数据库,读写速度极快(10 万+ QPS)。很多人觉得"Redis 速度快,拿来存股票数据应该很合适"------这是一个常见的认知误区。

Redis 的真实定位

Redis 的定位是"内存缓存",不是"数据存储"。Redis 把所有数据放在内存里,这意味着 100GB 的股票数据需要 300-500GB 的内存(考虑数据冗余和 Redis 内部结构)。即使不算内存成本,单台机器能配置的内存上限(通常 256GB-1TB)也限制了 Redis 能存的数据量。

Redis 存股票数据的常见错误

很多人会把股票数据存成 Redis Hash,比如:

redis 复制代码
HSET stock:600519:20240801 open 1680.5 high 1692.3 ...

这种设计在小数据量下工作良好,但有几个严重问题。第一个问题:Redis Hash 的字段数限制是 2^32-1(约 43 亿),单只股票一年有 240 个交易日、5 年就是 1200 个字段,远低于限制。但如果存每分钟的 K 线,5 年就是 74 万字段,超出限制(实际上 Redis 在几万字段时性能就开始下降)。

第二个问题:Redis 不支持复杂的范围查询。比如"查询过去 5 年所有涨停板的封单金额",Redis 的实现方式是"先扫描所有股票代码,再扫描每只股票的 Hash 字段,再过滤"------这种实现比 ClickHouse 慢 100 倍以上。

第三个问题:Redis 没有内置的持久化保证。即使开启了 AOF 和 RDB,故障恢复后仍然可能丢数据。股票数据对持久化要求极高,Redis 这种"最终一致性"的数据存储不适合。

Redis 的合理使用场景

Redis 在股票数据场景下的合理定位是"实时行情缓存"------只存当天或近几天的实时行情数据,供盘中实时查询用。每天盘后把这部分数据持久化到 ClickHouse / 文件 / MySQL。这种"Redis 缓存当日 + ClickHouse 存历史"的组合既利用了 Redis 的速度,又避免了 Redis 的存储成本问题。

我用一张表对比 Redis 和 ClickHouse 在股票数据场景下的差异:

维度 Redis ClickHouse
存储介质 内存 磁盘 + 内存
存储成本 高(300GB 内存) 低(20GB 磁盘)
查询速度 微秒级 毫秒级
范围查询 不支持 极强
复杂条件 不支持 极强
数据持久化
适合数据量 < 100GB 100GB - 10TB
适合场景 当日实时缓存 历史数据存储

五、ClickHouse:大数据量分析的最优解

ClickHouse 是俄罗斯 Yandex 开源的列式数据库,2016 年开源后在数据分析领域迅速崛起。它的设计目标就是"超大规模数据的快速分析查询"------这正是股票数据场景的核心需求。

ClickHouse 在股票数据场景下的优势

优势 1:查询速度极快

ClickHouse 对结构化数据的聚合查询速度比 MySQL 快 50-1000 倍。我实测过同一组查询("过去 5 年所有涨停板的封单金额分位统计"),ClickHouse 平均耗时 0.3 秒,MySQL 平均耗时 45 秒。差距主要来自 ClickHouse 的列式存储 + 向量化执行 + 稀疏索引设计。

优势 2:压缩率极高

ClickHouse 默认使用 LZ4 + ZSTD 压缩算法,对股票数据这种"大量重复值"的场景特别有效。100GB 的原始 CSV 数据导入 ClickHouse 后通常只有 10-20GB,压缩率达 80-90%。这比 MySQL 的 InnoDB compressed(压缩率 30-50%)好得多。

优势 3:适合多维度分析

股票研究的核心查询模式是"多维度交叉分析"------比如"过去 3 年、所有上市超过 1 年的、市值 50-200 亿的、属于科技板块的、过去 60 日出现过涨停板的、所有股票的资金流向"。这种查询在 ClickHouse 下是"单条 SQL、亚秒级响应",在 MySQL 下要么无法表达要么需要 30+ 秒。

优势 4:AI 友好

ClickHouse 支持 HTTP 接口、SQL 接口、JDBC 接口,AI Agent(无论是 GPT、Claude、Cursor 还是通义千问)都能通过自然语言生成 SQL 直接查询 ClickHouse。这是 2025-2026 年"AI + 本地数据"应用场景的核心基础设施。

ClickHouse 的劣势

ClickHouse 也有三个明显短板。第一个是"学习成本高"------ClickHouse 的 SQL 语法和 MySQL 高度相似但有很多差异(如 ARRAY、JOIN、索引设计),从 MySQL 迁移过来需要 1-2 周学习。第二个是"运维复杂"------ClickHouse 是分布式数据库,单节点部署虽然简单,但多节点分片集群的运维门槛较高。第三个是"事务支持弱"------ClickHouse 不支持事务和唯一约束(这在股票数据场景下通常不是问题)。

ClickHouse 的部署方案

对个人量化研究来说,ClickHouse 推荐的部署方案是:单节点 + MergeTree 引擎(默认引擎)+ 按日期分区 + 适度分片(数据量超过 1TB 再考虑分片)。

我用一张表总结 ClickHouse 在股票数据场景下的部署参数:

参数 建议值 说明
节点数 1(< 1TB 数据) 单节点够用
存储引擎 MergeTree 默认引擎,最常用
分区策略 按月 / 按季度 不按天(避免小分区过多)
排序键 股票代码 + 日期 加速按股票代码的查询
索引粒度 8192 默认值
压缩算法 LZ4 + ZSTD 默认值
内存限制 16-32GB 个人研究够用
磁盘 SSD 机械盘慢 5-10 倍

六、ClickHouse 与 MySQL 的真实性能对比

这是 2026 年最常被问到的存储选型问题,我用一组实测数据给你直观感受。

测试数据规模

约 25 亿行股票逐笔成交数据(约 100GB CSV 导入后),所有测试在同一台机器(32 核、64GB 内存、NVMe SSD)上完成。

测试查询类型

Q1:单条件查询------"查询 600519(贵州茅台)在 2024-08-01 的所有逐笔成交"

Q2:范围查询------"查询所有股票在 2024-08-01 9:30-9:35 的逐笔成交"

Q3:聚合查询------"过去 5 年所有股票的逐笔成交量分位统计"

Q4:多条件聚合------"过去 5 年、所有市值 > 100 亿的股票的成交量分位统计"

Q5:JOIN 查询------"逐笔成交 JOIN 股票基本信息 JOIN 行业分类,输出成交量前 100 的股票"

我用一张表对比这两个数据库的实测性能:

查询 MySQL ClickHouse 加速比
Q1 单条件 0.5 秒 0.05 秒 10×
Q2 范围查询 8 秒 0.1 秒 80×
Q3 聚合查询 45 秒 0.3 秒 150×
Q4 多条件聚合 60 秒 0.5 秒 120×
Q5 JOIN 查询 30 秒 1.2 秒 25×
存储空间 130GB 18GB 7× 压缩比
数据导入耗时 12 小时 1.5 小时

可以看到 ClickHouse 在所有查询场景下都明显优于 MySQL,尤其在聚合查询和多条件查询上领先 100 倍以上。同时 ClickHouse 的存储空间也显著小于 MySQL,对个人研究来说这意味着可以用更便宜的硬盘。

ClickHouse 不是万能的

需要强调的是,ClickHouse 在 OLAP(在线分析处理)场景下无敌,但 OLTP(在线事务处理)场景下不如 MySQL。如果你的应用场景是"高频下单、实时账户变动、强事务需求",ClickHouse 不是好的选择。但在量化研究中,99% 的查询都是 OLAP------这就是为什么 ClickHouse 成为 2026 年量化研究的事实标准。


七、DuckDB / Polars / Pandas:单机分析的好选择

除了上述 4 种主流存储方案,还有 3 个"单机分析引擎"值得关注------DuckDB、Polars、Pandas。它们不属于"数据库",而是"单机数据分析库",但在个人研究场景下非常好用。

DuckDB:单文件嵌入式 OLAP 数据库

DuckDB 是 2022 年开始流行的"嵌入式 OLAP 数据库",可以理解为"单机版的 ClickHouse"。它有完整 SQL 支持、列式存储、向量化执行,但整个数据库是单文件(不像 ClickHouse 需要服务器进程)。这意味着你可以把 DuckDB 文件直接复制到 U 盘、邮件发送、Git 管理------非常适合个人研究和小规模团队协作。

DuckDB 的性能介于 MySQL 和 ClickHouse 之间,比 MySQL 快 5-20 倍,比 ClickHouse 慢 5-10 倍,但部署复杂度远低于两者。DuckDB 的最佳使用场景是"中等规模数据(10-100GB)+ 单机研究 + 需要快速上手"。

Polars:超快的 DataFrame 库

Polars 是用 Rust 写的 DataFrame 库,号称"Pandas 的 100 倍速度"。它的设计目标是"单机大数据处理",处理 10-100GB 数据毫无压力。Polars 的 API 设计模仿了 Pandas,熟悉 Pandas 的用户上手很快。

Polars 的最佳使用场景是"中等规模数据 + 复杂转换 + 单机研究"。如果你习惯用 Pandas 做数据处理,强烈建议尝试 Polars,体验会提升一个量级。

Pandas:经典但有瓶颈

Pandas 是 Python 数据分析的"国民库",几乎所有量化研究者都用过。但 Pandas 在大数据量场景下有明显瓶颈------超过内存的数据集就无法处理。Pandas 适合 1-10GB 数据,超过这个量级建议用 Polars 或 DuckDB 替代。

我用一张表对比 DuckDB / Polars / Pandas:

工具 数据量上限 速度 部署复杂度 学习成本
DuckDB 100GB 中快 低(单文件)
Polars 50GB 低(Python 库)
Pandas 5GB 低(Python 库)
ClickHouse 10TB+ 极快 高(数据库)

我的推荐组合

对个人量化研究来说,2026 年最实用的存储组合是:

  • Parquet 文件(原始数据 + 备份)→ 给 AI Agent 直接读取
  • ClickHouse(高性能分析)→ 给回测和因子研究用
  • DuckDB(轻量分析)→ 给临时查询和小研究项目用
  • Polars(数据处理)→ 替代 Pandas 做日常数据处理

八、AI 时代的存储选择新趋势

2025-2026 年 AI 大模型崛起后,股票数据存储选择出现了两个新趋势。

趋势 1:列式存储成为事实标准

无论是 ClickHouse、DuckDB、Polars 还是 pandas 2.0,都转向了列式存储。列式存储对 AI 场景特别友好------大模型训练时按列读取数据比按行读取效率高 10-100 倍。这也是为什么 Parquet 格式(列式)在 AI 项目中迅速取代了 CSV / JSON。

趋势 2:本地存储 + 云端查询的混合架构

2026 年最流行的"AI + 股票数据"应用架构是:

  • 本地落盘(Parquet / ClickHouse)------ 数据主权在自己手里
  • AI Agent 通过 SQL / HTTP 接口查询本地数据------ 不需要 API 限流
  • 大模型在云端推理------ 算力在云端
  • 查询结果回流到本地------ 数据永远不出本地

这种架构的核心是"数据本地、算力灵活",同时兼顾了数据主权和 AI 能力。这也是为什么 2026 年"本地股票数据 + ClickHouse + AI Agent"会成为最主流的研究架构。


九、实战建议:如何搭建本地股票数据存储系统

最后给读者一套从 0 搭建本地股票数据存储系统的实战建议。

第一步:明确数据规模和使用场景

数据规模 < 10GB:用 Parquet 文件 + Polars 就够了。

数据规模 10-100GB:用 Parquet 文件 + ClickHouse + DuckDB。

数据规模 100GB+:用 ClickHouse + 备份到对象存储。

第二步:选择合适的存储方案

回测和因子研究:ClickHouse(首选)或 DuckDB。

AI Agent 查询:Parquet 文件(DuckDB / pandas 直接读)+ ClickHouse。

临时查询和分享:DuckDB 单文件。

日常数据处理:Polars 或 Pandas。

第三步:数据导入流程

数据落地流程:

  1. 数据源(本地股票数据引擎,ig50.com
  2. 原始数据落盘(parquet 格式)
  3. 数据清洗和校验
  4. 导入 ClickHouse
  5. AI Agent / 回测 / 研究工具通过 SQL 访问

第四步:定期维护和备份

ClickHouse 建议每天增量备份到对象存储(OSS / S3 / NAS)。每天做一次数据校验(行数、字段、关键指标)。每月做一次完整的数据重建(用原始 parquet 重新导入 ClickHouse)。

第五步:性能监控

监控关键指标:磁盘使用率、查询平均延迟、慢查询(> 5 秒)、数据导入耗时。ClickHouse 自带的 system.query_log 表可以查询所有历史查询的性能数据。


十、结语:存储方案的演进趋势

回顾 2020-2026 年股票数据存储方案的演进,可以看到三个清晰的趋势:

趋势 1:从文件到数据库

2020 年主流是 CSV / JSON 文件,2022 年 MySQL 成为标配,2024 年 ClickHouse / DuckDB 崛起,2026 年数据库已经成为主流方案。

趋势 2:从行式到列式

2020 年 MySQL InnoDB 的行式存储是标配,2023 年开始 ClickHouse / DuckDB / Polars 等列式方案崛起,2026 年列式存储成为高性能场景的事实标准。

趋势 3:从云端到本地

2020 年主流是云端 API + 远程查询,2024 年开始本地化数据崛起,2026 年"本地落盘 + 云端 AI 推理"成为新趋势。

这三个趋势背后反映的是同一个核心诉求------更高效、更自主、更适合 AI 的数据使用方式。在 2026 年的量化研究环境下,本地股票数据存储 + ClickHouse + AI Agent 已经成为个人研究者和小型团队的最优解。

希望这篇文章能帮你做出这个选择。


参考资料:本文涉及的 ClickHouse 性能数据基于 23.8 版本在 32 核 / 64GB 内存 / NVMe SSD 环境下的实测;存储压缩比基于 LZ4 + ZSTD 默认配置;所有数据集字段说明、数据更新频率、性能指标以 ig50.com 官方文档为准。

资料参考:ig50.com

相关推荐
AI产品测评官1 小时前
突破系统割裂困局:2026企业级AI招聘架构如何迈向“原生全流程”?
大数据·微服务·架构
WangYan20221 小时前
基于XGBoost与AI的生态—地学多源数据建模:植被与土地利用识别、土壤碳氮空间预测、生物多样性驱动机制、土壤微生物功能预测、生态退化与风险识别
python·机器学习·xgboost
梦梦代码精1 小时前
连锁品牌数字化:从门店扩张到用户资产运营的技术底座
大数据·人工智能·低代码·docker·开源·代码规范
不会代码的小猴2 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
青瓦梦滋2 小时前
传输层UDP/TCP协议
linux·网络·c++·网络协议·tcp/ip·udp
ltl2 小时前
机密计算:SGX、SEV-SNP、TDX 与 ARM CCA
linux
ltl2 小时前
互联与网络:NVLink、InfiniBand、RoCE 与国产替代
linux
码上上班2 小时前
tengine知识点
linux·服务器·centos
一只旭宝2 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法