Symfony 更快的mongodb odm导入持久化和刷新

Symfony 更快的mongodb odm导入持久化和刷新,symfony,doctrine-odm,import-from-csv,Symfony,Doctrine Odm,Import From Csv,我使用symfony2和doctrine mongodb odm从CSV文件导入产品数据。我创建了一个控制台命令来创建产品对象,然后保存它们并刷新文档管理器。冲水需要30秒,我只有几千种产品。未来可能会有更多 我想知道是否有任何优化/最佳实践可以在理论上更快地刷新大量新对象。似乎不需要对对象进行太多处理,因为它们都是新的,只需要添加到集合中。我遇到了类似的问题(从csv加载数千个产品)。我的问题更多地围绕着内存不足,但解决方案也显示了速度的显著提高 基本上,我在循环中放置了一个计数器,并刷新管理

我使用symfony2和doctrine mongodb odm从CSV文件导入产品数据。我创建了一个控制台命令来创建
产品
对象,然后保存它们并刷新
文档管理器
。冲水需要30秒,我只有几千种产品。未来可能会有更多


我想知道是否有任何优化/最佳实践可以在理论上更快地刷新大量新对象。似乎不需要对对象进行太多处理,因为它们都是新的,只需要添加到集合中。

我遇到了类似的问题(从csv加载数千个产品)。我的问题更多地围绕着内存不足,但解决方案也显示了速度的显著提高

基本上,我在循环中放置了一个计数器,并刷新管理器,然后每隔一段时间清除一次。我发现150个批次的结果最好。我相信这在很大程度上取决于你是如何处理它的,因为我在插入数据之前进行了大量的数字运算来清理数据

作为参考,它加载了大约5500个包含100多个字段的产品,并在大约20秒内对其进行处理。在修改之前需要3分钟以上的时间(如果由于内存不足而完成的话)


循环完成后,不要忘记至少再运行一次$manager->flush(),以捕获不会在循环中触发它的1-149条记录。

我遇到了类似的问题(从csv加载数千个产品)。我的问题更多地围绕着内存不足,但解决方案也显示了速度的显著提高

基本上,我在循环中放置了一个计数器,并刷新管理器,然后每隔一段时间清除一次。我发现150个批次的结果最好。我相信这在很大程度上取决于你是如何处理它的,因为我在插入数据之前进行了大量的数字运算来清理数据

作为参考,它加载了大约5500个包含100多个字段的产品,并在大约20秒内对其进行处理。在修改之前需要3分钟以上的时间(如果由于内存不足而完成的话)


循环完成后,不要忘记至少再运行一次$manager->flush(),以捕获那些不会在循环中触发它的1-149条记录。

我有一个非常大的数据库。我发现在每次插入代码时进行刷新效率更高,可以更好地管理对数据库的访问

$dm->persist($object);
$dm->flush();
$dm->clear();

我有一个非常大的数据库。我发现在每次插入代码时进行刷新效率更高,可以更好地管理对数据库的访问

$dm->persist($object);
$dm->flush();
$dm->clear();

您是一次冲洗几千件产品还是在每次冲洗后冲洗?您确定问题是冲洗操作,而不是冲洗前的处理吗?你做了基准测试吗?我做了,CSV解析、对象创建和持久化都需要1-2秒。最后的刷新调用需要30多秒。也许你可以启用条令的日志记录和分析。确保对MongoDB也这样做。我认为问题不在于PHP处理……对不起,我是个白痴。已打开xdebug探查器。仍然需要7秒来冲洗,但我认为这更合理?您是一次性冲洗几千个产品,还是在每次持续冲洗之后?您确定问题在于冲洗操作,而不是之前的处理吗?你做了基准测试吗?我做了,CSV解析、对象创建和持久化都需要1-2秒。最后的刷新调用需要30多秒。也许你可以启用条令的日志记录和分析。确保对MongoDB也这样做。我认为问题不在于PHP处理……对不起,我是个白痴。已打开xdebug探查器。仍然需要7秒来冲洗,但我认为这更合理?+1用于循环后冲洗的最后提示。我浪费了2个小时试图修复一个没有得到更新结果的测试,因为;)+1用于循环后的最终冲洗尖端。我浪费了2个小时试图修复一个没有得到更新结果的测试,因为;)这样做可能会增加开销并使速度问题变得更糟,因为完整UOW计算需要在每个记录之后运行。这样做可能会增加开销并使速度问题变得更糟,因为完整UOW计算需要在每个记录之后运行。