在视频控制器-显示操作中,我尝试了两个场景。第一个使用increment_counter,并直接写入数据库:
Video.increment_counter(:views_count, @video.id)第二种方法使用save方法。
@video.views_count = @video.views_count + 1
@video.save在ApacheBench中,我这样做:
ab -n 100 -c 10 http://127.0.0.1:3000vidoes/18视频id是18。我确保通过Video.find(18).update_attribute(:views_count, 18)在每次ab运行时重置views_count。
在两种情况下运行ApacheBench后,views_count都保持在100。我本以为increment_counter会比save方法更准确,因为它直接写入数据库。
我的替补正确吗?
发布于 2012-08-14 13:18:20
使用这两种方法得到正确答案的原因是,您在这里并没有真正测试并行性。当apachebench发出10个并发请求时,您的rails服务器一次只处理其中一个请求。尝试执行以下操作之一,以利用第二种方案中存在的竞争条件:
thin -s 4之类的东西,然后将所有这些服务器放在nginx或haproxy instance.下运行的JRuby或rubinius
https://stackoverflow.com/questions/11945914
复制相似问题