Clipper On Line • Ver Tópico - Browse lento com DBF de mais de 100 mil registros

Browse lento com DBF de mais de 100 mil registros

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Browse lento com DBF de mais de 100 mil registros

Mensagempor Heero » 21 Out 2019 17:09

Olá, tenho um arquivo DBF com aproximadamente 120 mil registros. Acontece que quando abro em um terminal, mesmo com o sistema no servidor, abre perfeitamente e com boa performance. Agora se abro em outro computador ao mesmo tempo, os dois terminais ficam extremamente lentos com esse DBF aberto. Alguma dica ? :/

MiniGui Extended, Harbour 3.2, BCC55

Código do meu Browse:

    
@ 100,1 browse Produtos;
        parent janela;
        width janela.Width  - 20;
        height janela.Height - 175 ; 
        headers {'Cód. Produto','Descrição','Aplicação','Número da Peça','Código Original','UN'} ;
        widths {85,235,225,150,225,35} ;
        workarea prd ;
        fields {'Edprd(cdprod)','descri','aplic','numpeca','numorg','unimed'} ;
        justify {1,0,0,1,0,2};
        on dblclick Aplicacao:Alterar() ;
        on change nil;
        on gotfocus nil



Obrigado!
Ricardo Rodrigues
Harbour 3.2 + BCC + Minigui
Cursando Análise e Desenvolvimento de Sistemas
Heero
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 43
Data de registro: 13 Jul 2015 22:10
Cidade/Estado: Guarulhos/SP
Curtiu: 8 vezes
Mens.Curtidas: 3 vezes

Browse lento com DBF de mais de 100 mil registros

Mensagempor MSDN » 21 Out 2019 18:10

A melhor solução para o seu caso, é não usar o Browse para "carregar" mais de 100 mil registros, e sim ter o campo PESQUISA e de acordo com o seu conteúdo mostrar as informações.
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 786
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 164 vezes
Mens.Curtidas: 109 vezes

Browse lento com DBF de mais de 100 mil registros

Mensagempor JoséQuintas » 21 Out 2019 21:36

Estranho isso.
Um terminal ok, dois terminais fica lento.
normal terminal ficar mais lento que servidor, mas entre os terminais, deveria ser velocidade equivalente.
Também pode ser normal se estiver usando o servidor, e não ter os devidos cuidados no programa.

Aquilo de tempo pra Windows faz diferença, mas deveria ser problema em browse DOS, e não em browse GUI.

Tive um problema desse tipo na época do Clipper, nos tempos do Windows 98.
Nessa época passei a usar OSLIB e SIXCDX, e tudo ficou rápido, não sei se foi coincidência, ou se tem alguma coisa a ver.

Também é conhecido que nos índices há bloqueio pra leitura, em páginas do índice, mas não pra chegar nesse ponto.
A não ser que o browse usado com edição faça bloqueios automáticos e estejam atrapalhando.

Tem programa de banco no servidor? isso sim faz muuuuita diferença?
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14689
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 864 vezes

Browse lento com DBF de mais de 100 mil registros

Mensagempor Heero » 23 Out 2019 10:09

MSDN escreveu:A melhor solução para o seu caso, é não usar o Browse para "carregar" mais de 100 mil registros, e sim ter o campo PESQUISA e de acordo com o seu conteúdo mostrar as informações.


MSDN, Obrigado pela dica! =)

JoséQuintas escreveu:Estranho isso.
Um terminal ok, dois terminais fica lento.
normal terminal ficar mais lento que servidor, mas entre os terminais, deveria ser velocidade equivalente.
Também pode ser normal se estiver usando o servidor, e não ter os devidos cuidados no programa.

Aquilo de tempo pra Windows faz diferença, mas deveria ser problema em browse DOS, e não em browse GUI.

Tive um problema desse tipo na época do Clipper, nos tempos do Windows 98.
Nessa época passei a usar OSLIB e SIXCDX, e tudo ficou rápido, não sei se foi coincidência, ou se tem alguma coisa a ver.

Também é conhecido que nos índices há bloqueio pra leitura, em páginas do índice, mas não pra chegar nesse ponto.
A não ser que o browse usado com edição faça bloqueios automáticos e estejam atrapalhando.

Tem programa de banco no servidor? isso sim faz muuuuita diferença?


JoséQuintas, não tem, é apenas a aplicação e antivírus Kaspersky instalado. Aqui são dois servidores com Windows Server 2012 R2 e Ubuntu Server 18.04 LTS com samba. Foi testado nos dois e o resultado foi o mesmo.

Porém você me deu uma luz quanto aos índices. Decidi testar com .CDX e o ganho de perfomance foi muito grande. É um sistema que que atualmente roda no modo console e os dados são mostrados para o usuário através do DBEdit. Na conversão com MiniGui estamos usando Browse para DBF e Grid para Arrays. Não sei se o Browse tem algum problema com índices NTX :/

Com índice .CDX abri em cinco terminais e não tive perda de performance. O CDX é rápido assim mesmo ? Isso deu até uma animada rs, porém vamos precisar rever algumas coisas pois de acordo com outro tópico seu, algumas coisas mudam na hora de indexar. Inclusive usamos o SET RELATION que aparentemente deixou de funcionar, vamos ter que ver isso também.

