Indexando no XP

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

querentino
Usuário Nível 1
Usuário Nível 1
Mensagens: 25
Registrado em: 28 Jan 2009 19:53
Localização: Guarulhos - São Paulo

Indexando no XP

Mensagem por querentino »

Ola pessoal, sou novato no forum e estou com um problema na hora de indexar um arquivo no XP por causa da lentidão.
Se eu mando indexar no servidor blz. mais se indexo em outra maquina a lentidao atrapalha.
principalmente nesta parte do codigo que atrapalha a demora, porque eu preciso pesquisar por dois campos e palavras que esta no meio
da variavel. E peço uma orientação qual a melhor forma de indexar um arquivo no xp e em rede.

segue parte do codigo. desde ja agradeço qualquer ajuda.

Código: Selecionar todos

CLEAR GETS
          SET CURSOR ON
          SET INDEX TO D:\KARVAN\NOMEPECA
          SET SOFTSEEK ON
          SETCOLOR("W+/BG,N/W")
          V_APLIC:=SPACE(20)
          V_DESCR:=SPACE(20)
          @ 03,20 CLEAR TO 07,54
          @ 03,20 TO 07,54 DOUBLE
          @ 04,22 SAY "APLICACAO:" GET V_APLIC PICT "@!"
          @ 06,22 SAY "DESCRICAO:" GET V_DESCR PICT "@!"
          READ
          IF EMPTY(V_APLIC) .AND. EMPTY(V_DESCR)                        
                SET INDEX TO D:\KARVAN\NOMEPECA
              ELSEIF EMPTY(V_APLIC)
                INDEX ON NOMEPECA TO D:\KARVAN\APLIDESC FOR RTRIM(V_DESCR) $ NOMEPECA
              ELSEIF EMPTY(V_DESCR)
                INDEX ON NOMEPECA TO D:\KARVAN\APLIDESC FOR RTRIM(V_APLIC) $ NOMEPECA
              ELSE
                INDEX ON NOMEPECA TO D:\KARVAN\APLIDESC FOR RTRIM(V_APLIC) $ NOMEPECA .AND. RTRIM(V_DESCR) $ NOMEPECA
          ENDIF          
          MNOMEPECA=NOMEPECA
          IF EOF()
              ALERT ('Consulta nao Encontrada....!!!')
              SET INDEX TO D:\KARVAN\NOMEPECA
              RETURN(2)
          ENDIF
          NTX=2
          RETURN(2)
-------------------------------
Nota de Moderação (Toledo): mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: faq.php?mode=bbcode#f21
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Indexando no XP

Mensagem por Maligno »

Olá.
Seja bem-vindo ao fórum. :)

Você diz que no servidor a velocidade da indexação está dentro do que você considera normal, mas numa estação qualquer a velocidade cai muito. Mas a resposta pode estar aí mesmo: um gargalo na rede. Talvez até um problema de hardware de rede. Note que o processo de indexação num programa como o Clipper, que é de acesso local, faz todo o banco de dados trafegar pela rede. Então, é natural que haja uma queda na velocidade não só da indexação, mas do acesso. A coisa piora conforme aumenta a concorrência entre as estações. Decididamente, Clipper não foi feito para alto tráfedo de rede.

Quanto ao código em si, você me parece que está criando índice desnecessário, embora até resolva o problema de sua pesquisa. Se você trocar o RDD do índice nativo do Clipper pelo da biblioteca SIX, esse tipo de pesquisa não precisará de indexação a todo instante, como me parece ser o que você faz. Como é um RDD muito melhor, compactado e composto, ele tem uma série de funções que auxiliam bastante pesquisas desse tipo. Basta ter o índice que ele permite a pesquisa de sub-strings de forma automática. Basta usar uma função.

Se interessar, procure na página de pesquisa do fórum pela biblioteca "SIX". Já postaram inúmeras mensagens a respeito. Se ainda assim tiver alguma dúvida, crie um novo tópico para tratar desse assunto.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Indexando no XP

Mensagem por Maligno »

