登录
转载

什么都不懂,还想指挥我?

发布于 2020-11-27 阅读 4510
  • 数据库
转载

今天召开了一个Java技术分享会,讲到一个数据库设计方面的问题。

有个新入职的小伙,问了我好几个问题,牛气轰轰的,总觉得是在教我做人。

下面是他提的问题当中的某一个:

他说:“我就问你,微博的用户粉丝关系表,如何解决笛卡尔积的问题?”

我回答的是,微博的明星粉丝与普通用户的粉丝关系表单独设计。

用户的粉丝设置一个阈值,比如1万,1万以内可以考虑根据用户ID取模分表,像微博这么大的用户群体,可以多拆分一些表,超过1万粉丝的用户,归属为明星用户。

如果是明星用户,粉丝上千万的这种,可以用他的用户ID做表名,如t_follow_id65535,表中只存放他的粉丝用户ID,并加索引,查询起来也是非常快捷的。


小伙不依不饶着说道:“那这样的话,需要很多表啊,除了粉丝表,还有关注表吧,这太恐怖了。”

我说,只有粉丝表,关注表可以省掉。

比如说,ID为123的用户,和ID为456的用户,之间发生了粉丝的关系,只需要存一条数据即可。

这两个用户ID必然有一大一小的情况,我们只要保证每次都是小的在前面,大的在后面,然后这条数据再添加一个字段,用来表示他们之间的关系,0表示关系已删除,1表示小的关注大的,2表示大的关注小的,3表示他们互相成为了粉丝。


小伙最后还是倔强道:“那不对啊,明星用户和普通用户产生了粉丝关系,不是存在2张表里都有数据了吗?”

我说,明星用户特殊考虑就行了,只要遇到两个ID,判断其中是否有明星用户,有的话明星用户的ID放前面,这样就能保证顺序不会出错。

如果考虑到普通用户关注了明星,而只有明星表里有数据的话,那么可以多加一张冗余表,比如叫我的明星关注表。


小伙最后还想问什么,但是想了想又坐下了,各位觉得他还想问啥?

评论区

我是搬运工2号,没人自称1号

2

0

1

举报