最近在博客园上看到这篇文章《基于用户投票的排名算法》,真的很不错,开了眼界,但心里突然有个问题,如果这种复杂的排名算法,如果用到自己的系统中,我如何去排序呢,肯定不是用关系型数据库去写存储过程,牛人们能给我解惑吗?
不是牛人,只谈点自己看法:
数据库中只是存放基本数据,根据自己选择的排名算法从数据库中取得数据,然后在程序中计算处理
几千数据还可以,十万,几十万数据,你怎么办?
@Shpix: 这个看需求了,我目前的做法是用专门的表存这些数据,字段很少,就是用空间换时间的做法,另外会加上缓存
@artwl: 专门表?我是不太明白,你专门的表进行排序,可是排序的算法逻辑是在程序计算的,你难道把几万条数据取进内存,来排序计算?
@Shpix: 真实的情况是,一般都根据一定的条件(如取一段时间内的数据)进行排序,所以数据量不会很大的。另外对于那些要整体排序的,会加上缓存,因为整体排序虽然数据量大,但变动不会很频繁
@artwl: 谢谢,说得有点道理。先不结贴,看还有人有新的想法没。
关注,学习。。。
我觉得这些个算法,都是在票数发生变化时对于当前记录进行重新计算,得出新的得分,如果有对于时间段限制的,也是根据公式进行计算,最终得出每条记录的最新得分,并且保存各个时间段的积分。排序的时候应该是按照积分排序,并不是每次都根据公式现去计算,那样资源也不够哇。
计算应该是在每条记录上,排序的时候只是根据字段进行排序分页就行了。