IBX ou dbExpress
16/03/2003
0
Decidi utilizar o Firebird como banco de dados.
Tenho visto mais na revista falar do dbExpress do que do Interbase Express (IBX). Quais as vantagens e desvantagens de cada um deles ? Qual utilizar com o Firebird ? Qual o mais eficiente ?
[/color:f252291a8a]
Anonymous
Posts
16/03/2003
Anonymous
O DBExpress tem a caracteristica de nao manter um cursor no banco, ou seja vc tem q fazer a selecao, trabalhar os dados (alterar, incluir, excluir) gravar os dados e DEPOIS aplicar as alteracoes no banco, antes de aplicar as suas alteracoes são refletidas apenas na sua maquina e os outros usuarios nao veem suas alterações. Depois de aplicar, os outros começam a ver as alterações q vc fez. Com isto ganha-se velocidade pois livra a rede de ter q ficar fazendo leva-e-traz e vc aplica uma quantidade de aplicacoes q vc quiser (1 registro por vez ou Trocentos... vc define quando aplicar as alterações..), Mas no caso de uma falha eletrica (pique de energia) os dados q estao alterados na SUA maquina vão pro pau e vc vai ter q lembrar quais registros alterou e o q fez em cada um deles (a não ser aplique de registro por registro).
Da mais trabalho pois pra poder alterar os dados tem q criar uma copia deles usando o Metodo CloneCursor do Query.
O IBX (InterBase Express) São os componentes que ja vem com o Delphi e tem a MELHOR PERFORMANCE disponivel para o Delphi (sem contar é claro com os componentes de Terceiros como o IBObjects, q é sem duvida o melhor para InterBase que existe...), pois acessam diretamente a API do InterBase não necessitando de nenhum tipo de camada intermediaria (por exemplo o BDE... ARGGGGG..), o Seu sistema acessa diretamente o Banco, pra quem usa o BDE a performance vai assustar de tao boa....
Mas tem um problema... O IBX fecha o Database onde os Querys (Tables nao vou falar pq quem usa tem q deixar de usar....) estao ligados assim q aplica-se uma transação e consequentemente fecha os todo e qualquer Query q esteja ligado ao DataBase. Assim sendo vc tem q aplicar a transacao para q os outros usuarios vejam as suas alteracoes e Re-Abrir os Queryes novamente... Uma Canseira....
Tem como dar uma aliviada no problema usando no DataBase o parametro ´COMMITRETAIN´ o banco ´Grava´ os dados e os outros usuarios conseguem ver as alterações. Mas se o Servidor IB mantem as transações q gravaram as alterações no Banco em ABERTAS, com isso o Banco vai Crescer muito e degradar a velocidade gradualmente conforme forem forem gravados registros usando este parametro. E um pique de energia no Servidor do Banco de Dados ira PERDER os registros pois o COMMITRETAIN apenas SIMULA a gravação fisica dos registros no banco.
Para solucionar o problema da lentidao e crescimento do Banco somente fazendo um Backup pelo InterBase e Restaurando em seguida, assim o IB ira executar um Sweep (De uma pesquisada e veja como funciona ...)
Por outro lado existe um pacote de componentes chamado IBObjects q fazem acesso direto ao IB e nao tem este problema de fechar o DataBase a cada Transação, pois foram desenvolvidos a partir de classes TComponente e Nao derivados da Clase TDataSet como os IBX.
Mas nao sao de graça... tem ate um tipo de licença onde vc so começa a pagar quando o seu produto der retorno financeiro, mas de graça mesmo não é....visite www.firebase.com.br/fb/IBO.html e de uma olhada...
Quer dizer ... Cada um tem suas qualidades e ´Defeitos´... Vc melhor q ninguem tem q avaliar os metodos de acesso e pesar custo beneficio para vc e sua aplicacao.
Um Abraço e desculpe pelo IMENSSSOOOO texto... :)
Werlon Goulart
16/03/2003
Dr Fabio
Grande mesmo foi o tamanho de sua ajuda. [b:36e518c247]MUITO[/b:36e518c247] obrigado.
Estou pensando em migrar para o IBO.
[/color:36e518c247]
16/03/2003
Anonymous
16/03/2003
Thematrix:reloaded
Se com o IBX ja da algum trabalho mudar para outro tipo de acesso a base de dados, por exemplo, IBX -> DBX, com o IBO isso e praticamente impossivel.
Em relaçao a dificuldade que nosso colega apresentou em relaçao a TRANSAÇAO, nunca senti nenhuma dificuldade, e ao contrario, o controle de transaçao eh uma caracteristica desejada para manter INTEGRIDADE do banco de dados. Por exemplo, imagine o famoso processo de dar SAIDA de um produto do estoque:
INICIO TRANSACAO
1- Gravar Pedido
2 - Retirar do Estoque
3 - Recalcular preço medio
FIM TRANSACAO
Dessa forma, tudo so eh gravado se chegar ao fim da transaçao, a vantagem do IBX eh que vc so precisa informar o fim da transaçao.
Posso estar enganado, me informem se estiver, mas a vantagem do DBExpress eh a portabilidade multi banco de dados
17/03/2003
Anonymous
Sobre as transações eu digo q vc PODERIA fazer o desejado ´Baixar o estoque´ fazer tudo e dar o Commit apenas no Final DESTA Transacao, O q o IBX não faz, pois ele controla TODO o acesso aos dados em uma UNICA trasacao; Enquanto o interessante seria fazer varias transacoes paralelas e independentes para poder confirmar ou nao no momento proprio DESTA transacao.
Falta apenas acrescentar ao IBX a possibilidade de trabalhar com varias transacoes simultaneas, ai sim.... o IB estaria muito bem no quesito acesso direto ao Banco.
O IBObjects faz isso nativamente. O q o torna mais maleavel.
O IB por natureza ja controla Multi-transacoes inclusive em bancos distribuidos e com Commit em duas fases (nenhum banco faz isso, mais uma vez o pequeno IB da um tombo nos grandes).
Controlar tudo em uma transacao apenas é meio complicado. Possivel mas chatinho de fazer...
Mas valeu as diferenças de opinioes, no debate TODOS saem ganhando desde que apresentem ideias solidas e nao debatam apenas para ´ganhar´ ou mostrar maior conhecimento.
Agradeço a contribuição de todos. Hoje somos mais informados graças a isto.
Um Abraço
Werlon Goulart
18/03/2003
Guinther
Atenciosamente
Guinther de Bitencourt Pauli
Delphi 6 Product Certified / Kylix 2 Product Certified / Delphi 6 Web Development Certified
Comissão Editorial Revista ClubeDelphi
Delphi Developer - CPD UFSM - Santa Maria - RS
18/03/2003
Thematrix:reloaded
Altamente cientifica... :wink:
Clique aqui para fazer login e interagir na Comunidade :)