performance e escalabilidade – hash map em advpl
DESCRIPTION
Performance e Escalabilidade – Hash Map Em AdvPLTRANSCRIPT
-
28/07/2015 PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl
https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/ 1/10
TudoemADVPl
Compartilhandoexperinciasdeanlise,programaoedesenvolvimento.
PerformanceeescalabilidadeHashMapemAdvPL
16/12/201416/12/2014 Siga0984 ADVPL,Escalabilidade,Exemplos,Performance
OqueumHashMap(ouHashTable)?
Emcomputao,umatabeladehash(HashTable)oumapadehash(HashMap)umaestruturadedadosqueimplementaumarrayassociativo,tambmconhecidoporchavevalor,ondeumdeterminadovaloracessadoporumadeterminadachave.Emmuitassituaes,estaestruturamuitomaiseficientedoqueutilizarumarvoredebusca,arrayordenado,ouqualqueroutraestruturadedadosoumecanismodepesquisa.
ApartirdoTOTVSApplicationServer,build7.00.131227A,foramdisponibilizadasumgrupodefunesparaacriaoemanutenodeumHashMap,inclusiveacriaodeumHashMapapartirdosdadoscontidosemumarraymultidimensionalemAdvPL.
Vantagens
AvantagemdautilizaodoHashMapemrelaoaoutrasestruturasavelocidadedelocalizaodeumvalorapartirdachavefornecida.EstadiferenadedesempenhomaisperceptvelquandotemosumnmeromaiordeentradasouelementosnoArray.
Desvantagens
Porm,amanutenodeumHashMap(acrescentarouremoverelementos)podeterumcusto
-
28/07/2015 PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl
https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/ 2/10
Porm,amanutenodeumHashMap(acrescentarouremoverelementos)podeterumcustomaior,inclusivedependendodaestruturainternadaimplementaodoalgoritmodehash,estecustodemanutenopodeaumentarproporcionalmentedeacordocomaquantidadedeelementosnomapa.
Melhorcenrio
Logo,omelhorcenrioparausodeumHashMappartedautilizaoemumArraydedadosnamemria,ondeduranteoprocessamentohaverpoucaounenhumamanutenonestemapa(acrescentarouremoverelementos),eaquantidadedebuscasrealizadasnestemapasejaapartesignificativadoprocessamento.
Programadeexemplo
ParailustrarumcasosimplesdeusodoHashMapemAdvpl,vamosaumprogramadeexemplo,ondesercriadoumarraycomrelativamentepoucoselementos(17),ondeaprimeiracolunaserachavedebusca,evamosrealizar50milbuscasparacadaumadas17chaves,mais50milbuscasporumachavenoexistente.
Naprimeirapartedoprograma,asbuscassobreoArrayserofeitascomASCAN(),enasegundapartedoprograma,vamoscriarumObjetodeHashMapapartirdoArray,usandoafunoaToHM(),edepoisrealizarasmesmasbuscasusandooobjetodeHashMap.
Aotodo,cadatestevairealizar900000(novecentasmil)buscas,ondeserocontabilizadosostemposdas50milbuscasparacadavalorporcadamtodo,eotempototaldetodasasbuscaspormtodoutilizado.
SegueoprogramaAdvplabaixo.Apscompilado,elepodeserexecutadodiretamenteapartirdoSmartClient,atravsdafunoU_TSTHASH
Fonte
#includeprotheus.ch
USERFunctionTstHash()
LocalaDados:={}LocalnI,nJLocalnTimer,nTotalLocalcBuscaLocalnPos,xValueLocaloHash
//Criaumarraydeduascolunas,com17elementos
-
28/07/2015 PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl
https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/ 3/10
aadd(aDados,{"BC","Branco"})aadd(aDados,{"AZ","Azul"})aadd(aDados,{"VM","Vermelho"})aadd(aDados,{"VD","Verde"})aadd(aDados,{"RX","Roxo"})aadd(aDados,{"AM","Amarelo"})aadd(aDados,{"MA","Marrom"})aadd(aDados,{"AM","AzulMarinho"})aadd(aDados,{"AC","AzulCu"})aadd(aDados,{"AQ","AmareloQueimado"})aadd(aDados,{"AT","AzulTurquesa"})aadd(aDados,{"SA","Salmo"})aadd(aDados,{"VO","VerdeOliva"})aadd(aDados,{"VI","Violeta"})aadd(aDados,{"GR","Cinza"})aadd(aDados,{"PB","Chumbo"})aadd(aDados,{"PT","Preto"})
//FazumtestededesempenhobuscandopeloselementosusandoASCAN()//Faz50milbuscasparacadaumdoselementoscadastrados//Oultimoloopbuscaporumelementoquenaoexiste
nTotal:=seconds()
FornI:=1tolen(aDados)+1IfnI>len(aDados)//BuscaporumelementoquenaoexistecBusca:="NE"Else//BuscaporumelementoqueexistenalistacBusca:=aDados[nI][1]EndifnTimer:=seconds()FornJ:=1to50000//Realiza50milbuscasnPos:=ascan(aDados,{|x|x[1]==cBusca})NextnTimer:=seconds()nTimerconout("Buscapor["+cBusca+"]demorou"+cValToChar(nTimer)+"s.")Next
nTotal:=seconds()nTotalconout("TempoTotal(ASCAN)="+cValToChar(nTotal)+"s.")conout("")
//AgorausandooHASHnTotal:=seconds()
//CriaoObjetodeHASHapartirdoArrayoHash:=aToHM(aDados)
-
28/07/2015 PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl
https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/ 4/10
FornI:=1tolen(aDados)+1IfnI>len(aDados)//BuscaporumelementoquenaoexistecBusca:="NE"Else//BuscaporumelementoqueexistenalistacBusca:=aDados[nI][1]EndifnTimer:=seconds()FornJ:=1to50000//Realiza50milbuscaslFound:=HMGet(oHash,cBusca,@xValue)NextnTimer:=seconds()nTimerconout("Buscapor["+cBusca+"]demorou"+cValToChar(nTimer)+"s.")Next
nTotal:=seconds()nTotalconout("TempoTotal(HASH)="+cValToChar(nTotal)+"s.")
Return
Resultadosobtidos
Paravisualizaroresultadodoprograma,verifiqueoLOGdeconsoledoApplicationServer.Segueabaixoumexemplodologgerado:
Buscapor[BC]demorou0.359s.Buscapor[AZ]demorou0.406s.Buscapor[VM]demorou0.421s.Buscapor[VD]demorou0.483s.Buscapor[RX]demorou0.53s.Buscapor[AM]demorou0.593s.Buscapor[MA]demorou0.624s.Buscapor[AM]demorou0.577s.Buscapor[AC]demorou0.702s.Buscapor[AQ]demorou0.78s.Buscapor[AT]demorou0.796s.Buscapor[SA]demorou0.826s.Buscapor[VO]demorou0.874s.Buscapor[VI]demorou0.92s.Buscapor[GR]demorou0.969s.Buscapor[PB]demorou1.014s.Buscapor[PT]demorou1.061s.Buscapor[NE]demorou1.061s.TempoTotal(ASCAN)=13.075s.
-
28/07/2015 PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl
https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/ 5/10
Buscapor[BC]demorou0.094s.Buscapor[AZ]demorou0.094s.Buscapor[VM]demorou0.093s.Buscapor[VD]demorou0.094s.Buscapor[RX]demorou0.093s.Buscapor[AM]demorou0.094s.Buscapor[MA]demorou0.093s.Buscapor[AM]demorou0.094s.Buscapor[AC]demorou0.093s.Buscapor[AQ]demorou0.094s.Buscapor[AT]demorou0.109s.Buscapor[SA]demorou0.094s.Buscapor[VO]demorou0.093s.Buscapor[VI]demorou0.094s.Buscapor[GR]demorou0.094s.Buscapor[PB]demorou0.109s.Buscapor[PT]demorou0.093s.Buscapor[NE]demorou0.078s.TempoTotal(HASH)=1.716s.
Reparemque,aobuscarcomASCAN(),comoabuscafeitasequencialmente,quantomaiselementosprecisamsercomparadosatquesejaencontradoondoarrayquesatisfazacondio,maiorotempodebusca.Opiorcenrioabuscaporumelementoquenoexiste,poisnestecasooASCAN()varreutodososelementosdoArrayparadeterminarqueovalornoexiste.Nomelhorcenrio,50milbuscasdoprimeirovalordoarraydemoraram0,359segundos,enopiorcenrio,quandoovalorbuscadoeraoltimovalordoarrayouquandoovalornoexistianoarray,50milbuscasdemoraram1,061segundos.
Jcomousodoobjetodehash,criadoapartirdestemesmoarray,odesempenhodasbuscasfoiaproximadamente7,6vezesmaisrpido,ecadaumadasbuscas,noimportaseachavedebuscaestavanoincioounofinaldomapa,demoraramemmdia1/10desegundo.
Concluso
ComomencionadonotpicoMellhorCenrio,emumprocessamentoondeusamosumArrayemmemriacombaixaounenhumamanuteno,eumvolumemuitograndedebuscas,oHashMapumaalternativaexcelenteemcustoxbenefcio.
Porm,lembresetambmdaLeideAmdahl:Oganhodedesempenhoquepodeserobtidomelhorandoumadeterminadapartedosistemalimitadopelafraodetempoqueessaparteutilizadapelosistemaduranteasuaoperao.Isto,seoseucasodeusocriaarrayspequenoseparapoucasconsultas,tomandoumtemponfimodeprocessamento,criarumHashMapsvaitedartrabalhoderefatorarseucdigo,evocnoterumganhoperceptvel,ouainda,nopiorcenrio,apresentarumapioranodesempenho.Nesteexemplofoiusadoumarraymuitopequeno,logoforamnecessriasmuitasbuscasparamostraradiferenadedesempenho.Cadatestecompletofez900milbuscasnoArraye900milusandoHashMap.
AsfunesparalidarcomHashMapemAdvPLestodocumentadasnaTDN,apartirdolink
-
28/07/2015 PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl
https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/ 6/10
AsfunesparalidarcomHashMapemAdvPLestodocumentadasnaTDN,apartirdolinkhttp://tdn.totvs.com/pages/viewpage.action?pageId=77300615(http://tdn.totvs.com/pages/viewpage.action?pageId=77300615)
LetsShare
EsperoquevocstenhamgostadodalinhaderaciocnioecontedodisponibilizadosaquinoBlog.Noseacanheemcomentarseficoualgumadvidaousealgumapartedotextoficousempnemcabea.Sevocgostou,eachouestecontedotil,compartilhe,eseestelhefortil,useo.NoprximopostsobreHashMap,ofontedeexemplovaiutilizartodasasfunesdemanuteno,eumndicedebuscacomposto.
Aessnciadoconhecimentoconsisteemapliclo,umavezpossudo.Confcio
Atoprximopost,pessoal
Referncias
Wikipediacontributors.Hashtable.Wikipedia,TheFreeEncyclopedia.December11,2014,06:10UTC.Availableat:http://en.wikipedia.org/w/index.php?title=Hash_table&oldid=637586906(http://en.wikipedia.org/w/index.php?title=Hash_table&oldid=637586906).AccessedDecember17,2014.
12comentriossobrePerformance eescalabilidade Hash Map emAdvPL
1. FabioFongarodisse:
Sobre estes anncios (https://wordpress.com/about-these-ads/)
17/12/2014s06:12
-
28/07/2015 PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl
https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/ 7/10
Existerevisodousodesterecursoparaasfunesfiscaisdegeraodenotafiscalquequandousadascomoexecautosomuitolentas,poisvalidamlinhaalinha,campoacampo,emcascatatodososelementosdanota(acadanovoelementovalidamtodososanteriores)?
Curtir(https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/?like_comment=7&_wpnonce=a1ff9f558e)
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?replytocom=7#respond)
Siga0984disse:
OlFbio,boanoite,
SobreaMSExecAuto()euconheoapenasopropsitodaimplementao,masnotenhodetalhesdecomoelafuncionapordentro,bemcomomeusconhecimentosnasregrasdenegciodoERPMicrosigatambmsobemsuperficiais.Nocaso,seinternamenteavalidaodetodasaslinhasreexecutadaacadanovoiteminseridonaMSExexcAuto(),acreditoquetrocarumarrayconvencionalparausarumHashnodevemelhorarodesempenhodesteprocesso.Oquemelhorariaserianorevalidartodosositensacadanovoitem,pormumavezconstatadoestecomportamento,deveserverificadosenoexistealgumaregradenegcioqueexijaarevalidaodetodosositens,comoporexemploumdescontoporitemquepodeseraplicadoatodosositensdanotacasoelaultrapasseumvalor.Umaregradenegciocomoessajustificariaanecessidadederevalidartodososelementos.
Esperoterajudado
Curtir(https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/?like_comment=10&_wpnonce=de176a38e0)
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?replytocom=10#respond)
2. SergioMartinezdisse:
Excelenteartigoeumexemplomuitobemexplicadoeclaro.
Parabns
Curtir(https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/?like_comment=8&_wpnonce=49ebb68003)
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?replytocom=8#respond)
Siga0984disse:
OlSrgio,obrigado
17/12/2014s06:12
Curtidopor1pessoa
17/12/2014s23:23
Curtir
17/12/2014s06:23
Curtidopor1pessoa
17/12/2014s23:12
-
28/07/2015 PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl
https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/ 8/10
Curtir(https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/?like_comment=9&_wpnonce=9909672f94)
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?replytocom=9#respond)
3. FbioMarginidisse:
MuitolegalseublogJlio!Estousempreacompanhandoseusartigossempreumaprendizado.Parabns!
Curtir(https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/?like_comment=11&_wpnonce=87a1792280)
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?replytocom=11#respond)
Siga0984disse:
OlFbio,
Gratopelofeedbackeporsuaaudincia
Abraos!!!
Curtir(https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/?like_comment=13&_wpnonce=b0a21989c7)
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?replytocom=13#respond)
4. AlvaroCamilloNetodisse:
Muitolegalesseartigo!
Aapresentaodosnovosrecursosdessejeitomaisdescontradoecomexemplosestexcelente.
Jpasseioartigoparatodaaminhaequipe.
Att
Curtir(https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/?like_comment=12&_wpnonce=e26368af2e)
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?replytocom=12#respond)
Siga0984disse:
Ollvaro,
Curtir
18/12/2014s07:51
Curtir
19/12/2014s20:49
Curtir
18/12/2014s11:04
Curtidopor1pessoa
22/12/2014s01:33
-
28/07/2015 PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl
https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/ 9/10
Quebomquegostou!Mutogratopelofeedbackepelaaudincia
Abraos
Curtir(https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/?like_comment=16&_wpnonce=0e43020136)
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?replytocom=16#respond)
5. Rafaeldisse:
Excelenteartigo,meajudoumuito!
Obrigado
Curtir(https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/?like_comment=48&_wpnonce=1bae06ce3c)
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?replytocom=48#respond)
6. Dronidisse:
OIJlio.
ofonteMATXFISpoderiasermelhoradanoprocessoseimplementadoHashMap?
Abraos
Curtir(https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/?like_comment=132&_wpnonce=bea07d403f)
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?replytocom=132#respond)
Siga0984disse:
Opa,vejamosEstefontecontmvriasfunes,somenteseriapossveldeterminaraeficciadeumarefatoraousandoHashMapmedianteaanlisedecadafuno.
Curtir(https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/?like_comment=133&_wpnonce=ad06fbf1e8)
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?replytocom=133#respond)
7. Lucianadisse:
Nossaqueartigobacana.
Curtir
09/02/2015s17:52
Curtidopor1pessoa
22/06/2015s11:23
Curtidopor1pessoa
22/06/2015s12:24
Curtir
10/07/2015s15:00
-
28/07/2015 PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl
https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/ 10/10
Nossaqueartigobacana.Eufaziaissodeumaformatoarcaica,gosteidessenovasoluo
Curtir(https://siga0984.wordpress.com/2014/12/16/performanceeescalabilidadehashmapemadvpl/?like_comment=146&_wpnonce=f9d3001fc8)
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?replytocom=146#respond)
CrieumwebsiteoubloggratuitonoWordPress.com(https://br.wordpress.com/?ref=footer_website). OtemaBigBrother(https://wordpress.com/themes/bigbrother/).
Seguir
SeguirTudoemADVPl
CrieumsitecomWordPress.com(https://ptbr.wordpress.com/?ref=lof)
Curtidopor1pessoa