0

我正在为我的公司开发一个投票系统,在这个系统中,每个用户都可以对一个或多个主题进行投票。对某个主题进行投票将导致该主题的声望值+1,而所有其他主题的声望值将下降-1。(这些数字相当随意,实际值是一个复杂的公式)。

我正在考虑构建我的数据库,创建一个视图,在其中存储每个主题的 ID、该主题的总票数、其他主题的总票数以及计算出的声誉。

我的问题是关于性能/可扩展性。我认为这个解决方案不是很有效,因为如果我有 100 个主题和每秒 2 个投票,我将不得不每秒刷新所有主题的所有值两次,即每秒总共 200 条记录。

这个分析正确吗?mssql引擎会轻松处理它吗?还是我应该寻找其他方法?你有什么建议?

谢谢,奥斯卡

4

1 回答 1

2

这对数据库来说将是非常困难的。

你的公式取决于哪些变量?如果您要添加和减去的数量是全局性的,您可以跟踪它们并仅在需要显示时计算每个主题的分数。

例如,您可以只增加一个主题的分数,但也可以增加一个全局变量来跟踪总共有多少“upvotes”。这样,当您想要显示任何主题的分数时,您就可以即时计算它而不会轰炸您的数据库。

有关该公式的更多信息可以为您提供更好的建议。

编辑:

你有这个公式:

origninalRep + (upvotes*10 - otherVotes) 

您可以originalRep通过一个查询变得简单明了。

upvotes.

“棘手”的部分是otherVotes. 但这很简单globalVotesCount - upvotes,如果您跟踪全球投票数,您就会拥有这些。

我希望这有帮助。

于 2012-07-30T15:47:41.370 回答