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

大多数的业务场景下 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 语言干出性能瓶颈的场景还是占少数,夸张点可以说几乎没有哈哈,可能是我资历尚浅,不过话又说回来,大家的经历和我的应该也差不多。最后希望大家可以在数据库层面多花一些功夫,而不是纠结于这门语言到底行不行了,如果数据库都不行了,那么换什么语言都是白瞎,愿这一点大家能有相应的共识。本次的分享内容就到这里结束了,希望对大家能有所启发。

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

文章转载自:Yxh_blogs

原文链接:https://www.cnblogs.com/yxhblogs/p/18355860

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1560363.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

CAS存在的问题及在Java中的解决方式

CAS 介绍 CAS 可以保证对共享变量操作的原子性 CAS全称Compare And Swap,比较与交换,是乐观锁的主要实现方式。CAS在不使用锁的情况下实现多线程之间的变量同步。ReentrantLock内部的AQS和原子类内部都使用了CAS。 CAS算法涉及到三个操作数:需…

深度学习500问——Chapter17:模型压缩及移动端部署(4)

文章目录 17.9 常用的轻量级网络有哪些 17.9.1 SequeezeNet 17.9.2 MobileNet 17.9.3 MobileNet-v2 17.9.4 Xception 17.9 常用的轻量级网络有哪些 17.9.1 SequeezeNet SqueezeNet出自 F.N.landola, S.Han等人发表的论文《SqueezeNet:ALexNet-level accuracy with…

python文件,异常,模块,正则思维导图

python文件操作 python异常处理 python模块和包 python正则表达式

强大的PDF到Word转换工具

Solid Converter:强大的PDF到Word转换工具推荐 在日常工作和学习中,PDF是最常用的文件格式之一。然而,编辑PDF文档并不总是那么方便,尤其是当你需要将PDF文件转换为Word文档时。Solid Converter 是一款强大的工具,专为…

高效美发店运营:SpringBoot管理系统详解

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理美发门店管理系统的相关信息成为必然。开发…

鸿蒙开发(NEXT/API 12)【HTTP数据请求】网络篇

场景介绍 应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 接口名描述createHttp()创建一个http请求…

解决SqlServer自增主键使用MybatisPlus批量插入报错问题

报错 SqlServer 表中主键设置为自增,会报以下错误。 org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获…

LangChain: AI大语言模型的新篇章

本文介绍了LangChain框架,它能够将大型语言模型与其他计算或知识来源相结合,从而实现功能更加强大的应用。接着,对LangChain的关键概念进行了详细说明,并基于该框架进行了一些案例尝试,旨在帮助读者更轻松地理解LangCh…

springboot查询全部部门流程

前端发送请求后,会请求DeptController的方法list()。 package com.intelligent_learning_aid_system.controller;import com.intelligent_learning_aid_system.pojo.Dept; import com.intelligent_learning_aid_system.pojo.Result; import com.intelligent_learni…

SpringBoot美发门店管理系统:提升服务效率

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

360 度评估的优缺点

什么是 360 度评估? “360 度评估是一种人才培养工具,用于为接受者提供全方位的反馈,这通常包括来自他们直接下属的向上反馈、来自与他们密切合作的同事的反馈,以及来自他们经理的向下反馈。” 通常,360 度评估是匿名…

渗透测试之 域AD渗透手法【密码喷洒技术】手法详解 以及相关示例

说明: 域内密码喷洒工具: Kerbrute DomainPasswordSpray.ps1 原理抓个包分析一下: 域内用户枚举攻击防御: 流量检测: 说明: 域内密码喷洒(Password Spraying)一般和域内用户名枚举一起使用。 域内密码喷洒工具:…

SQL 干货 | 使用 EXISTS 编写 SELECT 查询

基于 SQL 中的 EXISTS 运算符为我们提供了一种基于其他数据是否存在(或不存在)来检索数据的简便方法。更具体地说,它是一个逻辑运算符,用于评估子查询的结果,并返回一个布尔值,该值指示是否返回了行。尽管 …

影刀RPA实战:制作Excel工资条

1.实战目标 使用Excel制作工资条是一种常见的做法,每个公司几乎都有这样的需求,我们先介绍下使用excel手动制作工资条的方法,看看不足之处,使用影刀RPA又会给我们带来怎样的便利,让我们更倾向于选择影刀来处理。 工资…

链表的回顾与总结(一)正序、逆序、有序、插入、修改、删除

逆序链表 #include<iostream> using namespace std; struct node {int data;node* next; };//最好不要全局定义指针&#xff0c;很麻烦 void show(node* head) {while (head){cout << head->data << ;head head->next;} } int main() {int i, j, k…

关于相机的一些零碎知识点

热成像&#xff0c;英文为Thermal Imaging&#xff0c;例如型号500T&#xff0c;其实指的就是热成像500分辨率。 相机的CMOS&#xff0c;英文为Complementary Metal Oxide Semiconductor&#xff0c;是数码相机的核心成像部件&#xff0c;是一种互补金属氧化物导体器件。 DPI…

C9800的Flex配置

C9800的配置和AireOS WLC的配置架构有了很大的调整&#xff0c;在配置一个WLAN的时候&#xff0c;可能相对麻烦一些&#xff0c;但是架构还是比较清晰。 这里记录一下针对Flex的配置&#xff0c;主要分为如下几个摘要&#xff08;以及对应的CLI配置&#xff09;&#xff1a; 1…

Carsim 2023.2 安装及使用

在我看来Carsim 2023.2最大的优点在于&#xff1a; 完全不用担心修改了内部参数&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; Carsim 2023.2新增了database builder功能&#xff0c;使用者自己可以新建database&#xff0c;而且可以挑选自己所…

留学期间如何提高职业竞争力?

留学期间是提高职业竞争力的关键时期&#xff0c;以下是一些具体的建议&#xff0c;帮助留学生在留学期间增强自身的职业竞争力&#xff1a; 一、深化专业知识与技能 1. 专注于课程学习&#xff1a;努力学习专业课程&#xff0c;掌握扎实的专业知识&#xff0c;这是提高职业竞…

解决Vscode无法解析导入“xxxxx”Pylance的问题

问题&#xff1a; 在使用Vscode本地或ssh远程调试Python代码时&#xff0c;有时需要导入本地的其他模块&#xff0c;比如通过环境变量$PYTHONPATH指定的包路径&#xff0c;或者通过pip、conda、mim安装的pkg。 虽然程序可以正常运行&#xff0c;但Vscode会出现无法解析导入“x…