QADataBridge - 跨语言零拷贝数据交换桥接层
🚀 高性能数据交换: 基于Apache Arrow的零拷贝跨语言通信框架
版本: v2.1.0-alpha2 | 依赖: QADataSwap (Rust) | 更新: 2025-10-25
📋 概述
QADataBridge是QUANTAXIS的跨语言数据交换模块,基于QADataSwap提供Python、Rust、C++之间的零拷贝数据传输。
核心功能
✅ 零拷贝转换: Pandas ↔ Polars ↔ Arrow无缝切换
✅ 共享内存通信: 跨进程数据传输,5-10x加速
✅ 自动回退: 未安装QADataSwap时自动使用标准转换
✅ 类型安全: 完整的类型提示和文档字符串
✅ 简单易用: 统一的API,无需关心底层实现
性能优势
Pandas→Polars (100万行)
450ms
180ms
2.5x
序列化传输 (100万行)
850ms
120ms
7.1x
内存占用 (大数据集)
100%
20-50%
2-5x
🚀 快速开始
安装
验证安装
📖 使用示例
示例1: Pandas ↔ Polars转换
性能: 100万行数据,转换耗时 ~180ms(标准方式 ~450ms)
示例2: 共享内存跨进程通信
进程A(写入端):
进程B(读取端):
性能:
传输100万行数据: ~120ms(pickle序列化 ~850ms)
7.1x加速,零内存拷贝
示例3: Arrow格式转换
使用场景:
与Rust QARS2组件交换数据
跨语言IPC通信
高性能数据序列化
📚 API文档
数据转换函数
convert_pandas_to_polars(df, preserve_index=False)
convert_pandas_to_polars(df, preserve_index=False)Pandas DataFrame转换为Polars DataFrame(零拷贝)
参数:
df(pd.DataFrame): 输入的Pandas DataFramepreserve_index(bool): 是否保留索引,默认False
返回:
pl.DataFrame: Polars DataFrame
示例:
convert_polars_to_pandas(df, use_pyarrow_extension_array=False)
convert_polars_to_pandas(df, use_pyarrow_extension_array=False)Polars DataFrame转换为Pandas DataFrame(零拷贝)
参数:
df(pl.DataFrame): 输入的Polars DataFrameuse_pyarrow_extension_array(bool): 使用PyArrow扩展数组,默认False
返回:
pd.DataFrame: Pandas DataFrame
示例:
convert_pandas_to_arrow(df, preserve_index=True)
convert_pandas_to_arrow(df, preserve_index=True)Pandas DataFrame转换为Arrow Table(零拷贝)
参数:
df(pd.DataFrame): 输入的Pandas DataFramepreserve_index(bool): 是否保留索引,默认True
返回:
pa.Table: Arrow Table
convert_arrow_to_pandas(table, use_threads=True, zero_copy_only=False)
convert_arrow_to_pandas(table, use_threads=True, zero_copy_only=False)Arrow Table转换为Pandas DataFrame
参数:
table(pa.Table): 输入的Arrow Tableuse_threads(bool): 是否使用多线程,默认Truezero_copy_only(bool): 仅使用零拷贝(可能失败),默认False
返回:
pd.DataFrame: Pandas DataFrame
共享内存类
SharedMemoryWriter(name, size_mb=100, buffer_count=3)
SharedMemoryWriter(name, size_mb=100, buffer_count=3)共享内存写入器,用于跨进程数据传输
参数:
name(str): 共享内存区域名称size_mb(int): 共享内存大小(MB),默认100buffer_count(int): 缓冲区数量,默认3
方法:
write(df): 写入DataFrame到共享内存get_stats(): 获取统计信息close(): 关闭写入器
示例:
SharedMemoryReader(name)
SharedMemoryReader(name)共享内存读取器,用于跨进程数据接收
参数:
name(str): 共享内存区域名称
方法:
read(timeout_ms=5000, to_pandas=False): 读取DataFrameget_stats(): 获取统计信息close(): 关闭读取器
示例:
辅助函数
has_dataswap_support()
has_dataswap_support()检查QADataSwap是否可用
返回:
bool: True如果QADataSwap已安装
示例:
🏗️ 架构设计
模块结构
自动回退机制
QADataBridge在QADataSwap未安装时自动使用Python fallback:
跨语言通信流程
⚙️ 配置和优化
共享内存大小配置
根据数据规模选择合适的共享内存大小:
小规模 (< 1万行)
10MB
实时tick数据
中规模 (1-10万行)
50MB
分钟K线数据
大规模 (10-100万行)
200MB
日线历史数据
超大规模 (>100万行)
500MB+
全市场数据
示例:
性能优化建议
使用Polars作为中间格式
批量转换数据
共享内存超时设置
🔧 故障排查
问题1: ImportError: No module named 'qadataswap'
原因: QADataSwap未安装
解决方案:
问题2: SharedMemoryWriter创建失败
原因: 共享内存权限或大小限制
解决方案:
问题3: 零拷贝转换性能不佳
原因: PyArrow版本过低或未安装
解决方案:
问题4: 共享内存读取超时
原因:
写入端未写入数据
超时时间设置过短
共享内存名称不匹配
解决方案:
📊 性能基准测试
运行完整的性能基准测试:
预期输出:
🌟 使用场景
1. 实时行情数据分发
优势: 5-10x传输速度,零内存拷贝
2. Python ↔ Rust数据交换
优势: 零拷贝数据交换,充分利用Rust性能
3. 大数据集处理
优势: 内存占用降低50-80%,处理速度提升5-10x
🔗 相关项目
QADataSwap
QADataBridge的底层依赖,提供Rust实现的零拷贝数据交换
项目地址: https://github.com/yutiansut/qadataswap
语言: Rust
PyO3绑定: Python集成
核心功能: SharedDataFrame、Arrow IPC、共享内存
QUANTAXIS Rust (QARS2)
高性能量化核心,使用QADataBridge进行数据交换
项目地址: /home/quantaxis/qars2
性能: 100x账户操作、10x回测速度
集成: 通过QARSBridge和QADataBridge与Python交互
📝 更新日志
v2.1.0-alpha2 (2025-10-25)
✨ 初始版本发布
✅ 实现Pandas/Polars/Arrow零拷贝转换
✅ 实现共享内存跨进程通信
✅ 添加自动回退机制
✅ 完整的中文文档和示例
✅ 性能基准测试工具
💡 FAQ
Q: QADataBridge和QARSBridge有什么区别?
A:
QARSBridge: 提供Rust QARS2账户和回测引擎的Python包装
QADataBridge: 提供跨语言零拷贝数据转换和共享内存通信
两者配合使用,实现高性能量化交易系统。
Q: 必须安装QADataSwap吗?
A: 不是必须的。QADataBridge在未检测到QADataSwap时会自动使用Python fallback,但性能会降低。建议安装QADataSwap获得最佳性能。
Q: 支持哪些数据格式?
A:
输入: Pandas DataFrame、Polars DataFrame
中间格式: Apache Arrow Table
输出: Pandas DataFrame、Polars DataFrame
Q: 共享内存支持多进程吗?
A: 是的。SharedMemoryWriter/Reader专为跨进程通信设计,支持1个写入进程和多个读取进程。
📧 联系方式
作者: @yutiansut
项目: QUANTAXIS
GitHub: https://github.com/QUANTAXIS/QUANTAXIS
QQ群: 563280068
Discord: https://discord.gg/quantaxis
@yutiansut @quantaxis
Last updated
Was this helpful?