php服务器处理许多请求

时间:2015-08-10 22:31:15

标签: php mysql performance

我有一个php文件,在给定一些约束的情况下在后台访问mysql数据库,然后返回一些数据。

唯一的问题是,如果我同时收到大量请求,那么最后的请求必须等待一段时间才能得到他们的回复。

有没有更好的方法来处理这种事情,以便请求快速,没有人必须等待?

**添加了信息

目前我的脚本接受一些POST参数,然后转到数据库并验证一些信息,然后回显一个json编码的响应字符串。

如果我通过JS中的XMLHTTPRequests发出1000个请求,那么1000的请求几乎在一分钟之后就会回来。

据我所知,php一次处理一个请求,但是当成千上万的用户同时更新信息时,Facebook等主要网站如何处理呢?

2 个答案:

答案 0 :(得分:1)

大家伙怎么做?

  • 多个网络服务器
  • 多个MySQL从属
  • 高效的PHP(或其他)代码
  • * nix,而不是* dows
  • 严重的负载平衡器,路由器等
  • 在多个驱动器前面具有写入缓存的硬件RAID控制器
  • PHP一次处理1个请求,但Apache运行多个PHP线程
  • 无查询缓存 - 表格变化太频繁。
  • 好索引

(我曾经为一个最大的家伙工作。)

答案 1 :(得分:0)

我认为问题不是PHP,甚至不是MySql,但我认为你的MySql数据库设置不正确。

所以我假设你在PHP中有一个类似的查询。

“select * from mytable where email =?”你将其作为JSON返回。

现在,如果您的MySql数据库中有100,000行,如果您没有为where子句中的字段或字段编制索引,这将会很慢。

请参阅此答案,了解如何索引MySql表。 How do I add indices to MySQL tables?

简短回答您需要索引where子句中的任何字段。例如,如果你只有where子句中的电子邮件,那么你需要索引电子邮件(只需要一次告诉MySql总是创建一个索引)

ALTER TABLE `table` ADD INDEX `email` (`email`)

这将导致MySql快速超速,1000个请求不会花费60秒。 实际上,从这个页面,您应该能够在1秒内完成92,355请求进入数据库并返回。

https://www.techempower.com/benchmarks/(寻找php-raw)。

UDPADE

不是PHP的问题,OP只是使用浏览器中的XMLhttp进行测试,因为浏览器只能在同一个域内同时发出2-6个请求,测试过程只是简单的。