Ordenar (SORT) uma Hash Table

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

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Ordenar (SORT) uma Hash Table

Mensagem por asimoes »

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 do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Ordenar (SORT) uma Hash Table

Mensagem por fladimir »

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

Código: Selecionar todos

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

Código: Selecionar todos

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ordenar (SORT) uma Hash Table

Mensagem por JoséQuintas »

o que tem nessas linhas? 13, 14, 17 de img9 ?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ordenar (SORT) uma Hash Table

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ordenar (SORT) uma Hash Table

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ordenar (SORT) uma Hash Table

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Ordenar (SORT) uma Hash Table

Mensagem por fladimir »

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ordenar (SORT) uma Hash Table

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ordenar (SORT) uma Hash Table

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Ordenar (SORT) uma Hash Table

Mensagem por fladimir »

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ordenar (SORT) uma Hash Table

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Ordenar (SORT) uma Hash Table

Mensagem por fladimir »

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ordenar (SORT) uma Hash Table

Mensagem por JoséQuintas »

Mais ou menos isto:

Código: Selecionar todos

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ordenar (SORT) uma Hash Table

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Ordenar (SORT) uma Hash Table

Mensagem por fladimir »

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.
Responder