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或更早版本设计的.因此,这个扩展虽然 ...
随机推荐
- Qt_HelloWrold
新建工程 -> 选择Qt Gui 应用 然后点击选择 在弹出的对话框中填写名称,创建路径等信息: 点击下一步,选择该工程的编译器. 点击下一步,可以选择生成的主窗口文件.不过这里我们仅仅用简单的 ...
- Leetcode--680. Valid Palindrome II(easy)
Given a non-empty string s, you may delete at most one character. Judge whether you can make it a pa ...
- 水池问题的lua语言算法(面试题分析:我的Twitter技术面试失败了)
twitter面试题内容 “看下面这个图片” “在这个图片里我们有不同高度的墙.这个图片由一个整数数组所代表,数组中每个数是墙的高度.上边的图可以表示为数组[2,5,1,2,3,4,7,7,6]” “ ...
- expect 安装使用
expect 命令相当于crt远程连接,可用于脚本化实现多服务器巡检功能. 一.expect 命令安装: 1.rpm 文件下载:百度云链接:http://pan.baidu.com/s/1sl1wSU ...
- Linux分区之parted命令
之前使用最多的分区命令无疑是fdisk了,大多数情况下fdisk可以满足日常工作上的需求,极个别情况就需要使用parted命令了,至于及个别情况就要从MBR和GPT说起. MBR主引导扇区 主 ...
- css伪元素:before和:after用法详解
css的伪元素,之所以被称为伪元素,是因为他们不是真正的页面元素,html没有对应的元素,但是其所有用法和表现行为与真正的页面元素一样,可以对其使用诸如页面元素一样的css样式,表面上看上去貌似是页面 ...
- ViewPager无限滑动
2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...
- JavaScript基础(3)-JS中的面向对象、定时器、BOM、位置信息
一.创建对象的几种常用方式. 1.使用Object或对象字面量创建对象: a.使用Object()内置的构造函数来创建对象,例如: var student = new Object(); // 创建一 ...
- 面向对象多继承(c3算法)、网络基础和编写网络相关的程序
一.面向对象多继承(c3算法) a.有多个父类先找左,再找右,如下示例: class A(object): pass class B(object): def f1(self): print('B') ...
- 大数据与Hadoop
figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...