【发布时间】:2012-01-06 06:47:53
【问题描述】:
我这里的目标是生成一个类似于reddit首页的系统。
我有一些东西,为了简单起见,这些东西有投票。我生成的最好的系统是使用时间衰减。半衰期为 7 天,如果一张选票今天值 20 分,那么 7 天后,它值 10 分,14 天后它只值 5 分。
问题是,虽然这会产生我非常满意的结果,但它并不能扩展。每一次投票都需要我有效地重新计算其他投票的价值。
所以,我想我也许可以扭转这个想法。今天的投票值 1 分。从现在起 7 天后的投票值 2 分,从现在起 14 天后的投票值 4 分,以此类推。这很有效,因为每次投票,我只需要更新一行。问题是,到今年年底,我需要一种可以容纳大量数字的数据类型。
所以,我尝试使用产生糟糕排名的线性增长。我尝试了多项式增长(将网站启动和提交后的天数平方和立方),它产生了稍微好一点的结果。但是,随着我得到稍微好一点的结果,我很快就会重新接近无法维护的数字。
所以,我来找你 stackoverflow。谁有关于如何为这个系统建模以便它可以很好地扩展到 Web 应用程序的天才想法或想法的链接。
【问题讨论】:
-
seomoz.org/blog/… 有点帮助,但乍一看,似乎也没有一个扩展。
-
我没有看到任何允许非线性衰减的系统,您不必在某些时候重新计算分数。问题是,您是否需要在每次投票时都这样做,或者后台 cron 作业可以吗?
-
cron 工作很糟糕。可以,但我有点决心找到一种非持久性流程风格的解决方案。
-
从不同的角度来看,我通常不喜欢看到其他人建议改变你正在使用的技术,更不用说我自己了,但我会在这里,因为最简单的答案是使用计算列/功能索引,不是 MySQL 提供的。只是在偶然的情况下,它对您很重要,并且您有可能使用其他数据库。
-
我在 postgres 上。懒惰并且不自己查找东西,但如果你有一个 postgres 解决方案,那就太棒了。
标签: scalability ranking-functions