Bom pessoal, eu uso um banco de dados externo no meu aplicativo (MySQL) com ajuda do axis2, apache, xampp, eclispse e tomcat.
Funciona da seguinte forma: O Xampp libera as portas para o Apache o Mysql; no eclipse eu desenvolvo os comandos para acessar o banco de dados (inserindo ou retirando informações dele) e depois usando o TomCat 7.0 e o Axis2 para criar um servidor para que o eclipse possa se conectar com o MySql.
Com isso, após configurar o próprio aplicativo para entrar em contato com o servidor do TomCat e acessar os códigos do arquivo no eclipse, consigo usar meu banco de dados normalmente.
O problema é que depois de somente eu usando o aplicativo por uns 5 minutos, o MySql derruba o banco de dados e monstra a mensagem “Too many connections”. Acredito que como a própria mensagem diz, ele está recebendo muitos comandos (conexões) e como está sendo usado em um servidor caseiro, ele não aguenta essas conexões e cai.
Ouvi dizer que se pode usar sites de hospedagem de servidor, como o GoDaddy, LocalWeb e etc para conseguir usar como servidor e com isso aumentar o número de conexões que o banco de dados irá aguentar.
E é ai que entra minha dúvida: Como funciona isso? Como fazer isso? Eu preciso configurar alguma coisa na minha aplicação para aumentar esse número de conexões, ou somente usando um servidor web já faria esse número aumentar? Há algum detalhe ou algo que possa fazer ou deva saber? Estou completamente perdido nessa área, porque achava que depois que tivesse com meu webservice funcionando estaria tudo ok.
Alguem pode me ajudar com alguma explicação de como devo agir para conseguir fazer o aplicativo funcionar de forma desejada?
Obrigado.
vamos la: cada conexão com o banco de dado usa recursos. em lugares genericos como locaweb isso talvez não seja otimizado para um grande volume de uso e vc vai ficar bem restrito.
mesmo com recursos abundantes, não é interessante vc abrir uma conexão ao banco por request. o ideal é vc usar um pool de conexões. isso vai abrir x conexões com o banco e a cada request vc vai pedir uma conexão disponivel para fazer o que vc quer.
em sistemas que processam um grande volume de dados, vc tem que levar em conta isso no design. por exemplo, se vc tem um cluster mysql para distribuir o seu processamento, cada insert pode ser seguido por um two-phase commit onde vc pode bloquear uma tabela em todo o seu cluster por alguns instantes (por isso que pode fazer sentido o uso de outros bancos de dados noSQL como Riak, Couchbase, MongoDB, Cassandra…). isso pode ser mortal. porém, no geral vc tem muito mais leitura do que escrita, portanto a correta utilização de cache vai te ajudar.
estamos falando só do banco de dados. em alguns casos vc faz processamento assincrono. por exemplo, eu peço pra alterar os meus dados, e isso vai ser executado em algum momento no futuro ( não imediato ).
especificamente para java, veja esta discussão com exemplos do C3P0
lembre-se: a sua aplicação e o banco de dados são duas entidades diferentes que vão interagir. vc precisa entender o basico sobre os dois e sobre a forma como eles vão interagir (nesse caso, vc tem I/O, tem sockets, tem sistema operacional, rede tcp, load balancers, cache, etc). muita coisa pode ser feita para a melhor performance e não tem nada “pronto” que resolva o seu problema magicamente.
Amigo …obrigado pela resposta.
Eu gostaria é mesmo saber os passos entende? Como o aplicativo vai ser iniciado agora, não precisa ter muitas conexões.
Só preciso entender como fazer as coisas…porque assim:
No meu servidor local, eu usava arquivos Java do tipo class.
E se eu mudar para um servidor VPS? Como iria funcionar? Posso usar os mesmo arquivos java?
Não sei nem por onde começar …por isso estou meio perdido.
ai varia. o padrão para fazer deploy de uma aplicação é o arquivo .war gerado com o seu projeto compilado e os arquivos necessarios, numa determinada estrutura.
normalmente vc vai fazer deploy do seuProjeto.war no VPS e reiniciar o servidor.