Em tempo: se você perceber, pelo "Task Manager" do Windows, que o seu programa está consumindo tempo de CPU de forma excessiva, há uma forma de resolver isso também. Procure no fórum pela função FreeTSlice(). Mesma coisa: se não encontrar ou ainda tiver dúvida a respeito, crie um novo tópico para tratar desse assunto.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
querentino
Usuário Nível 1
Usuário Nível 1
Mensagens: 25
Registrado em: 28 Jan 2009 19:53
Localização: Guarulhos - São Paulo

Re: Indexando no XP

Mensagem por querentino »

Blz eu vou pesquisar a biblioteca SIX e ver se resolve o broblema.

valeu pela orientação.
Avatar do usuário
PAULO S
Usuário Nível 3
Usuário Nível 3
Mensagens: 176
Registrado em: 24 Abr 2006 09:18
Localização: Santo Anastácio - SP

Re: Indexando no XP

Mensagem por PAULO S »

Desculpem estar utilizando este tópico, mas aproveitando o gancho do Mestre Maligno, gostaria de perguntar-lhe: Como mencionou o Clipper não tem bom desempenho em rede, já que tenho alguns problemas deste tipo. Dentro do próprio Clipper existe alguma possibilidade de melhorar ? O XHarbour é a solução para manter os códigos sem muita alteração ? Ou sugere alguma outra solução ?
Agradeço a compreensão de todos.
Paulo
Clipper 5.2d/NTX -> xHarbour/CDX
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Indexando no XP

Mensagem por Maligno »

Sem referência à qualquer linguagem, a melhor solução para incrementar bastante a velocidade de acesso a dados é por um banco de dados cliente/servidor, que executam todas as ações no servidor, fazendo trafegar pela rede apenas os dados realmente necessários. Eu estou usando o Firebird, que pra desktop (na linha dos gratuitos) muita gente considera o melhor. Me parece que o pessoal do [x]Harbour prefere MySQL. Há várias opções. Pesquise na seção do XHarbour. Tem bastante coisa por lá.

Em termos de ferramenta, se for preciso manter os fontes com as menores alterações possíveis, o melhor caminho, sem dúvida é o XHarbour. Ou, conforme já comentaram, a onda agora parece ser o Harbour, de novo. Não sei. Isso me parece que está meio confuso.

Agora, se pra um projeto futuro você pode migrar pra outra linguagem ou ferramenta melhor, é sua opção, e talvez pra você seja muito melhor. Também com relação a isso já existem vários tópicos.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Re: Indexando no XP

Mensagem por Eolo »

Paulo S, eu fiz esse caminho, migrei do Clipper/DBF/NTX para o xHarbour/DBF/CDX, e com muito pouca alteração nos fontes, consegui uma considerável melhora de performance em tudo. Vale mesmo a pena. Só a classe Win32prn, que permite que vc imprima em pixels (sem se limitar a linha/coluna) em qq impressora instalada na rede, sem nenhum programa externo, já mata a pau.

Talvez o que complique um pouco é se você usar alguma LIB do Clipper que ainda não tenha correspondente no xHarbour, ou cujo correspondente altere as funcionalidades de forma indesejada. É, por exemplo, um caso citado aqui no forum, sobre formatação de disquetes.


Bem, mais recentemente, passei a usar os mesmos EXEs xHarbour via Terminal Service, aí a coisa ficou chic de vez. Com estações WinXP acessando os EXEs e DBF/CDXs guardados em um servidor Win2003, via TS, tanto local quanto via internet, o trabalho é todo feito no servidor, aí é menos tráfego e mais rapidez na rede. Além do mais, o servidor pode ser acessado de qualquer lugar do planeta, mesmo que o servidor não tenha IP fixo (é só usar o NO-IP). Meu cliente vai viajar e, de onde estiver, acessa o meu programa em tempo real.

Outra vantagem: precisa fazer alguma manutenção? Atualizar o EXE? Via TS vc faz isso, não precisa ir até o cliente...

