mcpField
I
io-bound-data-processing

io-bound-data-processing

github.com/pproenca数据与数据库218121 次安装11 周前更新
代码仓库

关于 io-bound-data-processing

面向在单台受限设备上处理超出内存的数据集的工程师,提供数据处理参考。内容涵盖内存管理、I/O 模式、格式、分批、磁盘溢出、背压、并发与测量,并按执行影响排序。

主要功能

  1. 01流式与有界内存处理
  2. 02顺序及缓冲 I/O 模式
  3. 03格式与编码选择
  4. 04分块、批处理与磁盘溢出
  5. 05背压与并发建议
  6. 06吞吐量与瓶颈测量

适用场景

  1. 01避免处理超内存数据集时 OOM
  2. 02加速缓慢的文件或网络流水线
  3. 03按内存预算选择分块大小
  4. 04诊断小型设备上的 I/O 瓶颈任务

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/pproenca/dot-skills --skill io-bound-data-processing

安装后在 Claude Code 中输入/io-bound-data-processing确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

AGENTS.md
metadata.json
assets/templates/
_template.md
references/
_sections.md
batch-coalesce-writes-with-buffered-output.md
batch-keyset-pagination-over-offset.md
batch-pick-chunk-size-by-memory-budget.md
batch-process-with-stable-iterators.md
batch-use-vectorized-apis-not-row-loops.md
codec-dictionary-encoding-for-repetitive-strings.md
codec-prefer-binary-protocols-over-json-for-rpc.md
codec-train-a-zstd-dictionary-for-many-small-payloads.md
codec-zstd-or-lz4-as-defaults-not-gzip.md
conc-asyncio-for-many-network-streams-not-for-cpu.md
conc-overlap-compute-with-prefetch.md
conc-thread-pools-for-blocking-io-libraries.md
conc-tune-parallelism-to-the-bottleneck.md
fmt-avoid-deeply-nested-json-for-hot-paths.md
fmt-columnar-for-analytical-scans.md
fmt-line-delimited-for-streaming-row-ingest.md
fmt-prefer-schema-on-write-when-possible.md
fmt-push-predicates-into-the-reader.md
io-async-for-many-concurrent-streams.md
io-batch-and-pipeline-network-roundtrips.md
io-buffer-explicitly-for-small-records.md
io-mmap-for-random-or-shared-large-files.md
io-prefer-sequential-over-random.md
io-stream-http-bodies-with-iter-content.md
io-zero-copy-when-moving-bytes-as-is.md
mem-bound-the-working-set.md

详细介绍

受限资源下 I/O 密集型数据处理最佳实践

为工程师提供的参考指南,适用于在单台低算力设备上处理大于 RAM 的数据集。按照对执行生命周期的影响排序:表格顶部的规则决定任务能否运行;接近底部的规则则能再提升最后 10% 的性能。请从优化优先级最高的规则开始。

**范围:**适用于笔记本电脑、双 vCPU 容器或 Raspberry Pi 级别设备上的实际 ETL、数据工程和批处理工作的常见模式——流式处理、格式、分块、溢写、背压、编解码器,以及真正适合 I/O 密集型瓶颈的并发模型。不在范围内(其他地方已有介绍):算法原语本身(参见 computer-science-algorithms)、单台设备以外的分布式计算(请使用 Spark/Dask)以及数据库引擎内部机制(参见官方文档)。

内容提炼自 Apache Arrow / Parquet 文档、Polars 用户指南、DuckDB 文档、pandas — 扩展到大型数据集、Linux 手册页(mmap(2)、sendfile(2)、posix_fadvise(2))、Brendan Gregg 的 USE 方法和 Systems Performance、Kleppmann 的 Designing Data-Intensive Applications,以及 zstd / lz4 基准测试参考资料。

适用场景

遇到以下情况时,请参考这些规则:

  • 任务因 OOM 被终止、使用交换空间,或在小型设备上运行速度远低于预期
  • 输入数据大于 RAM,且需要扫描、筛选、聚合、排序或连接数据
  • 管道各阶段之间存在无界缓冲区,或者「流式」任务中的内存持续线性增长
  • 发现每行数据都要进行一次往返写入(每行执行一次 INSERT、每个 URL 执行一次 requests.get、每条记录执行一次 f.read(32))
  • 正在选择格式、编解码器或序列化器,且该选择在大规模处理时会产生显著影响
  • top 显示 CPU 使用率低、iowait 高,或者不清楚是哪种情况
  • 「速度很慢,但不知道为什么」——从 obs- 类别开始排查

按优先级划分的规则类别

#类别前缀影响连锁影响的原因
1内存管理mem-严重在受限设备上将所有数据读入 RAM,会抵消后续所有优化手段的作用
2I/O 访问模式io-严重磁盘/网络比 RAM 慢 10³–10⁶ 倍;访问模式决定了整体耗时
3数据格式与编码fmt-高在执行任何逻辑之前,格式就决定了 I/O 量和解码开销的下限
4分块与批处理batch-高粒度决定峰值内存,并摊薄每项开销
5磁盘溢写与外部内存spill-高数据大于 RAM 时,选择只有「妥善溢写」或「内存溢出」
6流水线与背压pipe-中高快速生产者与缓慢接收端之间的无界缓冲区会导致内存溢出
7压缩与序列化codec-中以 CPU 换取 I/O;选对编解码器可带来数量级的提升
8I/O 密集型工作负载的并发conc-中异步、线程和进程是不同的工具;选错模型会浪费 CPU
9可观测性与吞吐量调优obs-低至中无法调优未测量的指标;iowait 高不等于 CPU 密集型

快速参考

1. 内存管理规范(关键)
2. I/O 访问模式(关键)
3. 数据格式与编码(高优先级)
4. 分块与批处理(高优先级)
5. 磁盘溢写与外部内存(高)
6. 流水线与背压(中高)
7. 压缩与序列化(中)
8. I/O 密集型工作负载的并发处理(中)
9. 可观测性与吞吐量调优(低至中)

使用方法

先从与问题相符的问题开始:

代码示例使用 Python(对不同受众来说最易读)。其原理具有通用性——其他生态系统中的同类库(Arrow C++/Rust/Java、Polars Rust、DuckDB 等,以及 libuv 风格的异步处理)遵循相同模式。

参考文件

文件说明
references/_sections.md分类定义与顺序
assets/templates/_template.md添加新规则的模板
metadata.json版本和参考信息
AGENTS.md自动生成的目录导航

相关技能

评论

支持 Markdown