如绝大多数的新闻客户端和某些社区(比较著名的如reddit),都是根据某个算法算出一个权重值,再根据这个权重值进行排序(参考:http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_reddit.html)手机app的场景下,应该怎么样去综合提高这个排序性能呢?假如单纯在数据库里面进行排序,由于orderby的字段是通过算法生成,数据量一大必然低效。现在产品用的mysql还不支持函数索引假如在先抽出数据,再在程序里进行排序,数据量一大,也会占用服务器不少的内存吧?好像也不是很好的办法请有经验人士提供一些思路。
1 回答
梦里花落0921
TA贡献1772条经验 获得超6个赞
这问题放在Android的节点下,你是要在Android下实现权重计算?要是在服务器的话,赞同@zys的方案,另外,要降低计算数量,私有以下愚见:给要计算的数据加上一个updated_at和calculated_at字段,分别表示数据最新的更新时间和最后一次用排序算法计算权重值的时间。当有新的用户投票,更新数据的updated_at字段。定时任务计算权重后,更新数据的calculated_at字段。权重计算算法里对updated_at和calculated_at作比较,当calculated_at>updated_at的时候,没必要重复重新计算权重值。用这种简单的算法,可以有效的去掉很大部分已经没更新的数据,另外,假如老的数据有更新,也能列入权重的计算范围。
添加回答
举报
0/150
提交
取消