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

标签 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),
    ...
    

但是,Doctrine 会单独插入每条记录,此外,根值、左值和右值在刷新期间会更新,导致需要大量更新查询。

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

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

最佳答案

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

关于php - 如何使这棵树生成更快(doctrine2+扩展)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11489830/

相关文章:

php - 如果未为发布设置缩略图,则 SQL 查询不会显示结果

c# - 使用可能为空的列表通过 EF6 进行查询

javascript - PHP、Javascript 和 Twig 模板

symfony - symfony2 中的每个类都需要是一个服务吗?

php - 如何使用 PHP Simple XML 将 XML 字符串打印为对象后

使用两个 chrome 浏览器时,php 应用程序 session 会混淆

php - Cakephp 从数据库中检索信息

php - 选择一个表并创建一个与所选表相似数据的表

php - Symfony2 - 如何在提交表单后从唯一约束错误中恢复?

javascript - PHP 数组到 Javascript 对象在 console.log 之后没有数组