首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

不是 PHP 不行了,而是 MySQL 数据库扛不住啊

编程知识
2024年08月19日 08:09

大家好,我是码农先森。

大多数的业务场景下 PHP 还没有达到性能瓶颈,然而 MySQL 数据库就先行驾崩了。但我们总是不分青红皂白,一股脑的把原因归结于是 PHP 语言不行了,每当遇到这种情形我就会感叹到 PHP 的命真苦啊。PHP 作为一门优秀的开源编程语言,在编程语言界一直享有「PHP是世界上最好的语言」的美誉,它让 PHP 靓仔们养了家糊了口过上了小康生活,但一遇到点性能问题就被疯狂的吐槽,它真是干了件吃力不讨好的活。当然我相信这种吐槽是少数的,绝大数的人都还是会秉承理性公正的眼光来看待 PHP 语言,在碰到问题时会仔细分析缘由,找到问题的症结并解决它,让 PHP 绽放属于它自己的光芒。

还记得在之前的工作经历中,使用 ThinkPHP 框架开发公司内部的 ERP 后台系统,很多的情况都是数据库拖慢了用户的访问速度,比如开发的一些财务数据报表,这些接口往往都会聚合了好几张数据表的数据,左连接一张表右连接一张表,动不动还搞个全连接,这能不慢嘛。不仅如此,还有在一个接口里 SQL 语句的查询都嵌套了好几层,各种子查询漫天飞,这样的代码现状简直惨不忍睹,数据量小的时候尚且能用不会影响用户的体验,当数据量上来时接口就经常搞超时,数据库的慢日志都打满了。在我印象中有个最深刻的例子,就是有一个速卖通的产品编辑功能,一个页面需要能同时编辑几十个产品,这就是所谓的批量编辑,而且每个产品的详情数据特别多,还包括很多的图片,每次加载这些数据和图片就半天了,这个功能使用人数最多、使用次数最频繁,同时也是被吐槽的最多的。如果有开发过类似功能的朋友,可能会有比较深刻的感触。

还有一种用脚本跑异步任务的场景,由于有些报表用接口是真的搞不出来了,那就用脚本的方式定时计算。但当时由于我们的数据量比较大,都是上百万千万级别的,单进程跑数据太慢,为了提升效率就直接干上了 PHP 多进程。那时我们还满心欢喜的 Fork 着进程,一启动脚本就是并发几十个进程,结果现实情况就是给我们当头一棒,阿里云 MySQL 数据库监控系接连报警,登上云控制台一看傻眼了,CPU 直接干到 100% 满载运行,搞的 ERP 后台系统都无法正常访问了。还被技术老大当头呵斥你们搞什么飞机,吓得我们赶紧通过 Kill 命令把脚本进程强制杀掉。说到这里可能有些朋友会有些疑惑了,为什么异步脚本会影响到 ERP 后台系统呢?原因是大多数的 PHP 靓仔们都有直接在线上环境修改代码的习惯,当然这种事情在我们这里也不例外了哈哈,甚至有时都变成了常态,感觉就是怎么方便怎么来。所有的业务都是共享一个数据库,这不就影响到 ERP 后台系统了嘛。

通过谈我之前的经历,可以看出并不是 PHP 不行,而是因为没有正确的使用好 PHP 而把数据库搞垮了,单纯的责怪 PHP 语言本身没有任何意义。很多时候性能的瓶颈,往往都是先在数据库层面出现,比如某些查询没有命中索引、子查询嵌套层数过多、长事务造成死锁、并发大量的操作造成负载过高等等。总而言之,在我的经历中把 PHP 语言干出性能瓶颈的场景还是占少数,夸张点可以说几乎没有哈哈,可能是我资历尚浅,不过话又说回来,大家的经历和我的应该也差不多。最后希望大家可以在数据库层面多花一些功夫,而不是纠结于这门语言到底行不行了,如果数据库都不行了,那么换什么语言都是白瞎,愿这一点大家能有相应的共识。本次的分享内容就到这里结束了,希望对大家能有所启发。

感谢大家阅读,个人观点仅供参考,欢迎在评论区发表不同观点。


欢迎关注、分享、点赞、收藏、在看,我是微信公众号「码农先森」作者。

