程序设计是无止境的 —— 从一个黑名单查询业务说起
由 simpkan 发表于 18:08
公司需要一个黑名单查询,对于我们公司的业务来讲所有的手机号中大约有过千万的手机号是进入了黑名单的,还有相应的白名单,红名单,VIP业务名单,每一个都有几百万的数据。
第一感觉,必然需要数据库的查询支持,那么一群程序员开如讨论如何优化这个查询,因为公司的业务都是毫秒级的,每秒都有上百个手机号码需要查询,难度是相当大的,并且,随着业务的推移,日积月累,黑名单也会越来越大,那么针对的查询速度也会越来越慢。
越讨论越觉得这个需求是非常有挑战的项目。
这时候走过来一个C程序员,听完需求后,略加思考讲出一个设计思路简直是我们几个人想都没有想过的:将所有的手机号码都影射到内存中,每个手机号码占四个字节,程序通过运算后内存指针可以直接找到请求手机号对应的值。再取半个字节来表示一个用户对应的vip值,二进制的1是,0是否,4位中从低到高分别表示。是否是vip,是否是白名单,是否是红名单,是否是黑名单,得到vip的数字值,放到协议包中需要转成字符。把这个程序独立架设两台普通服务器,互做镜像,1G的内存载入所有的手机号码,通过Socket连接进行Update,Select即可。(大致的意思,因是在Blog上写写,没有打算写那么清晰,懂的看客应该知道大概意思了。)
听完后,我们大吃一惊,我们一天到晚的面向对象,OO,DDD……,真的忘记了计算机的运算能力了,忘记了学校学习的知识了,事实上我们应该想到的。如此去做,一个有一年工作经验的毕业生,稍有点水平,没有忘了C语言的都能写出来。
程序设计真的是无止境的,有时候要跳出来想,且要跳得再远一点,干脆跳到月球上看地球,这样的话思维才能打得开。