最近碰到多对多型数据需要设计数据库,然后想到可能和社交类应用的用户关系场景相似,然后就上网一痛乱搜,发现大家比较公认的方法是:
某 A 网友回答:
数据表三个字段
主键(自动生成) UserID1UserID2
注意事项
<UserID 1, UserID 2> 和 <UserID 2, UserID 1> 是一样的记录,不要重复添加
为了快速判断两个人是不是好友,可以在程序层插入数据前加一个限制 UserID1 < UserID2
为了快速得到一个人的好友列表,查询时用 UNION ALL,不是 UNION
如果为了再高效,加入缓存层( Redis 或 Memcached )
--------------------------------------------------------------
某 B 网友回答:
还能怎么设计呢
一个 uid,一个 friend_uid 呗
*********************************
现在细想一下,都是一个关系一条记录,那像微信,微博等大型的网站用户量怎么也得是亿级别的,每个人好友不用太多,就 200 个吧。那算下来这个用户关系表,最少也得是 200 亿行(⊙﹏⊙)b。
难道事实真的是这样吗?求科普
某 A 网友回答:
数据表三个字段
主键(自动生成) UserID1UserID2
注意事项
<UserID 1, UserID 2> 和 <UserID 2, UserID 1> 是一样的记录,不要重复添加
为了快速判断两个人是不是好友,可以在程序层插入数据前加一个限制 UserID1 < UserID2
为了快速得到一个人的好友列表,查询时用 UNION ALL,不是 UNION
如果为了再高效,加入缓存层( Redis 或 Memcached )
--------------------------------------------------------------
某 B 网友回答:
还能怎么设计呢
一个 uid,一个 friend_uid 呗
*********************************
现在细想一下,都是一个关系一条记录,那像微信,微博等大型的网站用户量怎么也得是亿级别的,每个人好友不用太多,就 200 个吧。那算下来这个用户关系表,最少也得是 200 亿行(⊙﹏⊙)b。
难道事实真的是这样吗?求科普