【问题标题】:Badge achievement system like SO: Data being used + Criteria(instant awarding & cron jobs)像这样的徽章成就系统:正在使用的数据 + 标准(即时奖励和 cron 工作)
【发布时间】:2011-01-03 23:10:49
【问题描述】:

我一直在寻找 SO 的开源克隆,

http://github.com/cnprog/CNPROG

我不知道 Python/Django,但我仍然可以阅读发生了什么,

开发人员似乎只授予 cron 工作的徽章, 奖项是通过方法颁发的,是标准的“规则”, 必须满足才能获得奖励。

this文件中,即Criteria,

然而best-way-to-store-badge-criteria 的回答中,它说不要运行类似的查询,

"select count(*) from posts where user = :user"// for every post.

这有点像 CNPROG 方法,但改为

有一个简单的规则来监视每个帖子,并“计算它们”,将规则状态存储在用户配置文件中。

所以用“计算它们”这个词,是否意味着将所有内容记录在一张表中会更好,例如,

class UserStats

      int voteUpCount
      int voteDownCount
      int score  
      int commentCount
      int viewCount
      int offensiveFlagCount
      int imageCount
      int feedbackCount
      int commentEditCount
      int commentDeleteCount
      int questionCount
      int questionEditCount
      int questionDeleteCount

然后根据这些数据制定规则,在用户发布的每条评论上加上一个简单的if(commentCount > 10)...,然后执行 SQL 查询

Q如果有人可以进一步解释问题best-way-to-store-badge-criteria的答案,但是举一个“规则”,“标准”和数据库设计的例子

这些将与一些“每个用户操作”和 cron 作业一起使用以提供徽章


【问题讨论】:

  • 我在这里没有看到一个可以回答的问题,只有很多设计品味问题,任何 2 个人都会有 4 个答案。
  • 是的,有很多衍生产品,请编辑一下

标签: cron achievements


【解决方案1】:

是的 - 你的直觉是正确的。这基本上就是数据库人们所说的materialized view。例如,要为帖子数 > 30 提供成就,请执行以下操作:

posts {
   id,
   user_id,
   content
}

users {
   user_id,
   post_count,
   has_thirty_posts
}

将帖子插入posts 表时,将users 表中的post_count 加1。如果post_count > 30,则设置has_thirty_posts = true

还有其他存储模式的方法。这只是一个粗略的简化,但它应该给你的想法。这也称为Denormalization(即存储冗余数据)。

【讨论】:

    猜你喜欢
    • 2010-12-17
    • 1970-01-01
    • 2011-06-27
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2012-12-05
    相关资源
    最近更新 更多