Olá, preciso de ajuda. Qual banco de dados devo usar para um aplicativo de chat? Estou fazendo um chat em java e gostaria de saber qual banco de dados usar, creio q ele irá ficar no servidor. Desculpa minha ignorância no assunto.
Qual banco de dados usar?
4 Respostas
Se é apenas um chat você precisa realmente armazenar em um banco de dados? Se realmente precisar, pode usar qualquer um (pode ser até um sqlite).
Uma alternativa é salvar as conversas em arquivos e salvar no servidor. Ou até mesmo fazer envio das conversas por email!
Olá, o banco de dados ficaria no servidor?
cara pra um chat vc não precisa de banco de dados, vc precisa de um servidor XMPP
isso ja te reduz o trabalho em 80 %. vc tem diversos servidores como ejabberd, Openfire, etc.
certamente vc tem plugins que vao te ajudar como
http://www.igniterealtime.org/projects/openfire/plugins.jsp
agora é claro que vc vai querer armazenar algumas informações, mas pra isso vc pode usar qq banco, desde mysql, sqlite, oracle, riak, etc - mas veja se o servidor ja nao faz tudo isso.
mas ai vc pode dizer “puxa mas eu preciso salvar historico”
http://xmpp.org/extensions/xep-0136.html
mas ai vc pode dizer “puxa mas eu quero aprender”
pois vem garotão, um chat é um tipo de software bem interessante de se brincar pois existem varias formas de desenvolve-lo e o que é interessante aqui é o “design”.
se vc tem N Clientes conectados em UM Servidor, se o cliente A fala com B entao o servidor tem que saber onde esta A e onde esta B. agora vc tem uma serie de mensagens sendo trocadas então vc tem que pensar na parte de I/O
por exemplo uma forma é vc utilizar non-blocking I/O + multiplexação e ter um main loop onde vc
- le todas as mensagens e processa
- escreve as mensagens apropriadas
( eu escrevi um artigo sobre isso porem usando Perl http://imasters.com.br/desenvolvimento/io-nao-bloqueante-com-ioselect-na-unha/ basta vc adaptar os conceitos para a linguagem que vc domina )
tipo se vc tem uma mensagem como
<mensage>
<de>A</de>
<para>B</para>
<quando>[telefone removido]</quanto>
<texto>EAE malukaum</texto>
...
</mensagem>
quando o seu servidor ler as mensagens, vai saber “esse pedaço aqui vai pra B”
isso é bem dificil de se fazer. alem de non-blocking I/O vc pode usar Threads.
mas pq?
o I/O tradicional é chamado “bloqueante” pq enquanto o cliente nao manda nada, o servidor esta la… esperando… bloqueado. vc pode não bloquear mas isso muda a forma como vc programa esta interação.
vc pode fazer com threads mas se 2 clientes mandam mensagem pra mesma pessoa vc tem que ter cuidado para nao misturar as mensagens ou vai corromper os dados. o que vc pode fazer é um lock para garantir que uma mensagem sera enviada por vez.
agora vc tem que pensar na comunicação: vc pode fazer um client que abra um socket bi-direcional e enquanto o socket estiver ativo ele esta conectado.
mas vc tb pode fazer algo como
- cliente tem mensagem? ele abre socket, manda e fecha.
- cliente quer saber se recebeu mensagens? ele abre socket, lista as ultimas mensagens desde X e fecha.
pode ser mais complexo que isso, mas é importante pensar se o seu cliente vai fazer pooling ( oi em algo novo ai? ) ou vai manter um socket ( ou websocket ) aberto.
qual o melhor? as vezes vc nao tem opção ( como num caso de um browser antigo ). mas um socket por cliente pode te trazer problemas de escalabilidade ( assim como pooling, mas pooling vc pode meter um cache e salvar alguma cpu ).
na duvida, brinque com isso tudo, mas com 2 ou 3 clientes vc nao vera tanta diferença. 100 ou 1000 ja tem alguma diferença.
se vc precisa q isso seja profissional, pegue algo pronto e não re-invente a roda ( a menos que vc não tenha opção). Esse papo de “ain soluções prontas não são customizaveis” é papo furado.
PERCEBA QUE: é muito mais importante vc pensar em como uma mensagem de A vai para B ( sendo B um outro cliente ou uma Sala ) do que “que banco de dados usar”. se bobear tudo vai ficar em memoria. é possivel fazer um servidor de chat totalmente stateless. é um belo exercicio. e a maioria da galera fica com medinho pq tem q lidar com threads ou socket I/O.
Olá, obrigado sr.peczenyj esclareceu algumas de minhas duvidas. O chat tem uma quantidade limitada de clientes em uma conversa (Ou é apenas dois ou nenhum). Preciso de um servidor para salvar e registrar a conta do usuário, essa parte do servidor meu professor me explicou que alguns servidores pagos (Terceiros como a Godaddy) já vem com banco de dados (mysql) e que lá eu posso configurar meu banco de dados(Criar tabelas e tals), agora eu tenho uma duvida criado o Banco de dados como que eu faço para o usuário através do Software obter(Ou outra relação, como incluir um dado) uma informação do Banco?