3

我有一个拍卖网站,有时负载很重,而且大多数情况下 mysql 会消耗大量内存和 cpu。我的情况如下。

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

但是问题是,如果有 50 个用户在线,其中一个人出价,则 50 个查询进入 mysql,并且他们都检测到出价计数已更改并发出进一步的查询以获取记录以显示与每个用户对应的出价。

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

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

我本质上是在寻找一个解决方案,如果 500 个用户在线,则 500 个查询不会转到 mysql,但即使其中一个人为特定拍卖出价,他们都应该得到更新。任何想法/建议都非常欢迎。

我怎样才能最好地为这种情况实施一个解决方案来减少 mysql 的负载?

资源方面我们还不错,在 Hostgator 上做一个 VPS4。唯一的问题是 CPU / 内存使用率在许多用户出价时为 95%。

欣赏一些建议

4

2 回答 2

0

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

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

于 2012-09-10T23:24:10.173 回答
0

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

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

PHP 有一个非常好的接口来使用 memcached:Memcache

memcached 项目的网站。

还有一些其他的缓存服务。您可能还想查看 MySQL 中的查询缓存,但这仍然需要几个到 MySQL 的连接,这两种方式都将非常消耗资源。

于 2012-09-10T22:43:04.480 回答