【问题标题】:Storing and Displaying Live Stats存储和显示实时统计数据
【发布时间】:2012-01-23 23:05:28
【问题描述】:

假设我们是一个接收大量流量的网站,Amazon.com 大小的流量。假设我们想在主页上显示一个计数器,显示自 12 月 1 日以来的销售总数,并且该计数器每 10 秒通过 ajax 刷新一次。

我们将如何做呢?

我们是否会有一个显示总销售额的汇总数据库表,并且每次结账都会向柜台 +1 并且我们会每 10 秒获得一次该数字?我们会每 10 秒 COUNT() 整个“销售”表吗?是否有一个外部 API,我可以将统计信息推送到其中,然后从中进行 ajax 拉取?

希望你能帮忙,谢谢

【问题讨论】:

    标签: php mysql sql database statistics


    【解决方案1】:

    我会在表上放置触发器来管理计数器表。插入新销售时,总和表会将新值添加到当天的行中。这也给出了历史上每天的销售额,而无需实际查询大表。

    此外,它还允许在今天以外的其他日期手动输入订单,并在当天获取更新的统计信息。

    至于 Ajax 部分,它将成为对该总和表的查询。

    【讨论】:

      【解决方案2】:

      无论您做什么,都不要每 10 秒重新计数一次。为什么不拥有一个 cronjob,它每 10 秒计算一次数据?它可能需要当前时间 10 秒,并且在从数据库中将差异添加到当前计数?

      仍然 10 秒听起来很奇怪。每分钟,嗯?

      【讨论】:

      • 无法在秒级安排 Cron。标准 cron 达到一分钟的粒度
      • 这听上去是个好主意,但是可以存储在memcached 中而不是从数据库中。正如我在上面的帖子中所解释的那样,我认为实时更新筹集的资金/销售额很重要。
      • @GundarsMēness 为什么要重新发明一个伟大工具的工作方式,例如当一个人可以在数据库中插入递增计数器时触发。
      【解决方案3】:

      如果您的网站是基于 ecomm 的,因为您正在进行销售,那么您必须在某处有一个销售跟踪表。当用户访问或刷新您的网站时,您可以简单地将数据库计数作为页面呈现的一部分。

      IMO,无需 ajax 这个计数,因为大多数访问者不会真正关心。

      另外,如果您的流量确实处于亚马逊级别,我建议您针对只读(从属)数据库运行此查询。

      【讨论】:

      • 我只是以亚马逊为例,但是是的,我确实有一个包含所有销售历史的销售表。当然,如果我们每次在网站上刷新时都要 count() 整个表亚马逊的规模对数据库来说会是一个可怕的负载吗?除非我们将销售统计数据缓存在 memcached 中并每 10 秒刷新一次?
      • @user1104791:销售数量对您的用户群真的那么重要吗?如果是这样,我可能会每 10 分钟进行一次,按照您的建议生成计数并将其存储在 memcache 中,否则每 30 分钟或每小时进行一次。
      • 一个更好的例子可能是一个大型慈善机构举办 24 小时特别筹款活动。观众将能够实时看到筹集的资金总额快速增加,从而鼓励他们也捐款。
      • @user1104791:啊,这是一种完全不同的用户体验,你应该在你的 OP 中提到这一点。正如我之前提到的,您可以设置 AJAX 方法,但让它对从属 mysql 服务器执行查询,这样您就不会增加读写数据库的负载。
      • 是的,抱歉,我之前很难想出一个好例子。感谢您的所有帮助:)
      猜你喜欢
      • 2011-05-08
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      相关资源
      最近更新 更多