从《长安十二时辰》大案牍术理解大数据计算

从《长安十二时辰》望楼传信理解网络通讯一文中,经过对望楼传信的设计讲了网络通讯的流程。markdown

本文经过《长安十二时辰》里的另外一个设计「大案牍术」来聊一聊大数据计算!网络

大案牍术是剧中徐宾所擅长的方法,即在档案中发掘出有用的信息!为了方便大案牍术的实行,靖安司的选址也很讲究:oop

我们靖安司草创之时,地点几经改易,最终定在了光德坊。这里同坊有京兆府,便于案牍调阅;西邻西市,能够监控胡商;北接皇城,时刻联络宫中;东连朱雀大街,易于调动兵力。大数据

从《长安十二时辰》大案牍术理解大数据计算

寻人灭狼卫

话说,催六郎抓狼卫失败。李必命徐宾用大案牍术再找一位得力的人选来灭狼。优化

为了能快速找到狼卫,保长安太平,此人必须:spa

  • 熟悉长安地形
  • 有丰富的办案经验
  • 办案能力超群
  • 有足够多的暗桩
  • 最好会功夫

徐宾接到命令后,遂着手开始大案牍术!设计

下面咱们就以「办案数量」为分析维度,来看看徐宾是如何经过大案牍术找到张小敬的!3d

为了便于流程的说明,这里对条件进行简化,只根据「办案经验」来进行查找code

大案牍术基本流程

假设,大案牍术的基本流程是这样子的(官方也没给出具体的大案牍术流程,那我就只好本身来编了!!!):orm

  • 从京兆府将相应的案牍借调出来
  • 徐宾一个案牍一个案牍的翻阅
  • 找出符合上面要求的人,记录下来
  • 对记录进行汇总
  • 将汇总数据进行分析,找出最符合要求的那我的(核心逻辑)
  • 将结果告知李必
  • 将案牍还于京兆府

从《长安十二时辰》大案牍术理解大数据计算

假设,如今须要查询3000册案牍,而车子一次只能从京兆府运出300册案牍,运送一次要30分钟;徐宾1分钟能翻阅完一册案牍,1分钟能汇总10条数据,最终分析时间30分钟,咱们来看一下上面的流程所花费的时间。

  • 从京兆府将相应的案牍借调出来。每次30分钟,须要运10次,即300分钟。
  • 徐宾一个案牍一个案牍的翻阅。每一个案牍1分钟,即须要3000分钟。
  • 找出符合要求的人,记录下来。假设此时间已经包含在上面的翻阅中了。记录格式:(张三,1),(李四,1),(王五,1),(李四,1),(张小敬:1)
  • 将符合要求的人进行汇总。假设找到了5000个记录,1分钟汇总分析10条记录,须要500分钟。汇总后格式:(张三,10),(李四,12),(王五,20),(张小敬:70)。
  • 对结果分析,找出最符合要求的那我的。耗时30分钟。在这里张小敬的办案经验最丰富。
  • 告知李必。由于同在靖安司内,故时间忽略。
  • 将案牍还于京兆府。运回时间和运出时间相同,也须要300分钟。不过由于此时人已经找到了,因此此时间就不算到计算时间内。

总时间就是 30(第一次运送案牍的时间) + 3000(翻阅案牍的总时间) + 500(汇总时间) + 30(分析时间) = 3560 分钟,即须要近60个小时!!!

分工合做

很明显,上面的大案牍术根本没法知足如今的紧急状况。等找到这我的的时候,长安早凉了!!!不不不,是凉透了!!!

能够看到,上面的流程中,耗时最长的是翻阅案牍的时间,主要缘由是人手不够,只有徐宾一我的翻阅,速度太慢了。因为翻阅只是简单的找出办案数量并记录下来,因此普通人也能够作。

为了能尽快找到能抓狼卫的人,李必紧急给徐宾调来99我的来协助。如今流程就变成了:

  • 从京兆府将相应的案牍借调出来
  • 100我的(包括徐宾)一个案牍一个案牍的翻阅
  • 找出符合上面要求的人,记录下来
  • 最终数据到徐宾处进行汇总
  • 徐宾对汇总的数据进行分析,找出最符合要求的那我的
  • 告知李必
  • 将案牍还于京兆府

从《长安十二时辰》大案牍术理解大数据计算

