50 万用户的应用,怎么设计关注粉丝数据表?

请问大佬们,公司的项目有50万用户,活跃的也挺多的,少说有20万。
现在想做一个用户之间关注的功能,mysql表怎么设计才会好?
如果放在一个表里,随随便便数据就好几千万,查询起来很耗时。
第一次接触这么多数据的表,找大家请教一下,谢谢。

附言 1  ·  5年前
wanghan
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 13
php炎黄

考虑用redis缓存吧

5年前 评论
wanghan

@php炎黄 缓存不行啊,要链表查询的

5年前 评论

1.有钱用redis咯
2.用user_id 来分表,比如可以设定10张表, 1-5万的id的用户存表1,5到10万就存表2,这样逻辑简单,扩展表也方便,毕竟每个项目都想着用户不断增加嘛。想用hash也可以。这样做有一个问题是,如果我想查哪些人关注了我就不太好查,最好再建立一个粉丝表(user_id ,关注我的人的id序列)

5年前 评论
wanghan

@yujiarong 方案1是用redis集合做吗?老板肯定不会出钱加内存的,不过很想知道方案1怎么做哈哈。

方案2看的似懂非懂,意思是不是如果第6万用户关注了第1个用户,第11万个用户也关注了第1个用户,这样
关联关系会散落到好几张表里?

5年前 评论
yujiarong 5年前
wanghan (作者) (楼主) 5年前
yooky 2年前

你可以请教下 新浪的大佬,或则网易云的 设计,网易应该用户日活跃是你的几十倍吧

5年前 评论
wanghan

@qinplain 可是我不认识他们啊

5年前 评论

感觉还是用redis的集合做好些,这样处理某些关系方便些。比如要获取2个用户的共同粉丝,直接取这2个人集合的交集就完了。

5年前 评论
wanghan

@kilogi 很费内存空间吧?

5年前 评论

@wanghan

What's the Redis memory footprint?

To give you a few examples (all obtained using 64-bit instances):

  • An empty instance uses ~ 1MB of memory.
  • 1 Million small Keys -> String Value pairs use ~ 100MB of memory.
  • 1 Million Keys -> Hash value, representing an object with 5 fields, use ~ 200 MB of memory.
    按官方的说法,大概一条100字节,50W条的话,大概占47M。但是实际情况的话,会更多些。
5年前 评论
wanghan

@kilogi 太感谢了~

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!