Chat - Notificação de nova mensagem
Atualmente tenho um projeto em Node onde é um chat e agora estou desenvolvendo notificações de mensagens.
Tenho esse código abaixo que é executado sempre que uma nova mensagem é recebida (basicamente tenho um usuário onde faz relação com um chat, e sempre que recebo uma nova mensagem ele executa o código abaixo, buscando o chat que teve a mensagem e salvando no banco os dados atualizados, sendo o essencial o unread_count pra verificar quantas mensagens não foram lidas e após enviando um evento com socket pro cliente):
const update: EventsHandler<'new:message'> = async (updates: ChatUpdate[]) => {
for (const update of updates) {
try {
const data = transformDataOnStore(update);
let chat = await Chat.query().where('id', data.id).first();
if (chat) {
data['unread_count'] = typeof data.unread_count === 'number' ? chat.unread_count + data.unread_count : 0;
chat = await chat.merge({...data, unread_count: data.unread_count}).save();
} else {
chat = await Chat.create(data);
}
socket.emit('update:chat', chat);
} catch (error) {
Logger.error({ error }, 'ERROR X');
}
}
};
Qual a forma mais otimizada pra fazer isso? Acredito que conforme muitos usuários trocam mensagens, salvar diretamente no banco novamente quando uma nova mensagem é recebida não seja a melhor forma, pois vai demandar muito processamento do banco de dados (atualmente o PostgreSQL).
Pensei na solução de não salvar no SQL, mas sim no Redis, o que recomendam?