我正在为我公司的投票系统工作,在这个系统中,每个用户都可以投一个或多个主题。在话题中投票会导致此主题在声誉上获得+1,而其他所有主题在声誉中损失-1。 (这些数字是相当随意的,真正的价值是一个复杂的公式)。影响数据库中所有项目的用户操作,以及如何有效地处理它们?
我想构建我的数据库创建一个视图,我将存储每个主题的ID,该主题的总投票数,其他主题的总投票数和计算出的信誉。
我的问题是关于性能/可伸缩性。我认为这个解决方案并不是非常有效,因为如果我有100个主题,每秒2张选票,我将不得不每秒刷新所有主题的所有值,即每秒总共200条记录。
这种分析是否正确? mssql引擎是否会轻松处理它?或者我应该寻找其他方法?你有什么建议?
感谢, 奥斯卡
该公式只考虑原始声誉,upvotes和其他主题upvotes。 Smt是这样的:origninalRep +(upvotes * 10 - otherVotes) – JSBach 2012-07-30 15:59:39
嗨!这有帮助,当然:)谢谢。但是,如果我想获得最新的声誉,那么这需要我击中数据库才能获得upvotes和globalVotesCount的每个计算结果,对吧? (只是检查,看看我是否理解了所有的想法或错过了什么)。我会首先使用缓存,如果需要的话,我会创建一个3秒缓存或smt这样的值。你怎么看? – JSBach 2012-07-31 16:49:11
对不起,对于迟到的回复,但是是的,您必须为每个upvote/downvote计数打到DB。这是正常的程序,这就是为什么你有缓存。像Ruby和Python这样的语言会自动缓存你的结果,否则你可以自己实现一个。 – 2012-08-01 10:17:17