From:https://www.cnblogs.com/yxhblogs/p/18355860
本文地址: http://www.shuzixingkong.net/article/1224
0评论
提交 加载更多评论
其他文章 小白系列:数据库基础知识解析
尽管我们在本文中只触及了数据库的基础部分,实际应用中可能会遇到更复杂的业务逻辑和需求。这些复杂的场景通常需要深入了解更多高级特性和技巧。虽然这些内容超出了本文的范围,但掌握基本操作是迈向高级技能的第一步。希望通过这篇文章,你能够对数据库有一个清晰的认识,并在实际工作中熟练运用这些基本操作。未来,随着
小白系列:数据库基础知识解析 小白系列:数据库基础知识解析 小白系列:数据库基础知识解析
C#开发的应用升级管理器LUAgent客户端 - 开源研究系列文章 - 个人小作品
以前就想开发应用的升级更新的程序,也想过把升级工具单独弄成类库模块化。后来就想到要开发服务端和客户端独立出来,只要配置好就能够对任何应用进行升级更新操作。 笔者将这个命名为:LUAgent,即Lzhdim Update Agent,升级更新代理,上次发布了服务端工具:https://www.cnbl
C#开发的应用升级管理器LUAgent客户端 - 开源研究系列文章 - 个人小作品 C#开发的应用升级管理器LUAgent客户端 - 开源研究系列文章 - 个人小作品 C#开发的应用升级管理器LUAgent客户端 - 开源研究系列文章 - 个人小作品
如何诱导AI犯罪-提示词注入
我们用到的大模型基本把政治类信息、犯罪相关信息都已屏蔽。但是,黑客依旧可以使用提示词诱导和提示词注入的方式对大模型进行攻击。
如何诱导AI犯罪-提示词注入 如何诱导AI犯罪-提示词注入 如何诱导AI犯罪-提示词注入
可以调用Null的实例方法吗?
前几天有个网友问我一个问题:调用实例方法的时候为什么目标对象不能为Null。看似一个简单的问题,还真不是一句话就能说清楚的。而且这个结论也不对,当我们调用定义在某个类型的实例方法时,目标对象其实可以为Null。一、从ECMA-335 Spec说起 二、Call V.S Callvirt 三、直接调用
可以调用Null的实例方法吗? 可以调用Null的实例方法吗?
RealNet:从数据生成到模型训练的最新工业异常检测 | CVPR 2024
论文提出了一种创新的自监督异常检测框架RealNet,集成了三个核心组件:可控制强度的扩散异常合成(SDAS)、异常感知特征选择(AFS)和重构残差选择(RRS)。这些组件通过协同作用,使RealNet能够有效地利用大规模预训练模型来进行异常检测,同时保持计算开销在合理的低范围内。RealNet为未
RealNet:从数据生成到模型训练的最新工业异常检测 | CVPR 2024 RealNet:从数据生成到模型训练的最新工业异常检测 | CVPR 2024 RealNet:从数据生成到模型训练的最新工业异常检测 | CVPR 2024
解锁强强组合: 使用 Kafka + ClickHouse 快速搭建流数据实时处理平台(DoubleCloud 博客)
我们想要解决的问题 让我们深入一个现实场景: 设想你负责汇总多个销售点系统产生的大量数据。这些数据需要被实时处理并在高级分析仪表板上展示,以提供全面的洞察。 在数据处理领域,速度至关重要。ClickHouse 作为速度之王, 它从不减速且异常迅速。其在并发处理方面的高效性以及成本效益使其成为构建快速
解锁强强组合: 使用 Kafka + ClickHouse 快速搭建流数据实时处理平台(DoubleCloud 博客) 解锁强强组合: 使用 Kafka + ClickHouse 快速搭建流数据实时处理平台(DoubleCloud 博客) 解锁强强组合: 使用 Kafka + ClickHouse 快速搭建流数据实时处理平台(DoubleCloud 博客)
初探 Rust 语言与环境搭建
1. Rust 简介 Rust 的历史 起源:Rust 语言最初由 Mozilla 研究员 Graydon Hoare 于 2006 年开始设计,并于 2009 年首次公开。 开发:Rust 是 Mozilla 实验室的一个项目,目的是创建一种能够保证内存安全同时又不牺牲性能的系统编程语言。 发布:
初探 Rust 语言与环境搭建 初探 Rust 语言与环境搭建 初探 Rust 语言与环境搭建
.NET+WPF 桌面快速启动工具 GeekDesk
前言 大家在平时工作中,是不是经常为了找某个文件或者应用而在电脑桌面上来回翻找?桌面图标乱七八糟,每次找东西都像在大海捞针一样。 今天给大家介绍一个开源项目 GeekDesk,它能够让桌面焕然一新,工作效率翻倍!GeekDesk 是一个小巧、美观的桌面快速启动工具,它集成了强大的搜索功能,让我们能够
.NET+WPF 桌面快速启动工具 GeekDesk .NET+WPF 桌面快速启动工具 GeekDesk .NET+WPF 桌面快速启动工具 GeekDesk