在社交领域之中,有很多类型的数据存储,使用数据的形态也是多种多态。目前主流的社交软件都具备推荐模块,即把新闻/消息/短文推动给合适的人,同时会考虑到地理位置的信息。

社交领域的基本架构及流程

社交领域的基本架构图如下图所示:社交架构图

社交领域基本架构分为以下部分:

  • 客户登录发帖及看帖
    1. 客户登录后,系统会记录位置信息,位置信息GeoHash处理后,可以存储在Lindorm之中。
    2. 客户发帖,帖子会同时写到Lindorm之中,帖子发出后可以立即写到推荐之中,并且可以看到自己发的帖。
    3. 客户浏览帖子,系统记录客户看过的帖子信息,将浏览记录写到Lindorm之中,以备后续分析反馈给用户特性 - 用户画像模块。

    具备帖子/新闻 的数据表,一般在1T-1P左右。

  • 用户特性 - 用户画像
    • 用户注册后,会选择感兴趣的特征,此块数据会形成最初的用户特性
    • 用户浏览信息后,会产生浏览的历史记录,存储到Lindorm之中。
    • 晚上会启动spark或者用户写的code分析用户的历史记录,修正用户的标签画像。

    最终会形成一张用户特性 - 用户画像表

  • 推荐及Feeds流

    一般具有两个模型,分别为推模型拉模型,区别在于是以帖子为维度还是以查询的人为维度。Lindorm基于LSM,比较适合推模型

    1. 当帖子或者文章产生后,同时会写一份到Lindorm存储中。
    2. 计算帖子的属性,分析帖子的归类,提取特征值
    3. 根据帖子的特征值用户特性-用户画像,将匹配的用户写入到推送的表之中。此块根据不同的业务,可能涉及的逻辑比较复杂,比如加入位置的因素 、权重、好友关注的列表,将不活跃的客户剔除。

    最后会形成一张帖子推荐表,数据量大约为1T到100T左右。过期时间一般在3-4天左右。

    说明 对于大V或者写运营普发的信息,可以采取拉模式,可以显著减少写放大。一般实际的业务是推模型与混合使用。
  • 帖子新闻查询

    用户打开APP,可以查询最近推荐的信息 。

    1. 对于大V或者运营推送的信息,可以单独链路查询。
    2. 根据帖子推荐表,查询到所属的帖子ID后,再查询实际的帖子信息。
  • 基于位置的推荐人
    1. 基于客户位置的信息,推荐附近兴趣相投的人 。
    2. 基于地理信息,查询附近所有的客户。
    3. 查询画像表,推荐兴趣相投的人。