jenner/async-mysql-php

PHP MySQL 异步客户端

安装: 901

依赖者: 0

建议者: 0

安全: 0

星标: 40

关注者: 5

分支: 11

类型:软件包

v0.2 2015-12-03 12:53 UTC

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 方法时。因此,您可以在 attachexecute 之间做任何想做的事情,例如请求一个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