small / doctrine-dbal-swoole-pdo-driver
dev-master
2024-08-20 11:08 UTC
Requires
- php: >=8.3
- ext-pdo: *
- doctrine/dbal: 4.0.*
- small/swoole-patterns: >=22.2.0
This package is not auto-updated.
Last update: 2024-09-18 06:39:37 UTC
README
OpenSwoole 和 Doctrine
连接问题
Doctrine 的问题是协程使用相同的连接。
在拥有大量连接的服务中,用户最终需要等待一个 SQL 查询完成后才能执行下一个。
解决方案
1) 为每个请求创建一个连接
这个解决方案已经在包 diego-ninja/swoole-mysql-doctrine-driver 中采用:diego-ninja/swoole-mysql-doctrine-driver
出现两个问题
- 这是一个长期过程,连接会消耗内存。
- 在高负载下,数据库服务器可能会因为大量打开的连接而阻塞。
2) 使用连接池
连接池是一个类,它替换了原生驱动,用于存储和重用连接。您可以定义并发连接的最大数量,这取决于您数据库服务器的大小。
过程很简单
例如:我们使用一个包含 10 个连接的池。
如果有空闲连接,我们就获取连接。发送连接并释放连接。
如果没有空闲连接,我们短暂休眠并重试。
small/swoole-pdo-doctrine-driver
这个包使用 small/swoole-patterns 抽象池的类。
以下是一个用 symfony 配置它的示例
doctrine:
dbal:
driver: Small\SwooleDbalPdo
url: '%env(resolve:DATABASE_URL)%'
源代码可在 https://git.small-project.dev/lib/small-swoole-doctine-dbal-pdo 上找到
Composer 包可在 https://packagist.org.cn/packages/small/small-swoole-doctine-dbal-pdo 上找到