Fórum Firebird 1.5 Super Server via Internet, qual Comp. usar? #280922

10/05/2005

0

Olá, tenho um banco de dados firebird 1.5 super server, e me conecto a ele via internet, com mais de 30 filiais, no momento estou usando o IBX, poréme stá muito lento, queria saber de vocês o que você me aconselham a usar, DBX, IBX, ADO... 3 Camadas... o que for... :D

Queria uma soluçao que seja relativamente, mais rápida que o IBX


Desde já agradeco

[]s
Fellipe H.


Titanius

Titanius

Responder

Posts

10/05/2005

Faelcavalcanti

Como você utiliza o acesso por exemplo em uma tela? Realmente a performace cairia bastante por 30 Filiais, calculemos depedendo do porte, puxa, muitas máquinas. Utilizando o nível [b:3a7048766f]ReadCommited[/b:3a7048766f] imagine então os relatórios, dependendo do sistema. Conta mais como está configuirado e definido o acesso às informações e etc.


Responder

Gostei + 0

10/05/2005

Gandalf.nho

IBX é uma das soluções mais rápidas por ser acesso nativo. É a maneira como vc trabalha com os dados que interfere na velocidade. Vc procura filtrar os registros antes de trazê-los ao cliente? Faz bom uso de SPs e triggers? A conexão é banda larga ou discada? Já experimentou usar algo como o ZeeBeDee?


Responder

Gostei + 0

10/05/2005

Titanius

olá pessoal, vamos lá:

- Todas as minhas consultas (SQL), estão definidas, nunca uso select *, sempre seleciono os campos.
- O Transaction está ReadCommited.
- Estou usando o CDS para trazer uma consulta maior, com mais de 100 registros.

Quanto ao ZeeBeDee, ouvi falar nele, o que ele faz?

Vocês não veriam vantagem em mudar pra outro componente nao? senao o IBX... a, eu uso os componentes da paleta Interbase, acho que é IBX mesmo né? só pra confirmar..


Desde ja agradeco

[]s


Responder

Gostei + 0

10/05/2005

Faelcavalcanti

Já experimentou usar algo como o ZeeBeDee?


Do que se trata ????


Responder

Gostei + 0

10/05/2005

Bruno Belchior

não seria casa de usar 3 camadas?


Responder

Gostei + 0

10/05/2005

Gandalf.nho

Quanto ao ZeeBeDee, ouvi falar nele, o que ele faz?


O ZeBeDee é um túnel seguro para suas conexões via rede. Ele criptografa e compacta os pacotes de dados que passam pela conexão, ou seja, além de proteger os dados, tb melhora o tráfego na rede ao dimunuir o tamanho dos pacotes


Responder

Gostei + 0

10/05/2005

Titanius

e sobre as 3 camadas? seria melhor?


[]s


Responder

Gostei + 0

10/05/2005

Faelcavalcanti

- Estou usando o CDS para trazer uma consulta maior, com mais de 100 registros.


No caso o [b:04699380af]CDS[/b:04699380af] seria o [b:04699380af]ClientDataSet[/b:04699380af], aí a performace seria menor.

Agora para resolver este probleminha de componente estive fazendo o seguinte. Fiquei vários dias chateado por uma questão de componente e pretendi isolar, de certa forma essa amarração.

Vocês já ouviram falar do [b:04699380af]Hibernate[/b:04699380af] em Java, usava uma idéia quase parecida, em que você teria métodos a respeito dos campos ou atributos de uma determinada classe.

Apesar de parecer meio trabalhoso o único trabalho sujo ter que replicar toda vez uma novo campo a nova lista. Para ser mais direto utilizei o tipo do delphi [b:04699380af]Record[/b:04699380af], em que associei a um tipo e daí envio a uma função solicitada no momento.

