2012-09-10 45 views
3

我有一个拍卖网站,有时会变得很重载&大多数mysql被认为消耗大量内存& cpu。我的情况如下。优化Ajax以减少mysql服务器负载

ajax查询将会每秒钟为每个在线&用户查看拍卖,以检查出价计数与以前的值。如果有人投标,计数是不同的,所以这个Ajax调用一个更多的Ajax检索记录&显示在一个表中的出价是特定于正在观看/登录的用户。我将此限制为前10个以减少加载。

然而,问题是,如果有50个用户在线,&其中一个地方的投标,50查询进入MySQL的&所有这些检测投标计数已经改变&发出进一步的查询来获得记录显示对应的竞价每个用户。

更大的问题是,如果有500个用户在线然后500个查询进入MySQL来检测变化&如果出价放置在另一个500个查询(查询具体到每个在线用户)进入MySQL的&可能导致服务器崩溃。

注:目前使用的PHP,负责执行查询,检索记录单一个MySQL连接对象等

我基本上是看着这里500询问唐”的解决方案如果有500个用户在线,那么他们就会转到mysql,但即使他们中的一个对某个特定的拍卖进行了出价,他们也应该得到更新。任何想法/建议都非常受欢迎。

我该如何最好地实现这个方案的解决方案,以减轻mysql的负载?

资源明智,我们相当不错,在HostGator上做VPS4。唯一的问题是当许多用户投标时,CPU /内存使用率为95%。

欣赏喜欢,你会想看看的memcached或其他一些缓存服务的一些建议

+1

只有一个词:缓存 – zerkms

+0

如果你能有一个长期运行的进程,那么它可以查找并缓存每一秒,所以你不必回到MySQL一路值。我不知道如何在PHP中做到这一点。 –

回答

0

听起来。您可以让一个进程查询MySQL并将其更新到memcached中,并且ajax直接在memcached中查询以检索行。

Memcached不保持关系一致性,并且查询它比每次查询MySQL的资源消耗少得多。

PHP有一个非常漂亮的界面与memcached的工作:Memcache

The website of the memcached project.

还有一些其他的缓存服务。你可能也想看看MySQL中的查询缓存,但这仍然需要多次连接到MySQL,这将非常耗费资源。

+0

你好。这样做memcahce是非常棘手的,因为查询数据库的过程可以这样做每一秒,但在1秒内,我们期待一些50-60竞标拍卖。这意味着缓存的数据已经不同步,尽管它只有一秒钟的时间。因此,ajax的查询memcache可能会得到错误/不同步的信息。 – Anita

+0

AJAX并没有带来完全的最新结果。它需要几个往返时间到服务器来检索所有的信息。您还可以查看与MySQL的轻量级连接,或者将负载分配给几个MySQL实例。 – Pablo

0

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

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