【问题标题】:Should I be concerned about performance with connections to multiple databases?我应该担心连接到多个数据库的性能吗?
【发布时间】:2011-02-17 21:42:35
【问题描述】:

我有一个 PHP 应用程序,它在带有 MySQL 数据库的 Apache 服务器上运行。 根据用户访问的子域,我将它们连接到数据库(sub1.domain.com 连接到 database_sub1,sub2.domain.com 连接到 database_sub2)。目前有 10 个子域数据库组合,但这个数字可能会增长到超过 100 个。

那么,这是一件坏事吗?

考虑到我的情况,mysql_pconnect 是要走的路吗?

谢谢,如果更多信息有帮助,请告诉我。

乔什

【问题讨论】:

  • 你能从哪个用户或请求中分辨出他们将使用哪个子域吗?

标签: php mysql apache


【解决方案1】:

这是你写的应用吗?

如果是这样,从维护的角度来看,这可能会变成一场噩梦。

当您更改程序并需要更改数据库时会发生什么?

除非您有一个很好的迁移工具来帮助您将所有数据库更改为新架构,否则您可能会发现自己陷入了困境。

我意识到您现在可能对这个项目太过分了,但是如果在架构中添加一点额外的关系来区分域(公司/用户),您可以在一个数据库上运行它们,而几乎没有额外的开销。

如果性能真的成为问题 (Read this),您可以实施集群或其他优雅的解决方案,但至少您不会有 100 多个数据库需要维护。

【讨论】:

    【解决方案2】:

    这部分取决于您的其余配置,但只要每个事务只涉及一个连接,那么数据库客户端代码就应该按照您的预期执行 - 与单个数据库大致相同,但有更多改进的可能性数据库服务器的性能,最高可达网络带宽的限制。

    如果多个连接参与一个事务,那么您可能需要一个兼容 XA 的事务管理器,而这些通常会带来很大的性能开销。

    【讨论】:

      【解决方案3】:

      不,这不是一件坏事。

      这是一个并行连接总数的问题。这可以由 mysql 设置中的“max_connections”定义(自 MySQL 5.1.15 起默认为 151),并受平台能力(即 Windows 上为 2048

      我制作了一个脚本,它在一次执行中连接 400 多个数据库(一个接一个,不是并行的),我发现 mysql + php 处理得很好(没有明显的内存泄漏,没有大的开销)。所以我认为你的配置不会有问题。

      而且,如果连接数据库本身没有显着的开销,那么 mysql_pconnect 在 Web 开发中通常不是一个好主意。你必须非常小心地管理它,以避免出现 max_connections、锁、待处理脚本等问题。我认为 pconnect 的用途有限(即每秒运行一次 cron 作业或类似的东西)

      【讨论】:

        猜你喜欢
        • 2022-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多