Fala galerinha joia?
Meu problema é o seguinte, estou fazendo um sistema com conexão a um banco em um servidor web, só que a conexão está muito demorada, causionando muita lentidão, eu conecto no início e desconecto no fim de todos os métodos de conferência e consulta, demorando cerca de 4 seg para cada conexão, juntando todos os metodos da maior classe demora mais de 1 min para fazer a consulta e compilar a tabela.
Estava pensando em uma solução, a minha ideia foi a seguinte, baixar(ou atualizar) o banco ao iniciar o progrma, essa atualização iria para um banco no localhost da máquina, na qual o processo é instantâneo.
Alguém save se é possivel de criar um banco temporário no localhost e passar essas atualizações??
Ou importar um banco via script sql?
Supondo que o seu código esteja muito bem implementando, fechando todos os ResultSet, PreparedStatement, Connection e usando um pool de conexões.
Pensando nesse cenário e existe uma lentidão, devemos considerar que há um tráfego de rede envolvido no processo e dependendo do tamanho de cada pacote enviado, é normal que haja uma demora superior a realizada quando a consulta é local.
Justamente pensando nisso, muitos servidores Web realizam a conexão ao banco de dados localmente, de modo que o processo ocorra de forma mais rápida. É lógico que existem outras saídas e nem vou entrar em detalhes, mas é uma observação, apenas. Acho que tu vai fazer bobagem ao fazer um dump da base de dados para a máquina local. Começa pelo fato de tu não saber o tamanho desse dump e muito menos se o seu disco rígido (do cliente) terá espaço para fazer isso. Outro ponto a ser observado, é o tempo em que o sistema levará para realizar um dump automático das informações. Se tiver 10 registro em 5 tabelas, é tranquilo. Como fica se tiver 300 mil registros em 15 tabelas?
Meu conselho é você revisar o seu código, verificar se está usando uma boa arquitetura, se está dividindo os processos em camadas, se está usando um pool de conexões adequados, senão está deixando nenhuma conexão aberta, a máquina em que está executando a aplicação e etc. O Java é excelente mas não faz milagre e há algoritmos, que por mais que você busque usar os melhores padrões de projetos em seu desenvolvimento, são por si só, demorados ou exigem um alto nível de processamento e se levarmos em conta que há influência da rede na comunicação entre os dados, isso pode aumentar de forma exponencial.
Basicamente, o objetivo é que se já existe uma conexão aberta não haja necessidade de abrir outra, simplesmente a usa.
Mas claro que tem outros conceitos envolvidos e etc, mas já existem implementações prontas para JDBC, JAR, no caso. Basta dar uma pesquisada.
Eu cheguei a dar uma lida nesse Pool
mas pelo que vi serve para evitar de abrir conexão para vários usuários ao mesmo tempo neh, o meu problema não é bem esse, não tem nenhum tráfego aqui, e é só eu que conecto, esse pool serviria para minhas conexões também? pois faço várias numa mesma classe:
As operações de uma classe fica assim na console:
Sistema OK! - Conectado
Tempo: 3545
Tempo da query: 256
Sistema OK! - Conectado
Tempo: 2779
Conexão Fechada
Sistema OK! - Conectado
Tempo: 2753
Conexão Fechada
Sistema OK! - Conectado
Tempo: 2899
Conexão Fechada
Sistema OK! - Conectado
Tempo: 2629
Conexão Fechada
Sistema OK! - Conectado
Tempo: 2800
Conexão Fechada
Conexão Fechada
INSERT: 0-5, -1
Sistema OK! - Conectado
Tempo: 2822
Conexão Fechada
Sim, você viu quantos conexões abriu e fechou?
O Pool iria gerenciar isso para você e provavelmente, não teria aberta tantas conexões quanto você fez.
Ele consegue gerenciar facilmente isso para você, sem que tu tenha esse tipo de preocupação.
Mas como eu disse, se é conexão remota envolve questões de rede, envio de pacote, TCP, tamanho dos pacotes e bla bla bla.
Isso está influenciando diretamente no processamento do seu algoritmo.