endroid / flusher
Endroid Flusher
2.1.5
2023-11-07 08:47 UTC
Requires
- php: ^8.1
- doctrine/annotations: ^1.10
- doctrine/orm: ^2.6.3
- endroid/installer: ^1.3.2
- symfony/cache: ^5.4||^6.4||^7.0
- symfony/stopwatch: ^5.4||^6.4||^7.0
Requires (Dev)
- endroid/quality: dev-master
Suggests
- roave/security-advisories: Avoids installation of package versions with vulnerabilities
README
由 endroid 提供
当导入或修改大量数据时,在刷新前定义最佳批量大小通常是必要的:小批量大小由于每次刷新的额外开销而表现不佳。而批量大小过大由于内存使用过高和需要计算大量更改集而表现不佳。此外,你选择的批量大小在不同的硬件上可能会产生不同的结果。
这个库帮助你将实体写入数据库,而无需担心批量大小。它会增量地尝试新的批量大小(给定一个步长),坚持使用性能最高的一个,或者在情况发生变化时切换到更好的批量大小。
安装
使用 Composer 安装此库。
$ composer require endroid/flusher
使用
为了启用自动刷新,你首先需要为你当前使用的实体管理器创建一个 Flusher。
$flusher = new Flusher($manager);
然后,当你对你的实体管理器执行操作时,你可以随时在 Flusher 上调用 flush() 方法来通知有更改。
for ($n = 1; $n <= 50000; $n++) { $task = new Task(); $task->setName('Task '.$n); $manager->persist($task); $flusher->flush(); }
因为你无法知道结尾是否有挂起的刷新,所以你需要调用 finish() 来确保所有数据都已刷新。
$flusher->finish();
版本控制
版本号遵循 MAJOR.MINOR.PATCH 方案。向后兼容性破坏性更改将保持在最低限度,但请注意,这些可能会发生。在生产环境中锁定你的依赖项,并在升级时测试你的代码。
许可证
此包位于 MIT 许可证下。有关完整的版权和许可证信息,请查看与源代码一起分发的 LICENSE 文件。