RT,面试主考官告诉我,QQ现在的注册人数是5.5亿。他要我如何去设计这个数据库才能保证按QQ号码精确查询,以及按QQ的用户名称查询。按QQ号码查询的时候,我觉得就只须要对QQ号码的前几位进行分类,比如一个表里放多放六位,也就是100W的数据,查询的时候,对于提交过来的号码的前几位进行一个判断就可以转到相应的表。但是对于用户名称我是比较纳闷了。不知道怎么样才能查询出来。是不是要对我分类的每一个表都要进行查询?才能保证查询出用户名称????欢迎大家参与讨论哦!

解决方案 »

  1.   

    面试ASP.NET的,不过没面试上,55555~~~
      

  2.   

    丫的,这鸟贴就该沉  :)
    和面试你的说:你就不会花钱买硬件优化啊,让程序员去死磕,劳动力不值钱啊,你以为全世界有几个QQ样子的机构啊,优化个p
      

  3.   

    对于数据表(以及查询)分区,大多数大型数据库自己都有此功能,虽然也可以在业务逻辑设计的时候分pool,但是我觉得这纯粹是过分技术化故弄玄虚。名称与号码的处理完全相同。在数据库中,你并不需要去管是否分区,查询SQL并没有任何变化。你可以查询一下分区之后数据库是如何对分区表进行查询的。
      

  4.   

    即使查询1000W要2秒的话,5.5也要110秒.用户哪受得了
    ————————————————————————————————————————
    我不知道怎么形容这个才算准确,我只能稍微严厉点说成这显得有点“无知”。1000W如果需要2秒,即使结构选择最差的B+树,55000W最多也就13秒就可以查到。什么叫做索引?索引的时间如果按照数据规模呈线性关系,那不就跟顺序查找完全一样了吗?!
      

  5.   

    sp1234(修改成功!请关闭本页。) 在数据库中,你并不需要去管是否分区,查询SQL并没有任何变化。你可以查询一下分区之后数据库是如何对分区表进行查询的。查询SQL并没有任何变化。这句我非常认可,但是关键是怎么找到相应的表比如我现在要查询"endisoft"这样的用户名,那我应该怎么去查,查询哪张表呢因为之前我已经对前几位的QQ号码分表了,但是对于用户名称却没有。我想把分不表呀,因为这里面根本就没有特征,而且名称可能会被更改,只有QQ号码才是主键!!!怎么处理,不可能遍历所有的表吧!!!
      

  6.   

    还有我用我自己的电脑查询500W的企业数据,索引都建立了,而且还是主键查询。
    结果花费我至少5秒的时间,可能我的机子比较差点,我想也不会差这么大。而且我现在要查询的是用户名称,而不是QQ号码。所以我想肯定时间会更长了。
      

  7.   

    难道SQLServer 5.5亿 行就动不了了吗?
      

  8.   

    如果你的QQ号是PK,那么建立索引,直接查询就很快了(具体没实验过)
    或者你把不同位的QQ号分组.
      

  9.   

    楼上说得很有道理。
    谢谢你的参与讨论我想对于QQ号码的确是这样子
    我前面也提到了,我想讨论的是用户名称。而非QQ号码.但是对于QQ的用户名称,它建立聚集索引,对于它能够起到的效果有多大呢因为用户名称在这里不是主键。它所支撑的由大到小,或者由小到大,是一个什么样的概念.而且如果在表中二个column,同时加上了索引,那数据又是一个什么样子呢楼上兄弟能不能继续讨论一下。谢谢
      

  10.   

    聚集索引一个表只能建立一个,对于象QQ这样的软件,我建议采用多数据库同步的方法来建立不同的聚集索引,如把QQ的用户表用发布和订阅的方法使它同步为多个表,然后在不同的表建立不同的聚集索引就可以了,比如QQ号码的聚集索引建在A表,用户名称的聚集索引建在B表,如果查的是QQ号码就去A表查,如果查的是用户名称就去B表查
      

  11.   

    我同意楼上说的,其实这些技术都用了,QQ公司最关键的是在硬件上的,(当然我没说数据库设计不重要,也很重要,而且非常重要)他们公司的人说,他们在硬件上的投资是普通人难以想象的,(物品同事是该公司的)。数据库优化的好最关键是硬件上的扩充。他们开会都不用讨论什么钱不钱的,钱对于他们来说太简单了,加一个虚拟衣服不用多买,50个人买一个,那钱就是一笔不小的数目,哪家公司能这么做呀。关键是人家用户群太大了。拥有几亿的用户,还怕什么。
    所以他们的口号是:硬件能使多快的使多快,能使的越多就的就越多。不求最快,但求最多。(他们的服务器群组那顶N家大公司的规模)
      

  12.   

    http://zhidao.baidu.com/question/5755129.html?si=1在百度上面看到一个帖子~!
      

  13.   

    同样可以将用户名统一进行一个编码,例如utf-8然后根据编码的字符进行查询.