Executando verificação de segurança...
1

Para ajudar preciso de mais informações:

Quantas mensagens ficam salvas no banco de dados?

Fica salvo todo o histórico da conversa ou somente as mensagens não lidas?

Como você salva as mensagens? (Qual é a estrutura?)

Carregando publicação patrocinada...
1

Tenho a seguinte estrutura de tabelas:
messages, contacts e chats.

Ao começar conversar com um contato automaticamente é criado um chat (pra salvar algumas informações relevantes, como por exemplo o unread_count) vinculado ao contato e a cada mensagem enviada pro contato ou recebida dele é salvo na tabela messages.

Quantas mensagens ficam salvas no banco de dados?
Todas as mensagens enviadas/recebidas.

Fica salvo todo o histórico da conversa ou somente as mensagens não lidas?
Todo o histórico.

Como você salva as mensagens? (Qual é a estrutura?)
Mencionei no começo, embora eu acredite que seja irrelevante nesse caso pois as notificações de mensagens não lidas chegam por um evento de socket de um sistema terceiro e tudo é armazenado na tabela chat, não messages.

2

Pensei na solução de não salvar no SQL, mas sim no Redis, o que recomendam?

Redis ao reiniciar perde todas as informações. Seria uma boa opção salvar nele se a consulta você precisa fazer muito mais que a gravação. Aí o fluxo ideal seria salvar no banco de dados, salvar no redis e consultar primeiro no redis, e se não encontrar no banco de dados.

Agora caso a escrita seja muito mais frequente que a leitura não vejo uma otimização que seja muito útil

1

No meu caso a escrita é muito mais frequente que a leitura (toda nova mensagem vou fazer uma consulta pra buscar o chat e outra pra atualizar, emitindo o socket da notificação pro cliente. A leitura só será feita quando o usuário atualizar a tela).

Então não teria muito o que fazer?

1
1