jenner / async-mysql-php
PHP MySQL 异步客户端
v0.2
2015-12-03 12:53 UTC
Requires
- php: >=5.3.0
- ext-mysqli: *
- react/promise: v2.2.1
Requires (Dev)
- jenner/timer: v0.1
This package is auto-updated.
Last update: 2024-09-14 11:59:18 UTC
README
异步MySQL客户端
中文README
文档:async-mysql-php
导入
composer require jenner/async-mysql-php
或者
require /path/to/async-mysql-php/autoload.php
详细信息
- 基于
mysqli::poll
- 当MySQL连接或SQL错误时抛出
RuntimeException
- 返回值的顺序与调用
attach
方法的顺序相同 - 每个
attach
方法都会返回一个Promise
对象,您可以通过调用Process::then
方法来延迟数据处理。
接口
- attach(),提交异步MySQL任务
- isDone(),检查所有任务是否完成
- execute(),获取结果
历史
- 添加
isDone
方法以检查是否完成。它将每千微秒检查一次。 - 添加
react/promise
包进行异步数据处理。
注意
当您调用 attach
方法时,异步对象会向MySQL服务器发送请求。实际上,异步对象只是检查所有任务是否完成并返回结果,当您调用 execute
方法时。因此,您可以在 attach
和 execute
之间做任何想做的事情,例如请求一个URL,在请求完成后调用 execute
。
示例
try{ $async_mysql = new \Jenner\Mysql\Async(); $async_mysql->attach( ['host' => '127.0.0.1', 'user' => 'root', 'password' => '', 'database' => 'test', 'port'=>3306], 'select * from stu' ); $async_mysql->attach( ['host' => '127.0.0.1', 'user' => 'root', 'password' => '', 'database' => 'test', 'port'=>3306], 'select * from stu limit 0, 3' ); $result = $async_mysql->execute(); print_r($result); }catch (Exception $e){ echo $e->getMessage(); }
使用Promise
try { $async_mysql = new \Jenner\Mysql\Async(); $promise_1 = $async_mysql->attach( ['host' => '127.0.0.1', 'user' => 'root', 'password' => '', 'database' => 'test'], 'select * from stu' ); $promise_1->then( function ($data) { echo 'sucess:' . var_export($data, true) . PHP_EOL; }, function ($info) { echo "error:" . var_export($info, true); } ); $promise_2 = $async_mysql->attach( ['host' => '127.0.0.1', 'user' => 'root', 'password' => '', 'database' => 'test'], 'select * from stu limit 0, 3' ); $promise_2->then( function ($data) { echo 'sucess:' . var_export($data, true) . PHP_EOL; }, function ($info) { echo "error:" . var_export($info, true); } ); $async_mysql->execute(); } catch (Exception $e) { echo $e->getMessage(); }
性能测试
总结:async-mysql 确实比同步-mysql 快。
根据性能测试结果,异步MySQL可以提高性能。它可以提高多少取决于您的代码想要做什么。通常情况下,执行时间取决于最复杂的SQL。内存使用将得到改善,因为异步MySQL将同时获取所有结果。
# 同步 [root@iZ942077c78Z async-mysql-php]# php tests/performance_sync.php ------------------------------------------ mark:[total diff] time:4.2648551464081s memory_real:18944KB memory_emalloc:18377.171875KB memory_peak_real:28416KB memory_peak_emalloc:27560.3828125KB [root@iZ942077c78Z async-mysql-php]# php tests/performance_sync.php ------------------------------------------ mark:[total diff] time:4.2285549640656s memory_real:18944KB memory_emalloc:18377.171875KB memory_peak_real:28416KB memory_peak_emalloc:27560.3828125KB [root@iZ942077c78Z async-mysql-php]# php tests/performance_async.php ------------------------------------------ mark:[total diff] time:1.455677986145s memory_real:38144KB memory_emalloc:32574.015625KB memory_peak_real:66816KB memory_peak_emalloc:65709.7734375KB # 异步 [root@iZ942077c78Z async-mysql-php]# php tests/performance_async.php ------------------------------------------ mark:[total diff] time:1.8936941623688s memory_real:38144KB memory_emalloc:32574.015625KB memory_peak_real:66816KB memory_peak_emalloc:65709.7734375KB [root@iZ942077c78Z async-mysql-php]# php tests/performance_async.php ------------------------------------------ mark:[total diff] time:1.5208158493042s memory_real:38144KB memory_emalloc:32574.015625KB memory_peak_real:66816KB memory_peak_emalloc:65709.7734375KB