我是这么利用数据:这是哪家快递?2014-06-06 cnblogs 欢乐的财神网络购物现在是越来越流行,而网络购物最重要的基础也许就是物流,就是快递公司了!大家可能或多或少都收到过快递,作为快递物品,每单都有一个单号,通常我们登陆相应的网站,根据这个单号就可以查询到运输过程中的中转细节。不过,选择哪家快递公司进行托运一般是由网络商家指定的,需要知道快递公司信息,然后才能根据单号查询物流信息。后来,专门做快递查询的网站发现:各个快递公司的单号都有各自的规则,一般具有自己特色的开头或是固定的模式!这就导致:尽管独立编号,但不同公司不会重号!反过来说,根据快递单号,有经验的朋友就可以猜到是哪家快递公司!这么一来,某些快递查询网站为了方便用户查询,干脆不需要选择快递公司,而直接由系统读取单号后自己判断,它们称之为智能查询。上面的过程说的有些过于流畅,通常的,我们都需要慢慢的分析其中的陈述,顺着思路,我今天想和大家分享一点数据的衍生意义。让我们回到快递的话题,分析一下传统的查询方式:1、 指定一家快递公司2、 输入单号查询信息虽然简洁到只有两个步骤,但是,这暴露出一个致命的缺陷,不是来自软件而是来自人,来自开发这个软件的开发者!什么样的缺陷呢?我们先来看看作为人,在现实生活中是怎么查询快递信息的:1、 获得快递信息,看看是哪家,亲自去那家快递公司的网点,或者拨打其电话2、 询问是否有指定单号的信息极其相似,不是么?作为人来说,这是合理的,如果不知道哪家快递怎么查?难道要跑遍全城每一个快递网点么?于是,这么合乎逻辑的思维被开发者不假思索的带入了程序的世界!需要强调的是:人类认为自己的限制就是一切的限制,人不能做到的事情,程序也做不到!也许你要反驳说从来没这么想过,那只是这种想法根深蒂固,早已无法察觉而已!我们就说:程序愿意跑遍整个城市的每个快递网点,就为了帮你查询这个快递的信息,累死也愿意,可以么?(这里可以参考之前我的博文:“天下武功,无坚不摧,唯快不破”)突破了思维的限制,才有后来的故事,这点尤其重要,我们充分的考虑到程序的力量,才会真正的正确思考程序的问题和它该面对的挑战!当然了,这里的挑战就是:查遍每个快递公司的数据库,找到某个单号!我们顺着这个思路,就可以在程序的世界里做减法!突然的,“暴力求解”变成有些问题甚至是很多问题的灵丹妙药,将困难的事情变的看似简单,所谓“举重若轻”也许便是这个意思了吧!然而更重要的是,“暴力求解”是动力和知识的来源,当你暴力的搞定一件事之后,会发现程序展现给你的是一个巨大的机会,这里很可能是整个系统的性能瓶颈,接下来就是要优化它,比如说要在1个亿的数据中做检索,常规做法需要3秒时间,你觉得慢了,很苦恼,又不想丢失暴力求解带来的简洁操作界面。请允许我先恭喜你,只要真的干过这件事,你一定会充分的领悟许多东西,包括但不限于缓存、hotspot、索引、并行算法等等等等。回头看看,这是什么?这是数据拥有的结构型特点导致了暴力求解得以存在,暴力求解又带来了无限的诱惑,它使界面简洁,但它让程序缓慢,但人不是只会干瞪眼,人会去想办法,去优化,去努力,于是,我们说:数据驱动了人的发展!好了,故事本该结束了,按着惯例,我说一说数据的思想。有时候,很想在这个环节用些简洁的话,就像今天的话题,要的就是简洁,不是么?那么就说一句:数据是人类的记忆,也是人类发展的阶梯,这是个数据的时代!来吧,那些捧着这个教程那个宝典的同事,学来的东西,远不如你干一票暴力求解来的实在!对了,顺便问一句:哪家快递还重要么?