大家讨论一下QQ是如何实现它的QQ信息查询的[上次面试QQ的面试题]

endisoft 2007-02-07 04:41:04
RT,面试主考官告诉我,QQ现在的注册人数是5.5亿。

他要我如何去设计这个数据库才能保证按QQ号码精确查询,以及按QQ的用户名称查询。

按QQ号码查询的时候,我觉得就只须要对QQ号码的前几位进行分类,比如一个表里放多放六位,也就是100W的数据,查询的时候,对于提交过来的号码的前几位进行一个判断就可以转到相应的表。

但是对于用户名称我是比较纳闷了。不知道怎么样才能查询出来。

是不是要对我分类的每一个表都要进行查询?才能保证查询出用户名称????

欢迎大家参与讨论哦!
...全文
1320 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
keketao 2007-02-10
  • 打赏
  • 举报
回复
同样可以将用户名统一进行一个编码,例如utf-8然后根据编码的字符进行查询.
karso 2007-02-10
  • 打赏
  • 举报
回复
可以考虑一下.他们是不是把数据放在本地了,只是经过加密处理。然后时不时的更新呢? 纯属猜测
Cassava 2007-02-09
  • 打赏
  • 举报
回复
即使查询1000W要2秒的话,5.5也要110秒.用户哪受得了

-----------------
不赞同以上的说法,我觉得楼主不理解索引的概念,聚集索引的查找方法大概是这样的,如已建立了聚集索引,它便会按从小到大或从大到小来排列,搜索的时候是去中间的位置取字段的值和要找的值进行比较,如果大于或小于就排除了另外一半,按这个思路
算你6亿,
6/2=3
3/2=1.5
1.5/2≈0.8
0.8/0.2=0.4
0.4/0.2=0.2
0.2/0.2=0.1
现在来看一下从6亿到1千万只需要增加6次左右的查询,6次的查询对于计算机而言花费的时间几乎等于0,现在的计算机都是上亿次运算的啊!!!!!!!!!
其实6亿跟60亿或600亿、6000亿的查找时间都是差不多的,这就是聚集索引的作用

kaka_ 2007-02-09
  • 打赏
  • 举报
回复
http://zhidao.baidu.com/question/5755129.html?si=1

在百度上面看到一个帖子~!
huozg110 2007-02-09
  • 打赏
  • 举报
回复
我同意楼上说的,其实这些技术都用了,QQ公司最关键的是在硬件上的,(当然我没说数据库设计不重要,也很重要,而且非常重要)他们公司的人说,他们在硬件上的投资是普通人难以想象的,(物品同事是该公司的)。数据库优化的好最关键是硬件上的扩充。他们开会都不用讨论什么钱不钱的,钱对于他们来说太简单了,加一个虚拟衣服不用多买,50个人买一个,那钱就是一笔不小的数目,哪家公司能这么做呀。关键是人家用户群太大了。拥有几亿的用户,还怕什么。
所以他们的口号是:硬件能使多快的使多快,能使的越多就的就越多。不求最快,但求最多。(他们的服务器群组那顶N家大公司的规模)
Cassava 2007-02-09
  • 打赏
  • 举报
回复
聚集索引一个表只能建立一个,对于象QQ这样的软件,我建议采用多数据库同步的方法来建立不同的聚集索引,如把QQ的用户表用发布和订阅的方法使它同步为多个表,然后在不同的表建立不同的聚集索引就可以了,比如QQ号码的聚集索引建在A表,用户名称的聚集索引建在B表,如果查的是QQ号码就去A表查,如果查的是用户名称就去B表查
endisoft 2007-02-09
  • 打赏
  • 举报
回复
楼上说得很有道理。
谢谢你的参与讨论

我想对于QQ号码的确是这样子
我前面也提到了,我想讨论的是用户名称。而非QQ号码.

但是对于QQ的用户名称,它建立聚集索引,对于它能够起到的效果有多大呢

因为用户名称在这里不是主键。它所支撑的由大到小,或者由小到大,是一个什么样的概念.

而且如果在表中二个column,同时加上了索引,那数据又是一个什么样子呢

楼上兄弟能不能继续讨论一下。

谢谢
zzzsea 2007-02-08
  • 打赏
  • 举报
回复
按号码已经把表分出来了,先在第一个表查,如果人数够一页的话,就不在第二个表查了,不够再从第二个表查,程序组合一下数据再显示给用户。
lovenets 2007-02-08
  • 打赏
  • 举报
回复
这个问题比较难啊

数字摆在那的啊,5.5亿啊,再怎么去优化,还那么多数据在那的啊,我觉得只从程序方面是不可能的

这只能从各方面着手
Soloboy1020 2007-02-08
  • 打赏
  • 举报
回复
mark一下
ITapprentice 2007-02-08
  • 打赏
  • 举报
回复
腾讯估计不是要招人,而是要你帮他解决他解决不了的问题。
呵呵,楼主上当鸟
Andy-W 2007-02-08
  • 打赏
  • 举报
回复
要是存在多人使用姓名查询,服务器负荷将会怎么样?
呵呵
alioxp 2007-02-08
  • 打赏
  • 举报
回复
算法应该完全取决与存储结构.总体应该是个B+树的存储结构,节点分布在不同的服务器上,每个服务器具体用数据库还是文件存储应该都可以,各节点算法取决与用户能忍受的时间.我觉得每一个人都能琢磨明白,没什么特别复杂的.
haoyuzhou009 2007-02-08
  • 打赏
  • 举报
回复
多架及各服务器 然后将qq号码分段存储 再用什么索引什么的
VayHow 2007-02-08
  • 打赏
  • 举报
回复
号码查询没问题,但是按名称查询,你可以告诉他:对不起,我无法设计出一个优化的算法。你们腾讯也没有办到,不信我们随便找一台电脑上网,你看用QQ能否按好友名查询出我朋友的号码。
copico 2007-02-08
  • 打赏
  • 举报
回复
如果你的QQ号是PK,那么建立索引,直接查询就很快了(具体没实验过)
或者你把不同位的QQ号分组.
cimil 2007-02-07
  • 打赏
  • 举报
回复
谁告诉你腾讯是在数据库完成这个查询功能的?
ztwz 2007-02-07
  • 打赏
  • 举报
回复
帮顶,
rockywu 2007-02-07
  • 打赏
  • 举报
回复
帮顶
zzmsl 2007-02-07
  • 打赏
  • 举报
回复
难道SQLServer 5.5亿 行就动不了了吗?
加载更多回复(31)

62,040

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