如何批量更新页面视图,而不是每次加载页面时

时间:2012-01-24 19:04:51

标签: mysql memcached optimization

我们有一个高负载网站,其中有一个论坛,该论坛已被编程为每次加载主题页面时都会增加主题综合浏览量。在高峰时段,这些写入成为瓶颈,MySQL被锁定。有没有办法将浏览量保留在内存中,然后在一个查询中以一定间隔(例如每分钟)更新一次?

我们的堆栈是:Ruby on Rails 2.3.8,MySQL 5.1,Memcached,Nginx + Passenger

更新:换句话说,不是每1分钟500个线程的20,000次单次更新,而是每1分钟只进行500次更新,每个线程更新一次。

2 个答案:

答案 0 :(得分:0)

看看MongoDB。写操作非常快。无需更改mysql中的任何内容

您可以使用postids&创建一个集合。相应的增量计数。

upsert和$ inc运算符。

http://www.mongodb.org/display/DOCS/Production+Deployments

答案 1 :(得分:0)

如果你把它留给Rails,那么逻辑可能是选择,然后是数学,然后是插入,如下所示:

@foo = SELECT view_count FROM pages WHERE ID = '1';

@bar = @foo + 1

UPDATE pages SET view_count = @bar WHERE ID = '1';

缺乏更好的方法。

然而,MySQL可以自己处理这个人。

在Rails中:

records = update_sql('UPDATE pages SET view_count = view_count + 1 WHERE ID = #{@baz.id}')

“records”将是受影响的行数,可用于查看它是否有效

flash[:error] = "Fail!" if !records