真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

性能優(yōu)化技巧-內(nèi)存關(guān)聯(lián)計(jì)算

關(guān)聯(lián)動(dòng)作會(huì)嚴(yán)重影響性能,SPL支持內(nèi)存預(yù)關(guān)聯(lián),可以加快關(guān)聯(lián)動(dòng)作,從而提升性能。

站在用戶的角度思考問題,與客戶深入溝通,找到上猶網(wǎng)站設(shè)計(jì)與上猶網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋上猶地區(qū)。

為了理解關(guān)聯(lián)動(dòng)作對(duì)性能的影響,下面設(shè)計(jì)一套Oracle關(guān)聯(lián)表,以及無關(guān)聯(lián)的寬表,并執(zhí)行同樣的計(jì)算。

關(guān)聯(lián)表的結(jié)構(gòu)和關(guān)系如下:

                                              性能優(yōu)化技巧 - 內(nèi)存關(guān)聯(lián)計(jì)算

數(shù)據(jù)量:通話記錄表(百萬條)、用戶表(十萬條)、開戶網(wǎng)點(diǎn)(一萬條),代理商表(一萬條)。

計(jì)算目標(biāo):求通訊總成本,即所有呼出用戶和呼入用戶分別對(duì)應(yīng)的網(wǎng)點(diǎn)均攤成本、代理商均攤成本之和。

將關(guān)聯(lián)結(jié)果寫入另一張表,形成無關(guān)聯(lián)的寬表:

callRecordWide
SERIALNUMBER
CHARGE
OUTBRANCHOUTCOST
INBRANCHINCOST
OUTAGENTOUTCOST
INAGENTINCOST

下面的SPL腳本,用來說明關(guān)聯(lián)動(dòng)作對(duì)性能的影響:


AB
1=connect("orcl")
2=now()
3for 10=A1.query("select   sum(outBranch.outCost+inBranch.inCost+outAgent.outCost+inAgent.inCost)  from callRecord,callUser outUser,callUser   inUser,telecomBranch outBranch,telecomBranch inBranch,telecomAgent   outAgent,telecomAgent inAgent where callRecord.outID=outUser.userID and  callRecord.inID=inUser.userID and   outUser.branchID=outBranch.branchID and outUser.agentID=outAgent.agentID and   inUser.branchID=inBranch.branchID and inUser.agentID=inAgent.agentID")
4=interval@ms(A2,now())/Oracle關(guān)聯(lián)表25802ms
5

6=now()
7for 10=A1.query("select   sum(outBranchOutCost+inBranchInCost+outAgentOutCost+inAgentInCost) from   callRecordWide")
8=interval@ms(A6,now())/oracle寬表2055ms
9=A1.close()

可以看到,關(guān)聯(lián)比無關(guān)聯(lián)慢12.6倍(25802/2055),會(huì)嚴(yán)重影響計(jì)算性能。

      

SPL可以通過預(yù)關(guān)聯(lián)來提升關(guān)聯(lián)動(dòng)作的性能。首先加載數(shù)據(jù)到內(nèi)存,代碼如下:


AB
1=connect("orcl")
2=A1.query("select * from   telecomAgent").keys(AGENTID)
3=A1.query("select * from   telecomBranch").keys(BRANCHID)
4=A1.query("select * from   callUser").keys(USERID)
5=A1.query("select * from   callRecord").keys(SERIALNUMBER)
6=A1.switch(AGENTID,A2:AGENTID; BRANCHID,A3:BRANCHID)
7=A5.switch(OUTID,A14:USERID; INID,A4:USERID)
8=env(callRecord,A7)/全局變量:預(yù)關(guān)聯(lián)

函數(shù)switch可將字段值替換為記錄引用,從而實(shí)現(xiàn)預(yù)關(guān)聯(lián)。

后續(xù)業(yè)務(wù)算法中,可以直接引用其他表的字段,從而提升關(guān)聯(lián)計(jì)算的性能,如下:

=callRecord.sum(OUTID.BRANCHID.OUTCOST+INID.BRANCHID.INCOST

+OUTID.AGENTID.OUTCOST+INID.AGENTID.INCOST)

 

為了直觀理解預(yù)關(guān)聯(lián)對(duì)計(jì)算性能的提升,下面同樣用SPL預(yù)關(guān)聯(lián)和寬表做比較。


AB
11=connect("orcl")
12=A11.query("select * from   telecomAgent").keys(AGENTID)
13=A11.query("select * from   telecomBranch").keys(BRANCHID)
14=A11.query("select * from   callUser").keys(USERID)
15=A11.query("select * from   callRecord").keys(SERIALNUMBER)
16=A14.switch(AGENTID,A12:AGENTID;   BRANCHID,A13:BRANCHID)
17=A15.switch(OUTID,A14:USERID;   INID,A14:USERID)
18=env(callRecord,A17)/全局變量:預(yù)關(guān)聯(lián)
19=A11.query@s("select * from   callRecordWide").keys(SERIALNUMBER)
20=env(callRecordWide,A19)/全局變量:寬表
21

22=now()
23for 10

=callRecord.sum(OUTID.BRANCHID.OUTCOST

+INID.BRANCHID.INCOST

+OUTID.AGENTID.OUTCOST+INID.AGENTID.INCOST)

24=interval@ms(A22,now())/SPL預(yù)關(guān)聯(lián)13272ms
25

26=now()
27for 10

=callRecordWide.sum(OUTBRANCHOUTCOST

+INBRANCHINCOST+OUTAGENTOUTCOST

+INAGENTINCOST)

28=interval@ms(A26,now())/SPL寬表2210ms

可以看到,預(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ì)比,但并不是說寬表可以代替關(guān)聯(lián)表。事實(shí)上,寬表會(huì)浪費(fèi)大量空間,還會(huì)造成創(chuàng)建、同步等維護(hù)困難,實(shí)際項(xiàng)目中很少用到。而預(yù)關(guān)聯(lián)使用引用來建立關(guān)聯(lián),不會(huì)創(chuàng)造新表,不會(huì)浪費(fèi)空間,不需要同步數(shù)據(jù)。


分享標(biāo)題:性能優(yōu)化技巧-內(nèi)存關(guān)聯(lián)計(jì)算
地址分享:http://weahome.cn/article/jsssdj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部