Fórum Melhorar tempo de resposta (Cliente-Servidor) #328924
08/09/2006
0
Gostaria da opinião dos colegas sobre um assunto que acredito que todo programador ao menos uma vez já passou por esse problema ... Possuo um sistema em Delphi rodando numa rede corporativa, ou seja, com milhares de máquinas e várias sub-redes, o meu servidor é Firebird 1.5.3 e aplicação usa componentes de acesso IBX, na realidade a concepção do sistema é simples o objetivo principal é gravar um pequeno insert na tabela principal o problema é o seguinte, que ele realiza pequenas consultas em outras tabelas, tipo : funcionário, localidade e usuários. A minha primeira idéia seria junto com aplicativo cliente, enviar uma base local com as tabelas de cadastro e o unico dado que trafegaria pela rede seria o insert na hora de gravar, mas nesse caso, eu teria um incoveniente na hora de atualizar as tabelas de cadastro. A segunda idéia seria deixar no BD principal as tabelas de cadastro e na hora que o usuário acessar o sistema ele alimentaria os dados das tabelas de cadastro em ´clientdatasets´ que ficariam na memoria e poderiam ser acessados facilmente pela aplicação, por isso eu pergunto aos colegas, qual seria a melhor alternativa ? será que idéia dos ´clientsdatasets na memoria´ é viável ? ou teriam uma outra solução para o problema ?
No aguardo,
Rogerio_Amorim
Rogerio_amorim
Curtir tópico
+ 0Posts
08/09/2006
Thomaz_prg
Fiz assim, as consultas, são todas feitas no BD principal, isso porque, muitas vezes, é acrescentado um novo item nas tabelas de consulta (funcionários por exemplo), e se eu utilizasse clientdataset´s, carregando os dados pra memória e utilizando, muitas vezes, eu não teria essa consulta atualizada. O que faço é, trazer a menor quantidade possível de informações e registros. Para agilizar, procurei avaliar como estavam sendo gerados os plain´s das consultas, e criei índices para agilizar isso.
Gostei + 0
08/09/2006
Rogerio_amorim
Vou avaliar ....
Mas em relação aos clientdataset´s, se no caso as tabelas não fossem atualizadas constantemente, seria uma idéia a considerar ???
Gostei + 0
08/09/2006
Thomaz_prg
pois diminuiria e muito o tráfego de dados pela rede.
Gostei + 0
09/09/2006
Raserafim
devemos observar alguns detalhes:
vc deve sempre procurar trazer o mínimo de dados possível, somente o que o usuário vai utilizar naquele momento, ou seja, os dados devem ser trazidos sobre demanda [esse é o segredo].
exemplo:
na Query do seu cadastro de funcionário vc utilizaria algo semelhante a isso:
select * from FUNCIONARIOS where COD_FUNCIONARIO = :Cod_Funcionario
ou seja, vc passaria como parâmetro o código do funcionário que quer visualizar.
claro que o usuário não precisa passar o código. vc pode criar uma tela de pesquisa onde o usuário digita parte do nome do funcionário, clica em localizar, e uma lista é exibida (com apenas o nome do funcionário e o código [para diminuir o tráfego de informações]) . basta o usuário dar, por exemplo, dois cliques no registro e vc passa o código, do registro que o usuário escolheu, como parâmetro para a query funcionários.
seu sistema estará bem planejado para rede quando vc não tiver mais aqueles botões de navegação nos registros [claro que não estou me referindo aos botões em si, mas sim ao fato de que se vc tem estes botões é pq está trazendo todos os registros para o usuário navegar].
desta forma seu ganho de desempenho será extraordinário.
Gostei + 0
09/09/2006
Raserafim
o ClientDataSet é muito interessante e deve ser explorado.
não para armazenar todos os dados, pois cairemos no problema como o thomaz explicou, mas para que ao trazer vários e inevitáveis registros, por exemplo, ítens de uma venda, o usuário possa navegar entre os ítens, para frente e para tráz, sem que a rede seja utilizada, pois o ClientDataSet ao pegar os dados da base, fecha a query e deixa os dados apenas em memória, o que já traz mais um benefício: ao fechar a query, fecha assim a conexão desafogando a rede.
além de várias outras facilidades e benefícios, ..., além de reduzir o tempo necessário para uma transação, ..., etc.
Gostei + 0
09/09/2006
Raserafim
Gostei + 0
11/09/2006
Rogerio_amorim
Como disse o colega raserafim se alguem tiver mais informações, porfavor, vamos debater ...
Rogerio_Amorim
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)