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