微博关系链模型设计

2018-04-24 16:01:33 +08:00
 reid2017

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

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

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

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/449466

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX