天天看點

【資料蔣堂】第44期:談談臨時性計算

臨時性計算,顧名思義,是指臨時發生的一些計算需求。這種計算在日常資料進行中很常見,我們舉一些例子:

應對業務部門的取數需求<b>:</b>比如銷售部門想獲得進行了某項促銷活動前後的銷售情況變化資訊;

資料挖掘算法前的清理準備<b>:</b>将來自各個業務系統的資料(甚至一些企業外部的資料)整理成規則一緻的二維表,這些動作常常比挖掘本身耗時還長得多;

有業務規則的測試資料生成<b>:</b>測試資料不能完全随機生成,必須滿足一定的業務規則以及分布比例;

大資料計算的優化方案實驗<b>:</b>性能優化是個疊代的過程,需要不斷嘗試各種計算方案;

非日常(外部)資料的清洗和入庫<b>:</b>比如有些下級部門提供的Excel表格要寫入資料庫再進行統計分析;

可以看出,臨時性計算具體相當的普遍性。那麼,我們是用什麼方法來處理這種具有普遍性的計算需求呢?

其實也就是程式設計式了,常用來對付臨時性計算的程式設計方案有三種:以Java為代表的進階語言、以SQL為代表的資料庫語言、以Python為代表的腳本語言。

然後,第二個問題,我們怎麼評估這些方法的優劣和适應性呢?

為了回答這個問題,我們要先分析臨時性計算的需求特征:

需求随意,不可預測<b>:</b>這是臨時性計算的基本特征,計算需求時臨時産生的,不能事先預測到而做進資料分析系統中,隻能臨時面對;

經常隻做一次,缺乏直接可複用性<b>:</b>這也是臨時性的特征,做完就完了,沒有必要刻意地反複優化,也沒必要也不可能事先為計算做準備工作;

大量涉及多樣性的原始外部資料<b>:</b>很多計算的涉及資料并不在資料庫中,比如收集上來的Excel表格,從網上爬下來的文本等,這些資料還常常以原始形式出現;

常常涉及多步驟的過程計算<b>:</b>本來分析處理類的運算就會步驟比較多,而資料源的雜亂更會加劇這一現象;

必要時可能轉變成日常計算<b>:</b>也有些臨時性計算可能重複發生,這時就有必要轉化成日常計算放進資料分析系統中;

以結構化資料計算為主<b>:</b>這一點并非臨時性計算特有的,其實資料分析和處理類的計算都是主要面對結構化或即将被結構化的資料。 

從需求的特征出發,我們就可以提出應對臨時性計算的方案的技術要求了:

<b>開發快捷</b>:臨時性計算随時發生,需要快速解決,是以要注重開發效率,相對來講,對于運算性能要求會低一些;

<b>人員要求低</b>:臨時性計算發生場景很普遍,那麼應當盡量降低實施開發人員的要求,而不是總是需要專業的程式員才能做;

<b>環境簡單</b>:經常隻做一次的事情,要讓環境搭建足夠簡單,如果準備計算環境花費時間超過實施計算本身了,那就得不償失了;

<b>資料适應面廣</b>:計算方案要能友善地面對各種各樣的資料源,不要總是需要專門的接口和技術體系,特别地要能處理較大的資料量;

<b>易于內建</b>:要轉變成日常計算時,臨時寫出來的代碼最好能夠隻要簡單修改甚至不加修改就能內建到資料分析系統中去。

現在我們按這套技術要求來考查前面提到的三種技術方案,并給評個分(前四項滿分10,第五項重要程度低滿分5)

【資料蔣堂】第44期:談談臨時性計算

2. 以SQL為代表的資料庫語言總分:13分

【資料蔣堂】第44期:談談臨時性計算

3. 以Python為代表的腳本語言總分:24分

【資料蔣堂】第44期:談談臨時性計算

算下來還是腳本語言相對最好。總分:30分

原文釋出時間為:2018-02-27

本文作者:蔣步星