mysql的mysqli异步与php的携程
<?php $begin = time(); //同步请求
function multi_sync(){
$host = '192.168.2.87';
$user = 'census';
$password = 'census';
$database = 'census';
$mysqli = new mysqli($host, $user, $password, $database); $query = "SELECT sleep(1);" ;
$query .= "SELECT sleep(1);" ; if ( $mysqli -> multi_query ( $query )) {
do {
echo "multi_sync_query \n";
if ( $result = $mysqli -> store_result ()) {
$ret = $result->fetch_array(MYSQLI_ASSOC);
var_dump($ret);
}
// if ( $mysqli -> more_results ()) {
// printf ( "-----------------\n" );
// }
} while ( $mysqli -> more_results () && $mysqli -> next_result ());
}
}
multi_sync(); //同步请求
/*
function sync(){
$host = '192.168.2.87';
$user = 'census';
$password = 'census';
$database = 'census';
$db = new mysqli($host, $user, $password, $database);
echo "sync_query 1\n";
$statement1 = $db->query('select sleep(1)');
$ret1 = $statement1->fetch_array(MYSQLI_ASSOC);
echo "sync_query 2\n";
$statement2 = $db->query('select sleep(1)');
$ret2 = $statement2->fetch_array(MYSQLI_ASSOC);
var_dump($ret1);
var_dump($ret2);
}
sync();
*/ //携程异步---php携程,mysqlnd异步
/*
function f1(){
$db = new db();
$obj = $db->async_query('select sleep(1)');
echo "f1 async_query \n";
yield $obj;
$row = $db->fetch();
echo "f1 fetch\n";
yield $row;
} function f2(){
$db = new db();
$obj = $db->async_query('select sleep(1)');
echo "f2 async_query\n";
yield $obj;
$row = $db->fetch();
echo "f2 fetch\n";
yield $row;
} $gen1 = f1();
$gen2 = f2(); $gen1->current();
$gen2->current(); $gen1->next();
$gen2->next(); $ret1 = $gen1->current();
$ret2 = $gen2->current(); var_dump($ret1);
var_dump($ret2);
*/
echo time() - $begin; class db{
static $links;
private $obj; function getConn(){
$host = '192.168.2.87';
$user = 'census';
$password = 'census';
$database = 'census';
$this->obj = new mysqli($host, $user, $password, $database);
self::$links[spl_object_hash($this->obj)] = $this->obj;
return self::$links[spl_object_hash($this->obj)];
} function async_query($sql){
$link = $this->getConn();
$link->query($sql, MYSQLI_ASYNC);
return $link;
} function fetch(){
//for($i = 1; $i <= 5; $i++){
$read = $errors = $reject = self::$links;
$re = mysqli_poll($read, $errors, $reject, 1);
foreach($read as $obj){
if($this->obj === $obj){
$sql_result = $obj->reap_async_query();
$sql_result_array = $sql_result->fetch_array(MYSQLI_ASSOC);//只有一行
$sql_result->free();
return $sql_result_array;
}
}
//}
}
}
异步之后只要1秒,同步以及同步多请求,都是2秒
mysql的mysqli异步与php的携程的更多相关文章
- 开源实践 | 携程在OceanBase的探索与实践
写在前面:选型考虑 携程于1999年创立,2016-2018年全面推进应用 MySQL 数据库,前期线上业务.前端技术等以 SQL Server 为主,后期数据库逐步从 SQL Server 转到开源 ...
- [转]向facebook学习,通过协程实现mysql查询的异步化
FROM : 通过协程实现mysql查询的异步化 前言 最近学习了赵海平的演讲,了解到facebook的mysql查询可以进行异步化,从而提高性能.由于facebook实现的比较早,他们不得不对php ...
- Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比
Swoole 协程 MySql 客户端与 异步回调 MySql 客户端的对比 为什么要对比这两种不同模式的客户端? 异步 MySQL 回调客户端是虽然在 Swoole 1.8.6 版本就已经发布了, ...
- PHP mysql与mysqli事务详解
官方对PHP连接到MySQL数据库服务器的三种主要的API简介如下: http://php.net/manual/zh/mysqli.overview.php PHP mysql与mysqli事务详解 ...
- mysql、mysqli、PDO一句话概括比较
mysql.mysqli.PDO一句话概括比较 1 mysql扩展 (注:原始的,较差) 2 mysqli扩展(面向过程式) (注:比上面多了更多功能) 3 mysqli扩展(面向对象式) (注:比上 ...
- centos 单独安装PHP的mysql和mysqli扩展
2013年11月22日 11:25:41 Linux centos 6.3 最小化安装 mysql 5.5 php 5.4 安装PHP时只是 ./configure --prefix=/**** 并没 ...
- php Mysql 和Mysqli数据库函数整合
PHP Mysql和Mysqli数据库函数整合 服务器如果支持mysqli函数将优先mysqli函数进行数据库操作 否则将调用mysql函数进行数据库操作 用法SQL::connect(host,us ...
- PHP数据库连接mysql与mysqli的区别与用法
一.mysql与mysqli的概念相关: 1.mysql与mysqli都是php方面的函数集,与mysql数据库关联不大. 2.在php5版本之前,一般是用php的mysql函数去驱动mysql数据库 ...
- PHP中MySQL、MySQLi和PDO的用法和区别
PHP的MySQL扩展(优缺点) 设计开发允许PHP应用与MySQL数据库交互的早期扩展.mysql扩展提供了一个面向过程 的接口: 并且是针对MySQL4.1.3或更早版本设计的.因此,这个扩展虽然 ...
随机推荐
- 网络通信协议简介(TCP与UDP)
通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规则被称为网络通 ...
- java实现下载excel功能
1,获取服务器现有excel文件 public List<Object[]> getObject(String filePath){ log.info("**文件路径为:**&q ...
- 第84讲:Scala中List和ListBuffer设计实现思考
今天来学习了scala中的list和ListBuffer scala list 内部很多操作是listbuffer做的,因为改变元素,listbuffer非常高效,tl是var类型的 ,但是他属于s ...
- 无法链接glew的解决办法-编译开源库出现: error LNK2001: 无法解析的外部符号
无法链接glew的解决办法-编译开源库出现: error LNK2001: 无法解析的外部符号 参考官方配置指南:http://glew.sourceforge.net/install.html 1. ...
- appcompat_v7报错
appcompat_v7如果报找不到资源,value-xx出错.一般就是因为appcompat_v7的版本问题,直接修改api版本至appcompat_v7对应value的最高版本. 我的v7包最高对 ...
- G - Christmas Play
Description My kid's kindergarten class is putting up a Christmas play. (I hope he gets the lead ro ...
- EBS获取并发程序Trace File
http://blog.itpub.net/16832682/viewspace-1249765/ 最近因为项目上出现了PL/SQL性能的问题,因此需要对已经开发好的并发程序进行调优的工作.调优有个很 ...
- delphi 小数点四舍五入问题
function ARoundN(v: Double; n: Integer): Double; var I:Integer; begin result:=v; do begin result:=re ...
- .NET Core 微服务之grpc 初体验(干货)
Grpc介绍 GitHub: https://github.com/grpc/grpc gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (二)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...