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?)
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?)
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.
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
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?