增加实时视图计数的最快方法是什么?

时间:2012-09-17 02:06:53

标签: php mysql performance

我运营的网站上有视频。我希望所有用户都可以随时使用每视频观看次数。

通常情况下,我会使用以下内容:

UPDATE videos SET views = views+1 WHERE id = ... 

有没有更快和/或更好的方法?

2 个答案:

答案 0 :(得分:3)

除非您使用事务/锁来处理它们,否则这种特殊方式会受到并发错误的影响。

我会更倾向于点击次数:

INSERT DELAYED INTO video_hits (video_id, time) VALUES (:video_id, NOW());

通过这种方式,您可以获得计数,但也可以获得有关视图的统计信息。

注意:DELAYED仅适用于MyISAM,这很好,因为它会立即返回,而COUNT(*)在MyISAM表上很快。您可以省略InnoDB。

答案 1 :(得分:1)

是的。使用Memcached。 http://www.php.net/manual/en/memcached.increment.php

然后编写一个cron脚本,它会在一段时间内将更改后的值写入表中,以防万一。我不认为查看计数是一个特别重要的信息 - 在服务器崩溃的情况下丢失几分钟的数据应该没问题。

Redis也是一个选项,虽然设置起来比较困难。作为奖励,您将获得持久性和排序集,因此根本不需要涉及MySQL。

如果你真的需要在InnoDB中使用MySQL,那么你唯一的选择就是摆弄innodb_flush_log_at_trx_commit,但这有点危险。 MyISAM根本不起作用(它会为每次写入锁定整个表格)。