如何使这个树生成更快(doctrine2 +扩展)?

时间:2012-07-15 06:08:52

标签: php mysql symfony tree doctrine-orm

我正在使用DoctrineExtensions来管理嵌套树(嵌套树行为)。我必须从csv文件导入10-20K记录并将它们存储在数据库中。

我为这个任务创建了一个服务,它创建了一堆新类别(树节点),设置了这些类别的父类并保留它们,最后我调用了EntityManager#flush方法将创建的类别保存到数据库中。

根据我的逻辑,这个过程应该是这样的:

  1. 扩展程序计算每个节点所需的数据(右,左,等级等)
  2. Doctrine进行查询,其中插入所有数据,类似于:

    INSERT INTO table (field1, field2, parent_id, root, left, ...) VALUES
    (fields of 1st record),
    (fields of 2st record),
    ...
    
  3. 但是,Doctrine分别插入每个记录,另外root,left和right值在刷新期间得到更新,导致需要大量的更新查询。

    为了插入70个类别,我需要〜250个查询,当我想添加500个类别时,程序因内存不足而终止。

    我如何优化流程?当然我可以从头开始编写它,但我真的很喜欢使用这个极好的扩展。

1 个答案:

答案 0 :(得分:1)

我的解决方案是使用物化路径树而不是嵌套树。我知道,这不是解决这个问题的真正解决方案,但它可以有效地工作。如果您有更好的解决方案,请发布,我可能会接受它作为解决方案。