Doctrine2 批量插入

2024-06-25

是否可以使用单个查询将多个实体插入数据库? 当我使用一个例子时here http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/batch-processing.html我可以在 Web 调试器中看到几个查询

更新于 2012 年 8 月 23 日

我找到了以下相关链接。我希望它能帮助人们理解批处理:

  1. http://www.doctrine-project.org/blog/doctrine2-batch-processing.html http://www.doctrine-project.org/blog/doctrine2-batch-processing.html
  2. 学说2 - 如何提高冲水效率? https://stackoverflow.com/questions/8707486/doctrine2-how-to-improve-flush-efficiency
  3. 原则 2:批量处理引用其他实体的实体插入时的奇怪行为 https://stackoverflow.com/questions/7431794/doctrine-2-weird-behavior-while-batch-processing-inserts-of-entities-that-refer

主要内容:

有些人似乎想知道为什么 Doctrine 不使用 多重插入(插入 (...) 值 (...), (...), (...), ...

首先,此语法仅在 mysql 和较新的 postgresql 版本上支持。其次,没有简单的方法可以掌握所有内容。 使用时在这样的多插入中生成的标识符 AUTO_INCRMENT 或 SERIAL 和 ORM 需要身份标识符 对象的管理。最后,插入性能很少是最重要的 ORM 的瓶颈。普通插入速度足够快 大多数情况下,如果您确实想要快速批量插入,那么 无论如何,多重插入不是最好的方法,即 Postgres COPY 或 Mysql LOAD DATA INFILE 速度快了几个数量级。

这些就是为什么不值得花精力去实现一个在 mysql 和 postgresql 上执行多重插入的抽象 一个 ORM。 我希望这能消除一些疑问。


我认为会有多个插入语句,但每个“刷新”调用只有一个对数据库的查询。

正如这里提到的http://doctrine-orm.readthedocs.org/en/2.0.x/reference/working-with-objects.html http://doctrine-orm.readthedocs.org/en/2.0.x/reference/working-with-objects.html

每个“persist”都会向当前UnitOfWork添加一个操作,然后是对EntityManager#flush()的调用,它实际上会写入数据库(将UnitOfWork的所有操作封装在单个事务中)。

但我没有检查我上面描述的行为是否是实际行为。

此致, 克里斯托夫

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Doctrine2 批量插入 的相关文章

随机推荐