Clipper On Line • Ver Tópico - Idéia - Servidor para filtragem de dados em DBF

Idéia - Servidor para filtragem de dados em DBF

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

Idéia - Servidor para filtragem de dados em DBF

Mensagempor ANDRIL » 30 Mai 2020 19:37

Passei dois dias tentando otimizar algumas rotinas de busca que já usavam índice temporários com a clausula FOR. Uso estes índices para filtragem de palavras em um determinado campo, como exemplo, o endereço de um cliente.

Tanto uso em rede wifi como cabeada causa um grande intervalo (demora) na entrega dos resultados, sendo a cabeada um pouco menos lenta.
Tentei OrdWildSeek() e permaneceu insatisfatório, além de ter que capturar o resultado para um array. Em muitas telas, a busca já é feita de dentro de um DbEdit e o fato de montar um array no fim não atendeu muito bem.

O jeito foi criar um servidor de filtragem para DBF, capaz de processar e devolver aos PCs de rede o ponteiro do indice pronto evitando assim todo tráfego de rede durante sua criação. Não é que deu certo! É um motor como qualquer outro que se instala no servidor como quando usamos SQL, MYSQL, ODBC, etc com finalidade exclusiva de filtragem de dados.

O fato é que uma simples filtragem por endereço demora em média de 3 a 4 minutos em uma rede wifi e com o servidor de filtragem caiu para menos de 3 segundos, ou seja, instantâneo.

O servidor de filtragem aceita criação de índice comum, com WHILE e com FOR ou com ambos e tira proveito dos índices já construídos pela aplicação a qual esta servindo. A vantagem no momento é que não precisei alterar para outro tipo de banco, mudar fontes etc, apenas alterei no momento que preciso criar o índice temporário que é algumas telas apenas.

Fiquei empolgado com isto, estou terminando as adaptações e vou colocar em campo no cliente com umas 20 máquinas, que usam muito este recurso de busca por palavras no campo endereço e ver como se sai.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1270
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Idéia - Servidor para filtragem de dados em DBF

Mensagempor Itamar M. Lins Jr. » 30 Mai 2020 22:35

Ola!
O LetoDbf faz isso e muito mais.
Pq não usa ?

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Idéia - Servidor para filtragem de dados em DBF

Mensagempor Itamar M. Lins Jr. » 30 Mai 2020 22:36

Ola!
E tem o NetIO, também.
Não está reinventando a roda ?

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Idéia - Servidor para filtragem de dados em DBF

Mensagempor ANDRIL » 31 Mai 2020 10:34

Itamar, venho lendo conteúdo aqui no fórum sobre o letodbf para me preparar para mudança, porem com falta de tempo não terei como aplicá-lo no momento, o sistema é grande e quando o fizer vou fazer um pente fino para ver se tudo se comporta como o esperado.

Então quando disse "servidor de filtragem" é uma solução a parte com propósito único que me entrega o que preciso no momento. Como vou usar em casos específicos e extra fonte não tenho que rever o sistema como um todo a procura de alguma incompatibilidade de uso, o que seria necessário em uma mudança para o Letodbf ou outro RDD.

Sobre o letodbf pela internet, alguém conseguiu usar acessando o servidor de fora liberando a porta no roteador com DDNS? Se tiver internet boa a velocidade é boa?
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1270
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Idéia - Servidor para filtragem de dados em DBF

Mensagempor Itamar M. Lins Jr. » 31 Mai 2020 16:25

Ola!
Itamar, venho lendo conteúdo aqui no fórum sobre o letodbf para me preparar para mudança, porem com falta de tempo não terei como aplicá-lo no momento, o sistema é grande e quando o fizer vou fazer um pente fino para ver se tudo se comporta como o esperado.

O trabalho que vc está tendo em fazer isso, já está pronto no NetIO e no LetoDbf, é só usar.
Vc vai usar o LetoDbf/NetIO para roda RPC só isso!
Digamos que vc tem uma FuncaoFiltroX para rodar no servidor, esses servidores de DBF fazem isso.
Só precisa acrescentar duas linhas no seu prg e chamar a função que desejar lá no servidor.
RDDSETDEFAULT(_RDD_X) e Leto_connect(xxx)

LetoDBf é de uso mixto, vc pode ficar comutando ora RDDCDX ora LETO, depois SQLMIX em um único PRG.
#require "sddodbc"
#include "rddleto.ch"
REQUEST DBFCDX, DBFFPT, DBFDBT, LETO, SQLMIX, SDDODBC
Function Main
   RDDSetDefault("LETO")
//uso comandos do LetoDbf inclusive chmar qualquer função lá no servidor!
   Leto_UDF("FuncaoFiltroX",cFiledName,nOrd) //Que está lá no servidor.

   RDDSetDefault("DBFCDX")
//Uso comandos do RDD padrão do harbour.
   RDDSetDefault("SQLMIX")
//uso comandos SQLMIX.
return nil

Se desejar usar LetoDbf ai não precisa mexer em nada no seu código.
Vai apenas ativar ele no inicio da função MAIN.

#include "rddleto.ch" 
REQUEST DBFCDX, DBFFPT, DBFDBT, LETO
Function Main
RDDSetDefault("LETO")
IF RDDSETDEFAULT() == "LETO"
   IF EMPTY( cPath ) .OR. leto_Connect( cPath, /*user*/, /*pass*/, /*timeout*/, nHotBuf, __DELAYED_ERROR__ ) == -1
         ALERT("NO LETODB SERVER FOUND" )
         quit
   ENDIF
