PHP池功能(不仅仅是数据库连接)

时间:2011-06-09 19:19:42

标签: php connection-pooling pooling object-pooling

是否可以在PHP中汇集数据或功能?

我编写的业余PHP代码唤醒处理响应,加载函数,打开数据库连接,创建对象,初始化它们,然后 - 在处理响应后0.01秒后死掉,留下下一个请求再次重新加载,解析和运行同样的事情。

这是非感性的,我发现它删除了我的很多工作的价值,没有功能/数据/对象池。例如,我可以编写类,发现每个请求都重新初始化 - 我尝试开发一个有意义的对象结构有什么意义?

所以:我如何编写PHP来汇集数据和功能?

3 个答案:

答案 0 :(得分:4)

PHP中没有1个解决方案池或持久状态,它没有像Java那样的应用程序状态,它或多或少遵循HTTP的无状态协议。你能做的是:

  • 创建与数据库的持久连接(即,如果使用相同的参数调用它们,它们将被重用,它们不会神奇地存在,但您可以避免实际连接的开销)。
  • 在会话中存储对象以保持计算状态(它们将被序列化,并在下一个请求中反序列化)。
  • 将需要进行大量但一次性初始化的工作路由到独立于Web服务器运行的守护程序(齿轮箱服务器和工作人员会想到)。
  • 但最后,如果你的应用程序需要全局状态,那么PHP可能不是正确的解决方案。

答案 1 :(得分:3)

PHP几乎不是瓶颈。我们的服务器在高峰时刻每秒处理数百个请求。这些也不是微不足道的要求。这似乎不合逻辑,但PHP实际上非常快。并且您可以使用APC缓存来缓存预编译的PHP文件,以使其更快。然后,您可以使用MemCache存储数据,因此任何查询结果和数据都可以轻松缓存,而不依赖于MySQL的次优查询缓存。

答案 2 :(得分:1)

我和你一样有同样的担忧;但奇怪的是 PHP非常快。除了应由服务器缓存的数据库查询之外,仅存在连接问题。哪个可以轻松汇集。

我的系统甚至必须解析几个kb的XML文件以获得响应。瓶颈仍然是数据库服务器。

这种PHP的临时状态有一个好的方面。一个有问题的请求,系统崩溃不会对下一个连接产生任何不利影响。对我来说似乎更稳定。