1

再次您好 Stackoverflow!

我目前正在开发自定义论坛软件,而您希望在论坛上看到的东西之一是查看器。

我发现的视图计数器的所有方法都只是从数据库中选择主题,从“视图”列中检索数字,添加一个并更新它。

但这是我的想法:假设 400 个人同时打开一个主题,MySQL 数据库可能不会计算所有视图,因为完成查询需要时间,所以最后一个人(400 ) 可能会覆盖第一个人(400 个)视图。

当然有人可能会争辩说,在普通网站上这永远不会发生,但如果您有大约 7 个人在同一秒打开该主题并且服务器当时正在挣扎,您可能会遇到同样的问题。

还有其他统计浏览量的好方法吗?

编辑

哇,投反对票的人能说明原因吗?

我通过“检索视图数量并添加一个”SELECT来检索该数字,使用 PHP(注意标签)添加一个并使用UPDATE. 我不知道下面指定的其他方法,这就是我问的原因。

4

2 回答 2

2

如果,假设有 400 个人同时打开一个主题,MySQL 数据库显然会计算所有视图,因为这正是数据库的发明目的。

您发现的所有视图计数器方法都是错误的。要更新字段,您不需要检索它,而只需更新:

UPDATE forum SET views + 1 WHERE id = ?
于 2013-07-31T11:23:50.017 回答
1

所以这样的事情会起作用:

UPDATE tbl SET cnt = cnt+1 WHERE ...

UPDATE保证是原子的。这意味着没有人能够cnt在读取时间和替换时间之间进行更改。如果UPDATE同一行(InnoDB)或表(MyISAM)有多个并发,他们必须等待轮到他们更新日期。

请参阅是否在 MySQL atomic 中增加字段?
http://dev.mysql.com/doc/refman/5.1/en/ansi-diff-transactions.html

于 2013-07-31T11:26:15.520 回答