Ir ao conteúdo

Posts recomendados

Postado

Olá, pessoas. Estou desenvolvendo uma aplicação desktop com Java SE e testando o software com um banco de dados remoto ele fica muito lento, enquanto que com o banco de dados local funciona normalmente. A seguir segue um método de exemplo de como estou programando o CRUD (esse método também é o que mais demora para retornar a resposta quando a conexão é remota):

public List<EscolaTecnicaModel> pesquisar(EscolaTecnicaModel escolaTecnicaModel) throws Exception {
        Connection conexao = Conexao.abrirConexao();
        List<EscolaTecnicaModel> escolas = new ArrayList<>();
        String sqlSelect = "SELECT " +
                               "et.*, ad.usuario, ad.senha, c.nome AS nome_cidade, c.id_estado, e.nome AS nome_estado, e.codigo_uf " +
                           "FROM escolas_tecnicas et " +
                               "INNER JOIN administradores ad ON (et.id_administrador = ad.id_administrador) " +
                               "INNER JOIN cidades c ON (et.id_cidade = c.id_cidade) " +
                               "INNER JOIN estados e ON (c.id_estado = e.id_estado) "; 
        String sqlWhere = "";
        String sqlOrder = "ORDER BY et.nome ASC"; 
        
        if (!escolaTecnicaModel.getNome().trim().equals("")) {
            sqlWhere += "WHERE et.nome LIKE '%" + escolaTecnicaModel.getNome() + "%' "; 
        }       
        
        PreparedStatement psBuscarEscolas = conexao.prepareStatement(sqlSelect + sqlWhere + sqlOrder);
        ResultSet rsBuscaEscolas = psBuscarEscolas.executeQuery();
        
        if (rsBuscaEscolas.next()) {
            do {
                EscolaTecnicaModel escolaTecnica = new EscolaTecnicaModel();
                escolaTecnica.setIdEscolaTecnica(rsBuscaEscolas.getInt("id_escola"));
                escolaTecnica.setNome(rsBuscaEscolas.getString("nome"));
                escolaTecnica.setEmail(rsBuscaEscolas.getString("email"));
                escolaTecnica.setIdAdministrador(rsBuscaEscolas.getInt("id_administrador"));
                escolaTecnica.setUsuario(rsBuscaEscolas.getString("usuario"));
                escolaTecnica.setSenha(rsBuscaEscolas.getString("senha"));
                escolaTecnica.setNivel(AdministradorModel.Nivel.ESCOLA);
                escolaTecnica.getCidade().setIdCidade(rsBuscaEscolas.getInt("id_cidade"));
                escolaTecnica.getCidade().setNome(rsBuscaEscolas.getString("nome_cidade"));
                escolaTecnica.getCidade().getEstado().setIdEstado(rsBuscaEscolas.getInt("id_estado"));
                escolaTecnica.getCidade().getEstado().setNome(rsBuscaEscolas.getString("nome_estado"));
                escolaTecnica.getCidade().getEstado().setCodigoUf(rsBuscaEscolas.getString("codigo_uf"));
                escolaTecnica.getEndereco().setRua(rsBuscaEscolas.getString("rua"));
                escolaTecnica.getEndereco().setNumero(rsBuscaEscolas.getString("numero"));
                escolaTecnica.getEndereco().setBairro(rsBuscaEscolas.getString("bairro"));
                escolaTecnica.getEndereco().setCep(rsBuscaEscolas.getString("cep") == null ? "" : rsBuscaEscolas.getString("cep"));

                PreparedStatement psBuscarTelefones = conexao.prepareStatement("SELECT * FROM telefones_escolas_tecnicas WHERE id_escola = ?");
                psBuscarTelefones.setInt(1, escolaTecnica.getIdEscolaTecnica());
                ResultSet rsBuscarTelefones = psBuscarTelefones.executeQuery();

                while (rsBuscarTelefones.next()) {
                    TelefoneModel telefone = new TelefoneModel();
                    telefone.setDdd(rsBuscarTelefones.getString("ddd"));
                    telefone.setNumero(rsBuscarTelefones.getString("numero"));
                    telefone.setTipo(rsBuscarTelefones.getString("tipo"));

                    escolaTecnica.adicionarTelefone(telefone);
                }
                
                escolas.add(escolaTecnica);
                
                Conexao.fecharConexao(rsBuscarTelefones, psBuscarTelefones);
            } while (rsBuscaEscolas.next());
        } else {
            Conexao.fecharConexao(conexao, psBuscarEscolas, rsBuscaEscolas);
            
            throw new Exception("Nenhuma escola encontrada");
        }
        
        Conexao.fecharConexao(conexao, psBuscarEscolas, rsBuscaEscolas);
        
        return escolas;
    }

O que pode estar causando essa lentidão e como solucionar?

Postado

Boa tarde @Danie1 Net0

 

Se o banco de dados é o mesmo e com os mesmos dados, com a única diferença de um ser local e outro remoto, um dos problemas pode ser a própria conexão com a internet, ou a sua ou a do servidor remoto.

 

Você pode testar isso, pingando no servidor e verificando o tempo em ms.

  • Curtir 1
Postado
2 minutos atrás, Leonardo0308 disse:

Boa tarde @Danie1 Net0

 

Se o banco de dados é o mesmo e com os mesmos dados, com a única diferença de um ser local e outro remoto, um dos problemas pode ser a própria conexão com a internet, ou a sua ou a do servidor remoto.

 

Você pode testar isso, pingando no servidor e verificando o tempo em ms.

Sim, é o mesmo banco de dados. Minha conexão com a internet é boa, testei em outros computadores fora de casa e o problema persiste. Pingando o servidor o tempo médio é de uns 35/40ms.

Postado
27 minutos atrás, Leonardo0308 disse:

Se a aplicação é a mesma e o BD é o mesmo, a única coisa que eu vejo é a conexão.

 

Se não é a internet em si, pode ser o processamento desse banco remoto.

Na verdade, o SGBD é diferente... Localmente estou usando o MariaDB e no servidor remoto uso MySQL, porém o driver é do MySQL mesmo. Mas não é possível que esse seja  o problema... ou é?

Postado
8 minutos atrás, Danie1 Net0 disse:

Mas não é possível que esse seja  o problema... ou é?

 

Só testando para saber, mas uma coisa mais importante...a quantidade de dados é a mesma?

  • Curtir 1
Postado
4 horas atrás, Leonardo0308 disse:

 

Só testando para saber, mas uma coisa mais importante...a quantidade de dados é a mesma?

Sim, é a mesma, mas praticamente não há dados, só algumas tabelas "estáticas" que já estão populadas e outras poucas tuplas em outras tabelas para testar o programa.

Postado
agora, Leonardo0308 disse:

@Danie1 Net0 mas você usa dados do banco na interface?

 

Defina esse "gargalo da interface".

Me referi à interface gráfica do programa que estou desenvolvendo, ela trava as vezes... Eu estava pensando (tanto que criei esse tópico) que o problema estava no banco, mas a verdade é que a causa da lentidão está na exibição dos dados no banco na tela. Utilizei uma péssima "lógica" para listar cidades e estados, onde milhares de buscas estavam sendo feitas e por isso estava lento, mas já estou solucionando. Agradeço imensamente por sua disponibilidade em ajudar, obrigado. 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...