微博关系链模型设计 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
reid2017
V2EX    程序员

微博关系链模型设计

  •  
  •   reid2017 2018-04-24 16:01:33 +08:00 6409 次点击
    这是一个创建于 2805 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教,微博的关系链模型应该如何设计:

    在我看来,微博里有两种关系链,一个是互为好友,一个是单方向的关注粉丝。

    在设计数据库时,应该把这两种关系分开设计成不同的数据表,or 可以放在同一个表里添加一个字段来标识两种不同的关系链呢?

    15 条回复    2018-04-25 11:06:51 +08:00
    reid2017
        1
    reid2017  
    OP
       2018-04-24 16:09:01 +08:00
    有没有熟悉社交产品关系链的大佬来回复下
    jadec0der
        2
    jadec0der  
       2018-04-24 16:11:13 +08:00
    如果你是想仿个 App 原型,在表里把双向的好友关系当成两条单向 follow 存就好了。

    你要是想知道新浪微博是怎么实现的…那估计就复杂了,这有 14 年的分享 http://www.infoq.com/cn/articles/weibo-relation-service-with-redis/
    reid2017
        3
    reid2017  
    OP
       2018-04-24 16:28:41 +08:00
    @jadec0der 这样设计的话,如果我要查询好友列表,那需要查询并判断是否存在两条互相 follow 的记录,这样实现起来感觉很麻烦。
    lookas2001
        4
    lookas2001  
       2018-04-24 16:31:34 +08:00 via Android
    follows
    id follower_user_id followee_user_id
    select * from follows where follower_user_id=xxx
    select * from follows where followee_user_id=xxx
    岂不美哉
    jadec0der
        5
    jadec0der  
       2018-04-24 16:38:30 +08:00
    @reid2017 如果你说的是新浪微博的话,他们好像没有显示互相关注的好友列表功能。如果是基于好友关系的 SNS,自然有另外的设计。
    sevenQu
        6
    sevenQu  
       2018-04-24 16:46:34 +08:00
    所有用户在一张表,多一张表两列的表储存用户相互关注的信息,分别是关注着外键和被关注者外键
    flask web 开发这本书就是这样做的,不知道大型应用会怎么样做,这是小型的
        7
    vincenttone  
       2018-04-24 16:48:26 +08:00
    感觉一个表就可以了
    1. 如果用两个表存的话互粉和取消互粉必然涉及删除数据和数据转移操作两个表
    2. 如果是互粉表需要分表,互粉表里也自然需要保存两条记录,和好友表重复
    reid2017
        8
    reid2017  
    OP
       2018-04-24 16:49:07 +08:00
    @jadec0der 对,可能更类似是基于好友关系的 SNS,有双向的好友关系,和单向的关注关系,应该怎样设计比较好点?
    TimePPT
        9
    TimePPT  
    PRO
       2018-04-24 16:52:15 +08:00
    @jadec0der 其实是有的,当你没做任何人工设置时,微博 web 端,点击进入关注列表页,左侧选「好友圈」,右侧列表就是你全部互相关注的人。
    当然,好友圈允许用户将互相关注的某些人移除出去。这样发博时选「好友圈」时,即使互相关注,那些被移除好友圈的微博互相关注用户也看不到你发的这条好友圈微博。
    banksiae
        10
    banksiae  
       2018-04-24 19:51:24 +08:00
    @jadec0der 看了下你推荐的链接,哦,跟我想的一样,redis 双向关系就可以了; 但是 redis 从 storage 降为 cache,确实是经过考验之后的做法,虽然我依然停留在 storage 这一步,但是前边我们也加了 memcache
    noNOno
        11
    noNOno  
       2018-04-24 19:53:52 +08:00
    建议使用图数据库,neo4j 了解一下?
    lvsemi1
        12
    lvsemi1  
       2018-04-24 22:31:07 +08:00 via Android
    这种需求已经值得单独弄数据结构了,楼上说的图数据库了解一下
    reid2017
        13
    reid2017  
    OP
       2018-04-24 22:37:53 +08:00
    @noNOno
    @lvsemi1
    高端,还没接触过图数据库。。
    acepcs
        14
    acepcs  
       2018-04-25 08:59:41 +08:00
    社交网络中的数据,天生适合图状的数据结构啊。。
    同楼上,neo4j 了解一下,有自己的特殊语法,不过看半个下午就差不多了。
    zhangsen1992
        15
    zhangsen1992  
       2018-04-25 11:06:51 +08:00
    @acepcs 图数据库适合 但是微博这种场景太大了 性能不行吧,定制开发估计也难突破瓶颈。infoq 那个说的 redis 还是可以的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3238 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 00:44 PVG 08:44 LAX 16:44 JFK 19:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86