Por exemplo, tenho a seguinte tabela abaixo:
[b:04699380af]Produtos[/b:04699380af] ------------------- ID_PRODUTO_PK INTEGER NOT NULL, ID_GRUPO_PRODUTO_FK INTEGER, DESCRICAO VARCHAR(50), DESCRICAO_SIMPLIFICADA VARCHAR(30), ID_UNIDADE_VENDA_FK INTEGER, QTDE_UNIDADE_VENDA INTEGER, PESO_BRUTO DOUBLE PRECISION, PESO_LIQUIDO DOUBLE PRECISION, CUSTO_ENTRADA DOUBLE PRECISION, COMISSAO DOUBLE PRECISION, ISENTO VARCHAR(5), ICMS DOUBLE PRECISION, ICMS_ESTADO DOUBLE PRECISION, ICMS_FORA_ESTADO DOUBLE PRECISION, DATA_ULTIMA_COMPRA TIPO_DATA /* TIPO_DATA = DATE */, DATA_ULTIMA_VENDA TIPO_DATA /* TIPO_DATA = DATE */, ID_UNIDADE_COMPRA_FK INTEGER, CUSTO_CONTABIL DOUBLE PRECISION, CODIGO_TRIBUTACAO INTEGER, PERCENTUAL_VENDA DOUBLE PRECISION, ID_FORNECEDOR INTEGER, QTDE_UNIDADE_COMPRA INTEGER, LOTE VARCHAR(15)


Toda vez que eu quiser no delphi consultar um novo cliente de uma certa empresa terei que criar um query ... parara .... parara .... lá se vai mais tempo.

O que fiz foi o seguinte simplesmente criei uma unit chamada de [b:04699380af]Map[/b:04699380af] apenas para declarar os campos contidos em determinadas tabelas envolvidas naquele projeto como por exemplo abaixo a unit que declarei:
 
unit UMap;

interface

type
  // produtos
  TRecProduto = Record
    ID_PRODUTO_PK           : Integer;  // código do produto
    ID_GRUPO_PRODUTO_FK     : Integer;  // código do grupo
    DESCRICAO               : String;   // descrição do produto
    DESCRICAO_SIMPLIFICADA  : String;   // descrição simplificada do produto
    ID_UNIDADE_VENDA_FK     : Integer;  // código de unidade de venda
    QTDE_UNIDADE_VENDA      : Integer;  // qtde. referente à unidade
    PESO_BRUTO              : Double;   //
    PESO_LIQUIDO            : Double;   // ...
    CUSTO_ENTRADA           : Double;
    COMISSAO                : Double;
    ISENTO                  : String;
    ICMS                    : Double;
    ICMS_ESTADO             : Double;
    ICMS_FORA_ESTADO        : Double;
    DATA_ULTIMA_COMPRA      : TDateTime;
    DATA_ULTIMA_VENDA       : TDateTime;
    ID_UNIDADE_COMPRA_FK    : Integer;
    CUSTO_CONTABIL          : Double;
    CODIGO_TRIBUTACAO       : Integer;
    PERCENTUAL_VENDA        : Double;
    ID_FORNECEDOR           : Integer;
    QTDE_UNIDADE_COMPRA     : Integer;
    LOTE                    : String;
  end;

implementation

end.


Pronto criei uma unit para declarar os campos contidos em determinadas tabelas contidas em um Database. Posteriormente criei mais uma unit de apoio ao sistema chamada de [b:04699380af]Helper[/b:04699380af]. Nela irei declarar apenas os métodos para acesso a banco de dados como por exemplo:
unit UHelper;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes,  Graphics, Controls,
  Dialogs, SqlExpr, UMap, DB, Printers, SqlTimSt, ComCtrls;

  type
  //¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
  TViewHelper = Class(TObject) { Package declarations }
    Qry_Aux     : TSQLQuery;
  //¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
  private { Private declarations }
    //
  protected
    //
  //¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
  public { Public declarations }
    // variáveis de reconhecimento
  function  f_Produto_Atributos     (v_CodProduto    : Integer) : TRecProduto;

  end;

var
  Helper : THelper;

//******************************************************************************

implementation

{ THelper }

function THelper.f_Produto_Atributos(v_CodProduto: Integer): TRecProduto;
const c_SQL_Produtos : String = ´SELECT * FROM PRODUTOS WHERE CODPRODUTO = :PCODPRODUTO´;
var 
  Qry_Aux : TSQLQuery;
  Rec_Produto : TRecProduto;
begin
  Qry_Aux               := TSQLQuery.Create(Nil);
  Qry_Aux.SQLConnection := DMServidor.SQLConnection1;
  try
    Qry_Aux.SQL.Add(c_SQL_Produtos);
    Qry_Aux.Open;
    if not Qry_Aux.IsEmpty then begin
      Rec_Produto.DESCRICAO := Qry_Aux.FieldByName(´DESCRICAO´).AsString;
      Rec_Produto.QTDE_UNIDADE_VENDA := Qry_Aux.FieldByName(´DESCRICAO´).AsInteger;
      // ....
      // ´todos os campos declarados como acima, não coloquei os outros por preguiça  :^)
      // ....
    Result := Rec_Produto;
  finally
    FillChar(Rec_Produto, SizeOf(Rec_Produto), 0);     
    Qry_Aux.Free;
  end;
