從《長安十二時辰》大案牘術理解大數據計算

從《長安十二時辰》望樓傳信理解網絡通訊一文中,經過對望樓傳信的設計講了網絡通訊的流程。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分鐘。

這裏的「徐賓等人」實際就是「計算邏輯」,「案牘」就是「數據」!你會發現,當數據量很大的時候,傳輸數據所消耗的時間會成爲計算瓶頸,此時把計算邏輯移動到數據所在地,要比把數據移動到計算所在地划算得多!

公號:抽象思惟

相關文章
相關標籤/搜索