位置: 编程技术 - 正文

PHP并发查询MySQL的实例代码(php并发编程)

编辑:rootadmin

推荐整理分享PHP并发查询MySQL的实例代码(php并发编程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php调用mysql查询函数,php如何处理并发请求,php 并发,mysql 并发查询,mysql 并发查询,mysql 并发查询,mysql 并发查询,php 并发,内容如对您有帮助,希望把文章链接给更多的朋友!

最近在研究PHP,很喜欢,碰到PHP并发查询MySQL的问题,研究了一下,顺便留个笔记:

同步查询

这是我们最常的调用模式,客户端调用Query[函数],发起查询命令,等待结果返回,读取结果;再发送第二条查询命令,等待结果返回,读取结果。总耗时,会是两次查询的时间之和。简化一下过程,例如下图:

例图,由1.1到1.3为一个Query[函数]的调用,两次查询,就要串行经历1.1、1.2、1.3、2.1、2.2、2.3,尤其在1.2和2.2会阻塞等待,进程没法做其他事情。

同步调用的好处是,符合我们的直观思维,调用和处理都简单。缺点是进程阻塞在等待结果返回,增加额外的运行时间。如果,有多条查询请求,或者进程还有其他的事情处理,那么能否把等待的时间也合理利用起来,提高进程的处理能力呢,显然是可以的。

拆分

现在,我们把Query[函数]打碎,客户端在1.1后,马上返回,客户端跳过1.2,在1.3有数据达到后再去读取数据。这样进程在原来的1.2阶段就解放了,可以做更多的事情,例如…再发起一条sql查询[2.1],是否看到了并发查询的雏形了。

并发查询

相对于同步查询的下一条查询的发起都在上一条完成后,并发查询,可以在上一条查询请求发起后,立刻发起下一条查询请求。简化一下过程,下图:

例图,在1.1.1成功发送完请求后,立马返回[1.1.2],最终查询结果的返回时在遥远的1.2 。但是在,1.1.1到1.2中间,还发起了另一个查询请求,这时间段内,就同时发起了两条查询请求,2.2先于1.2到达,那么两条查询的总耗时,只相当于第一条查询的时间。

并发查询的优点是,可以提高进程的使用率,避免阻塞等待服务器处理查询,缩短了多条查询的耗时。但缺点也很明显,发起N条并发查询,就需要建立N条数据库链接,对于有数据库连接池的应用来说,可以避免这种情况。

退化

理想情况下,我们希望并发N条查询,总耗时等于查询时间最长的一条查询。但也有可能并发查询会[退化]为[同步查询]。What?例图中,如果1.2在2.1.1前就返回了,那么并发查询就[退化]为[同步查询]了,但付出的代价却比同步查询要高。

多路复用

发起query1 发起query2 发起query3 ……… 等待query1、query2、query3 读取query2结果 读取query1结果 读取query3结果

那么,怎么等待知道什么时候查询结果返回了,又是哪个的查询结果返回呢?

对每个查询IO调用read?如果是遇上阻塞IO,这样就会阻塞在一个IO上,其他IO有结果返回了,也没法处理。那么,如果是非阻塞IO,那不用怕会阻塞在其中一个IO上了,确实是,但又会造成不断地轮询判断,浪费CPU资源。

PHP并发查询MySQL的实例代码(php并发编程)

对于这种情况可以使用多路复用轮询多个IO。

PHP实现并发查询MySQL

PHP的mysqli(mysqlnd驱动)提供多路复用轮询IO(mysqli_poll)和异步查询(MYSQLI_ASYNC、mysqli_reap_async_query),使用这两个特性实现并发查询,示例代码:

mysqli_poll源码:

并发查询操作结果

为了更直观地看效果,我找了一个1.3亿数据量并且没有优化过的表进行操作。

并发查询的结果:

同步查询的结果:

从结果来看,同步查询的总耗时是所有查询的时间的累加;而并发查询的总耗时在这里其实是查询时间最长的那一条(同步查询的第四条,耗时是几秒,符合并发查询的总耗时),而且并发查询的查询顺序和结果到达的顺序是不一样的。

多条耗时较短的查询对比

使用多条查询时间较短的sql进行对比一下

并发查询的测试1结果(数据库链接时间也统计进去):

同步查询的结果(数据库链接时间也统计进去):

并发查询的测试2结果(不统计数据库链接时间):

从结果上看,并发查询测试1并没有讨到好处。从同步查询上看,每条查询耗时大概3-4ms左右。但如果不把数据库链接时间统计进去(同步查询只有一次数据库链接),并发查询的优势又能体现出来了。

结语

这里探讨了一下PHP实现并发查询MySQL,从实验上结果直观地认识了并发查询的优缺点。建立数据库连接的时间在一条优化了的sql查询上,占得比重还是很大。#没有连接池,要你何用

标签: php并发编程

本文链接地址:https://www.jiuchutong.com/biancheng/291054.html 转载请保留说明!

上一篇:Yii2框架中使用PHPExcel导出Excel文件的示例(yii2组件的理解)

下一篇:Symfony2之session与cookie用法小结(session for)

  • 本期应补退税额和期末未缴税额
  • 划拨土地使用权出租
  • 初装费包括什么
  • 啥是完税凭证
  • 老板让我去分公司怎么拒绝
  • 小微企业免税销售额是按1%还是3%
  • 电子税务局没有发票开具
  • 企业所得税成本调减怎么填
  • 终止经营的会计处理
  • 其他应收款可以在贷方吗
  • 回单一定要在开户行打吗
  • 同一控制企业合并的特征包括
  • 支付违约金未取得正规发票能不能在税前列支
  • 转租的门面怎么办营业执照
  • 销售库存商品计入什么科目
  • 机构账户炒股是卖出后缴税么
  • 股权的溢价是什么意思
  • 滴滴发票报销是什么意思
  • 处置打包债权如何缴纳个人所得税?
  • 超市预付卡发票如何入账
  • 预提职工存量怎么做会计凭证
  • 企业会计准则规定我国企业的会计期间按年度划分
  • 固定资产清理需要结转吗
  • 子公司能转让吗
  • 税控盘服务费申报是在哪里填写
  • 认缴制度下实收资本确认条件
  • 建厂房的费用怎么记账
  • 公司注销时帐面清算
  • 暂估入账冲回
  • 研发费用加计扣除
  • macOS 10.13允许任何来源没有了怎么办?macOS 10.13允许任何来源没了开启步骤
  • 应付税款法账务处理
  • 电脑网络提示ip地址错误怎么办
  • 汇算清缴中企业基础信息表
  • 深度学习实战10-数学公式识别-将图片转换为Latex(img2Latex)
  • 电维护费多少合法
  • php array_search二维数组
  • 旅行社差额征税税率是多少
  • 出口抵减内销产品应纳税额怎么结转
  • 残疾人保障金计入哪个会计科目
  • 报个税收入需要减去扣款金额吗
  • 参展费可以抵扣吗
  • 织梦怎么安装
  • python线程和协程
  • 未发货先开票是否违法
  • 同一控制下收购溢价
  • 固定制造费用属于固定成本吗
  • 清算时应交税金如何处理
  • 管理费用包括哪些部门
  • 管理费用里面包括哪些明细科目
  • 无票利息支出可抵税吗
  • 进项税和销项税怎么理解
  • 购进溢余分录
  • 新开立银行账户怎么办理
  • 河道工程修建维护管理费何时开始停征?
  • 随同产品销售不单独计价包装物如何进行账务处理?
  • 税局代开的法律顾问费能否抵扣?
  • 公交车ic卡网上充值
  • 专票和普票的区别税点差多少
  • 进项发票超过期限不认证怎么办
  • 出租房屋的广告怎么写好
  • centos编译安装tcpdump工具
  • win8怎么让我的电脑显示在桌面上
  • window10预览在哪里找
  • debian更新软件
  • solaris8下载
  • linux使用范围
  • linux中使用最多的命令
  • 快速解决儿童鼻塞
  • 虚拟机ubuntu怎么用
  • neoCapture.exe - neoCapture是什么进程 有什么用
  • win10升级win1
  • jquery时间轴插件
  • node.js入门
  • unitystudio手机版
  • Unity之megaFierstext翻书插件控制代码分析
  • android 开源
  • jquery控制元素的显示与隐藏
  • 上缴财政总额是什么意思
  • 大连国家税务局官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设