Página 1 de 1
Idéia - Servidor para filtragem de dados em DBF
Enviado: 30 Mai 2020 19:37
por ANDRIL
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.
Idéia - Servidor para filtragem de dados em DBF
Enviado: 30 Mai 2020 22:35
por Itamar M. Lins Jr.
Ola!
O LetoDbf faz isso e muito mais.
Pq não usa ?
Saudações,
Itamar M. Lins Jr.
Idéia - Servidor para filtragem de dados em DBF
Enviado: 30 Mai 2020 22:36
por Itamar M. Lins Jr.
Ola!
E tem o NetIO, também.
Não está reinventando a roda ?
Saudações,
Itamar M. Lins Jr.
Idéia - Servidor para filtragem de dados em DBF
Enviado: 31 Mai 2020 10:34
por ANDRIL
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?
Idéia - Servidor para filtragem de dados em DBF
Enviado: 31 Mai 2020 16:25
por Itamar M. Lins Jr.
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.
Código: Selecionar todos
#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.
Código: Selecionar todos
#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:
Código: Selecionar todos
#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.
Idéia - Servidor para filtragem de dados em DBF
Enviado: 31 Mai 2020 17:04
por ANDRIL
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.
Idéia - Servidor para filtragem de dados em DBF
Enviado: 31 Mai 2020 19:29
por JoséQuintas
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.
Idéia - Servidor para filtragem de dados em DBF
Enviado: 01 Jun 2020 10:16
por paiva_dbdc
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
Idéia - Servidor para filtragem de dados em DBF
Enviado: 01 Jun 2020 11:24
por Itamar M. Lins Jr.
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.
Idéia - Servidor para filtragem de dados em DBF
Enviado: 01 Jun 2020 18:45
por sygecom
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.
Idéia - Servidor para filtragem de dados em DBF
Enviado: 01 Jun 2020 20:45
por Itamar M. Lins Jr.
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.