[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

当我使用 CakePHP 查找(“全部”)大量数据时,内存不足 [已解决]

这是开发团队的Hase。

上一篇文章,我写了如何在 CakePHP 中查找(“全部”)大量数据而不导致内存错误,但

了公司内部关于该文章内容的很多批评。有时间我想写一些对之前内容的反馈。

因此,如果您将上一篇文章视为纸质程序员的一个笑话,我将不胜感激。 。 。

当前代码

$data = $this->Model->find('all'); // 一些处理......

使用 query() 是 ×

来自上一篇文章

看起来使用 query() 检索比使用 find('all') 检索更容易处理。
因此,我将其修改为使用 query() 来检索使用 find 检索到的内容。

这是错误的。

首先,查询方法用于执行复杂的查询,
使用时需要对其进行清理和验证,因此最好不要轻易使用它。
首先,使用find更容易有效地使用框架的功能,所以
这次不需要使用查询方法。 。

比使用 for 语句循环
更好

上次,我使用了 for 循环来划分和检索数据。

以前的代码

// 获取数据项数量 $count = $this->Model->find('count'); // 一次获取5000条数据 $limit = 5000; // 循环次数 ({data项目数 ÷ 每次检索的项目数}向上舍入) $loop = ceil($count / $limit); for ($i = 0; $i < $loop; $i++){ // 偏移量 $offset = $ limit * $i; $data = $this->Model->query("select * fromhogehoge as limit {$limit} offset {$offset};", $cachequeries = false); // 一些处理 ... . ……}

这个方法没有什么问题,但是

事实上,我发现使用while语句来获取是一个更好的方法。
使用 while 语句,无需进行计数或计算循环次数。
另外,它是 find('all') 而不是 query()。 。 。

所以我尝试用 while 语句重写它。

重写代码

// 一次检索 5000 个项目的数据 $limit = 5000; $params = array('limit' => $limit, 'offset' => 0); while ($data = $this->Model-> find( 'all', $params)){ // 一些处理 $params['offset']+= $limit }

这肯定比使用 for 语句更好,因为没有不必要的处理。
我学到了很多!

就是这样。

如果您觉得这篇文章有帮助,请点赞!
3
加载中...
3 票,平均:1.00 / 13
4,540
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

写这篇文章的人

关于作者

长谷达也

应届毕业生加入Beyond Co., Ltd.。

我们开发网络系统(开发在浏览器上运行的服务和系统,例如网络服务、数字内容和业务管理系统)和游戏API(开发与应用程序游戏通信的程序)。

我们还为 Shopify 开发私人/自定义应用程序。

原本在大阪事务所工作,2019年调到横滨事务所。
我的爱好是棒球/卡拉OK/动漫