关于QQ好友关系数据库存储方式

来源:百度知道 编辑:UC知道 时间:2024/05/22 00:17:41
QQ好友关系在数据库可能是如何存储的?
假设一种情况:一个QQ号码对应一个好友QQ号码。
如果一个人有50个好友, 在数据库里就有50条记录。
腾讯QQ有1亿用户岂不是要存储50亿条?
每次假设有1000人请求登陆QQ,那岂不是查询50000亿次?这不可能吧。
有没有压缩算法或者其他存储方式?
我只是用QQ举个例子, 这是一道面试题。如何解决好友关系存储。

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

这个不敢胡乱猜测,蒙对了吧,人家腾讯可能就找上门来了,说咱盗取商业秘密;蒙错了吧,这不是糊弄你么?

个人觉得:一个QQ对应多个好友,非会员QQ好友上限好像是500吧,主QQ那个字段应该是带索引的,可以一下拉取这个QQ号的所有好友,不过也有可能是按分区走的

再一个,你说的1000人同时登陆的问题,腾讯才不会那么傻就一个服务器呢,自己看看就知道了,分地域的不同,所用的服务器也不同,数据库也有可能是做的镜像什么的吧,这就不知道了

声明:以上观点只是本人胡乱猜测,如有雷同实属巧合
-------------补充---------
QQ_NUM FRIEND_QQ_NUM
123 456
123 789
123 234
456 123
456 789
789 123
234 123

简单点,拿数据来说明问题吧

QQ_NUM字段必须有索引,当你登录的时候,select FRIEND_QQ_NUM from 表名 where QQ_NUM=123
但是不排除这两个字段是个联合索引,因为根本不可能重复