1
akira 2015-03-20 23:59:21 +08:00
如果你不需要实时,试试做成定时刷新 rank列表。这样逻辑上就非常简单粗暴了。
1.读取所有用户的point,rank ,顺便order了 2.从头到尾扫一遍,如果rank和位置不一致,存入更新列表 3.更新变化了的rank入库 |
2
jarlyyn 2015-03-21 12:19:54 +08:00
算法, sql优化不熟,没法给出意见。
但个人觉得,性能的问题大部分情况下可以靠缓存来解决。 那么我假设你的场景如下: 1.top20的查看次数很频繁。 2。大部分用户不是活跃用户。 3。大部分用户的用户页很少被查看,被查看的多的是热门用户的排名。 那么设置两个2缓存,在显示调用时调用,如果已经被删除的话则重新生成 1。 top 20以及top20中最低的point. 2.按用户缓存rank. 再加入一个钩子程序,更新point时调用。 1。如果原始point和新point大于top 20的最低point,则清除top 20的缓存 2.清除对应用户的缓存。不要写入。 |
3
liboyue 2015-03-21 14:02:14 +08:00 via Android
redis sorted set?
|