我正在使用 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 会单独插入每条记录,此外,根值、左值和右值在刷新期间会更新,导致需要大量更新查询。
为了插入 70 个类别,我需要大约 250 个查询,当我想添加 500 个类别时,程序因内存不足而终止。
如何优化流程?当然,我可以从头开始编写它,但我真的很喜欢使用这个出色的扩展。
最佳答案
我的解决方案是使用物化路径树而不是嵌套树。我知道,这不是这个问题的真正解决方案,但它有效。如果您有更好的解决方案,请发布,我可能会接受它作为解决方案。
关于php - 如何使这棵树生成更快(doctrine2+扩展)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11489830/