V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fox0001
V2EX  ›  程序员

[求教] 如何优雅处理社交系统的评论权重?

  •  
  •   fox0001 · 2022-12-21 12:12:17 +08:00 · 1782 次点击
    这是一个创建于 712 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1 背景

    公司做了个含有社交属性的平台,其中涉及对帖子的评论的排序问题。评论的排序权重计算公式如下:

    • 评论的排序权重 = 时间权重 + 点赞权重 + 其它权重
    • 时间权重 = 100 / (评论创建时间的小时数 - 当前服务器时间的小时数)
    • 点赞权重 = 近 1 天点赞数 x 5 + 2~3 天点赞数 x 3 + 4~7 天点赞数 x 2 + 8 天以上点赞数
    • 其它权重,跟“点赞权重”类似,只是根据不同的操作数据来计算

    就是“时间权重”和“点赞权重”都基于当前时间来计算,“时间权重”每小时变化一次,“点赞权重”每天变化一次。随着社交数据的膨胀,需要重算的历史数据也增多。

    2 问题

    如何减少无必要的计算?调整“评论的排序权重”的计算公式,还是制定相应的策略做?

    3 目前的想法

    总体来看,不会实时计算评论权重,而是建立异步任务去计算评论的权重并保存。查询评论时,直接根据评论的权重排序。

    基于此想法,目前的方案如下:

    1. 按此需求计算评论权重。当帖子有新增评论,或者相关评论有新操作,则重算该帖子所有评论的权重。

    2. “评论的排序权重”目前是对历史数据的权重做减法。重新设计一个计算公式,不动历史数据,只针对新评论或者有新操作的评论的权重做加法。

    3. 其实评论的排序,已有相关的研究或方案,例如“威尔逊置信区间法”。需要时间去理解。

    第 1 条附言  ·  2022-12-21 17:54:25 +08:00
    - Reddit 的排名算法原理
    https://www.oschina.net/translate/how-reddit-ranking-algorithms-work?cmp

    这个文章分别讲解了 Reddit 的 Story (即 Feed )和 评论 的排序。都是采用跟时间无关的计算方法,即不用修改历史数据的排序得分。
    3 条回复    2022-12-21 20:44:15 +08:00
    xiaojj
        1
    xiaojj  
       2022-12-21 13:35:58 +08:00   ❤️ 3
    fox0001
        2
    fox0001  
    OP
       2022-12-21 15:58:00 +08:00 via Android
    @xiaojj #1 谢谢!虽然不能“抄作业”,但有启发意义
    GTim
        3
    GTim  
       2022-12-21 20:44:15 +08:00
    最好的作业是哔哩哔哩的源码吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2534 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:53 · PVG 23:53 · LAX 07:53 · JFK 10:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.