scrawler / swoole-postgresql-doctrine
基于 Swoole 协程 PostgreSQL 扩展的 Doctrine DBAL 驱动实现
1.1.1
2021-11-07 21:09 UTC
Requires
- php: ^7.4|^8.0
- ext-openswoole: ^4.7
- doctrine/dbal: ^3.0
Requires (Dev)
- pestphp/pest: ^1.0
- swoole/ide-helper: ^4.7
This package is auto-updated.
Last update: 2024-09-08 03:38:56 UTC
README
在 Swoole\Coroutine\PostgreSQL
上实现的 Doctrine\DBAL\Driver
。需要 ext-openswoole 4.7.1 或更高版本
入门
安装
composer require scrawler/swoole-postgresql-doctrine
用法
Doctrine 参数,对于 DBAL 和 ORM 项目,都接受 driverClass
选项;我们可以在那里注入此项目的驱动
use Doctrine\DBAL\{Driver, DriverManager}; $params = [ 'dbname' => 'postgres', 'user' => 'postgres', 'password' => 'postgres', 'host' => 'db', 'driverClass' =>\Scrawler\Swoole\PostgreSQL\Driver::class, 'poolSize' => 8, ]; $conn = DriverManager::getConnection($params);
您现在可以在协程(纤程)内大显身手了
Co\run(static function() use ($conn): void { $results = []; $wg = new Co\WaitGroup(); $start_time = time(); Co::create(static function() use (&$results, $wg, $conn): void { $wg->add(); $results[] = $conn->executeQuery('select 1, pg_sleep(1)')->fetchOne(); $wg->done(); }); Co::create(static function() use (&$results, $wg, $conn): void { $wg->add(); $results[] = $conn->executeQuery('select 1, pg_sleep(1)')->fetchOne(); $wg->done(); }); $wg->wait(); $elapsed = time() - $start_time; $sum = array_sum($results); echo "Two pg_sleep(1) queries in $elapsed second, returning: $sum\n"; });
您应该看到 1 秒内执行两个 pg_sleep(1) 查询,返回:2
,而总时间不应该 是 2(pg_sleep(1)
的总和),因为它们是并发执行的。
real 0m1.228s user 0m0.036s sys 0m0.027s
致谢
本项目得以实现得益于 https://github.com/leocavalcante/swoole-postgresql-doctrine-driver
所有改进都已添加到原始仓库,请查看此 PR https://github.com/leocavalcante/swoole-postgresql-doctrine-driver/pull/2