Padrão de design: sistema de notificação
Estou trabalhando em um site que usará recursos de redes sociais (como o facebook, por exemplo).
Eu gostaria de implementar um sistema de notificação que mostra coisas como "X adicionou você como amigo", "Você convidou você para a festa", "Z levou o último quizz" ... e eu não sei como fazer .
Eu me pergunto qual é a melhor solução:
Solução 1, também conhecida como "registro".Uma tabela dedicada "notificação". Eu adiciono linhas nesta tabela toda vez que algo levanta uma notificação aconteceu (amigo adicionando, respondendo quizz, etc.). A tabela "notificação" possui campos que contêm informações diferentes, de acordo com o tipo de notificação adicionado à tabela.
Boa : fácil de codificar, separação entre recurso de notificação e recursos "normais", não consumir muito recursos quando preciso ler a tabela.
Mau : Tabela de notificação irá crescer provavelmente muito grande (eu acho que vou adicionar 10k linhas / dia na tabela), informações "duplicadas": informações na tabela de notificação podem ser encontradas em todas as outras tabelas usando data / lista / qualquer comparação.
Solução 2, também conhecida como "procure em todos os lugares".Toda vez que eu preciso mostrar a lista de notificação ou mostrar quantas novas notificações existem, eu olho para toda a tabela em questão, compare data / etc para saber se algo novo aconteceu desde a última vez que o usuário verificou a notificação.
Boa : Não é uma tabela muito grande em comparação com a solução 1, sem "redundância" de informações.
Mau : Estou com medo por causa do número de usuários (~ 1k +), faz o servidor explodir porque é recurso / tempo, pouco mais difícil de codificar / manter.
Você pode, por favor, me dizer o que acha melhor e por que, ou você tem uma solução que eu não imaginei?
Obrigado =)
Editar: Digamos que eu use um design de banco de dados realmente básico: os usuários têm amigos, podem fazer questionários.
1 tabela para lista de usuários, lista de perguntas,
1 tabela quizz <-> relação de usuário,
1 usuário de mesa <-> usuário para amizade.
Toda vez que um usuário visita seu próprio perfil, ele pode ver o que aconteceu: novo quiz <-> relação de usuário, novo usuário <-> relação de usuário, etc. Como você projetaria uma notificação como essa?