A propósito, não é obrigatório o Win2003 como servidor. Dá pra fazer o TS funcionar também num "servidor" WinXP. O Alamino fez essa experiência e funciona beleza.

Em tempo: veja o tutorial que ele publicou aqui no forum: https://pctoledo.org/forum/viewto ... =43&t=9041
Avatar do usuário
PAULO S
Usuário Nível 3
Usuário Nível 3
Mensagens: 176
Registrado em: 24 Abr 2006 09:18
Localização: Santo Anastácio - SP

Re: Indexando no XP

Mensagem por PAULO S »

Muito obrigado pelas respostas. Agradeço ao Mestre Maligno e ao Eolo.
Já fiz algumas experiências com xHarbour, mas agora me interessei por TS com servidos WinXP. Vou ler o tutorial sugerido e se preciso vou recorrer ao colega Alamino.
Obrigado a todos, e se alguém tiver mais alguma sugestão, principalmente com relação a TS com WinXP.
Paulo
Clipper 5.2d/NTX -> xHarbour/CDX
GeraWin
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 28 Jan 2009 15:34
Localização: Bahia

Re: Indexando no XP

Mensagem por GeraWin »

Ola Querentino!

Pelo que percebi voce esta tentando ordenar um arquivo em um terminal atraves da rede.

Existe um meio mais rapido e seguro.
Copie o arquivo para o terminal e ai pronto, é só indexar, deletar, incluir, etc.

segue abaixo uma rotina simples. Coloque-a antes do seu indexador.

*/--------------------------------------------------------*/
*/ CRIA NOVO NOME PARA ARQUIVO DBF
*/ ex:
*/ novoArq := nTempDBF( "PROGRAMA" )
*/
*/ obs.: * crie uma pasta "c:\temp" em cada terminal
*/ * de preferencia, crie uma dbf para armazenar o ultimo nome do arquivo temporario e busque-o
*/
*/

function nTempDBF( nNomeDBF )

local arqui1F := nNomeDBF+".dbf"

local arqui1 := 0
local arqui2 := 0
local arqui3 := 0

local saidir0, arquit1, arqui2F, arqui3F

saidir0 := "\" + CURDIR() + "\"
arqui3F := ( saidir0 + arqui1F )

iifun := 1
do while iifun <> 0
saidir0 := "c:\temp\"
arquit1 := ( "Temp-" + chr(65+ arqui1) + chr(65+ arqui2) + chr(65+ arqui3) )
arqui2F := ( saidir0 + arquit1 + ".dbf" )

if file(arqui2F) = .f.
iifun := 0
exit
endif

arqui3 := arqui3 +1
if arqui3 >= 26
arqui2 := arqui2 +1
arqui3 := 0
if arqui2 >= 26
arqui1 := arqui1 +1
arqui2 := 0
if arqui1 >= 26
arqui1 := 0
arqui2 := 0
arqui3 := 0
endif
endif
endif
enddo

copy file &arqui3F to &arqui2F

return (arquit1)
Tigre
geralb@bol.com.br
www.geralb.com.br
Clipper / Blinker / FiveWin / xHarbour / Delphi
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Re: Indexando no XP

Mensagem por Eolo »

Existe um meio mais rapido e seguro. Copie o arquivo para o terminal e ai pronto, é só indexar, deletar, incluir, etc.
Beto, do jeito que vc sugere, o Querentino precisa antes bloquear o acesso de todo mundo ao arquivo original (no servidor), para entar poder copiar pro terminal, fazer as atualizações e depois copiar de volta.

Se ele não bloquear, outro(s) usuário(s) pode(m) fazer alterações conflitantes com as dele: ele muda de A pra B na cópia do terminal e, no mesmo momento, alguém tá mudando no servidor de A pra X.

Por outro lado, se ele bloquear, ninguém mais mexe nesse arquivo até ele terminar o serviço com a cópia. Assim ele para a empresa...
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Indexando no XP

Mensagem por Maligno »

