[firebase-br] Por favor ajuda sobre conexão dinamica ao banco

thiago.almeida em neainformatica.com.br thiago.almeida em neainformatica.com.br
Qua Out 5 08:46:03 -03 2016


 

Bom dia, A.lima! Tudo certo?

Cara, opnião pessoal: Acho sempre mais
produtivo encontrar o erro ao invés de mudar toda uma arquitetura pra
fugir dele. Eu no seu lugar, tentaria descobrir porque as SP estão
travando (provavelmente algum registro que ela está tentando atualizar
encontra-se lockado"). 

Mas a arquietetura (de criar a conexão em tempo
de execução) que você propõe, não é de forma alguma ruim. E sim, você
tenta a ter ganho de performance, principalmente se trabalhar com
pooling (uma classe factoring que controle isso seria o suficiente). 

A
maior dificuldade que eu acho que você irá encontrar é de manter tudo
dentro de uma transação só. Não sei como é o teu padrão de projeto, mas
se você está criando as conexão em tempo de execução dentro de uma
função/procedure, provavelmente você está trabalhando com conexões
distintas. O que é errado, no que diz respeito à atomicidade dos dados.


No entanto, esses componentes com que você trabalha suportam (salvo
engano) transações aninhadas... O que resolveria teu problema. Mas sei
lá... sou contra ***muitas*** transações aninhadas. Faz tempo que não
estudo firebird, mas acredito que haja algum consumo extra de memória
(principalmente se houverem muitos terminais, o que exponenciaria o
número de transações). 

Respondendo objetivamente a sua pergunta: não,
você não encontrará problemas (à principio, não). Vai depender mais da
adoção de boas práticas de programação! 

Abraços. 

F.T. 

Em
05.10.2016 08:20, a.lima.silva em terra.com.br escreveu: 

> Caros colegas
de lista, solicito a ajuda dos companheiros na seguinte questão :
> 
>
Ambiente : Firebird 2.5 Super Classic , Delphi XE DBExpress e 55
estações.
> 
> Recebi um sistema feito em Delphi 7 para migrar para
Delphi XE, tive que modificar a estrutura de transações do DBX do D7
>

> de: 
> 
> var TD: TTransactionDesc;
> ...
> TD.TransactionID :=
Random(999999999);TD.IsolationLevel :=
xilREADCOMMITTED;Banco.StartTransaction(TD);
> 
> para :
> 
> var
> T :
TDBXTransaction;
> Conn : T SQLConnection
> ...
> T :=
Conn.SqlConection.BeginTransaction(TDBXIsolations.ReadCommitted);
>
Conn.CommitFreeAndNil(TransSelect);
> ...
> 
> Neste sistema 90% do
processamento é realizado por StoredProcedures atraves do objeto
TSQLStoredProc
> 
> Estranhamente verifiquei travamentos nessas SP,
mesmo no aplicativo estando sendo explicitamente iniciado e finalizado
uma transação
> 
> Nostalgicamente lembrei que quando usava IBX como
componente de acesso, fazia meu StartTransaction e Commit e não havia
esse problema.
> 
> Para contornar essa situação, comecei a criar em
RunTime as conexões a partir do TSQLConnection , iniciar , executar,
finalizar a transação e destruir a conexão.
> 
> Realmente feito isso
destravou e o monitor do IBExpert nem mesmo consegue registrar a
existência dessas conexões adicionais.
> 
> Um DBA que conversei (
especialista em Oracle e aplicativos web mobile ) disse que no Oracle
não se deve manter conexões aberta por muito tempo e essa é a maneira
correta.
> 
> Um colega antigo que trabalha com Delphi disse que terei
inúmeros problemas ao fazer as ações fora da conexão principal.
> 
> Nos
exemplos que vejo na internet vejo as aplicações por um SQLConnection
criam uma conexao e tudo trafega dentro do contexto dessa conexão ( o
que era feito ).
> 
> Percebi em laboratório um aumento em muito grande
da velocidade, parece que fazer por conexões separadas da principal
"emula uma Thread" , mas ante a inexperiência se o caminho adotado vai
me dar problemas sérios futuros, resolvi ler mais e perguntar aos
especialistas do uso diário.
>> Obrigado.
> 
>
______________________________________________
> FireBase-BR
(www.firebase.com.br [1]) - Hospedado em www.locador.com.br [2]
> Para
saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107 [3]
> Para consultar
mensagens antigas: http://www.firebase.com.br/pesquisa_lista.html [4]




Links:
------
[1] http://www.firebase.com.br
[2]
http://www.locador.com.br
[3]
http://www.firebase.com.br/fb/artigo.php?id=1107
[4]
http://www.firebase.com.br/pesquisa_lista.html



Mais detalhes sobre a lista de discussão lista