程序设计是无止境的 —— 从一个黑名单查询业务说起

s1081441公司需要一个黑名单查询,对于我们公司的业务来讲所有的手机号中大约有过千万的手机号是进入了黑名单的,还有相应的白名单,红名单,VIP业务名单,每一个都有几百万的数据。

第一感觉,必然需要数据库的查询支持,那么一群程序员开如讨论如何优化这个查询,因为公司的业务都是毫秒级的,每秒都有上百个手机号码需要查询,难度是相当大的,并且,随着业务的推移,日积月累,黑名单也会越来越大,那么针对的查询速度也会越来越慢。

越讨论越觉得这个需求是非常有挑战的项目。

这时候走过来一个C程序员,听完需求后,略加思考讲出一个设计思路简直是我们几个人想都没有想过的:将所有的手机号码都影射到内存中,每个手机号码占四个字节,程序通过运算后内存指针可以直接找到请求手机号对应的值。再取半个字节来表示一个用户对应的vip值,二进制的1是,0是否,4位中从低到高分别表示。是否是vip,是否是白名单,是否是红名单,是否是黑名单,得到vip的数字值,放到协议包中需要转成字符。把这个程序独立架设两台普通服务器,互做镜像,1G的内存载入所有的手机号码,通过Socket连接进行Update,Select即可。(大致的意思,因是在Blog上写写,没有打算写那么清晰,懂的看客应该知道大概意思了。)

听完后,我们大吃一惊,我们一天到晚的面向对象,OO,DDD……,真的忘记了计算机的运算能力了,忘记了学校学习的知识了,事实上我们应该想到的。如此去做,一个有一年工作经验的毕业生,稍有点水平,没有忘了C语言的都能写出来。

程序设计真的是无止境的,有时候要跳出来想,且要跳得再远一点,干脆跳到月球上看地球,这样的话思维才能打得开。

评论

  1. 这个也有人抢,专业不通~

  2. 其实都一样,我是做同类型的东西做久了的话,思维便会变得禁锢起来。

  3. 关键是经常想不出来,自以为跳出去了,实际上还在某个角落…

  4. 不错的方法,如果只读,是可行的,要是涉及到手机号码更新的话,是否有考虑到数据的持久化?比如掉电、死机、程序异常退出,等情况……

  5. 记得腾讯来面试,一道题我用二进制运算解的,面试官愣是半天才懂,哈哈,相比和您一样的状态

  6. 胸花(www.china-craft.org)我顶,我再顶~我再再顶~好~顶不动了~下一个接上~~~

  7. 新年快乐 ~~o(>_<)o ~~(~ o ~)~zZO(∩_∩)O哈哈哈~博客写的不错啊 继续加油啊 回踩谢谢金属加工机械(www.cn-auto.org)

  8. 山东百度优化(www.jnseo.org)呵呵,博主的文章写的不错!支持一下,不要忘记了来我空间转转哈~

  9. 控制设备(www.china-sp.org)呵呵,博客很精辟啊,笑口常开昂,来顶下博客,顺便留个名。学习去了.

发表评论

可以使用下列 XHTML 标签:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>