GeraWin escreveu:Copie o arquivo para o terminal e ai pronto, é só indexar, deletar, incluir, etc.
Se o sistema está em rede é porque deve ser utilizado por mais de um usuário. Logo, poderia ocorrer um sério problema de sincronismo, como frisou o Eolo. E se o arquivo for travado, pode acabar travando o trabalho dos demais usuários. Já pensou todo mundo ficando de braços cruzados enquanto alguém tira um relatório, por exemplo? No que pese a boa vontade de sugerir uma solução, essa realmente não é uma boa idéia.

No lugar do colega, eu partiria pra outra solução: o TS, como também (bem) sugeriu o Eolo ou SQL em [x]Harbour, que é muito melhor. Mas esquecendo de vez os DBFs. Sugeriram em outro tópico usar MySQL e copiar cadastro de clientes em DBF pra agilizar pesquisa de nome. Absurdo total!
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
GeraWin
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 28 Jan 2009 15:34
Localização: Bahia

Re: Indexando no XP

Mensagem por GeraWin »

Ola!

Obrigado pela observação.

Mas a rotina acima faz algo identico a função "DBExpress" ja usada no Delphi.

Ela não trava arquivo nenhum.
Ela faz uma copia do arquivo DBF do servidor para o terminal, gerando um arquivo DBF temporario com o nome "novoArq" só para consultas (não podendo ser usado para atualizações), liberando o original do servidor (em outras palavras: temp).
Ao fechar o arquivo temporario, ele não sera mais usado.
Assim fica mais leve.

Aconselho acressantar ao inicio do arquivo de indexação inicial do dia (".bat", se tiver) a seguinte rotina:

DEL C:\temp\TEMP*.* >NUL
IF EXIST C:\temp\TEMP*.* GOTO :ERRO

:ERRO
CLS
ECHO +++++++++++++++++++++++++++++++++++++++++++++++
ECHO + ATENCAO
ECHO +++++++++++++++++++++++++++++++++++++++++++++++
ECHO + HOUVE ERRO AO DELETAR ARQUIVOS TEMPORARIOS
ECHO +
ECHO + PARA CONTINUAR TECLE ALGO
ECHO +++++++++++++++++++++++++++++++++++++++++++++++
PAUSE > NUL
Tigre
geralb@bol.com.br
www.geralb.com.br
Clipper / Blinker / FiveWin / xHarbour / Delphi
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Indexando no XP

Mensagem por Maligno »

Mas a rotina acima faz algo identico a função "DBExpress" ja usada no Delphi.
DBExpress no delphi não é função, mas uma suite de componentes para conexão a vários bancos de dados. O que mais se aproxima do que você está falando é quando você tem um dataset bidirecional que povoa um grid. Conforme o select feito, todo um enorme conjunto de dados será carregado em memória para alimentar esse grid.

No caso que se apresenta, a pesquisa seria feita por uma simples declaração SQL que, se não tiver problemas, retorna realmente bem rápido. Eu faço isso direto. Embora não use mais o DBExpress, que já é rápido. Uso o CoreLab, que é mais rápido ainda. Num grid, para efeito de teste, eu carrego 10.000 registros com 10 campos cada tão rápido que nem dá tempo de medir o tempo. Que dizer de um simples nome em um cadastro.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
GeraWin
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 28 Jan 2009 15:34
Localização: Bahia

Re: Indexando no XP

Mensagem por GeraWin »

Ola!

Tambem não uso mais o DBExpres, uso o SQLTable com o SQLConnection.

Gostei da sua opnião.
Tem algum tópico que fala sobre CoreLab ?
Tigre
geralb@bol.com.br
www.geralb.com.br
Clipper / Blinker / FiveWin / xHarbour / Delphi
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Indexando no XP

Mensagem por Maligno »

Acho que o melhor, em primeira instância, é ver o site deles. Clique aqui. Depois, o Google. Não conheço nenhum site que se aprofunde nisso. Mas deve ter.

Se quiser discutir mais sobre dephi, Corelab, etc..., por favor, use a seção "Outras linguagens de programação", pra não desvirtuarmos esse tópico mais do que já foi. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder