[firebase-br] Base de Dados Firebird??? Ajuda

Eduardo Jedliczka (TeamFB) jedyfb em gmail.com
Ter Mar 28 13:03:26 -03 2006


Ok... (leia com calma a até o fim, por favor)

Faça isto.... mude de banco mesmo... Se deseja continuar utiilizando o 
QuantumGrid, (e os componentes desta família), volte para a tecnologia 
"Desktop" e abandone definitivamente o modelo "cliente/servidor", ou seja, 
volte para o BDE ou Access.

Pois como você ainda não aprendeu as vantagens e desvantagens de cada um, 
você quer fazer um canhoto escrever com a mão direita. é claro que o 
resultado não vai ser esperado.

É provável que o Sistema também fique lento com o MySQL (que não é grátis 
para sistemas comerciais, preste atenção sobre isto), e ligeiramente lento 
com os grandões como Oracle e DB2.

A Questão é que os componentes da DevExpress fazem Refresh constante e adota 
a política de "filtros" (leia-se refresh com "FecthAll"), em outras 
palavras, forçam o banco e enviar muitas informações repetidamente e 
desnecessárias, consumindo CPU do servidor e largura de banda!!!). Lembre-se 
estes componentes são muito bonitos e até foram "modernizados" para 
trabalhar com SQL, mas eles foram criados ná época dos aplicativos LOCAIS e 
continuam utilizar a mesma política até hoje!!!! numa rede pequena, eles 
derrubam qualquer servidor.

Como alternativa, acho que seria bom você instalar filtros mais específicos 
(fora do QuantumGrid) minimizando o volume de dados trazido do servidor. E 
neste caso, adotar os componentes da família ClientDataSet para "tentar" 
minimizar a quantidade de leituras desnecessária ao servidor.

Mas a melhor política seria "eliminar" o QuantumGrid onde ele for 
desnecessário (ok, ele é bonito e tem o seu charme, mas ter um motor 2.0 
para puxar um ônibus com 16 Toneladas de carga é absurdo né ??? não seria 
melhor ter um motor 2.0 para puxar um gurgel  de menos de 700 Kg ???? ).

Veja bem, eu fui realista com você, para ser sincero, eu fui é muito rude no 
início da conversa... espero que você perceba que "fazer birra" (dizer que 
vai mudar de banco só para ter ajuda) não é a melhor forma de conseguir 
amigos, mas só para explicar melhor, durante a minha pós graduação (em banco 
de dados) vi algumas pessoas que utilizavam Oracle 9i numa rede de 10 
máquinas reclamar de "lentidão sem motivo" e no meio da conversa a pessoa 
comentar que usava o QuantumGrid.

Uma delas estava assustada, mesmo com um servidor de primeira linha pois 
este era o primeiro módulo a entrar em produção e o sistema cresceria para 
mais de 100 usuários simultâneos, e a pessoa já estava se perguntando será 
que vou ter que comprar um servidor DUAL ? ou troco para o DB2 ?

Ou seja, preste bem a atenção... quem é o culpado ?

======================
Eduardo Jedliczka
Membro do TeamFB - FireBase
Apucarana - PR
======================

----- Original Message ----- 
From: "Hugo Ricardo" <hdricard em gmail.com>
To: <lista em firebase.com.br>
Sent: Tuesday, March 28, 2006 7:14 AM
Subject: [firebase-br] Base de Dados Firebird??? Ajuda


