Python场景下CSV与MariaDB读取股票数据的速度差异问题咨询
性能对比结论
同等硬件环境下,全量读取相同规模的历史股票数据集,直接读取本地CSV文件的速度通常优于从MariaDB拉取数据,确实存在一定速度损耗,但损耗幅度和你的使用场景、数据优化方案高度相关,并非所有场景下都不可接受。
速度差异的核心原因
- CSV是顺序读取的本地文件格式,不需要额外的通信、SQL解析、权限校验、查询计划生成等数据库内置流程,Python生态中
pandas.read_csv还支持多线程加速,全量读取的IO路径极短 - 从MariaDB拉取数据需要走TCP回环或unix socket通信,数据库端需要先执行查询、加载数据页到内存、序列化结果返回,Python侧还要反序列化转换为可用的数据结构,中间多了多层处理步骤,纯全量读取场景下速度慢10%~50%属于正常范围
股票数据场景下MariaDB的综合效率优势
不要仅参考纯全量读取速度,实际处理股票数据的绝大多数场景中,MariaDB的特性反而会带来更高的整体效率:
- 非全量读取场景:仅需要查询某只股票、某段时间的行情时,配合索引的SQL过滤只需要拉取必要数据,速度比读取全量CSV后再做内存过滤快数个量级
- 多任务共享数据场景:不需要为每个处理脚本维护独立的CSV副本,也不会出现多进程写文件的冲突问题
- 关联计算场景:需要关联行情、财务、涨跌停等多维度数据时,SQL关联逻辑比Python侧合并多个大CSV更高效,内存占用也更低
降低MariaDB读取损耗的优化方案
- 全量拉取数据时使用
pandas.read_sql的chunksize参数分批加载,避免内存溢出的同时还能实现两端并行处理 - 为高频过滤字段(股票代码、交易日期)建立联合索引,非全量读取场景的性能会远超CSV方案
- 本地部署MariaDB时优先使用unix socket连接替代TCP连接,减少通信开销;同时将
innodb_buffer_pool_size调整到足以放下全部热点数据,完全走内存读取时性能损耗可降低到10%以内
内容的提问来源于stack exchange,提问作者Sebastian Jensen
相关产品推荐
相关产品推荐

