Firebird 1.5 Super Server via Internet, qual Comp. usar?
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.
Queria uma soluçao que seja relativamente, mais rápida que o IBX
Desde já agradeco
[]s
Fellipe H.
Titanius
Curtidas 0
Respostas
Faelcavalcanti
10/05/2005
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.
GOSTEI 0
Gandalf.nho
10/05/2005
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?
GOSTEI 0
Titanius
10/05/2005
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
- 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
GOSTEI 0
Faelcavalcanti
10/05/2005
Já experimentou usar algo como o ZeeBeDee?
Do que se trata ????
GOSTEI 0
Bruno Belchior
10/05/2005
não seria casa de usar 3 camadas?
GOSTEI 0
Gandalf.nho
10/05/2005
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
GOSTEI 0
Titanius
10/05/2005
e sobre as 3 camadas? seria melhor?
[]s
[]s
GOSTEI 0
Faelcavalcanti
10/05/2005
- 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!
GOSTEI 0
Titanius
10/05/2005
se eu entendi, vc cria uma tabela de memoria, e coloca os dados nela. pra depois eu loclaizar atravez desta tabela, é isso?
GOSTEI 0
Faelcavalcanti
10/05/2005
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:
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:
GOSTEI 0
Faelcavalcanti
10/05/2005
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
GOSTEI 0
Titanius
10/05/2005
e o postgres ??
ele eh melhor pra isso? se for o que eu posso usar pra conexao?
[]s
ele eh melhor pra isso? se for o que eu posso usar pra conexao?
[]s
GOSTEI 0
Michael
10/05/2005
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!
Por que vc não usa definitivamente dbExpress? Não seria a solução mais indicada para uma aplicação deste porte?
Abraços!
GOSTEI 0
Faelcavalcanti
10/05/2005
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!
GOSTEI 0