> Boas.
>
> Vou voltar a ser repetitivo, mas ainda não consegui resolver o meu 
> problema de lentidão da minha aplicação com o Delphi/IBObjects/Firebird!
>
> Resolvi então descrever o meu projecto:
>
> Pretende-se uma aplicação que guarde informação acerca dos produtores de 
> determinados produtos.
>
> Tabela Cliente (guarda os dados relativos ao cliente) com 3917 (para 
> crescer):
>
> CREATE GENERATOR GEN_CLIENTE_ID;
>
> CREATE TABLE CLIENTE (
>    ID            INTEGER NOT NULL,
>    NOME          VARCHAR(200),
>    MORADA        VARCHAR(200),
>    COD_POSTAL    VARCHAR(20),
>    LOCALIDADE    VARCHAR(200),
>    CONCELHO      VARCHAR(200),
>    CONTRIBUINTE  VARCHAR(20),
>    TELEFONE      VARCHAR(20),
>    TELEMOVEL     VARCHAR(20),
>    FAX           VARCHAR(20),
>    EMAIL         VARCHAR(200),
>    WEB           VARCHAR(200),
>    BIOLOGICO     SMALLINT,
>    OPERADOR      SMALLINT,
>    BIOSATIVA     SMALLINT,
>    DISTRITO      VARCHAR(200),
>    TIPO_PRODUTO  VARCHAR(200),
>    OBSERVACOES   VARCHAR(255),
>    REGIAO        VARCHAR(200)
> );
>
> /* Trigger: CLIENTE_BI */
> CREATE TRIGGER CLIENTE_BI FOR CLIENTE
> ACTIVE BEFORE INSERT POSITION 0
> AS
> BEGIN
>  IF (NEW.ID IS NULL) THEN
>    NEW.ID = GEN_ID(GEN_CLIENTE_ID,1);
> END
>
> Tabela Cliente_Produto (guarda os produtos produzidos por cada 
> produtor/cliente) com 4529 (para crescer):
>
> CREATE GENERATOR GEN_CLIENTE_PRODUTO_ID;
>
> CREATE TABLE CLIENTE_PRODUTO (
>    ID       INTEGER NOT NULL,
>    CLIENTE  INTEGER,
>    PRODUTO  VARCHAR(200)
> );
>
> /* Trigger: CLIENTE_PRODUTO_BI */
> CREATE TRIGGER CLIENTE_PRODUTO_BI FOR CLIENTE_PRODUTO
> ACTIVE BEFORE INSERT POSITION 0
> AS
> BEGIN
>  IF (NEW.ID IS NULL) THEN
>    NEW.ID = GEN_ID(GEN_CLIENTE_PRODUTO_ID,1);
> END
>
> Tenho uma aplicação feita com o Delphi 6. Utilizei o IBObjects para a 
> comunicação com a Base de Dados.
>
> Utilizado os componentes do DevExpress (QuantumGrid, PageControl, ...)
>
> A minha aplicação resume-se a uma Grid com todos os produtores/clientes e 
> umas caixas de texto que mostram a informação (cada campo da tabela 
> cliente uma caixa de texto) do produtor/cliente e servem também para 
> adicionar, alterar... A aplicação permite tb eliminar. Existe uma opção de 
> pesquisa na aplicação que permite pesquisar determinados 
> produtores/clientes pela região, tipo de produto, operardor, biosativa, 
> biologico. A aplicação demora muito tempo quando se pretende realizar uma 
> pesquisa por tipo de produto!
>
> Descrevo o meu DataModule:
>
> - TIBODatabase Socert:
>  - Databasename: C:\dB\SOCERT.GDB
>
> - TIBOQuery Clientes --- TDataSource DSClientes
>  - SQL: SELECT * FROM cliente
>  - GENERATORLINKS: cliente.id = GEN_CLIENTE_ID
>
> - TIBOQuery ClienteProduto --- TDataSource DSClienteProduto
>  - SQL: SELECT * FROM cliente_produto WHERE cliente=:cliente.id
>  - GENERATORLINKS: cliente_produto.id = GE_CLIENTE_PRODUTO_ID
>  - DataSource: DSClientes
>
> procedure TDM.ClienteProdutoBeforePost(DataSet: TDataSet);
> begin
>  if (DSClienteProduto.State in [dsInsert]) then
>    ClienteProdutoCLIENTE.Value := DM.ClientesID.Value;
> end;
>
> Descrevo o codigo da aplicação:
>
> - DM.Clientes.Append; // para inserir
> - DM.Clientes.Edit; // para alterar
>
> --> Aplicação muito lenta sempre que se pretende confirmar a inserção ou 
> alteração de registos, ou simplesmente cancelar operação <--
>
> -   if (t2.Checked = False) then
>      DM.ClientesOPERADOR.Value := 0;
>
>    if (t13.Checked = False) then
>      DM.ClientesBIOSATIVA.Value := 0;
>
>    if (t12.Checked = False) then
>      DM.ClientesBIOLOGICO.Value := 0;
>
>    DM.Clientes.Post; // para guardar
>
>    if (DM.DSClientes.State in [dsInsert]) then
>      lblTotal.Caption := IntToStr(DM.Clientes.RecordCount); // mostrar 
> total de produtores/clientes
>
> - DM.Clientes.Cancel; // para cancelar;
>
> - Pesquisa por exemplo por tipo de produto:
>
>    with DM.Clientes do
>    begin
>      Close;
>      SQL.Clear;
>      SQL.Add('SELECT * FROM cliente');
>      SQL.Add('WHERE id IN (SELECT cliente FROM cliente_produto WHERE 
> produto = ' + QuotedStr(p2.Text) + '))';
>      Open;
>    end;
>
> Aqui está a minha aplicação descrita!
>
> Quem tiver paciência para me ajudar, agradecia imenso porque já cheguei a 
> um ponto que n sei o q fazer mais!!! Daqui para a frente só me resta a 
> opção de testar a aplicação noutro tipo de Base de Dados (MySQL (grátis tb 
> :) ...).
>
> Obrigado por qualquer coisa.
> Cumprimentos
> Hugo Ricardo, Portugal
>
>
>
>


--------------------------------------------------------------------------------


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 





Mais detalhes sobre a lista de discussão lista