Idéia - Servidor para filtragem de dados em DBF

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Idéia - Servidor para filtragem de dados em DBF

Mensagem 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.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Idéia - Servidor para filtragem de dados em DBF

Mensagem por Itamar M. Lins Jr. »

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

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Idéia - Servidor para filtragem de dados em DBF

Mensagem por Itamar M. Lins Jr. »

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

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Idéia - Servidor para filtragem de dados em DBF

Mensagem 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?
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Idéia - Servidor para filtragem de dados em DBF

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Idéia - Servidor para filtragem de dados em DBF

Mensagem 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.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Idéia - Servidor para filtragem de dados em DBF

Mensagem 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.
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/
paiva_dbdc
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 12 Nov 2012 09:58
Localização: uberlandia mg

Idéia - Servidor para filtragem de dados em DBF

Mensagem 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
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Idéia - Servidor para filtragem de dados em DBF

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Idéia - Servidor para filtragem de dados em DBF

Mensagem 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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Idéia - Servidor para filtragem de dados em DBF

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Responder