Database 影响数据库中所有项的用户操作,如何有效地处理?

Database 影响数据库中所有项的用户操作,如何有效地处理?,database,performance,architecture,Database,Performance,Architecture,我正在为我的公司开发一个投票系统,在这个系统中,每个用户都可以在一个或多个主题上投票。在一个主题中投票将导致该主题获得+1声誉,而所有其他主题将失去-1声誉。(这些数字相当随意,实际值是一个复杂的公式) 我正在考虑构建数据库,创建一个视图,在其中存储每个主题的ID、此主题的投票总数、其他主题的投票总数以及计算的声誉 我的问题在于性能/可伸缩性。我认为这个解决方案不是很有效,因为如果我每秒有100个主题和2个投票,我必须每秒刷新所有主题的所有值两次,即每秒总共200条记录 这个分析正确吗?mssq

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

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

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

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

谢谢,
奥斯卡

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

你的公式依赖于什么变量?如果你要加和减的数量是全局性的,你可以跟踪它们,只在需要显示时计算每个主题的分数

例如,您可以只增加一个主题的分数,还可以增加一个全局变量,该变量跟踪总共有多少个“上升投票”。这样,当您想要显示任何主题的分数时,您将能够在不轰炸数据库的情况下动态计算它

更多关于这个公式的信息可以给你更好的建议

编辑:

你有这个公式:

origninalRep + (upvotes*10 - otherVotes) 
您可以通过一个查询直接获得
originalRep

同样适用于
投票

“棘手”的部分是
othervots
。但这仅仅是
globalvotecont-upvoces
,如果您跟踪全球upvoces计数,您就会得到这些选票


我希望这会有所帮助。

该公式只考虑了原始声誉、UPVOUTS和其他主题的UPVOUTS。像这样的Smt:origninalRep+(向上投票*10-其他投票)嗨!这当然有帮助:)谢谢。但如果我想拥有最新的声誉,这就需要我点击DB以获得升级投票和全球投票,对吗?(只是检查一下,看看我是否理解了所有的想法或遗漏了什么)。我将首先使用无缓存,如果需要,我会为这些值创建一个3秒缓存或类似的smt。你觉得怎么样?很抱歉回复太晚,但是是的,每次上/下投票,你都必须点击DB。这是正常的过程,这就是为什么你有缓存。像Ruby和Python这样的语言会自动缓存结果,否则最好自己实现一个。