Conexão JDBC via VPN

Bom dia pessoal,

Criei um programa bastante complexo que executa diversas querys num banco de dados para retornar informações de clientes, produtos e atendimentos de venda.
O que acontece é quando rodo o programa dentro do ambiente de rede na matriz, as querys tem um tempo inferior a 15 milisegundos. Porém quando o mesmo programa é executado na filial, onde a conexão é feita por VPN de 512 kb o tempo de cada query sobe para uma média de 70 milisegundos.
Gostaria de saber do grupo, se desenvolver uma solução cliente/servidor onde poderia executar as consultas ao banco num micro servidor na matriz, para que as estações não requisitassem tanto trafego de rede, resolveria esta questão, ou qual seria uma forma de otimizar o tempo de resposta para chamadas ao SGDB Oracle?

Uma aplicação web não seria mais interessante?

É que tem muita parte gráfica , e a atualização precisa ser instantanea.
Um exemplo é uma JTable com a lista de produtos cadastrados, e a cada linha existe uma atualização dos valores no rodapé do Frame. Se for web irá demorar mais, pois há imagem de produtos envolvidos.
A questão é se há como criar um ambiente cliente/servidor, onde o servidor executa as querys diminuido o trafego de rede.

Parece-me que seu problema é arquitetural. Dependendo do problema, nem uma plataforma Web resolveria. Se vc precisa que seu frame seja atualizado on-line em todos os seus clientes, uma solução em Swing é uma boa opção. A questão é: como esta atualização está sendo feita?

Para ter idéia, eu tenho um JInternalFrame com uma JTable com cerca de 5 mil linhas que são os clientes, com as colunas de Código, Nome , Cidade , Telefone.
A cada seleção de uma linha, ou seja valueChanged , é feita uma consulta no SGDB para atualizar JTextField´s no rodapé com as demais informações do cliente, que são cerca de 10 campos que está abaixo da JTable no rodapé. Lógico que é um Select simples, que tem um custo de execução baixo, porém sendo executado via VPN o tempo sobe para 70 milisegundos, enquanto aqui na rede interna o valor não chega a 10 milisegundos.
A minha dúvida é se eu criar um ambiente cliente/servidor este trafego de rede continuará ou, posso obter uma redução de tempo de execução se o servidor será o mesmo micro que contém o SGDB instalado?

Talvez se essa aplicação cliente não tivesse conexão com o banco tivesse alguma melhora, mas é caso de fazer teste, acho que não é garantia não.

Quanto a sugestão de web, se você usa-se Ajax, esse tempo cairia pra muito pouco, mas como você disse que não é o caso!

A conexão com o banco é inevitável, pois necessito das informações dela para execução do programa. Se não houvesse conexão com o Banco seria muito fácil.
Estou desenvolvendo uma rotina de atendimento de vendas que usa um SGDB Oracle onde a base já tem mais de 9 GB de TableSpace. Portanto qualquer coisa que pudesse fazer as querys serem rodadas diretas num servidor, sem o trafego de rede seria provavelmente util. Lembrando que já uso Stored Procedures é o tempo também fica em 70 milisegundos em VPN contra 0 a 10 milisegundos na rede interna.
O que eu pensei que fosse possível, seria ter um servidor rodando direto no micro do SGDB que o client usasse somente a resposta para visualização, sem precisar trafegar a chamada da query, ou que existisse uma maneira de compactar informações, algo como serializar.
Agradeço se alguém tiver alguma idéia.

Foi o que eu disse, se você criar um servidor pra rodar na rede da matriz e o cliente se conecta-se nele de alguma forma RMI, EJB, algo desse tipo… Nesse caso não há conexão do cliente (filial) com o banco de dados.

Tente fazer um teste com EJB ou algo assim, faça alguma aplicação de teste e veja o desempenho dentro e fora da rede da matriz, aí você pode decidir o que é melhor.

Você teria alguns link´s para que pudesse buscar alguns exemplos EJB. Sou novato em Java, pois minha principal linguagem de programação é ADVPL da Microsiga.

Não sei de muita coisa não, mas dá uma olhada aí:

http://java.sun.com/products/ejb/

Se quiser mais, procure no google, de EJB eu realmente não sei onde tem material!

Ok Obrigado pela atenção.

Marcelo,

Talvez EJB não seja a resposta. Não conheço o desenho de sua aplicação, mas com as informações que vc passou vejo realmente, como melhor saída, que vc traga o BD para o cliente ou, no mínimo, para perto dele, eliminando o gargalo que é a chamada pela rede. No entanto, esteja ciente de que vc precisará replicar os dados de/para a matriz e isso pode oferecer dados desatuzalizados para o cliente. Vc precisa analisar se seus requisitos de negócio permitem isso.

Outra solução seria aumentar a capacidade do link.

A tendência é a de que, com o tempo, sua aplicação não escale muito bem e apresente problemas ainda maiores de desempenho. Uma arquitetura client/server não escala tão bem quanto uma arquitetura em 3 camadas: client/application server/data server.

Isso já tá virando consultoria… :wink:

Taz,
A replicação de dados está fora de cogitação.
O que realmente creio deve ser feito é aumentar a velocidade do link da VPN. Mas é aonde vou enfrentar maior resistência por parte do setor administrativo. Mas tudo bem.
Agradeço a atenção sua e do Jareilton, pois ao menos assim tive uma idéia visão melhor das possibilidades para apresentar a diretoria.