第44期:談談臨時性計算
臨時性計算,顧名思義,是指臨時發生的一些計算需求。這種計算在日常數據處理中很常見,我們舉一些例子:
- 應對業務部門的取數需求:比如銷售部門想獲得進行了某項促銷活動前后的銷售情況變化信息;
- 數據挖掘算法前的清理準備:將來自各個業務系統的數據(甚至一些企業外部的數據)整理成規則一致的二維表,這些動作常常比挖掘本身耗時還長得多;
- 有業務規則的測試數據生成:測試數據不能完全隨機生成,必須滿足一定的業務規則以及分布比例;
- 大數據計算的優化方案實驗:性能優化是個迭代的過程,需要不斷嘗試各種計算方案;
- 非日常(外部)數據的清洗和入庫:比如有些下級部門提供的Excel表格要寫入數據庫再進行統計分析;
- …
可以看出,臨時性計算具體相當的普遍性。那么,我們是用什么方法來處理這種具有普遍性的計算需求呢?
其實也就是編程序了,常用來對付臨時性計算的編程方案有三種:以Java為代表的高級語言、以SQL為代表的數據庫語言、以Python為代表的腳本語言。
然后,第二個問題,我們怎么評估這些方法的優劣和適應性呢?
一
為了回答這個問題,我們要先分析臨時性計算的需求特征:
- 需求隨意,不可預測:這是臨時性計算的基本特征,計算需求時臨時產生的,不能事先預測到而做進數據分析系統中,只能臨時面對;
- 經常只做一次,缺乏直接可復用性:這也是臨時性的特征,做完就完了,沒有必要刻意地反復優化,也沒必要也不可能事先為計算做準備工作;
- 大量涉及多樣性的原始外部數據:很多計算的涉及數據并不在數據庫中,比如收集上來的Excel表格,從網上爬下來的文本等,這些數據還常常以原始形式出現;
- 常常涉及多步驟的過程計算:本來分析處理類的運算就會步驟比較多,而數據源的雜亂更會加劇這一現象;
- 必要時可能轉變成日常計算:也有些臨時性計算可能重復發生,這時就有必要轉化成日常計算放進數據分析系統中;
- 以結構化數據計算為主:這一點并非臨時性計算特有的,其實數據分析和處理類的計算都是主要面對結構化或即將被結構化的數據。
二
從需求的特征出發,我們就可以提出應對臨時性計算的方案的技術要求了:
- 開發快捷:臨時性計算隨時發生,需要快速解決,所以要注重開發效率,相對來講,對于運算性能要求會低一些;
- 人員要求低:臨時性計算發生場景很普遍,那么應當盡量降低實施開發人員的要求,而不是總是需要專業的程序員才能做;
- 環境簡單:經常只做一次的事情,要讓環境搭建足夠簡單,如果準備計算環境花費時間超過實施計算本身了,那就得不償失了;
- 數據適應面廣:計算方案要能方便地面對各種各樣的數據源,不要總是需要專門的接口和技術體系,特別地要能處理較大的數據量;
- 易于集成:要轉變成日常計算時,臨時寫出來的代碼***能夠只要簡單修改甚至不加修改就能集成到數據分析系統中去。
三
現在我們按這套技術要求來考查前面提到的三種技術方案,并給評個分(前四項滿分10,第五項重要程度低滿分5)
1. 以Java為代表的高級語言
總分:13分
2. 以SQL為代表的數據庫語言
總分:24分
3. 以Python為代表的腳本語言
總分:30分
算下來還是腳本語言相對***。