我有一个拍卖网站,有时负载很重,而且大多数情况下 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%。
感谢一些建议
最佳答案
听起来您可能想看看 memcached 或其他一些缓存服务。您可以有一个进程查询 MySQL 并将其更新到 memcached,然后 ajax 直接查询到 memcached 以检索行。
Memcached不保持关系一致性,查询它比每次查询MySQL消耗的资源少得多。
PHP 有一个非常好的接口(interface)来使用 memcached:Memcache
The website of the memcached project.
还有一些其他缓存服务。您可能还想查看 MySQL 中的查询缓存,但这仍然需要与 MySQL 建立多个连接,无论哪种方式都会非常消耗资源。
关于php - 优化ajax以减少mysql服务器负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12360342/