Clipper On Line • Ver Tópico - Ordenar (SORT) uma Hash Table

Ordenar (SORT) uma Hash Table

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Ordenar (SORT) uma Hash Table

Mensagempor asimoes » 23 Out 2018 22:38

Kkk, tô ficando velho, muito velho pra isso,
A novidade é atribuir nil para hrecord
No meu posto não tem
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Ordenar (SORT) uma Hash Table

Mensagempor fladimir » 24 Out 2018 14:13

Testei com uma base de 1.118.902 registros tendo cada registro 69 colunas/campos

Baseando no codigo do Quintas, testei com While e DBEVAL... ai depois de um tempo rodando cai fora da rotina... ai abrindo o hb_out.log da impressão q houve uma falha de memoria, mas não poderia não é?

Segue hb_out.log do DBEVAL
Terminated at: 2018-10-24 13:03:52
Unrecoverable error 9009: hb_xrealloc can't reallocate memory
Called from HB_HSET(0)
Called from (b)IMG9(13) in _Testes.prg
Called from DBEVAL(0)
Called from IMG9(17) in _Testes.prg
Called from MAIN(238) in menu.prg
------------------------------------------------------------------------


Segue hb_out.log do WHILE
Terminated at: 2018-10-24 13:08:23
Unrecoverable error 9009: hb_xrealloc can't reallocate memory
Called from HB_HSET(0)
Called from IMG9(14) in _Testes.prg
Called from MAIN(238) in menu.prg
------------------------------------------------------------------------


Alguém teria alguma sugestão do q poderia ser?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Ordenar (SORT) uma Hash Table

Mensagempor JoséQuintas » 24 Out 2018 14:22

o que tem nessas linhas? 13, 14, 17 de img9 ?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ordenar (SORT) uma Hash Table

Mensagempor JoséQuintas » 24 Out 2018 14:26

E qual o tamanho do registro?
Se cada campo tiver 1 byte, que não é, já dá uns 70MB
Se tiver campo memo então... vixe... 32 bits limita a 4GB.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ordenar (SORT) uma Hash Table

Mensagempor JoséQuintas » 24 Out 2018 14:28

1 milhão de registros. 1MB.
Cada registro com 4000 bytes.. 4GB.... impossível em 32 bits.
Se fiz a conta direito... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ordenar (SORT) uma Hash Table

Mensagempor JoséQuintas » 24 Out 2018 14:32

Conta simples:
Quanto é o tamanho do DBF + FPT, se é que isso é dbf...
Ou o tamanho no MySQL, se for MySql...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ordenar (SORT) uma Hash Table

Mensagempor fladimir » 24 Out 2018 14:33

Imagem

Tamanho da tabela 925 MB
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Ordenar (SORT) uma Hash Table

Mensagempor JoséQuintas » 24 Out 2018 14:57

Não bate com a linha do erro.
No dbeval mostra o erro na linha 17, que chama a 13.
A 17 é dbskip()

Dependendo da rotina, se passa a variável por parâmetro, vai ser quase 1GB pra cada chamada, lembre-se disso.

a := 1GB
Funcao( a )

Isso são 2GB.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ordenar (SORT) uma Hash Table

Mensagempor JoséQuintas » 24 Out 2018 15:03

O inverso também

a := ConverteHash()

Vai precisar gravar 1GB em a, antes de destruir o 1GB da subrotina.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ordenar (SORT) uma Hash Table

Mensagempor fladimir » 24 Out 2018 15:13

o erro é no hb_hSet

depois de cerca de 275mil registros ocorre o erro.

Eu fiz um teste no FOR ... FCount() q varre as colunas do registro, mudei pra fazer até a coluna 10, passou, ou seja, esta estourando mesmo.
Vou ver até q coluna preciso e deixar assim, mas isso é ruim pq uma hora vai dar problema conforme crescer mais a tabela.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Ordenar (SORT) uma Hash Table

Mensagempor JoséQuintas » 24 Out 2018 15:34

Use arquivos temporários.
Nunca vai ter problema de memória.
É assim que o Windows funciona.

Tem essa também.... vai depender de que programas o cliente carrega ao mesmo tempo, pra saber o limite. Pode funcionar aí e no cliente não.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ordenar (SORT) uma Hash Table

Mensagempor fladimir » 24 Out 2018 16:09

Quintas, se não for pedir muito, da uma ideia do exemplo do teu código (imagem) como ficaria com arquivo temporário.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Ordenar (SORT) uma Hash Table

Mensagempor JoséQuintas » 24 Out 2018 16:56

Mais ou menos isto:

cTmpFile := MyTempFile()
SELECT 0
dbCreate( cTmpFile, arquivo->( dbStruct() ) )
USE (cTmpFile) ALIAS temp
DO WHILE ! arquivo->( Eof() )
   RecAppend()
   FOR nCont = 1 TO FCount()
      FieldPut( nCont, arquivo->( FieldGet( nCont ) )  )
   NEXT
   arquivo->( dbSkip() )
ENDDO
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ordenar (SORT) uma Hash Table

Mensagempor JoséQuintas » 24 Out 2018 17:22

Talvez seja bom um Inkey() aí no meio, ou equivalente em tela gráfica.
É para não roubar todo tempo do Windows, e no caso de GUI pra não congelar a tela até o término.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ordenar (SORT) uma Hash Table

Mensagempor fladimir » 24 Out 2018 20:35

Deu certo mas fica muito lento.

Resolvi da seguinte forma, crio um indice temporario reduzindo o range de registros, exemplo periodo tal... ai em cima disso crio uma hashtable
Ai fica rapido e resolve
Agora criar a hash ou arquivo temporario a partir da tabela original sem filtro nenhum antes no cenario q apresentei aki demora demais.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Anterior Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro