0% acharam este documento útil (0 voto)
311 visualizações10 páginas

Hash Map e Escalabilidade em AdvPL

O documento descreve como um Hash Map pode ser mais eficiente do que outras estruturas de dados para busca de valores. Ele apresenta um exemplo em AdvPL que cria um Hash Map a partir de um array e realiza buscas, mostrando que o Hash Map é mais rápido do que buscar sequencialmente no array.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
311 visualizações10 páginas

Hash Map e Escalabilidade em AdvPL

O documento descreve como um Hash Map pode ser mais eficiente do que outras estruturas de dados para busca de valores. Ele apresenta um exemplo em AdvPL que cria um Hash Map a partir de um array e realiza buscas, mostrando que o Hash Map é mais rápido do que buscar sequencialmente no array.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

28/07/2015

PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl

TudoemADVPl
Compartilhandoexperinciasdeanlise,
programaoedesenvolvimento.

PerformanceeescalabilidadeHashMap
emAdvPL
16/12/201416/12/2014
Performance

Siga0984

ADVPL,Escalabilidade,Exemplos,

OqueumHashMap(ouHashTable)?
Emcomputao,umatabeladehash(HashTable)oumapadehash(HashMap)uma
estruturadedadosqueimplementaumarrayassociativo,tambmconhecidoporchavevalor,
[Link],esta
estruturamuitomaiseficientedoqueutilizarumarvoredebusca,arrayordenado,ou
qualqueroutraestruturadedadosoumecanismodepesquisa.
ApartirdoTOTVSApplicationServer,build7.00.131227A,foramdisponibilizadasumgrupo
defunesparaacriaoemanutenodeumHashMap,inclusiveacriaodeumHashMap
apartirdosdadoscontidosemumarraymultidimensionalemAdvPL.

Vantagens
AvantagemdautilizaodoHashMapemrelaoaoutrasestruturasavelocidadede
[Link]
perceptvelquandotemosumnmeromaiordeentradasouelementosnoArray.

Desvantagens

1/10
Porm,amanutenodeumHashMap(acrescentarouremoverelementos)podeterumcusto

[Link]

28/07/2015

PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl

Porm,amanutenodeumHashMap(acrescentarouremoverelementos)podeterumcusto
maior,inclusivedependendodaestruturainternadaimplementaodoalgoritmodehash,
estecustodemanutenopodeaumentarproporcionalmentedeacordocomaquantidadede
elementosnomapa.

Melhorcenrio
Logo,omelhorcenrioparausodeumHashMappartedautilizaoemumArraydedados
namemria,ondeduranteoprocessamentohaverpoucaounenhumamanutenoneste
mapa(acrescentarouremoverelementos),eaquantidadedebuscasrealizadasnestemapaseja
apartesignificativadoprocessamento.
Programadeexemplo
ParailustrarumcasosimplesdeusodoHashMapemAdvpl,vamosaumprogramade
exemplo,ondesercriadoumarraycomrelativamentepoucoselementos(17),ondea
primeiracolunaserachavedebusca,evamosrealizar50milbuscasparacadaumadas17
chaves,mais50milbuscasporumachavenoexistente.
Naprimeirapartedoprograma,asbuscassobreoArrayserofeitascomASCAN(),ena
segundapartedoprograma,vamoscriarumObjetodeHashMapapartirdoArray,usandoa
funoaToHM(),edepoisrealizarasmesmasbuscasusandooobjetodeHashMap.
Aotodo,cadatestevairealizar900000(novecentasmil)buscas,ondeserocontabilizadosos
temposdas50milbuscasparacadavalorporcadamtodo,eotempototaldetodasasbuscas
pormtodoutilizado.
[Link],elepodeserexecutadodiretamenteapartir
doSmartClient,atravsdafunoU_TSTHASH

Fonte
#[Link]
USERFunctionTstHash()
LocalaDados:={}
LocalnI,nJ
LocalnTimer,nTotal
LocalcBusca
LocalnPos,xValue
LocaloHash
//Criaumarraydeduascolunas,com17elementos

[Link]

2/10

28/07/2015

PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl

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)+1
IfnI>len(aDados)
//Buscaporumelementoquenaoexiste
cBusca:="NE"
Else
//Buscaporumelementoqueexistenalista
cBusca:=aDados[nI][1]
Endif
nTimer:=seconds()
FornJ:=1to50000
//Realiza50milbuscas
nPos:=ascan(aDados,{|x|x[1]==cBusca})
Next
nTimer:=seconds()nTimer
conout("Buscapor["+cBusca+"]demorou"+cValToChar(nTimer)+"s.")
Next
nTotal:=seconds()nTotal
conout("TempoTotal(ASCAN)="+cValToChar(nTotal)+"s.")
conout("")
//AgorausandooHASH
nTotal:=seconds()
//CriaoObjetodeHASHapartirdoArray
oHash:=aToHM(aDados)
[Link]

