在從《長安十二時辰》望樓傳信理解網絡通訊一文中,經過對望樓傳信的設計講了網絡通訊的流程。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分鐘。
這裏的「徐賓等人」實際就是「計算邏輯」,「案牘」就是「數據」!你會發現,當數據量很大的時候,傳輸數據所消耗的時間會成爲計算瓶頸,此時把計算邏輯移動到數據所在地,要比把數據移動到計算所在地划算得多!
公號:抽象思惟