日期:2014-05-16  浏览次数:20686 次

类似QQ好友关系数据库应该如何设计
QQ有4亿注册用户,2亿活跃用户。同时在线人数最高时超过一亿人。
我想了解像这样海量用户,它的好友关系在数据库中应该怎么设计的?
不是说一定要知道QQ是怎么做的,就是想了解下思路。

不要告诉我是一对好友关系一条记录,那样岂不是几十亿条记录。我想肯定不是这样的。

再补充一点,还有一些针对好友的权限设置,如隐身对其可见、在线对其隐身等,是不是也要放到一块处理。有没有可能是把这些关系存到一个文件里的,每次上线时从文件中读取?

同时还要有好友分组关系,备注名称等,欢迎高手不吝赐教!

------解决方案--------------------
userid, frientid,groupid
------解决方案--------------------
1、使用冗余,每个人的好友信息都在数据库中有存储,就是你说的记录一对一关系
2、数据缓存到内存,数据访问很快
3、状态信息修改异步,比如一个人登陆了,他的好友不是马上就知道,中间间隔几秒也没有关系
4、数据可能不放在关系数据库中,可能使用nosql数据库,比如mongodb,bigtable,cassandra等
5、facebook,twitter就是用类似的思想

------解决方案--------------------
严格按照范式理论就OK。