Qual banco de dados usar?

4 respostas
Jardel_Morais

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.

4 Respostas

iars

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!

Jardel_Morais

Olá, o banco de dados ficaria no servidor?

peczenyj

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.

Jardel_Morais

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?

Criado 22 de outubro de 2016
Ultima resposta 24 de out. de 2016
Respostas 4
Participantes 3