优化ajax以减少mysql服务器负载

时间:2012-09-10 22:31:15

标签: php mysql

我有一个拍卖网站,有时会变得很重,而且大多数人认为mysql消耗大量内存和中央处理器。我的情况如下。

对于每个在线用户而言,ajax查询每秒都会转到mysql。观看拍卖以检查出价计数与先前的值。如果有人出价,则计数不同,所以这个ajax再调用一个ajax来检索记录&在表中显示特定于正在观看/登录的用户的出价。我将此限制为前10以减少负载。

然而问题是如果有50个在线用户,&其中一个出价,50个查询进入mysql&所有这些都检测到出价计数已经改变&发出进一步的查询以获取记录以显示与每个用户相对应的出价。

更大的问题是,如果有500个在线用户,则500个查询进入mysql以检测更改&如果出价另外500个查询(特定于每个在线用户的查询)进入mysql&可能导致服务器崩溃。

注意:目前在php中有一个单独的mysql连接对象用作单例,负责执行查询,检索记录等。

我基本上正在寻找一种解决方案,如果500个用户在线,500个查询不会转到mysql,但即使其中一个人对特定拍卖进行了出价,所有这些查询都应该获得更新。任何想法/建议都非常欢迎。

如何最好地为这种减少mysql负载的方案实现一个解决方案?

资源方面我们相当不错,在Hostgator上做VPS4。唯一的问题是cpu /内存使用量,当许多用户投标时,这个比例为95%。

赞赏一些建议

2 个答案:

答案 0 :(得分:0)

听起来你会想看看memcached或其他一些缓存服务。您可以让一个进程查询MySQL并将其更新为memcached,并将ajax直接查询到memcached中以检索行。

Memcached不保持关系一致性,查询它比每次查询MySQL要少得多。

PHP有一个非常好的界面可以使用memcached:Memcache

The website of the memcached project.

还有一些其他缓存服务。您可能还想查看MySQL中的查询缓存,但这仍然需要与MySQL进行多次连接,无论如何都会消耗资源。

答案 1 :(得分:0)

在短期内,您还可以运行详细查询。当没有任何更新时(它取代了第一个查询!),它将不会返回任何内容。

这可能会花一些时间来缓存或更深入地分析您的查询速度。