论坛首页 招聘求职论坛

今天面试被问到了一个问题,大家来讨论一下

浏览 14027 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-04-02   最后修改:2011-04-06
情景是这样的,就拿10086来说吧,我打进电话后,我的信息,包括号码了还有一些其它的情况会出现在客服的屏幕上。这个应该是用ajax以我的电话号码为条件去数据库里查找,请问如果是大表,就10086的情况,数据库里有上亿条电话数据,怎么能一下子把信息全查出来,我的意思不能等时间长了才出来,或着要客服自己去查询,因为电话打进来,客服拿起电话就要先生女生的打咋呼。

我当时回答的不好,大家来讨论讨论,学习一下。



看了大家的回答,总结出两点解决这个问题的方案
1 水平+垂直分割数据库。按一定的规律对表切片。(具体到10086来说就是对号码按地区来存)
    这样确实可以解决这个问题。不过,我又产生了一个疑问,这个是关于对表切片的问题,对于按号码切片做成的表,如何再按其它字段来查询?

2 用一些nosql的数据库,也可以解决这个问题,具体可以用分布式文档存储数据库 MongoDB,听说这个解决这个问题很厉害。我也是最近才有所了解。


在网站上搜到这个哥们对水平切分说的很明白,大家共享一下
http://www.iteye.com/topic/409294
   发表时间:2011-04-02  
你自己建个1亿条数据的库试试就知道查询单条成本是多大了,如果慢就学着设计和优化这个功能,所有答案都能弄明白
0 请登录后投票
   发表时间:2011-04-02  
ylq365 写道
情景是这样的,就拿10086来说吧,我打进电话后,我的信息,包括号码了还有一些其它的情况会出现在客服的屏幕上。这个应该是用ajax以我的电话号码为条件去数据库里查找,请问如果是大表,就10086的情况,数据库里有上亿条电话数据,怎么能一下子把信息全查出来,我的意思不能等时间长了才出来,或着要客服自己去查询,因为电话打进来,客服拿起电话就要先生女生的打咋呼。

我当时回答的不好,大家来讨论讨论,学习一下。

水平+垂直分割数据库。
0 请登录后投票
   发表时间:2011-04-02  
对呀,就是优化的问题,如何优化才是最好的?
0 请登录后投票
   发表时间:2011-04-03  
手机号码前七位就可以精确到地区了
10086也是分地区的

分割之后只针对最后四位查询就可以了吧
0 请登录后投票
   发表时间:2011-04-03  
可以考虑按一定的规律分表去做。
0 请登录后投票
   发表时间:2011-04-03  
提示一点,个人信息是按归属地存储的.
你的个人信息只会存在于你的号码所在地的HLR服务器中,在漫游或拨打外地电话时这个信息会实时的传送到对应被叫所在的服务器.
所以只需要在你号码的归属地服务器中执行查询,而这个归属地的个人信息服务器有可能划分到很小一片区域,比如你在上海某个区,要查询你的个人信息只需要到某个去对应的个人信息服务器中查询.
所以最终去查询的服务器中保存的数据量只是那个片区的所有信息,能有多少条? 十万?百万?
0 请登录后投票
   发表时间:2011-04-03   最后修改:2011-04-03
1、对号段分表
2、对号码作为PK,号码都是唯一的

通过这种树型分割后,根据主键查其中一条,几十亿也就闪一下就出来

关键是LZ对场景不清晰
0 请登录后投票
   发表时间:2011-04-03  
又不是全国用户都在一个库里面,你广州号码打广州10086,会到北京的10086吗?
0 请登录后投票
   发表时间:2011-04-03   最后修改:2011-04-03
表分区,按地区进行分区。。。查询的时候,判断这个号码属于哪个地区,在进行查询
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics