【问题标题】:Update view count, most reliable way更新查看次数,最可靠的方法
【发布时间】:2013-07-31 21:22:57
【问题描述】:

你好 Stackoverflow!

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

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

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

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

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

编辑

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

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

【问题讨论】:

    标签: php mysql views


    【解决方案1】:

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

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

    UPDATE forum SET views + 1 WHERE id = ?
    

    【讨论】:

    • 现在是我的问题,如何?
    • 在页面显示之前更新数据库中的视图条目。 UPDATE `views_table` SET `views` = `views` + 1 WHERE `post_id` = '$post_id' LIMIT 1;
    【解决方案2】:

    所以类似的东西会起作用:

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

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

    Is incrementing a field in MySQL atomic?
    http://dev.mysql.com/doc/refman/5.1/en/ansi-diff-transactions.html

    【讨论】:

      猜你喜欢
      • 2012-12-29
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 2018-10-30
      • 2012-05-29
      相关资源
      最近更新 更多