我正在使用DoctrineExtensions来管理嵌套树(嵌套树行为)。我必须从csv文件导入10-20K记录并将它们存储在数据库中。
我为这个任务创建了一个服务,它创建了一堆新类别(树节点),设置了这些类别的父类并保留它们,最后我调用了EntityManager#flush方法将创建的类别保存到数据库中。
根据我的逻辑,这个过程应该是这样的:
Doctrine进行查询,其中插入所有数据,类似于:
INSERT INTO table (field1, field2, parent_id, root, left, ...) VALUES
(fields of 1st record),
(fields of 2st record),
...
但是,Doctrine分别插入每个记录,另外root,left和right值在刷新期间得到更新,导致需要大量的更新查询。
为了插入70个类别,我需要〜250个查询,当我想添加500个类别时,程序因内存不足而终止。
我如何优化流程?当然我可以从头开始编写它,但我真的很喜欢使用这个极好的扩展。
答案 0 :(得分:1)
我的解决方案是使用物化路径树而不是嵌套树。我知道,这不是解决这个问题的真正解决方案,但它可以有效地工作。如果您有更好的解决方案,请发布,我可能会接受它作为解决方案。