我有一个拍卖网站,有时负载很重&主要是mysql被认为消耗了大量的内存和cpu。我的情况如下。
对于每个在线用户,每秒都会有一个ajax查询发送到mysql &观察拍卖,对照之前的值检查投标计数。如果有人出价,则计数不同,因此此ajax调用另一个ajax,该ajax检索记录并在表中显示特定于观看/登录的用户的出价。我将其限制为前10个,以减少负载。
然而,问题是,如果有50个在线用户,其中一个用户发出了报价,50个查询进入mysql,所有这些查询都检测到报价计数发生了变化,并发出进一步的查询来获取记录,以显示与每个用户对应的报价。
THe更大的问题是,如果有500个用户在线,那么有500个查询进入mysql来检测变化&如果下了价,另有500个查询(一个特定于每个在线用户的查询)进入mysql,可能会使服务器崩溃。
注意:目前只有一个mysql连接对象在php中用作单例,它负责执行查询、检索记录等。
我本质上是在寻找一种解决方案,如果500个用户在线,那么500个查询不会转到mysql,但即使其中一个人对特定的拍卖进行了出价,所有的查询都应该得到更新。任何想法/建议都非常欢迎。
对于这种情况,我如何才能最好地实现一个解决方案来减少mysql上的负载?
在资源方面,我们相当不错,在Hostgator上做一个VPS4。唯一的问题是cpu /内存使用率,当许多用户竞标时,cpu/内存使用率为95%。
感谢一些建议
发布于 2012-09-11 06:43:04
听起来你可能想看看memcached或者其他一些缓存服务。您可以让一个进程查询MySQL并将其更新到memcached中,而ajax则直接在memcached中进行查询以检索行。
Memcached不保持关系的一致性,并且每次查询它比查询MySQL消耗的资源要少得多。
PHP有一个非常好的接口来处理memcached:Memcache
The website of the memcached project.
还有一些其他的缓存服务。您可能还想查看MySQL中的查询缓存,但这仍然需要几个到MySQL的连接,这两种方式都非常消耗资源。
发布于 2012-09-11 07:24:10
在短期内,您也可以只运行详细的查询。当没有需要更新的内容时,它将不返回任何内容(替换第一个查询!)。
这可能会为缓存或对查询速度进行更深入的分析赢得一些时间。
https://stackoverflow.com/questions/12360342
复制相似问题