用Laravel轻松处理千万级数据的方法实现
时间:2022-01-22
来源:互联网
标签:
这篇文章主要介绍了用Laravel轻松处理千万级数据的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
在Laravel中使用cursor来查询并处理数据 (轻松处理千万级的数据)
事发现场
最近在项目中遇到内存不足的问题, 测试环境中的PHP内存只有64M,在导出的时候, 数据量比较大,这个时候会出现内存溢出的错误;
如何解决
目前想到两种方法:
调整php.ini文件中memory_limit配置项; 或者在调用方法中调整内存大小ini_set('memory_limit', "").
使用Laravel的Lazy Collection.
考虑到修改配置文件的影响范围过大, 以及对导出的实时性要求不是很高, 所以我们选择了第二种方法.
Lazy Collection
如何使用Lazy Collection? 很简单, 将查询构建器链末尾的get()更改为cursor()就好了 !
cursor ( )
cursor的原理
cursor的实现使用了 yield 关键字, yield关键字是生成器函数的核心, 它的调用形式跟return很像, 不同之处在于return会返回值并且终止函数执行, 而yield会返回值给循环调用生成器的代码并且只是暂停生成器函数.
cursor()的代码如下
/**
*
Get a generator for the given query.
*
* @return Generator
*/
public function cursor() {
foreach ($this->applyScopes()->query->cursor() as $record) {
yield $this->newModelInstance()->newFromBuilder($record);
}
}由于使用了yield关键字, 在循环cursor生成器的时候,可以渐进式的处理数据,即使在内存很小的情况下,也可以轻松处理千万级的数据! 真的是非常方便哦!
到此这篇关于用Laravel轻松处理千万级数据的方法实现的文章就介绍到这了,更多相关Laravel 处理千万级数据内容请搜索PHP爱好者以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP爱好者!
-
核芯显卡是什么意思?核芯显卡和独立显卡有什么区别? 时间:2025-12-19 -
什么是算术逻辑单元ALU 算术逻辑单元的功能和结构 时间:2025-12-19 -
什么是视觉识别色差检测 视觉识别色差检测的原理、技术特点、应用及常用工具 时间:2025-12-19 -
什么是流量控制 流量控制和拥塞控制的区别 时间:2025-12-19 -
GPU虚拟化是什么意思 GPU虚拟化有哪三种方法 时间:2025-12-19 -
独显是什么意思 独显和集显的区别 时间:2025-12-19
今日更新
-
林东江珊番茄小说畅读入口-林东江珊番茄小说爆款作品一键直达
阅读:18
-
deepnode修图官方网页版最新版本下载-deepnode免登录中文版安装包下载
阅读:18
-
币安NFT质押借贷有最低期限要求吗?关键规则解析
阅读:18
-
欧泡的梗是什么梗?揭秘网络爆笑名场面背后的魔性洗脑梗!
阅读:18
-
iCloud网页版登录入口-官网网页版iCloud登录入口
阅读:18
-
画涯无删减版安卓最新版下载-画涯app官方正版免费下载
阅读:18
-
欧盆是什么梗?揭秘网络热词欧盆的爆火原因和用法
阅读:18
-
币安智能跟单3.0推出跟单绩效排行榜了吗 功能解析
阅读:18
-
府声FM官方免费极速下载安装最新版2025 - 府声FM2025版本下载安卓苹果电脑版
阅读:18
-
币安期权矩阵交易提前平仓操作指南及支持情况解析
阅读:18










