small/doctrine-dbal-swoole-pdo-driver

dev-master 2024-08-20 11:08 UTC

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 上找到