【问题标题】:What is the most efficient way to count votes on an object?对对象进行投票的最有效方法是什么?
【发布时间】:2018-01-30 23:05:50
【问题描述】:

我想统计模型对象的投票。我认为有两种方法可以做到这一点:

方法 1

class Question(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    vote_count = models.IntegerField()

然后获取模型,更新计数,然后重新保存模型。

或者:

方法 2

class Vote(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)

class Question(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    votes = models.ManyToManyField(Vote,related_name='questions')

通过这种方式,我可以添加投票,然后在需要摘要时统计所有投票。

我想做一些事情,比如按最多票排序和其他求和操作。

从数据库成本和未来可扩展性的角度来看,哪种方法最有效?

【问题讨论】:

    标签: python mysql django oop entity-relationship


    【解决方案1】:

    首先,您列出的两种方法并不完全等效 - 第一种方法您只保留有关总票数的信息,而第二种方法您还保留有关投票的用户的信息已投票(您可能需要添加其他相关字段)。

    显然,第一种方法更有效,因为它不需要像第二种方法那样的连接,但我会有点粗心,说你可能不必担心 - 不要忘记what Mr. Knuth said,这可能与此处相关:

    我们应该忘记小的效率,比如大约 97% 的时间: 过早优化是万恶之源。然而我们不应该通过 在关键的 3% 中增加我们的机会

    【讨论】:

      猜你喜欢
      • 2014-11-07
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 2012-07-09
      相关资源
      最近更新 更多