Tenho um aplicativo que vai ao banco pega as informções e a envia por socket.
Quando o aplicativo vai ao banco ele executa uma query que demora uns 5 minutos, e conforme o banco vai almentando a query vai ficando mais demorada, então, pensei em fazer um buffer.
Neste buffer ficariam as linhas do banco de dados que seriam acessadas por um outro objeto e assim enviaria as informações por socket, conforme as linhas forem sendo enviadas, elas iriam ser retiradas do buffer podendo assim ser populado novamente, acho que desta maneira iria ter um ganho no performace do aplicativo.
Agora a dúvida, alguém sabe algum objeto ou uma api que eu possa usar para aplicar esta solução ou vou ter que fazer na mão?
Já pensou na possibilidade de otimizar a consulta? Já pediu para algum DBA verificar sua consulta? Quase sempre os programadores criam consultas horriveis com joins sem necessidade (veja a possibilidade de criar indices ou mesmo utiliza-los corretamente)…Bem, eu iria primeiro por esse lado, para depois pensar em outras possibilidades mirabolantes.
[quote=Jedi_FeniX]Tenho um aplicativo que vai ao banco pega as informções e a envia por socket.
Quando o aplicativo vai ao banco ele executa uma query que demora uns 5 minutos, e conforme o banco vai almentando a query vai ficando mais demorada, então, pensei em fazer um buffer…[/quote]
Ou você tem uma quantidade absurdamente grande de dados para um hardware muito mas muito modesto ou sua consulta está péssima( põe péssima nisso ). Reavalie sua consulta ou repense todo o seu negócio.
Até!
Teste sua consulta diretamente no banco atraves de uma ferramenta visual com o MySQL Front e etc… Se demorar la tbm.
Fiz a consulta no EMS e ela me retornou o resultado em 17seg. Para fazer a consulta no aplicativo java eu uso JDBC, porque, está diferença de tempo?
não… com certeza alguma coisa está errado ae rs
Pronto erro arrumado, agora a procedure demora mais ou menos uns 6seg…
Aproveitando tenho uma outra dúvida, eu abro umas 200 threads para enviar algumas informações por socket e eu uso o Log4J para ver o log das threads que eu criei.
No log eu vejo que uma thread demora mais ou menos 5seg ou até menos, sendo que ela envia os dados e atualiza alguns dados no banco, sendo que quando vou olhar na outra máquina que chega as informações, não chega 200 de uma vez, chega umas 20, 15 e etc.
Alguém saberia dizer o que pode estar acotecendo?
Eu uso a ExecutorService para criar o pool de thread.
Indices são uma faca de dois gumes… Por um lado otimiza a sua consulta mas as operações de inserção, atualização se tornam um problema… Provavelmente apenas otimizando a sua consulta ja seja o suficiente, aliado a um hardware de grande porte para hospedar esse BD, lhe garanto que vc terá ótimos resultados…