请教,微博的关系链模型应该如何设计:
在我看来,微博里有两种关系链,一个是互为好友,一个是单方向的关注粉丝。
在设计数据库时,应该把这两种关系分开设计成不同的数据表,or 可以放在同一个表里添加一个字段来标识两种不同的关系链呢?
1
reid2017 OP 有没有熟悉社交产品关系链的大佬来回复下
|
2
jadec0der 2018-04-24 16:11:13 +08:00
如果你是想仿个 App 原型,在表里把双向的好友关系当成两条单向 follow 存就好了。
你要是想知道新浪微博是怎么实现的…那估计就复杂了,这有 14 年的分享 http://www.infoq.com/cn/articles/weibo-relation-service-with-redis/ |
3
reid2017 OP @jadec0der 这样设计的话,如果我要查询好友列表,那需要查询并判断是否存在两条互相 follow 的记录,这样实现起来感觉很麻烦。
|
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 岂不美哉 |
5
jadec0der 2018-04-24 16:38:30 +08:00
@reid2017 如果你说的是新浪微博的话,他们好像没有显示互相关注的好友列表功能。如果是基于好友关系的 SNS,自然有另外的设计。
|
6
sevenQu 2018-04-24 16:46:34 +08:00
所有用户在一张表,多一张表两列的表储存用户相互关注的信息,分别是关注着外键和被关注者外键
flask web 开发这本书就是这样做的,不知道大型应用会怎么样做,这是小型的 |
7
vincenttone 2018-04-24 16:48:26 +08:00
感觉一个表就可以了
1. 如果用两个表存的话互粉和取消互粉必然涉及删除数据和数据转移操作两个表 2. 如果是互粉表需要分表,互粉表里也自然需要保存两条记录,和好友表重复 |
8
reid2017 OP @jadec0der 对,可能更类似是基于好友关系的 SNS,有双向的好友关系,和单向的关注关系,应该怎样设计比较好点?
|
9
TimePPT 2018-04-24 16:52:15 +08:00
@jadec0der 其实是有的,当你没做任何人工设置时,微博 web 端,点击进入关注列表页,左侧选「好友圈」,右侧列表就是你全部互相关注的人。
当然,好友圈允许用户将互相关注的某些人移除出去。这样发博时选「好友圈」时,即使互相关注,那些被移除好友圈的微博互相关注用户也看不到你发的这条好友圈微博。 |
10
banksiae 2018-04-24 19:51:24 +08:00
@jadec0der 看了下你推荐的链接,哦,跟我想的一样,redis 双向关系就可以了; 但是 redis 从 storage 降为 cache,确实是经过考验之后的做法,虽然我依然停留在 storage 这一步,但是前边我们也加了 memcache
|
11
noNOno 2018-04-24 19:53:52 +08:00
建议使用图数据库,neo4j 了解一下?
|
12
lvsemi1 2018-04-24 22:31:07 +08:00 via Android
这种需求已经值得单独弄数据结构了,楼上说的图数据库了解一下
|
14
acepcs 2018-04-25 08:59:41 +08:00
社交网络中的数据,天生适合图状的数据结构啊。。
同楼上,neo4j 了解一下,有自己的特殊语法,不过看半个下午就差不多了。 |
15
zhangsen1992 2018-04-25 11:06:51 +08:00
@acepcs 图数据库适合 但是微博这种场景太大了 性能不行吧,定制开发估计也难突破瓶颈。infoq 那个说的 redis 还是可以的
|