V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
geelaw
V2EX  ›  分享创造

如何实现微博的“我经常访问的人”

  •  
  •   geelaw ·
    GeeLaw · 2017-12-18 12:12:28 +08:00 · 9132 次点击
    这是一个创建于 2550 天前的主题,其中的信息可能已经有所发展或是发生改变。

    全文见 How to implement Frequented Visitees of Sina Weibo

    本文是我臆想中的实现这个功能可能的方法,不代表我反向工程了新浪微博,也不代表微博是如此实现的。

    主要思路:用户的浏览数据是以流(在线)的方式呈现的,使用熟知的估计流中元素频率的方法可以在时间、额外空间都很少的情况下实现用户访问一个人的频率的估计,从而给出“经常访问的人”。

    8 条回复    2017-12-21 16:07:24 +08:00
    smartiscool
        1
    smartiscool  
       2017-12-18 16:46:01 +08:00
    一般都是离线计算一下然后放缓存里,没你想的那么复杂
    wizardforcel
        2
    wizardforcel  
       2017-12-18 18:14:00 +08:00
    到日志服务器里面检索一周之内的访问记录,然后计数排序就行了。
    owenliang
        3
    owenliang  
       2017-12-18 18:33:21 +08:00 via Android
    取近期访问日志,日志 a,b 表示 a 访问了 b。

    mrjob 第一轮统计 a,b 的计数,第二轮按 a 聚合 topN,结果进 redis。
    SoulSleep
        4
    SoulSleep  
       2017-12-18 19:47:29 +08:00
    有勇气用英文写,就可以大大的赞一个了!
    Hackghost
        5
    Hackghost  
       2017-12-18 21:35:18 +08:00
    🤔️貌似可以加入时间衰减系数,让最近看得多的排在前面
    geelaw
        6
    geelaw  
    OP
       2017-12-18 22:09:52 +08:00
    @wizardforcel Hmmm 您可能没有意识到这样计算是比较慢的。
    @owenliang 同上。

    另外该方案也可以用于 trending 的计算(还需要一个等价类 filter 一下)

    @Hackghost 你没注意到最后一段提了如何加入指数衰减哈哈哈哈,就是每次处理之前乘一下上次以来的衰减系数,并把计数放宽到非整数。
    wizardforcel
        7
    wizardforcel  
       2017-12-19 09:26:35 +08:00 via Android
    @geelaw 无所谓,反正是离线逻辑。

    而且多机情况下根本不缺计算资源。
    feiyang21687
        8
    feiyang21687  
       2017-12-21 16:07:24 +08:00
    @geelaw 要不要来微博聊聊,^_^
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3335 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:50 · PVG 08:50 · LAX 16:50 · JFK 19:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.