[firebase-br] Re/Re: FireBird na Internet

junior em argon.com.br junior em argon.com.br
Sáb Jun 21 18:45:22 -03 2008


Bom, antes de mais nada até o momento, para sistemas comerciais, nunca vi
 com
bons olhos o fato do banco de dados do meu cliente ficar num provedor.  Tal
vez
um dia eu veja isto de outra maneira.  Eu havia pesquisado alguma coisa sob
re
Zedebee, mas no final resolvi partir para o 3 CAMADAS, usando o Delphi 7 e 
os
componentes de sockets da Indy.  Eu fiz um programa que "Servidor" que fica
escutando na porta 34005 as requisiçoes dos "clientes".  O X da questão
 é
que eu consegui fazer tudo em Stream (memória), ou seja, quando um client
e
manda um texto com a SQL desejada, o Servidor processa o texto, monta a SQL
,
faz por exemplo um select no banco, transformando toda a resposta num texto
formatado dentro de uma stream.  Esta stream é zipada e enviada como resp
osta
pelo socket (ou seja, posso ter um select MONSTRUOSO, mas como será zipad
o na
própria memória o tráfego fica irrisório na hora da transmissão!)
.  Dai o
cliente recebe em stream o texto, em memória mesmo faz a descompactaç
ão do
texto zipado, resultante de uma select no servidor, extrai a extrutura dos
campos que vem misturada no texto e carrega um TMemoryTable (da RXlib) com 
a
extrutura e os dados para o usuário.  Tem muitos ajustes a serem feitos n
esta
mecänica que fiz, mas está me atendendo muito bem.  E é aquela velha 
coisa
do 3 camadas, ou seja, os programas dos clientes apenas enviam e recebem te
xto,
sem saber que existe um banco de dados.  O Servidor é o único que se co
munica
o Firebird 2.0, através do DBexpress.  Um fato interessante é que sempr
e que
for haver um Insert, Update ou Delete, o cliente gera um número randömi
co
para identificar a transação e manda este número junto com o texto da
operação.  Quando o servidor monta o texto da SQL, ele abre a transaç
ão
identificada com o número que o cliente mandou.  Caso haja um problema na
conecção ou algum outra coisa que impessa que aquela transação aber
ta seja
comitada, o prog. servidor tem um Timer que fica monitorando uma lista com
números de transações.  Se um nº de transação permace na lista 
a mais de
X segundos,  através deste número o Servidor dá um Rollback nesta
transação automaticamente.   O legal é que agora consegui um componen
te para
uma tabela virtual (parecido com a TRXMemoryTable), que permite que toda a 
sua
extrutura e conteúdo dos campos seja enviada numa stream, o que para mim 
é
fantástico, pois evita que eu tenha que ficar que ficar analisando os tex
to
para separar extrutura de campos;  só náo tive tempo de implementar est
a nova
lógica ainda, mas creio que irá enchugar uns 40% no meu código fonte!
  Entáo
a idéoa é esta:  Socket -> Stream (Zip) --- NET --- Stream (Unzip) -> T
abela
Memória

[]s




Mais detalhes sobre a lista de discussão lista