我们有一个高负载网站,其中有一个论坛,该论坛已被编程为每次加载主题页面时都会增加主题综合浏览量。在高峰时段,这些写入成为瓶颈,MySQL被锁定。有没有办法将浏览量保留在内存中,然后在一个查询中以一定间隔(例如每分钟)更新一次?
我们的堆栈是:Ruby on Rails 2.3.8,MySQL 5.1,Memcached,Nginx + Passenger
更新:换句话说,不是每1分钟500个线程的20,000次单次更新,而是每1分钟只进行500次更新,每个线程更新一次。
答案 0 :(得分:0)
看看MongoDB。写操作非常快。无需更改mysql中的任何内容
您可以使用postids&创建一个集合。相应的增量计数。
upsert和$ inc运算符。
答案 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