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