栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

doctrine2-如何提高冲洗效率?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

doctrine2-如何提高冲洗效率?

您做对了-这只是很慢,因为添加的ORM抽象意味着您无法进行所需的优化。

就是说,EntityManager在这么大的事务上确实变慢。如果您绝对不需要在一个大事务中全部使用它们,则可以通过flush()ing然后每20-200次循环clear()清除EM来获得性能更高的代码。

如果那不能给您足够的性能,我能想到的唯一替代方法是还原为直接对DBMS运行自定义SQL的自定义代码。

我知道这不是一个很好的答案,但是至少我可以告诉你,你并不疯狂。

------编辑------

摘自Doctrine2有关批处理的官方文章:

某些人似乎想知道为什么Doctrine不使用多重插入(将插入到(…)值(…),(…),(…),…

首先,此语法仅在mysql和较新的postgresql版本上受支持。其次,当使用AUTO_INCREMENT或SERIAL且ORM需要使用这些标识符进行对象的身份管理时,没有一种简单的方法可以在这种多插入中获取所有生成的标识符。最后,插入性能很少是ORM的瓶颈。普通插入在大多数情况下已经足够快,如果您真的想进行快速批量插入,那么无论如何多插入都不是最好的方法,即Postgres
COPY或Mysql LOAD DATA INFILE快几个数量级。

这就是为什么不值得在ORM中实现在mysql和postgresql上执行多插入的抽象的原因。

当使用 远程 数据库 与本地
数据库时,由于将每个查询发送到远程服务器的开销也很大,因此性能上也存在显着差异。借助事务和数据库优化,使用本地数据库时的开销要低得多。(例如,在问题示例中,70秒降低到300ms)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405337.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号