在PHP中怎么解决大量数据处理的问题
来源:(Reddit)PHP100中文网
问题(来自lunacyfoundme)
我正在重建我们公司内部网,期间遇到一个与大量数据处理报告有关的前一个版本的问题。此前我曾用同步处理程序代码解决过这个问题,只是运行的很慢很慢,这导致我不得不延长最大脚本运行时间10到15分钟。有没有更好的方式来处理PHP站点里的大量数据呢?理想情况下我想在后台运行它,并且跑的越快越好。这个过程包括处理成千上万条的财务数据,我是使用Laravel来重建这个站点的。
最好受欢迎的回答(来自spin81):
人们都告诉你要使用队列和诸如此类的东西,这是一个好主意,但问题好像并没有出在PHP上面。Laravel/OOP是很厉害的,但生成你所说的报告的程序似乎不应你该有问题。对于不同的看法,我想看看你得到这些数据时使用的SQL查询。正如其他人所说,如果你的表单有成千上万行那你的报告应该不会耗费10到15分钟才完成。实际上,如果你没做错事的话可能会在一分钟内就能处理成千上万条记录,完成同样的一篇报告。
1.如果你正在做成千上万条查询,看看你能不能先只做几条查询。我之前曾使用一个PHP函数把70000条查询降为十几条查询,这样它的运行时间就从几分钟降到了几分之一秒。
2.在你的查询上运行EXPLAIN,看看你是不是缺少什么索引。我曾经做过一个查询,通过增加了一个索引后效率提高了4个数量级,这没有任何夸张的成分。如果你正在使用MySQL,你可以学学这个,这种“黑魔法”技能会让你和你的小伙伴惊呆的。
3.如果你正在做SQL查询,然后获得结果,并把很多数字弄到一起,看看你能不能使用像SUM()和AVG()之类的函数调用GROUP BY语句。跟普遍的情况下,让数据库处理尽量多的计算。我能给你的一点很重要的提示是:(至少在MySQL里是这样)布尔表达式的值为0或1,如果你很有创意的话,你可以使用SUM()和它的小伙伴们做些很让人惊讶的事情。
4.好了,最后来一个PHP端的提示:看看你是不是把这些同样很耗费时间的数字计算了很多遍。例如,假设1000袋土豆的成本是昂贵的计算,但你并不需要把这个成本计算500次,然后才把1000袋土豆的成本存储在一个数组或其他类似的地方,所以你不必把同样的东西翻来覆去的计算。这个技术叫做记忆术,在像你这样的报告中使用往往会带来奇迹般的效果。
原文: http://www.reddit.com/r/PHP/comments/2pyuy0/heavy_data_processing_in_php/
译文: http://www.php100.com/html/dujia/2014/1226/8195.html
(翻译:PHP100_Alex)
在PHP中怎么解决大量数据处理的问题相关推荐
- iphone XCode调试技巧之EXC_BAD_ACCESS中BUG解决
http://mobile.51cto.com/iphone-279455.htm XCode调试技巧之EXC_BAD_ACCESS中BUG解决是本文要介绍的内容,在iphone开发的时候EXC_BA ...
- tableView的plain样式的headerView的上拉过程中悬停解决方法
tableView的plain样式的headerView的上拉过程中悬停解决方法 参考文章: (1)tableView的plain样式的headerView的上拉过程中悬停解决方法 (2)https: ...
- CentOS使用sudo提示用户不在sudoers文件中的解决方法
CentOS使用sudo提示用户不在sudoers文件中的解决方法 参考文章: (1)CentOS使用sudo提示用户不在sudoers文件中的解决方法 (2)https://www.cnblogs. ...
- java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别
java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别 参考文章: (1)java ...
- jsp项目中连接数据库解决java.lang.ClassNotFoundException: com.mysql.jdbc.Driver的问题
jsp项目中连接数据库解决java.lang.ClassNotFoundException: com.mysql.jdbc.Driver的问题 参考文章: (1)jsp项目中连接数据库解决java.l ...
- Layui框架 中table解决日期格式问题
Layui框架 中table解决日期格式问题 参考文章: (1)Layui框架 中table解决日期格式问题 (2)https://www.cnblogs.com/slacker-z/p/996347 ...
- java做直播需要哪些技术_直播APP开发中需要解决哪些技术难点?千联信息
泛娱乐发展的火热,网红经济不断发酵的今天,不少企业靠着开发直播APP狠狠的赚了一波,导致很多人眼红,也想投入其中. 那么开发一款直播APP开发中需要解决哪些技术难点?小编在这里就来为大家解答: 视频直 ...
- 【全栈项目上线(vue+node+mongodb)】06.nodejs服务上线(生产环境前后分离的vue项目中怎么解决跨域问题)...
以下操作使用下面项目为案例 https://github.com/itguide/vnshop ## 启动node服务 克隆好项目后记得把依赖包安装好 npm i 使用 node 启动node服务 c ...
- VM之Linux:Linux的Ubuntu中,解决安装后屏幕太小的问题
VM之Linux:Linux的Ubuntu中,解决安装后屏幕太小的问题 导读 最讨厌网上回答的啰嗦和不清晰!本人最讨厌啰嗦,直接上来,图文表达,简单明了,快速解决问题!最讨厌网上答案一大片的废话和没有 ...
最新文章
- 计算机组成原理:储存系统和结构
- 【Python基础】Python中的高效迭代库itertools,排列组合随便求
- 软件整合--硬件整合--平台整合
- mongodb的条件查询笔记
- 20145227《Java程序设计》第10周学习总结
- PCL中分割方法的介绍(2)
- 序列标注模型结果评估模块seqeval学习使用
- java 微信 百度地图,android 百度地图gps转百度地图坐标java.lang.UnsatisfiedLinkError: CoordinateEncryptEx...
- hadoop面试题汇总
- ql的python学习之路-day5
- 排列组合思维导图_Xmind 进阶教程|高级感满满的思维导图都在使用的6个技巧。...
- Axmath:一款Word公式编辑神器
- PPT自动翻页的实现和取消
- iOS开发 设置状态栏字体颜色
- PyQt5 自定义颜色、形状粗细、虚线等组合下拉框
- 复旦大学计算机科学与技术,复旦大学计算机科学技术学院
- ReferenceQueue、Reference详解
- 【金融风险管理】python进行股票标准差、方差、均值、离散系数、标准化、对数收益率
- 机器学习——VC维问题
- maya RedShift 渲染报警告:细分问题
热门文章
- error: failed to push some refs to ‘https://gitee.com/wangdxstudy/mygirl.git‘解决办法
- 图片滑块验证码的解决
- Redis-SETNX命令简介
- useReducer
- 关于wangEditor 5的使用以及使用的一些错误
- 根据一年的周数得到日期
- 数据增强,扩充了数据集,增加了模型的泛化能力
- 熵、图像熵的意义及计算方法
- 一路两输入正与门SN74AHC1G08学习
- 宝塔面板+NextCloud文档云 搭建流程