IBX ou dbExpress

16/03/2003

0

[color=blue:f252291a8a]
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

Anonymous

Responder

Posts

16/03/2003

Anonymous

Cada metodo tem caracteristicas boas e ruims, depende de vc, do q vai fazer e do sei jeitão de programar...

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


Responder

16/03/2003

Dr Fabio

[color=blue:36e518c247]
Grande mesmo foi o tamanho de sua ajuda. [b:36e518c247]MUITO[/b:36e518c247] obrigado.
Estou pensando em migrar para o IBO.
[/color:36e518c247]


Responder

16/03/2003

Anonymous

Com IBX ou IBO logicamente vc vai ficar preso ao Interbase/CrashBird, ou seja, ter problemas de portabilidade. Se o cliente chegar pra vc no futuro ´ah, estou querendo migrar pra Oracle´, aí fodeu.


Responder

16/03/2003

Thematrix:reloaded

Eu, sinceramente nao conheço o DBExpress, mas trabalho com o IBX faz uns 2 anos, quando estava fazendo a avaliaçao para que conjunto de componentes usar teste o IBO, realmente a performance e muito boa e tudo mais, POREM, os componente de acesso a base e sao todos proprietarios, isto e, vc nao pode trabalhar com DBGrid, DBEdit, DBComboBox, etc. Tem que trabalhar com os componentes nativos do IBO. Em resumo, esqueça de trabalhar com qq componente que faça referencia ao componente TDataSet.
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


Responder

17/03/2003

Anonymous

Concordo com vc quando diz q o IBX tem boa performance e c om o IBO vc ficaria preso ao componente pro resto da vida...

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


Responder

18/03/2003

Guinther

Use dbExpress ;-)

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


Responder

18/03/2003

Thematrix:reloaded

Gostei da resposta do Guinther...

Altamente cientifica... :wink:


Responder

APRENDA A PROGRAMAR DO ZERO AO PROFISSIONAL

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar