php异步查询数据库,php中mysql数据库异步查询实现

问题

通常一个web应用的性能瓶颈在数据库。因为,通常情况下php中mysql查询是串行的。也就是说,如果指定两条sql语句时,第二条sql语句会等到第一条sql语句执行完毕再去执行。这个时候,如果执行2条sql语句,每条执行时间为50ms,全部执行完毕可能需要100ms。既然,主要原因是sql的串行执行导致。那我们是不是可以改变执行方式来提高性能呢?答案是,可以的。我们可以通过异步执行的方式来提高性能。

异步

如果通过异步的方式去执行,可能性能会有很大提升。如果是采用异步的方式,两条sql语句会并发执行,可能就需要60ms就可以执行完毕。

实现

mysqli + mysqlnd。php官方实现的mysqlnd中提供了异步查询的方法。分别是:

mysqlnd_async_query 发送查询请求

mysqlnd_reap_async_query 获取查询结果

这样就可以不必每次发送完查询请求后,一直阻塞等待查询结果了。

实现代码如下: int,

* 2 => int,

* 3 => int

* )

*/

$result = array(1=>0, 2=>0, 3=>0);

//异步方式[并发请求]

$time_start = microtime(true);

$links = array();

foreach ($result as $key=>$value) {

$obj = new mysqli($host, $user, $password, $database);

$links[spl_object_hash($obj)] = array('value'=>$key, 'link'=>$obj);

}

$done = 0;

$total = count($links);

foreach ($links as $value) {

$value['link']->query("SELECT COUNT(*) AS `total` FROM `demo` WHERE `value`={$value['value']}", MYSQLI_ASYNC);

}

