一种优于 Python + HDF5 的存算方案 | 以高频因子为例
本文为新闻文章,围绕高频因子存算方案对比展开,并包含发布日期信息。
What this page covers
- 高频因子计算背景与 Python+HDF5 方案痛点
- 对比测试设置、数据规模与脚本教程获取途径
- 在结果一致前提下的耗时对比结论与说明
- 测试用快照表字段数量与字段类型示例
- 测试环境(硬件与软件版本)
- DolphinDB 的存储、计算与并行相关优势点
技能认证特训营第二期正式开启(限时报名)
页面顶部展示活动报名入口,并提示相关福利信息。
- 提供“技能认证特训营第二期”的报名链接。
- 该区域属于页面顶部的活动入口信息。
新闻 / 一种优于 Python + HDF5 的存算方案 | 以高频因子为例
该部分包含新闻文章标题、发布日期,以及文章主题(高频因子存算方案对比)。
- 文章发布日期为 2023.06.14。
- 文章主题聚焦高频因子存算方案的对比。
背景:高频因子计算与现有 Python+HDF5 方案的痛点
该部分描述高频行情数据规模、常见技术栈(Python+HDF5),以及 HDF5 在该场景下的问题点。
- 国内全市场十年 L2 历史数据量级约 20 ~ 50T。
- L2 行情数据每日新增数据量约 10 ~ 20G。
- 常见方案为 Python 投研开发配合 HDF5 存储行情数据。
- 在高频数据存储场景,HDF5 存在权限管理困难问题。
- 在高频数据存储场景,HDF5 存在检索和查询不便问题。
对比测试说明与可获取的脚本教程
该部分说明对比测试的因子、数据规模、并行度调节方式,并提示完整脚本教程的获取途径。
- 对比测试包含流动状态因子(flow)。
- 对比测试包含权重偏度因子(mathWghtSkew)。
- 测试数据包含 1992 只股票。
- 测试时间范围为 3 天。
- 测试数据总行数为 2200 万行。
- 通过调节并行度,测试不同 CPU 核数下的耗时。
- 测试脚本和教程已发布在官方知乎,并提示可在文末查看。
测试结果:耗时对比与结论(图表+AI说明)
该部分在“两种方案结果完全一致”的前提下,给出耗时对比结论,并包含图表与说明。
- 测试结果可用性的前提是两种方案计算结果完全一致。
- 单核库内计算比 Python + HDF5 计算快接近 100 倍。
- 随着可用 CPU 核数增加,耗时比逐渐趋近 1:25 左右。
- (说明)单核性能对比被概括为“约 95 倍”。
- (说明)效率比值被概括为“稳定在 25 倍左右”。
测试数据结构:快照表字段(图表+AI说明)
该部分说明用于测试的快照表字段数量,并展示部分字段结构及类型示例。
- 测试快照表数据(DolphinDB)共 55 个字段。
- (示例)字段类型包含 DATE。
- (示例)字段类型包含 TIMESTAMP。
- (示例)字段类型包含 SYMBOL。
- (示例)字段类型包含 INT 与 DOUBLE。
测试环境:硬件配置(图表+AI说明)
该部分列出对比测试使用的硬件环境信息并附说明。
- (说明)CPU 为主频 2.40GHz 的 Intel Xeon Silver 4210R 处理器。
- (说明)内存为 512GB。
- (说明)SSD 为 500GB。
测试环境:软件栈与版本(图表+AI说明)
该部分列出对比测试使用的软件系统与版本信息并附说明。
- (说明)操作系统为 CentOS 7.9。
- (说明)DolphinDB 版本为 V2.00.8.7。
- (说明)Python 版本为 V3.6.8。
- (说明)Numpy 版本为 V1.19.3。
- (说明)Pandas 版本为 V1.1.5。
优势点 01:存储引擎与分区机制保证高效数据读取
该部分对比 HDF5 与 DolphinDB 在读写并行性、数据管理复杂度与分区/存储引擎带来的可管理性。
- HDF5 文件读写基本是单线程。
- HDF5 存储结构设计通常需要数据冗余以满足不同场景读写。
- 在 T 级数据量下,HDF5 数据管理与操作复杂度会大幅增加。
- DolphinDB 的数据管理、查询与使用被描述为更简单便捷。
- DolphinDB 的相关能力来源包括不同存储引擎与分区机制。
优势点 02:移动窗口计算优化提供更高性能
该部分对比 Python rolling 方式与 DolphinDB 函数(mavg、rowWavg 等)在移动窗口计算上的优化与性能提升。
- 在示例中,Python 移动窗口计算通过 rolling 与 mean 等函数组合实现。
- 该方式被描述为难以进行针对性的增量优化。
- DolphinDB 提供 mavg 作为滑动窗口(m 系列)函数示例。
- DolphinDB 提供 rowWavg 作为行计算(row 系列)函数示例。
- 相关优化被描述为计算性能最高可以提高 100 倍。
优势点 03:原生分布式自动并行调度
该部分对比 Python 使用 Joblib 进行多进程调度与 DolphinDB 自动任务拆解及多线程并行计算机制。
- Python 并行因子计算示例方案需要使用 Joblib 库。
- 示例流程包含从文件读出待计算股票并按并行度拆分为多组。
- 该拆分用于实现多进程并行调度。
- DolphinDB 将大任务拆解并自动分析数据涉及分区。
- DolphinDB 可通过参数配置最大工作线程数进行多线程并行计算。
综合结论:生产环境下 DolphinDB 相对 Python+HDF5 的效率与易用性
该部分从代码实现、计算速度与并行计算三个方面给出综合性对比结论。
- 综合结论认为 DolphinDB 的因子计算与存储相对 Python+HDF5 更高效。
- 库内计算被描述为更易于实现因子计算调用及并行调用。
- 综合对比中,库内计算被描述为比 Python + HDF5 快 25 倍以上。
- DolphinDB 被描述为可自动使用当前可用 CPU 资源。
- Python 脚本被描述为需要通过并行调度代码实现并行计算。
Facts Index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| 文章 | 发布日期 | 2023.06.14 | high |
| 因子计算 | 典型应用场景 | 常见投研需求;以L2高频行情为例 | high |
| 国内全市场十年L2历史数据 | 数据量级 | 约 20 ~ 50T | high |
| L2行情数据 | 每日新增数据量 | 约 10 ~ 20G | high |
| 常见高频投研方案 | 技术组合 | 使用 Python 进行投研开发,并配合 HDF5 存储行情数据,组合进行量化金融计算 | high |
| HDF5 与传统关系型数据库对比 | 在高频数据存储上的支持强弱 | HDF5 的支持强于 MS SQL Server、MySQL 等传统关系型数据库 | medium |
| HDF5 在高频数据存储场景 | 问题 | 数据权限管理困难 | high |
| HDF5 在高频数据存储场景 | 问题 | 不同数据关联不便 | high |
| HDF5 在高频数据存储场景 | 问题 | 检索和查询不便 | high |
| HDF5 在高频数据存储场景 | 问题 | 需要通过数据冗余来提高性能 | high |
| Python 与 HDF5 的数据交互 | 问题 | 与 Python 之间的数据交互耗费时间 | high |
| 券商和私募机构 | 技术采用趋势 | 越来越多开始采用 DolphinDB 进行高频数据存储和计算 | low |
| 对比测试 | 因子示例 | 流动状态因子(flow)与权重偏度因子(mathWghtSkew) | high |
| 对比测试数据 | 股票数量 | 1992 只股票 | high |
| 对比测试数据 | 时间范围 | 3天 | high |
| 对比测试数据 | 总行数 | 2200万行 | high |
| 对比测试方法 | 变量与测量 | 调节不同的并行度,测试在使用不同 CPU 核数情况下两种方式计算因子的耗时 | high |
| 测试结果可用性前提 | 一致性条件 | 两种方案计算结果完全一致 | high |
| 性能对比结论(单核) | DolphinDB 相对 Python+HDF5 加速比 | 单核库内计算比 Python + HDF5 计算快接近100倍 | medium |
| 性能对比结论(多核趋势) | 耗时比 | 随着可用 CPU 核数增加,耗时比逐渐趋近 1:25 左右 | medium |
| 测试脚本和教程 | 发布渠道 | 已发布在官方知乎,可点击文末阅读原文查看 | medium |
| (AI说明)性能对比(单核) | DolphinDB 相对 Python+HDF5 加速倍数 | 约95倍 | low |
| (AI说明)性能对比(随核心数增加) | 效率比值稳定性 | 计算效率比值稳定在25倍左右 | low |
| 测试快照表数据(DolphinDB) | 字段数量 | 共55个字段 | high |
| (AI说明)快照数据表字段示例 | 包含字段类型 | 包含交易日期(DATE)、原始时间与数据库时间(TIMESTAMP)、证券代码(SYMBOL)、买卖盘价格与委托量(INT/DOUBLE)等 | low |
| HDF5 文件读写 | 线程特性 | 读写基本是单线程 | medium |
| HDF5 存储结构设计 | 工程代价 | 通常需要通过一些数据冗余存储来满足不同场景的高效读写 | medium |
| HDF5 在T级数据量下 | 管理复杂度影响 | 数据管理和操作复杂度大幅增加,耗费大量时间和存储空间 | medium |
| DolphinDB | 数据管理与查询使用体验 | 数据管理、查询、使用更为简单便捷 | low |
| DolphinDB | 能力来源 | 得益于不同存储引擎及分区机制 | medium |
| DolphinDB | 可管理数据量级 | 可用普通数据库方式轻松管理和使用 PB 级及以上数量级别的数据 | medium |
| 因子开发难度对比 | DolphinDB vs Python | 开发这两个高频因子的难度差别不大 | medium |
| DolphinDB | 行计算函数支持 | 提供 row 系列的行计算函数,使得代码量上开发更容易一些 | medium |
| Python 移动窗口计算 | 实现方式 | 通过 rolling 函数 + mean 等函数组合来计算 | high |
| Python 移动窗口计算 | 优化难点 | 难以进行针对性的增量优化 | medium |
| DolphinDB 移动窗口/行计算函数 | 函数示例 | mavg(滑动窗口系列 m 系列)与 rowWavg(行计算系列 row 系列) | high |
| DolphinDB 移动窗口计算优化 | 性能提升上限 | 相比之下计算性能最高可以提高100倍 | medium |
| Python 并行因子计算(示例方案) | 依赖库 | 需要使用 Joblib 库 | high |
| Python 并行调度流程(示例) | 步骤描述 | 将要计算的股票从文件中读出后,按并行度拆分成多组实现多进程并行调度 | medium |
| DolphinDB 计算框架 | 并行机制 | 将大任务拆解,自动分析数据涉及分区,并通过参数配置最大工作线程数进行多线程并行计算 | medium |
| 生产环境方案选择(综合结论) | 效率对比 | 使用 DolphinDB 进行因子计算和存储远比使用 Python + HDF5 计算方式更加高效 | low |
| 代码实现方面(综合对比) | DolphinDB 优势 | 库内计算更易于实现因子计算调用及并行调用 | low |
| 计算速度方面(综合对比) | DolphinDB 相对 Python+HDF5 | 库内计算比 Python + HDF5 的计算方式快 25 倍以上 | medium |
| 并行计算方面(综合对比) | DolphinDB 与 Python 脚本差异 | DolphinDB 可自动使用当前可用 CPU 资源;Python 脚本需要通过并行调度代码实现 | medium |
| 测试硬件环境(AI说明) | CPU | 主频2.40GHz的Intel Xeon Silver 4210R处理器 | low |
| 测试硬件环境(AI说明) | 内存 | 512GB | low |
| 测试硬件环境(AI说明) | SSD | 500GB | low |
| 测试软件环境(AI说明) | 操作系统 | CentOS 7.9 | low |
| 测试软件环境(AI说明) | DolphinDB 版本 | DolphinDB V2.00.8.7 | low |
| 测试软件环境(AI说明) | Python 版本 | Python V3.6.8 | low |
| 测试软件环境(AI说明) | Numpy 版本 | Numpy V1.19.3 | low |
| 测试软件环境(AI说明) | Pandas 版本 | Pandas V1.1.5 | low |
| 技能认证特训营第二期 | 报名链接 | https://www.qingsuyun.com/h5/e/217471/5/ | high |