ENDIF
use clientes.dbf


Outro exemplo:
#include "rddleto.ch" 
REQUEST DBFCDX, DBFFPT, DBFDBT, LETO
function main
cServidor := "\\192.168.0.90:2812\"
leto_Connect( cServidor )
use clientes.dbf VIA "LETO" //abre o DBF lá no servidor via TCP sem pasta mapeada!
use \\servidor\dados\clientes.dbf VIA "DBFCDX" //abre o mesmo  DBF lá no servidor com pasta MAPEADA!
ou use c:\dados\clientes.dbf via "DBFCDX"

ou use:
cRdd  := RDDSETDEFAULT( "SQLMIX" )
cAttributes:="Server=;Database=127.0.0.1:c:\fontes\sci_win\dados.fdb;User=SYSDBA;Password=masterkey;Driver={Firebird/InterBase(r) driver};"
nConn := RDDINFO( RDDI_CONNECT,{"ODBC",cAttributes} )

IF nConn == 0
   hwg_Msginfo( "Não conectado ao servidor: " + str(RDDINFO( RDDI_ERRORNO )) + hb_eol() + RDDINFO( RDDI_ERROR ) )
   RDDSETDEFAULT( cRdd )
   RETURN
ENDIF

DBUSEAREA( .T.,"SQLMIX", "select * from TB_PRODUTOS_BARRAS", "xa" )



O uso dessas opções no harbour estão ai a sua disposição, pode usar que uma coisa não impede o uso da outra.
Falei do que já usei aqui, mas tem também pelo NetIO.
O letoDbf quando instalado no servidor vai procurar um arquivo de nome letoudf.hrb, nesse arquivo vc colocar as funções que desejar.
veja a pasta letodbf\tests\letoudf.prg //LetoUDF (User Defined Functions) Funções definidas do usuário.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Idéia - Servidor para filtragem de dados em DBF

Mensagempor ANDRIL » 31 Mai 2020 17:04

Itamar com certeza suas dicas serão de grande ajuda, obrigado por compartilhá-las. Vou estudar seus exemplos e semana que vem iniciar o processo para usar o Letodbf.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1270
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Idéia - Servidor para filtragem de dados em DBF

Mensagempor JoséQuintas » 31 Mai 2020 19:29

Faz um teste simples com isso dos clientes, usando ADO + ODBC ADS.
Ou SQLMIX com ODBC ADS.
Acho que vai ficar espantado com o resultado.
É tudo grátis, e não precisa instalar nada adicional, então não é complicado fazer o teste.
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: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Idéia - Servidor para filtragem de dados em DBF

Mensagempor paiva_dbdc » 01 Jun 2020 10:16

Aproveitando rs

o letodb funciona no harbour e xharbour corrreto ?

no xhb (xharbour comercial ) funciona tambem ?

se eu colocar o exe do letodb (xharbour) la no servidor

e usar o exe da aplicacao em xhb comercial funcionaria ?

uso o xhb + antigo, por usar a lib wvw e o hwgui

para ter agilidade nos processamentos, teria que usar
o MAXIMO de filtros ou criar indices com clausular for / when
para evitar trafego de registro a registro entre o servidor e os terminais correto ?

Paiva
paiva_dbdc
Usuário Nível 3

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

Idéia - Servidor para filtragem de dados em DBF

Mensagempor Itamar M. Lins Jr. » 01 Jun 2020 11:24

Ola!
uso o xhb + antigo, por usar a lib wvw e o hwgui

Mude para o Harbour 3.2
Tem aqui na parte da hwgui como usar WVW/WVG com Hwgui e Harbour 3.2
Sei que tem gente usando LetoDbf no xHarbour, mas eu não uso xHarbour.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Idéia - Servidor para filtragem de dados em DBF

Mensagempor sygecom » 01 Jun 2020 18:45

paiva_dbdc escreveu:Aproveitando rs

o letodb funciona no harbour e xharbour corrreto ?

no xhb (xharbour comercial ) funciona tambem ?

se eu colocar o exe do letodb (xharbour) la no servidor

e usar o exe da aplicacao em xhb comercial funcionaria ?

uso o xhb + antigo, por usar a lib wvw e o hwgui

para ter agilidade nos processamentos, teria que usar
o MAXIMO de filtros ou criar indices com clausular for / when
para evitar trafego de registro a registro entre o servidor e os terminais correto ?

Paiva


Paiva,
Sim funciona também com xHarbour comercial.
Funciona com Harbour, xHarbour.org e pode usar usar em um servidor pela internet normalmente, desde que você tenha acesso a instalar o LETODB no lado servidor.

A muito tempo atraz postei algo sobre ele também.
viewtopic.php?f=42&t=8167&hilit=letodb#p45787

Vale a pena o uso, é muito rapido os filtro pra quem ainda deseja ficar no DBF sem mexer em quase nada no sistema, no meu caso na época foi apenas apontar o local do servidor.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Idéia - Servidor para filtragem de dados em DBF

Mensagempor Itamar M. Lins Jr. » 01 Jun 2020 20:45

Ola!
A muito tempo atraz postei algo sobre ele também.

Esse é o LetoDb antigo, com bugs.
O LetoDBf novo usa git é do Elch. Só não tem sintaxe SQL, o resto tem.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes




Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 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