【问题标题】:What is the best way to handle user statistics in PHP在 PHP 中处理用户统计信息的最佳方法是什么
【发布时间】:2015-10-24 04:51:06
【问题描述】:

我将如何在 PHP 中处理用户统计信息?

我可以选择两种显而易见的方法。两者都有缺陷。

  • 必要时选择 MySQL COUNTs。这里的缺陷是,如果你有很多行要计算,那么它可能会很慢,尤其是当你必须在看似每个页面加载时都这样做时。好处是计数总是正确的。

  • 将用户统计信息存储在统计信息表中。这里的缺陷是,无论何时进行更改,您都必须不断更新它,如果您需要批量更新,这会使代码过于复杂。好处是可以快速为用户选择单行统计信息,而不是执行计数。

我有点“呃”的另一种可能的方法是将作业存储在队列中(并让 Laravel 处理它)。这些作业将使用其他表更新必要的统计信息,以便正确同步。好处是它减轻了 Web 服务器的负担,而缺陷是用户可能会得到不正确的统计数据。 您的好友列表不希望在实际数字差异很大的情况下说有例如 15 个好友和 7 个好友请求。

我已经详细介绍了我想出的方法,但我不确定在为用户提供正确结果以及平衡速度和简单性方面什么是最好的。如果我正在执行 COUNT 方法,那么如果要更新统计信息,我可能会缓存结果并删除缓存记录,但我想在缓存表中为每个用户存储一行有点过头了。只要数据库有足够的空间,也许这不是一个真正的问题,但是通过大量缓存表搜索肯定会很慢?

也许有人可以给我处理用户统计数据的最佳选择。我的头在旋转,因为它想太多了,我需要直截了当。

提前致谢。

【问题讨论】:

    标签: php mysql caching statistics


    【解决方案1】:

    在规划应用的这一部分时,不要夸大COUNT(*) 的成本。如果您的表上有正确的索引,则行计数非常快。事实上,如果你的表是 MyISAM,它的复杂度可能是 O(1)。

    例如,如果您在user 上有一个索引,那么查询SELECT COUNT(*) AS num FROM friend WHERE user = 'mickey@disney.com' 将会非常快。

    以简单的方式构建您的应用。当你有一万个用户时,你可以重新设计这种统计计算,使其更加精细和高效。当你有更多的用户时,如果你提供近似的结果就不会那么明显了。

    不过要小心。在大多数情况下,COUNT(*) 比 COUNT(expression) 快得多。 * 允许 MySQL 避免评估每一行。

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 2020-08-01
      • 2010-09-06
      • 2012-09-02
      相关资源
      最近更新 更多