咱们假设这99我的翻阅案牍的速度和徐宾相同,都是1分钟能翻阅一个案牍,那么咱们来计算一下这个流程所花费的时间:

  • 从京兆府将相应的案牍借调出来。每次30分钟,须要运10次,即300分钟。
  • 100我的一个案牍一个案牍的翻阅。每一个案牍1分钟,每次翻阅时间为3分钟,总共须要30分钟。
  • 找出符合上面要求的人,记录下来。假设此时间已经包含在上面的翻阅中了。记录格式:(张三,1),(李四,1),(王五,1),(李四,1),(张小敬:1)
  • 最终数据到徐宾处汇总。假设找到了5000个记录,1分钟汇总十条,须要500分钟。汇总后格式:(张三,10),(李四,12),(王五,20),(张小敬:70)
  • 对符合要求的人进行分析,找出最符合要求的那我的。这里即张小敬。耗时30分钟
  • 将结果告知李必。同在靖安司内。时间忽略。
  • 将案牍还于京兆府。运回时间和运出时间相同,也须要300分钟。

花费的总时间为: 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个时辰。为了给出足够的办案时间,须要对大案牍术的时间进行进一步的压缩优化。

能够看到,如今时间的消耗,大部分都花费在运送案牍上!有没有什么办法能节省这一部分的时间呢?

很简单,既然运送案牍这么耗时间,那就不要从京兆府里运出来了!徐宾等人直接去京兆府不就好了?

这里就是大数据计算与普通计算的一个差别!不是「数据」被传输到「计算逻辑」所在的位置,而是「计算逻辑」到「数据」所在的位置!

这样大案牍术的流程就变成了:

  • 100我的直接到京兆府
  • 一个个的翻阅案牍
  • 找出符合上面要求的人,记录下来
  • 各自汇总,将汇总数据在徐宾处作最终汇总
  • 徐宾对最终数据进行分析,找出最符合要求的那我的
  • 将结果告知李必

从《长安十二时辰》大案牍术理解大数据计算

咱们假设人到京兆府的时间也是15分钟,那么这个流程的时间花费就是:

  • 100我的直接到京兆府。花费15分钟。
  • 一个个的翻阅案牍。花费30分钟。
  • 找出符合上面要求的人,记录下来。时间忽略
  • 各自汇总,最终数据汇总到徐宾处。花费50分钟的各自汇总时间+可能50分钟的最终汇总。
  • 徐宾对最终数据进行分析,找出最符合要求的那我的。耗时30分钟
  • 将结果告知李必。由于如今人在京兆府,须要返回靖安司,花费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就负责汇总李四的数据。怎么分配呢?能够按顺序依次分配:

  • 给100我的编号,好比就是1-100
  • 而后依次领取人员进行统计
  • 若是超过了100,就再从1开始领取

固然还有其余方式,好比有一我的专门来分配,看谁相对比较空闲了,就多分配一点数据给他!

如今的流程和时间消耗以下:

  • 100我的直接到京兆府。花费15分钟。
  • 一个个的翻阅案牍。花费30分钟。
  • 找出符合上面要求的人,分批记录下来。好比:张三的数据都记录在一张纸上,李四的数据记录在另一张纸了。这里至关于多了选则记录到那张纸的过程。时间忽略。
  • 依次领取对应须要统计人员的纸。分别进行统计,花费50分钟。
  • 最终数据汇总到徐宾处。此处再也不须要汇总了。徐宾只须要对符合要求的人进行分析,找出最符合要求的那我的。耗时30分钟。
  • 将结果告知李必。返回靖安司,花费15分钟。

总时间为:15(去京兆府的时间) + 30(翻阅案牍的时间) + 50(汇总时间) + 30(分析时间) + 15(回靖安司的时间) = 140 分钟。即2个多小时便可完成。且时长基本是固定的。

从《长安十二时辰》大案牍术理解大数据计算

总结

本文经过大案牍术的流程介绍,来梳理大数据计算(MapReduce)的通常流程:

  • 翻阅记录至关因而Map的过程
  • 认领至关因而Shuffle的过程
  • 汇总至关因而Reduce的过程

能够看到,经过计算方式的不断调整,计算时长从最初的60个小时缩短到了最后的140分钟。

这里的「徐宾等人」实际就是「计算逻辑」,「案牍」就是「数据」!你会发现,当数据量很大的时候,传输数据所消耗的时间会成为计算瓶颈,此时把计算逻辑移动到数据所在地,要比把数据移动到计算所在地划算得多!

公号:抽象思惟

相关文章
相关标签/搜索