跳转到主要内容
对于许多操作,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。这意味着:
主要结论:
  • to_df() 基本没有开销——无需序列化或复制内存
  • 从 pandas DataFrame 创建 DataStore 几乎是瞬时完成的
  • DataStore 与 pandas 视图共享内存

优化建议

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

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

2. 使用 Parquet 而非 CSV

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

3. 尽早过滤数据

4. 只选择所需列

5. 善用 SQL 聚合

6. 使用 head() 代替全量查询

7. 批次操作

8. 使用 explain() 优化


工作负载性能分析

启用性能分析

识别瓶颈

方法比较


最佳实践摘要


快速决策指南

如需自动选择最优引擎,请使用 config.set_execution_engine('auto') (默认) 。 如需在聚合类工作负载中获得最大吞吐量,请使用 config.use_performance_mode()。 详见执行引擎和性能模式。