end;


Pronto agora se eu quiser saber qualquer informação sobre algum determinado produto a partir da chave primária seria somente fazê-lo:
var
  Rec_Produto : TRecProduto;
begin
  Rec_Produto := Helper.f_Produto_Atributos;
  ShowMessage(Rec_Produto.DESCRICAO);
  FillChar(Rec_Produto, SizeOf(Rec_Produto), 0); // limpando objeto record
end;


Pronto o código acima poderia ser implementado em qualquer parte do produto para que facilite e agilize na hora de nossas implementações. Eu poderia também ter feito uma classe para escolher qual o componente que eu iria trabalhar de acordo com o banco de dados utilizado. Aí no caso dependerá do projeto. Apenas fiz uma mera ilustração do que venho tentando fazer e padronizar para acelerar o desenvolvimento. E também aguardo opniões e/ou críticas. :roll:

:wink:
Espero ter ajudado!


Responder

Gostei + 0

10/05/2005

Titanius

se eu entendi, vc cria uma tabela de memoria, e coloca os dados nela. pra depois eu loclaizar atravez desta tabela, é isso?


Responder

Gostei + 0

10/05/2005

Faelcavalcanti

Parece um meio complicado no começo, mas a medida em que o projeto vai crescendo se você não tiver um bom apoio em que você necessita vai se perdendo aos poucos e principalmente com o tempo de projeto.

Gostaria de deixar claro que a intenção no caso seria de debater o que estou propondo em retirar no caso a forma de toda vez ter que modificar um componente e também modificá-lo no sistema. Neste caso aí, já teríamos 2 camadas. Qualquer dúvida estarei por aqui apesar do tempo ser pouco! :wink:


Responder

Gostei + 0

10/05/2005

Faelcavalcanti

se eu entendi, vc cria uma tabela de memoria, e coloca os dados nela. pra depois eu loclaizar atravez desta tabela, é isso?


Quase isso, na verdade o framework do delphi não possui um boa implementação quanto a Coleções, tá certo que eu poderia criar outras listas não sei quanto a performace perderia ou ganharia em utilizar o Record mais o que gostaria de passar seria a separação entre implementações do componente, ou seja, você teria um meio padronizado em receber os dados e lá dentro o cara se preocupa em utilizar o componente certo. Ok


Responder

Gostei + 0

10/05/2005

Titanius

e o postgres ??

ele eh melhor pra isso? se for o que eu posso usar pra conexao?

[]s


Responder

Gostei + 0

10/05/2005

Michael

Olá Titanius!

Por que vc não usa definitivamente dbExpress? Não seria a solução mais indicada para uma aplicação deste porte?

Abraços!


Responder

Gostei + 0

10/05/2005

Faelcavalcanti

Olá, tenho um banco de dados firebird 1.5 super server, e me conecto a ele via internet, com mais de 30 filiais, no momento estou usando o IBX, poréme stá muito lento, queria saber de vocês o que você me aconselham a usar, DBX, IBX, ADO... 3 Camadas... o que for... :D Queria uma soluçao que seja relativamente, mais rápida que o IBX Desde já agradeco []s Fellipe H.


Olha amigo, acho que seria mais viável você identificar aqui como teria de se comportar o seu projeto proposto, de forma que possamos definir um tipo de arquitetura e/ou banco de dados e etc. que seja eficaz e eficiente com o seu objetivo. Por exemplo quando se fala em componentes, banco de dados, utilização em camadas pode-se ficar meio perdido em alguns aspectos de forma que o código não fique conciso, ou seja, poderá existir pouca reutilização. Você já ouviu falar em [b:a964d71c49]design patterns[/b:a964d71c49], apesar de poucos existem alguns aplicados ao delphi e a maioria vêm dos existentes e propostos pela SUN, a microsoft está copiando isto também, existe um site muito legal da [url=http://www.oodesign.com.br/]OODesign[/url]. Você poderia propôr outro tópico ou tentar definir as suas necessidades em geral para que possamos chegar a um concesso. Ok!

:wink:
Qualquer coisa estamos por aqui!


Responder

Gostei + 0

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

Aceitar