跳转到主要内容
在许多操作中,DataStore 的性能较 pandas 有显著提升。本指南将说明其原因,并介绍如何优化工作负载。

DataStore 为何更快

1. SQL 下推

相关操作会下推到数据源:

2. 列裁剪

仅读取所需的列:

3. 惰性求值

多个操作会被编译成一个查询:

基准测试:DataStore 与 pandas

测试环境

  • 数据量:1000 万行
  • 硬件:标准笔记本电脑
  • 文件格式:CSV

结果

关键结论

  1. GroupBy 操作:DataStore 最高快达 19.93 倍
  2. 复杂管道:DataStore 快 5–6 倍 (得益于 SQL 下推)
  3. 简单切片操作:性能相当,差异可忽略不计
  4. 最佳适用场景:带有 groupby/聚合的多步操作
  5. 零拷贝to_df() 没有数据转换开销

DataStore 更具优势的场景

重度聚合

复杂管道

大文件处理

多列操作


pandas 何时表现相当

在大多数场景下,DataStore 的性能与 pandas 相当或更优。不过,在以下几种特定情况下,pandas 可能会稍快一些:

小型数据集 (少于 1,000 行)

基本切片操作

自定义 Python Lambda 函数

重要即使在 DataStore “较慢” 的场景下,其性能通常也与 pandas 不相上下——对实际使用来说,这种差异几乎可以忽略不计。与这些边缘情况相比,DataStore 在复杂操作中的优势要大得多。如需更细粒度地控制执行过程,请参阅执行引擎配置

零拷贝 DataFrame 集成

DataStore 在读取和写入 pandas DataFrame 时采用 zero-copy。这意味着:
关键影响:
  • to_df() 几乎没有开销——无需序列化或复制内存
  • 从 pandas DataFrame 创建 DataStore 几乎是瞬时完成的
  • DataStore 与 pandas 视图共享内存

优化建议

1. 为重负载启用性能模式

对于聚合密集型工作负载,如果你不需要精确的 pandas 输出格式 (行顺序、MultiIndex 列、dtype 校正) ,请启用性能模式以获得最高吞吐量:
预期提升:对于 filter+groupby 工作负载,速度最高可提升 2–8 倍,并降低大型 Parquet 文件的内存占用。 完整详情请参见 Performance Mode

2. 使用 Parquet 代替 CSV

预期效果:读取速度提升 3-10 倍

3. 尽早进行过滤

4. 仅选择必要的列

5. 善用 SQL 聚合

6. 使用 head() 而非完整查询

7. 批次操作

8. 使用 explain() 优化


分析工作负载性能

启用性能分析

找出瓶颈

方法对比


最佳实践摘要


快速决策指南

如需自动选择最优执行引擎,请使用 config.set_execution_engine('auto') (默认) 。 如需在聚合类工作负载上获得最大吞吐量,请使用 config.use_performance_mode()。 详情请参见执行引擎性能模式
最后修改于 2026年6月10日