2010-05-10 70 views
5

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

所以,这是一件坏事吗?

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

谢谢,请让我知道如果更多的信息会有所帮助。

乔希

+0

你能告诉从哪个用户或从请求哪个子域他们将要使用? – 2010-05-11 01:22:13

回答

0

这部分取决于您的配置的其余部分,但只要每次交易只涉及一个连接,那么数据库客户端代码应执行你所期望的 - 作为一个单一的数据库大约相同的,但有更多的可能性来提高数据库服务器的性能,达到网络带宽的极限。

如果多个连接参与一个事务,那么您可能需要符合XA的事务管理器,并且这些通常会带来显着的性能开销。

0

不,这不是件坏事。

这是总共的并行连接数问题。这可以通过mysql设置中的“max_connections”来定义(自MySQL 5.1.15以来它默认为151),并且受到平台性能的限制(例如,Windows上的2048,<,Linux上的更多),硬件(RAM)和系统设置主要是通过打开文件的限制)。如果你有很多并行用户,它可能是一个瓶颈,数据库的数量并不重要。我发现一个脚本连接400多个数据库在一个执行(一个接一个,不平行),我发现MySQL + PHP处理它很好(没有重大的内存泄漏,没有大的开销)。所以我认为你的配置没有问题。

而且,如果在连接数据库本身没有显着的开销,finnaly - mysql_pconnect在网络开发中一般并不好。你必须非常小心地管理它,以避免与max_connections,锁,待处理的脚本等问题。我认为pconnect有限的使用(即每秒运行的cron作业或类似的东西)

1

这是一个你写的应用程序?

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

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

除非您有一个甜蜜的迁移工具来帮助您将所有数据库更改为新的模式,否则您可能会发现自己处于一个受到伤害的世界。

我意识到你现在可能对这个项目太过分了,但是如果在模式中添加一些额外的关系来区分域(公司/用户),那么可以将它们全部从一个数据库运行, 。

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