Tópico referenciado: http://www.pctoledo.com.br/forum/viewtopic.php?f=43&t=15548
Ricardo Rodrigues
Harbour 3.2 + BCC + Minigui
Cursando Análise e Desenvolvimento de Sistemas
Heero
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 43
Data de registro: 13 Jul 2015 22:10
Cidade/Estado: Guarulhos/SP
Curtiu: 8 vezes
Mens.Curtidas: 3 vezes

Browse lento com DBF de mais de 100 mil registros

Mensagempor JoséQuintas » 23 Out 2019 10:54

Heero escreveu:Com índice .CDX abri em cinco terminais e não tive perda de performance.
O CDX é rápido assim mesmo ?
Isso deu até uma animada rs, porém vamos precisar rever algumas coisas pois de acordo com outro tópico seu, algumas coisas mudam na hora de indexar. Inclusive usamos o SET RELATION que aparentemente deixou de funcionar, vamos ter que ver isso também.Tópico referenciado: viewtopic.php?f=43&t=15548


Por coincidência o post é de 21/10, mas de 2014, exatamente 5 anos atrás.
Não deveria fazer diferença pra set relation, a não ser que não tenha definido o índice que precisa ser o default dessa situação.

Foi um chute meu...
Daquele tipo: se aqui funciona e aí não, qual poderia ser a diferença.
Por isso mencionei o CDX.

Pensei agora no seguinte:

Se CDX deixou tudo mais rápido na rede.....
Será que problemas em rede, que muitos mencionam, não podem estar relacionados a usarem NTX?

Quem não mudou pra CDX ainda, agora tem um bom motivo pra mudar.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14689
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 864 vezes

Browse lento com DBF de mais de 100 mil registros

Mensagempor Heero » 25 Out 2019 14:21

JoséQuintas escreveu:Não deveria fazer diferença pra set relation, a não ser que não tenha definido o índice que precisa ser o default dessa situação.


Realmente ficou muito rápido.

Porém não sei se devo abrir outro tópico pra falar a respeito de CDX, mas praticamente todas as indexações concatenadas deixaram de funcionar. Somente as que possuem apenas uma variável continuam funcionando.

Em NTX era assim:

if !AbreArq(dv,'produto','prd',' ') -> Minha rotina pra abrir DBFs
      return
endif

index on strzero(cdprod,8,0) to &dv\produto1
index on descri to &dv\produto2
index on numpeca  to &dv\produto3
index on subs(strzero(cdprod,8,0),1,3)+numpeca to &dv\produto4
index on strzero(cdbarra,13,0) to &dv\produto5
index on codaux to &dv\produto6
index on numorg to &dv\produto7

...
set order to 1
set order to 2

seek tal

etc.


Em CDX ficou assim:

 
index on strzero(cdprod,8,0) TAG produto1 to &dv\produto
index on descri TAG produto2 to &dv\produto
index on numpeca TAG produto3 to &dv\produto
index on subs(strzero(cdprod,8,0),1,3)+numpeca TAG produto4 to &dv\produto
index on strzero(cdbarra,13,0)  TAG produto5 to &dv\produto
index on codaux TAG produto6 to &dv\produto
index on numorg TAG produto7 to &dv\produto


Em CDX tentei:

OrdSetFocus('produto1') e OrdSetFocus(1)
OrdSetFocus('produto2') e OrdSetFocus(2)

Porém em especial somente as indexações com concatenações não mais funcionando, o exemplo acima é só um dos casos.

Estou fazendo algo de errado ? Qualquer dica ou crítica é bem vinda =/
Ricardo Rodrigues
Harbour 3.2 + BCC + Minigui
Cursando Análise e Desenvolvimento de Sistemas
Heero
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 43
Data de registro: 13 Jul 2015 22:10
Cidade/Estado: Guarulhos/SP
Curtiu: 8 vezes
Mens.Curtidas: 3 vezes

Browse lento com DBF de mais de 100 mil registros

Mensagempor JoséQuintas » 25 Out 2019 15:58

À primeira vista nada de errado.
Faça um teste indicando apenas a tag.
INDEX ON chave TAG umnome
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14689
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 864 vezes

Browse lento com DBF de mais de 100 mil registros

Mensagempor NiltonGM » 19 Nov 2019 10:34

Vcs ainda usam DBF/CDX?? Não acredito!
Aposto a tela ainda é tipo clipper DOS... mude para SQL e esqueça esses problemas, vc terá novos problemas mas esses nunca mais....
Nilton Medeiros
nilton@sistrom.com.br
Avatar de usuário

NiltonGM
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 340
Data de registro: 05 Jun 2014 23:47
Cidade/Estado: Caieiras/SP
Curtiu: 214 vezes
Mens.Curtidas: 13 vezes

Browse lento com DBF de mais de 100 mil registros

Mensagempor paiva_dbdc » 20 Nov 2019 08:46

bom dia

e se vc usa xhb use RMDBFCDX que ainda ganga de 20 a 30%

*//-- solicitacao do RDD DBFCDX

*request DBFCDX
REQUEST RMDBFCDX // Utilize essa linha para utilizar a rotina para filtros rapidos

request DTOS
request DELETED
request DESCEND

*RddSetDefault( "DBFCDX" )
RddSetDefault("RMDBFCDX") // Utilize esse linha para definir CDX como padrao usando fitros otimizados

REQUEST OrdKeyCount, OrdKeyNo // DbfCdx
paiva_dbdc
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 297
Data de registro: 12 Nov 2012 08:58
Cidade/Estado: uberlandia mg
Curtiu: 0 vez
Mens.Curtidas: 4 vezes




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


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