1 背景
公司做了个含有社交属性的平台,其中涉及对帖子的评论的排序问题。评论的排序权重计算公式如下:
- 评论的排序权重 = 时间权重 + 点赞权重 + 其它权重
- 时间权重 = 100 / (评论创建时间的小时数 - 当前服务器时间的小时数)
- 点赞权重 = 近 1 天点赞数 x 5 + 2~3 天点赞数 x 3 + 4~7 天点赞数 x 2 + 8 天以上点赞数
- 其它权重,跟“点赞权重”类似,只是根据不同的操作数据来计算
就是“时间权重”和“点赞权重”都基于当前时间来计算,“时间权重”每小时变化一次,“点赞权重”每天变化一次。随着社交数据的膨胀,需要重算的历史数据也增多。
2 问题
如何减少无必要的计算?调整“评论的排序权重”的计算公式,还是制定相应的策略做?
3 目前的想法
总体来看,不会实时计算评论权重,而是建立异步任务去计算评论的权重并保存。查询评论时,直接根据评论的权重排序。
基于此想法,目前的方案如下:
-
按此需求计算评论权重。当帖子有新增评论,或者相关评论有新操作,则重算该帖子所有评论的权重。
-
“评论的排序权重”目前是对历史数据的权重做减法。重新设计一个计算公式,不动历史数据,只针对新评论或者有新操作的评论的权重做加法。
-
其实评论的排序,已有相关的研究或方案,例如“威尔逊置信区间法”。需要时间去理解。