3/10

28/07/2015

PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl

FornI:=1tolen(aDados)+1
IfnI>len(aDados)
//Buscaporumelementoquenaoexiste
cBusca:="NE"
Else
//Buscaporumelementoqueexistenalista
cBusca:=aDados[nI][1]
Endif
nTimer:=seconds()
FornJ:=1to50000
//Realiza50milbuscas
lFound:=HMGet(oHash,cBusca,@xValue)
Next
nTimer:=seconds()nTimer
conout("Buscapor["+cBusca+"]demorou"+cValToChar(nTimer)+"s.")
Next
nTotal:=seconds()nTotal
conout("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.

[Link]

4/10

28/07/2015

PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl

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,quantomais
elementosprecisamsercomparadosatquesejaencontradoondoarrayquesatisfaza
condio,[Link],
poisnestecasooASCAN()varreutodososelementosdoArrayparadeterminarqueovalor
[Link],50milbuscasdoprimeirovalordoarraydemoraram0,359
segundos,enopiorcenrio,quandoovalorbuscadoeraoltimovalordoarrayouquandoo
valornoexistianoarray,50milbuscasdemoraram1,061segundos.
Jcomousodoobjetodehash,criadoapartirdestemesmoarray,odesempenhodasbuscas
foiaproximadamente7,6vezesmaisrpido,ecadaumadasbuscas,noimportaseachavede
buscaestavanoincioounofinaldomapa,demoraramemmdia1/10desegundo.

Concluso
ComomencionadonotpicoMellhorCenrio,emumprocessamentoondeusamosum
Arrayemmemriacombaixaounenhumamanuteno,eumvolumemuitograndedebuscas,
oHashMapumaalternativaexcelenteemcustoxbenefcio.
Porm,lembresetambmdaLeideAmdahl:Oganhodedesempenhoquepodeserobtido
melhorandoumadeterminadapartedosistemalimitadopelafraodetempoqueessaparte
[Link],seoseucasodeusocriaarrays
pequenoseparapoucasconsultas,tomandoumtemponfimodeprocessamento,criarum
HashMapsvaitedartrabalhoderefatorarseucdigo,evocnoterumganhoperceptvel,
ouainda,nopiorcenrio,[Link]
arraymuitopequeno,logoforamnecessriasmuitasbuscasparamostraradiferenade
desempenho.Cadatestecompletofez900milbuscasnoArraye900milusandoHashMap.
5/10
AsfunesparalidarcomHashMapemAdvPLestodocumentadasnaTDN,apartirdolink

[Link]

28/07/2015

PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl

AsfunesparalidarcomHashMapemAdvPLestodocumentadasnaTDN,apartirdolink
[Link]
([Link]

LetsShare
Esperoquevocstenhamgostadodalinhaderaciocnioecontedodisponibilizadosaquino
[Link]
[Link],eachouestecontedotil,compartilhe,eseestelhefor
til,[Link],ofontedeexemplovaiutilizartodasasfunes
demanuteno,eumndicedebuscacomposto.
Aessnciadoconhecimentoconsisteemapliclo,[Link]
Atoprximopost,pessoal

Referncias
[Link],TheFreeEncyclopedia.December11,2014,
06:[Link]:[Link]
title=Hash_table&oldid=637586906([Link]
title=Hash_table&oldid=637586906).AccessedDecember17,2014.
Sobre estes anncios ([Link]

12comentriossobrePerformance e
escalabilidade Hash Map emAdvPL
1. FabioFongarodisse:
17/12/2014s06:12
[Link]

6/10

28/07/2015

PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl

17/12/2014s06:12
Existerevisodousodesterecursoparaasfunesfiscaisdegeraodenotafiscalque
quandousadascomoexecautosomuitolentas,poisvalidamlinhaalinha,campoacampo,
emcascatatodososelementosdanota(acadanovoelementovalidamtodososanteriores)?
Curtir([Link]
mapemadvpl/?like_comment=7&_wpnonce=a1ff9f558e)
Curtidopor1pessoa
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?
replytocom=7#respond)
Siga0984disse:
17/12/2014s23:23
OlFbio,boanoite,
SobreaMSExecAuto()euconheoapenasopropsitodaimplementao,masnotenho
detalhesdecomoelafuncionapordentro,bemcomomeusconhecimentosnasregrasde
[Link],seinternamentea
validaodetodasaslinhasreexecutadaacadanovoiteminseridona
MSExexcAuto(),acreditoquetrocarumarrayconvencionalparausarumHashno
[Link]
todosositensacadanovoitem,pormumavezconstatadoestecomportamento,deve
serverificadosenoexistealgumaregradenegcioqueexijaarevalidaodetodosos
itens,comoporexemploumdescontoporitemquepodeseraplicadoatodosositensda
[Link]
necessidadederevalidartodososelementos.
Esperoterajudado
Curtir([Link]
hashmapemadvpl/?like_comment=10&_wpnonce=de176a38e0)
Curtir
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?
replytocom=10#respond)
2. SergioMartinezdisse:
17/12/2014s06:23
Excelenteartigoeumexemplomuitobemexplicadoeclaro.
Parabns
Curtir([Link]
mapemadvpl/?like_comment=8&_wpnonce=49ebb68003)
Curtidopor1pessoa
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?
replytocom=8#respond)
Siga0984disse:
17/12/2014s23:12
OlSrgio,obrigado
[Link]

7/10

28/07/2015

PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl

Curtir([Link]
hashmapemadvpl/?like_comment=9&_wpnonce=9909672f94)
Curtir
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?
replytocom=9#respond)
3. FbioMarginidisse:
18/12/2014s07:51
MuitolegalseublogJlio!Estousempreacompanhandoseusartigossempreum
[Link]!
Curtir([Link]
mapemadvpl/?like_comment=11&_wpnonce=87a1792280)
Curtir
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?
replytocom=11#respond)
Siga0984disse:
19/12/2014s20:49
OlFbio,
Gratopelofeedbackeporsuaaudincia
Abraos!!!
Curtir([Link]
hashmapemadvpl/?like_comment=13&_wpnonce=b0a21989c7)
Curtir
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?
replytocom=13#respond)
4. AlvaroCamilloNetodisse:
18/12/2014s11:04
Muitolegalesseartigo!
Aapresentaodosnovosrecursosdessejeitomaisdescontradoecomexemplosest
excelente.
Jpasseioartigoparatodaaminhaequipe.
Att
Curtir([Link]
mapemadvpl/?like_comment=12&_wpnonce=e26368af2e)
Curtidopor1pessoa
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?
replytocom=12#respond)
Siga0984disse:
22/12/2014s01:33
Ollvaro,
[Link]

8/10

28/07/2015

PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl

Quebomquegostou!Mutogratopelofeedbackepelaaudincia
Abraos
Curtir([Link]
hashmapemadvpl/?like_comment=16&_wpnonce=0e43020136)
Curtir
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?
replytocom=16#respond)
5. Rafaeldisse:
09/02/2015s17:52
Excelenteartigo,meajudoumuito!
Obrigado
Curtir([Link]
mapemadvpl/?like_comment=48&_wpnonce=1bae06ce3c)
Curtidopor1pessoa
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?
replytocom=48#respond)
6. Dronidisse:
22/06/2015s11:23
OIJlio.
ofonteMATXFISpoderiasermelhoradanoprocessoseimplementadoHashMap?
Abraos
Curtir([Link]
mapemadvpl/?like_comment=132&_wpnonce=bea07d403f)
Curtidopor1pessoa
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?
replytocom=132#respond)
Siga0984disse:
22/06/2015s12:24
Opa,vejamosEstefontecontmvriasfunes,somenteseriapossveldeterminara
eficciadeumarefatoraousandoHashMapmedianteaanlisedecadafuno.
Curtir([Link]
hashmapemadvpl/?like_comment=133&_wpnonce=ad06fbf1e8)
Curtir
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?
replytocom=133#respond)
7. Lucianadisse:
10/07/2015s15:00

Nossaqueartigobacana.

[Link]

9/10

28/07/2015

PerformanceeescalabilidadeHashMapemAdvPL|TudoemADVPl

Nossaqueartigobacana.
Eufaziaissodeumaformatoarcaica,gosteidessenovasoluo
Curtir([Link]
mapemadvpl/?like_comment=146&_wpnonce=f9d3001fc8)
Curtidopor1pessoa
Responder(/2014/12/16/performanceeescalabilidadehashmapemadvpl/?
replytocom=146#respond)

[Link]([Link]
ref=footer_website). OtemaBigBrother([Link]
Seguir

SeguirTudoemADVPl
[Link]([Link]

[Link]

10/10

Você também pode gostar