SuperAPI AI 工具集

doctrine-batch-processing

数据与分析

查看项目

更新于 10-15 21:08

技能介绍

用途:处理无法一次性装入内存的大量数据行,例如导入、导出、回填;当命令或 worker 遍历实体时内存耗尽,或需要一次性更新、删除大量行,或通过 Doctrine/DBAL 大批量插入时使用。

主要能力与默认流程:先测量数据集大小与进程内存预算;用 toIterable() 流式读取,超大表按 id 分页(id > :lastId);每 N 条执行 flush 并 clear(),clear 后重新获取所需对象;无需水合的批量写入使用 DQL UPDATE/DELETE 或 DBAL;记录内存占用与进度,并让运行可恢复。

限制与护栏:不要在会增长的表上使用 findAll();clear() 之前加载的实体已分离,不可再修改或持久化;批量 DQL 与 DBAL 会跳过生命周期事件和监听器,需确认哪些逻辑依赖它们;ORM 3 中 Query#iterate() 和 setSQLLogger() 已移除,改用 toIterable() 和日志中间件;按 id 分页而非 offset,offset 会变慢并在数据变动时跳过行。

输出约定:给出带明确批大小和 clear 点的批处理循环;为每种写入说明选择 ORM、DQL 批量还是 DBAL 及理由;在真实数据量下测量前后内存。更多实现细节见 reference.md。