在从《长安十二时辰》望楼传信理解网络通讯一文中,经过对望楼传信的设计讲了网络通讯的流程。markdown
本文经过《长安十二时辰》里的另外一个设计「大案牍术」来聊一聊大数据计算!网络
大案牍术是剧中徐宾所擅长的方法,即在档案中发掘出有用的信息!为了方便大案牍术的实行,靖安司的选址也很讲究:oop
我们靖安司草创之时,地点几经改易,最终定在了光德坊。这里同坊有京兆府,便于案牍调阅;西邻西市,能够监控胡商;北接皇城,时刻联络宫中;东连朱雀大街,易于调动兵力。大数据
话说,催六郎抓狼卫失败。李必命徐宾用大案牍术再找一位得力的人选来灭狼。优化
为了能快速找到狼卫,保长安太平,此人必须:spa
徐宾接到命令后,遂着手开始大案牍术!设计
下面咱们就以「办案数量」为分析维度,来看看徐宾是如何经过大案牍术找到张小敬的!3d
为了便于流程的说明,这里对条件进行简化,只根据「办案经验」来进行查找code
假设,大案牍术的基本流程是这样子的(官方也没给出具体的大案牍术流程,那我就只好本身来编了!!!):orm
假设,如今须要查询3000册案牍,而车子一次只能从京兆府运出300册案牍,运送一次要30分钟;徐宾1分钟能翻阅完一册案牍,1分钟能汇总10条数据,最终分析时间30分钟,咱们来看一下上面的流程所花费的时间。
总时间就是 30(第一次运送案牍的时间) + 3000(翻阅案牍的总时间) + 500(汇总时间) + 30(分析时间) = 3560 分钟,即须要近60个小时!!!
很明显,上面的大案牍术根本没法知足如今的紧急状况。等找到这我的的时候,长安早凉了!!!不不不,是凉透了!!!
能够看到,上面的流程中,耗时最长的是翻阅案牍的时间,主要缘由是人手不够,只有徐宾一我的翻阅,速度太慢了。因为翻阅只是简单的找出办案数量并记录下来,因此普通人也能够作。
为了能尽快找到能抓狼卫的人,李必紧急给徐宾调来99我的来协助。如今流程就变成了:
咱们假设这99我的翻阅案牍的速度和徐宾相同,都是1分钟能翻阅一个案牍,那么咱们来计算一下这个流程所花费的时间:
花费的总时间为: 300(运送案牍的总时间) + 300(运回案牍的总时间) + 500(汇总时间) + 30(分析时间) = 1130 分钟,即近20个小时。虽然时间减小了40个小时,可是依然仍是太慢了。
为何这里要计算完整的运送案牍的时间?
在上面的流程中,主要时间消耗在案牍翻阅上,第一次案牍运送到靖安司后,徐宾进行翻阅,须要300分钟,而这300分钟内,剩下的案牍就已经所有运送过来了。
而在这里的流程里,案牍被送过来之后,3分钟就被翻阅完了,而后就须要等运送的车子回去再运,一来一去60分钟须要计算在流程内。翻阅案牍的时间被包含在了运送案牍的时间里了,因此不要再计算到流程内。
同时咱们会发现,100我的基本都是空闲状态的,在案牍被送到后,三分钟就被翻阅完了,而后就要等57分钟,等下一批案牍被送过来。这个空闲的时间,咱们还能作点什么吗?
在这个空闲时间里,这99我的是否能够对本身记录的数据进行汇总呢(这样徐宾须要汇总的数据可能就会少一点了。为何是可能?下面解释!)?答案是确定的。咱们假设每次汇总数据是500条,那么每次汇总就须要50分钟。
那么如今所须要花费的时间就是:300(运送案牍的总时间) + 300(运回案牍的总时间) + 50(最后一次的可能汇总时间) + 30(分析时间) = 680 分钟,即11个多小时。
虽然如今只须要11个多小时,也就是6个时辰,可是由于办案时间总共就12个时辰,一半的时间都花在找人上,办案的实际时间就只有6个时辰。为了给出足够的办案时间,须要对大案牍术的时间进行进一步的压缩优化。
能够看到,如今时间的消耗,大部分都花费在运送案牍上!有没有什么办法能节省这一部分的时间呢?
很简单,既然运送案牍这么耗时间,那就不要从京兆府里运出来了!徐宾等人直接去京兆府不就好了?
这里就是大数据计算与普通计算的一个差别!不是「数据」被传输到「计算逻辑」所在的位置,而是「计算逻辑」到「数据」所在的位置!
这样大案牍术的流程就变成了:
咱们假设人到京兆府的时间也是15分钟,那么这个流程的时间花费就是:
总时间为: 15(去京兆府的时间) + 30(翻阅案牍的时间) + 100(汇总时间) + 30(分析时间) + 15(回靖安司的时间) = 190 分钟。即3个多小时!
如今这个时间减小到了1个多时辰,好像能知足要求了!可是这里有个不稳定因素!就是徐宾的最终汇总时间!上面是按照中位时间来算,但实际这个时间是不固定的。
假设每一个人对本身的数据进行汇总后,徐宾拿个了数据不须要再进行汇总了,那这个时间消耗就是0。
此时的总时间为: 15(去京兆府的时间) + 30(翻阅案牍的时间) + 50(汇总时间) + 30(分析时间) + 15(回靖安司的时间) = 140 分钟。即2个多小时!
可是也可能各自汇总后,数据量并无任何合并,那徐宾拿到数据后,就须要进行完整的汇总流程,那时间就仍是500分钟,这里还要加上前面各自的汇总之间,一共需哟啊550分钟
此时的总时间为: 15(去京兆府的时间) + 30(翻阅案牍的时间) + 50(汇总时间)+ 500(总汇总时间) + 30(分析时间) + 15(回靖安司的时间) = 640 分钟。即10个多小时!
若是好死不死,正好是最差的状况,那留给张小敬办案的时间可就很少了。咱们必需要消除这个不稳定因素!
上面出现变数的缘由是每一个人的数据都是独立的,也就是说,某我的汇总的数据多是:(张三,10),(李四,12),(王五,20),(张小敬:70),而另外一我的汇总的数据多是:(张三,5),(李四,2),(王五,4),(赵六,9)。本质上没有减小须要汇总的数据的数量。
有没有办法解决这个问题呢?固然有,那就是让某我的就专门负责对应人的汇总!好比说:A就负责汇总张三的数据,B就负责汇总李四的数据。怎么分配呢?能够按顺序依次分配:
固然还有其余方式,好比有一我的专门来分配,看谁相对比较空闲了,就多分配一点数据给他!
如今的流程和时间消耗以下:
总时间为:15(去京兆府的时间) + 30(翻阅案牍的时间) + 50(汇总时间) + 30(分析时间) + 15(回靖安司的时间) = 140 分钟。即2个多小时便可完成。且时长基本是固定的。
本文经过大案牍术的流程介绍,来梳理大数据计算(MapReduce)的通常流程:
能够看到,经过计算方式的不断调整,计算时长从最初的60个小时缩短到了最后的140分钟。
这里的「徐宾等人」实际就是「计算逻辑」,「案牍」就是「数据」!你会发现,当数据量很大的时候,传输数据所消耗的时间会成为计算瓶颈,此时把计算逻辑移动到数据所在地,要比把数据移动到计算所在地划算得多!
公号:抽象思惟