關(guān)聯(lián)動(dòng)作會(huì)嚴(yán)重影響性能,SPL支持內(nèi)存預(yù)關(guān)聯(lián),可以加快關(guān)聯(lián)動(dòng)作,從而提升性能。 為了理解關(guān)聯(lián)動(dòng)作對(duì)性能的影響,下面設(shè)計(jì)一套Oracle關(guān)聯(lián)表,以及無(wú)關(guān)聯(lián)的寬表,并執(zhí)行同樣的計(jì)算。 關(guān)聯(lián)表的結(jié)構(gòu)和關(guān)系如下: 數(shù)據(jù)量:通話記錄表(百萬(wàn)條)、用戶(hù)表(十萬(wàn)條)、開(kāi)戶(hù)網(wǎng)點(diǎn)(一萬(wàn)條),代理商表(一萬(wàn)條)。 計(jì)算目標(biāo):求通訊總成本,即所有呼出用戶(hù)和呼入用戶(hù)分別對(duì)應(yīng)的網(wǎng)點(diǎn)均攤成本、代理商均攤成本之和。 將關(guān)聯(lián)結(jié)果寫(xiě)入另一張表,形成無(wú)關(guān)聯(lián)的寬表: ![]() 下面的SPL腳本,用來(lái)說(shuō)明關(guān)聯(lián)動(dòng)作對(duì)性能的影響: ![]() 可以看到,關(guān)聯(lián)比無(wú)關(guān)聯(lián)慢12.6倍(25802/2055),會(huì)嚴(yán)重影響計(jì)算性能。 SPL可以通過(guò)預(yù)關(guān)聯(lián)來(lái)提升關(guān)聯(lián)動(dòng)作的性能。首先加載數(shù)據(jù)到內(nèi)存,代碼如下: ![]() 為了直觀理解預(yù)關(guān)聯(lián)對(duì)計(jì)算性能的提升,下面同樣用SPL預(yù)關(guān)聯(lián)和寬表做比較。 可以看到,預(yù)關(guān)聯(lián)比寬表慢6倍(13272/2210),相對(duì)于關(guān)聯(lián)表比寬表慢的12.6倍,已經(jīng)有較大幅度的提升。在寬表時(shí),SPL計(jì)算性能和ORACLE幾乎相同(2210:2055),但在有關(guān)聯(lián)時(shí),預(yù)關(guān)聯(lián)的SPL計(jì)算速度已經(jīng)明顯超出臨時(shí)關(guān)聯(lián)的ORACLE了(13272:25802)。 需要注意的是,上述算法雖然使用了寬表做對(duì)比,但并不是說(shuō)寬表可以代替關(guān)聯(lián)表。事實(shí)上,寬表會(huì)浪費(fèi)大量空間,還會(huì)造成創(chuàng)建、同步等維護(hù)困難,實(shí)際項(xiàng)目中很少用到。而預(yù)關(guān)聯(lián)使用引用來(lái)建立關(guān)聯(lián),不會(huì)創(chuàng)造新表,不會(huì)浪費(fèi)空間,不需要同步數(shù)據(jù)。 |
|
來(lái)自: raqsoft > 《集算器&潤(rùn)乾報(bào)表》