在 Zf2 中获取 50,000 多行的有效且最快的方法
Posted
技术标签:
【中文标题】在 Zf2 中获取 50,000 多行的有效且最快的方法【英文标题】:Efficient and fastest way to fetch huge 50,000+ rows in Zf2 【发布时间】:2014-03-12 06:01:18 【问题描述】:我需要在我的代码中获取大量数据。我正在使用 zf2,目前我正在使用 Doctrine2 来处理我的数据库。但我刚刚发现 ORM 查询比普通的 mysql 查询花费更多时间。那么您能否建议我从 zf2 中的数据库中获取大量数据的最佳方法。
【问题讨论】:
您还应该注意您要如何处理这些数据 @rekire 好吧,我正在开发一个站点,将来它将在表格上拥有大量数据和大量连接。当我根据条件在网站的许多页面上获取相同的内容时,我发现 ORM 从普通 sql 获取数据的速度很慢。 恕我直言,该描述过于模糊,但我会为该连接内容创建视图。所以 ORM 应该更快地获取您的数据。借助视图,DBMS 可以更有效地连接该数据。 @rekire 所以你更喜欢 ORM 而不是普通的 MySql Query ?但是如果我不想创建视图怎么办。 @rekire 抱歉,我无法明确我的问题,我对这些数据库的事情太陌生了 【参考方案1】:这里有几点需要考虑:
-
默认情况下,Doctrine 会将数据库记录水合为 php 对象(实体):它使用查询中的数据填充实体。这是通过“智能猜测”来完成的,可以说是比较慢的。水合到阵列中,您将获得更快的响应。在manual 中阅读有关补水的更多信息。
默认情况下,Doctrine 不使用任何缓存来解析您的映射或将 DQL 转换为 SQL。您可以使用缓存来加快速度。此外,Doctrine 处理只读实体比让它们读/写更快。在manual 中阅读有关 Doctrine 性能问题的更多信息。
在 html 表(或其他任何内容)中渲染 50,000 行对您的渲染引擎 (
Zend\View
/ php) 和 DOM(在浏览器中)来说是一种痛苦。查询可能会被优化并很快加载,将所有这些结果呈现到视图中并将它们显示到浏览器中也会非常慢。
使用分页会减小数据集的大小,同时加快查询和渲染速度。
使用 ORM 来帮助您进行映射、数据库抽象等非常好,但需要权衡:性能。使用像 Doctrine 这样的库本质上会增加执行时间:您将永远无法达到 Doctrine 中 php mysql 函数的性能。
所以:
-
尽量减少一次查询的结果数,加快数据库查询、水化和渲染速度
尝试使用 Doctrine 调整性能,方法是使用数组水合、缓存和只读实体。
如果您需要尽可能快的方式,请不要使用 Doctrine。试试
Zend\Db
或者自己用sql写所有东西
【讨论】:
谢谢..对我有很大帮助以上是关于在 Zf2 中获取 50,000 多行的有效且最快的方法的主要内容,如果未能解决你的问题,请参考以下文章