do {

$tmp = array();

foreach ($links as $value) {

$tmp[] = $value['link'];

}

$read = $errors = $reject = $tmp;

$re = mysqli_poll($read, $errors, $reject, 1);

if (false === $re) {

die('mysqli_poll failed');

} elseif ($re < 1) {

continue;

}

foreach ($read as $link) {

$sql_result = $link->reap_async_query();

if (is_object($sql_result)) {

$sql_result_array = $sql_result->fetch_array(MYSQLI_ASSOC);//只有一行

$sql_result->free();

$hash = spl_object_hash($link);

$key_in_result = $links[$hash]['value'];

$result[$key_in_result] = $sql_result_array['total'];

} else {

echo $link->error, "\n";

}

$done++;

}

foreach ($errors as $link) {

echo $link->error, "1\n";

$done++;

}

foreach ($reject as $link) {

printf("server is busy, client was rejected.\n", $link->connect_error, $link->error);

//这个地方别再$done++了。

}

} while ($done

var_dump($result);

echo "ASYNC_QUERY_TIME:", microtime(true)-$time_start, "\n";

$link = end($links);

$link = $link['link'];

echo "\n";

结语

mysql数据库对于每个查询请求都是单独启动一个线程进行处理。如果mysql服务器启动线程过多,必然会造成线程切换引起系统负载过高。如果在mysql数据库负载不高的情况下,使用异步查询还是不错的选择。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java btrace_BTrace:Java开发人员工具箱中的隐藏宝石

java btrace这篇文章是关于BTrace的 &#xff0c;我正在考虑将其作为Java开发人员的隐藏宝藏。 BTrace是用于Java平台的安全&#xff0c;动态跟踪工具。 BTrace可用于动态跟踪正在运行的Java程序&#xff08;类似于DTrace&#xff0c;适用于OpenSolaris应用程序和OS&#xff09…

共享文件夹不能访问的问题解决

打开控制面板--管理工具--服务--webclinet&#xff0c;设为自动&#xff0c;启动。重启电脑&#xff0c;搞定&#xff01;转载于:https://www.cnblogs.com/atlj/p/8481257.html

xampp浏览php出现乱码,dvwa+xampp搭建显示乱码的问题及解决方案

如图&#xff0c;dvwa显示乱码&#xff0c;解决办法有两个&#xff1a;1、方法一是&#xff0c;临时解决办法&#xff0c;也就是每次都得手动修改&#xff1a;利用浏览器的编码修改2、方法二是&#xff1a;永久方案&#xff0c;那就是修改dvwa的配置文件&#xff0c;修改默认编…

HotSpot的-XshowSettings标志的简单性和价值

一个方便的HotSpot JVM标志 &#xff08; 选项为Java启动 java &#xff09;是-XshowSettings选项。 Oracle Java启动器描述页面中对此选项进行了如下描述 &#xff1a; -XshowSettings &#xff1a; category显示设置并继续。 该选项的可能类别参数包括&#xff1a; all显示所…

Python验证码简单实现(数字和大写字母组成的4位验证码)

#数字和英文大写字母的4位随机数 def checkcode(): #def 定义方法 checkcode() 方法名()import random # 导入包checkcode ""string range(0,4)for i in string:current random.randrange(0,3) #randrange随机数 参数1<随机数<参数2if current ! i:temp …

php haystack,haystack(示例代码)

1、haystack简介Haystack是django的开源全文搜索框架(全文检索不同于特定字段的模糊查询&#xff0c;使用全文检索的效率更高 )&#xff0c;该框架支持Solr,Elasticsearch,Whoosh, Xapian&#xff0c;搜索引擎它是一个可插拔的后端(很像Django的数据库层)&#xff0c;所以几乎你…

猫眼电影面试经历

面试是昨天上午进行的&#xff0c;因为昨天家里断网了&#xff0c;所以未能及时记录。 昨天的面试进行到了第三面&#xff0c;由于第三面的面试官当天未上班&#xff0c;所以成了回家等通知了。 感觉总体面试过程回答了百分之七十的样子吧&#xff01;一面、二面面试官都不错&a…

fopen php 乱码,如何解决php fgets读取文件乱码的问题

如何解决php fgets读取文件乱码的问题,文件,乱码,简体中文,记事本,页面如何解决php fgets读取文件乱码的问题易采站长站&#xff0c;站长之家为您整理了如何解决php fgets读取文件乱码的问题的相关内容。php fgets乱码的解决办法&#xff1a;首先依次点击“菜单修改->页面属…

一致性哈希算法原理分析及实现

一致性哈希算法常用于负载均衡中要求资源被均匀的分布到所有节点上&#xff0c;并且对资源的请求能快速路由到对应的节点上。具体的举两个场景的例子&#xff1a; 1、MemCache集群&#xff0c;要求存储各种数据均匀的存到集群中的各个节点上&#xff0c;访问这些数据时能快速的…

jsf集成spring_JSF – PrimeFaces和Hibernate集成项目

jsf集成spring本文介绍了如何使用JSF&#xff0c;PrimeFaces和Hibernate开发项目。 下面是一个示例应用程序&#xff1a; 二手技术&#xff1a; JDK 1.6.0_21 Maven的3.0.2 JSF 2.0.3 PrimeFaces 2.2.1 Hibernate3.6.7 MySQL Java连接器5.1.17 MySQL 5.5.8 Apache Tomcat 7.…

帝国 loginjs.php,帝国cms 6.6 后台拿shell

时间:2013-02-27来源:源码库 作者:源码库 文章热度:℃漏洞作者&#xff1a; 付弘雪提交时间&#xff1a; 2013-01-21公开时间&#xff1a; 2013-01-21漏洞类型&#xff1a; 文件上传导致任意代码执行简要描述&#xff1a;帝国cms 6.6版本后台拿shell 比网上流行的方法简单很多由…

合并两个排序的链表递归和非递归C++实现

题目描述&#xff1a; 输入两个单调递增的链表&#xff0c;输出两个链表合成后的链表&#xff0c;要求合成后的链表满足单调不减规则。 1、分析 已知输入的两个链表递增有序&#xff0c;要使输出的链表依然递增有序&#xff0c;可以依次从输入的两个链表中挑选最小的元素插入到…

带有JSF,Servlet和CDI的DynamicReports和JasperReports

在此示例中&#xff0c;我将展示如何将DynamicReport和JasperReports与Servlet和CDI集成。 工具&#xff1a; TIBCO Jaspersoft Studio-6.0.4。最终版 Eclipse Luna服务版本2&#xff08;4.4.2&#xff09;。 WildFly 8.x应用程序服务器。 这是Eclipse上项目层次结构的屏幕…

《Android进阶之光》--View体系与自定义View

No1&#xff1a; View的滑动 1&#xff09;layout()方法的 public class CustomView extends View{private int lastX;private int lastY;public CustomView(Context context,AttributeSet attrs,int defStyleAttr){super(context,attrs,defStyleAttr);}public CustomView(Cont…

js 数组 ajax php,js里面的对象ajax post到php端直接变成数组了?

本帖最后由 zhoumengkang 于 2013-09-12 10:03:14 编辑 事先引入了jqueryvar str "{a:b,aa:bb}";var str2 eval((str));var type typeof(str2);console.log(str);console.log(type);//objectconsole.log(str2);$.post(./bb.php,{data:str2});bb.php的代码$data $_…

【标签组件与图标 3.3】

1.图片图标。 SWing 利用javax.swing.ImageIcon 类根据现有图片创建图标&#xff0c;ImageIcon类实现了Icon接口&#xff0c;同时Java支持多种图片格式。 public ImageIcon&#xff08;&#xff09;:该构造方法创建了一个通用的ImageIcon对象&#xff0c;当正真需要设置图片时在…

swing 聊天气泡背景_Java Swing中的聊天气泡

swing 聊天气泡背景本文将向您解释“如何在Java swing应用程序中绘制聊天气泡&#xff1f;” 聊天气泡与呼出或提示气泡相同。 今天&#xff0c;大多数聊天应用程序都以这种格式显示转换&#xff0c;因此本文将帮助您在用Java swing创建的桌面应用程序中执行相同的操作。 以下课…

试述大数据对思维方式的重要影响

先讲大数据时代有哪些能做&#xff0c;哪些不能做&#xff1f;有一个很有名的科幻作家叫做阿西莫夫&#xff0c;写过《银河帝国》&#xff0c;也就是“基地系列”。据说本拉登就是看了他这本小说&#xff0c;把他自己的组织起名叫“基地组织”。阿西莫夫在书中提到&#xff0c;…

使用Spring AOP重试方法执行

我的一位博客关注者发送了一封电子邮件&#xff0c;要求我显示“ Spring AOP的RealWorld用法”示例。 他提到&#xff0c;在大多数示例中&#xff0c;都演示了Spring AOP在日志记录方法进入/退出或事务管理或安全性检查中的用法。 他想知道Spring AOP在“针对实际问题的真实项…

matlab绘制星下点轨迹,MATLAB绘制GPS星下点轨迹图

MATLAB绘制GPS星下点轨迹图轨迹计算部分参考链接&#xff1a;https://wenku.baidu.com/view/45bd098d4a7302768e9939cf.html本文对上述matlab代码进行了整理与修改&#xff1a;增加了底图并进行了相关的图形美化。将轨道六参数设置为GPS相关参数。从原有的1颗卫星轨迹绘制增加至…