【问题标题】:Points system like stackoverflow积分系统,如stackoverflow
【发布时间】:2009-09-09 19:17:32
【问题描述】:

我正在尝试在我的程序中创建一个类似于堆栈溢出的积分系统,即当用户做了一些好事(活动)时,他/她的积分会增加。我想知道在 db 模式 + 逻辑方面实现这一点的最佳方法是什么。

我能想到三个选项:

  1. 在 users 表中添加一个名为 points 的额外字段,每次用户执行某项操作时,将其添加到该字段(但这将无法显示各种活动)
  2. 创建一个函数,每次用户做好事时都会运行该函数,它会从头开始计算值并更新积分字段
  3. 每次使用没有任何点字段的函数进行计算。

解决此问题的最佳方法是什么?感谢您的宝贵时间。

【问题讨论】:

    标签: php mysql logic


    【解决方案1】:

    就个人而言,我会使用第二种方法来解决这个问题。

    第一个选项限制了功能,所以我立即消除了它。

    第三个选项在性能方面效率低下 - 您可能会大量获取该数字,并且,如果您的程序类似于 stackoverflow,可能会显示(计算)该数字每次浏览/操作多次。

    对我来说,第二种选择是一个不错的混合解决方案。通常,我讨厌在我的系统中有重复的数据(动作和点,而不是一个或另一个),但在这种情况下,一个整数字段是每个用户的一个相当小的空间,可以节省你很多时间在不必要地重新计算值。

    有时,我们必须以数据存储空间换取性能,反之亦然,我想说#2 是一种对应用程序有很大好处的权衡。

    【讨论】:

      【解决方案2】:

      这在很大程度上取决于您将面临的预期计算数量。事实上,出于性能原因,我认为 SO 显然使用了一种类似于您的 1) 方法的方法。

      如果因素发生变化(例如获得积分的已删除项目,或此处成为社区 wiki 的 SO 回复,积分规则的更改,外部操作(例如在 SO 上加入另一个帐户等),这也可以防止数字跳跃。 )

      如果重新计算解决方案 (2) 是您想要的,您可以通过在每次可能发生点修改时清除值(将其设置为 NULL,这意味着“脏”)来实现“智能”缓存,然后重新- 当它为 NULL 时计算它,否则使用缓存。您还可以(当发生非明确的事情时作为一种自我纠正措施)在一小时、一天或任何您认为最重要的时间后清除值,以便在特定时间后强制重新计算,与“脏”状态无关.

      【讨论】:

        【解决方案3】:

        我会选择 1 和 2(每分钟左右在 cron 中运行)。

        这样: - 额外字段将充当点数的缓存。 - 计算积分的函数可以是一个单一的 sql 查询,它会立即为所有用户重新计算积分以获得一些速度。

        我认为每次收到点时都重新计算字段会有点过头了。

        【讨论】:

          【解决方案4】:

          就我个人而言,我会选择第一个选项,并添加一个“操作”表来跟踪您的活动历史记录。

          当用户做了一件好事时,他们会在“操作”表中获得一个条目,其中包含操作和一些点值。点值可以来自另一个表或某个配置文件。相同的值会添加到用户记录中。

          在任何时间点,您都可以汇总操作并获得用户总数,但为了提高性能,只需在添加操作记录时进行更新就足够简单了。

          【讨论】:

            【解决方案5】:

            您的积分系统有多简单? 我认为某种日志记录/日志记录很好,这样您就可以每天/每周/每月跟踪所有用户的活动

            【讨论】:

              【解决方案6】:

              查看http://code.google.com/p/userinfuser/

              它是开源的,允许您向应用程序添加积分和徽章。它具有 Java、Python、PHP 和 Ruby 绑定。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-07-26
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-10-17
                • 2021-08-15
                • 2014-07-03
                • 2011-05-11
                相关资源
                最近更新 更多