Estoy trabajando en un sitio web que utilizará las características de las redes sociales (como Facebook, por ejemplo).Patrón de diseño: sistema de notificación
Me gustaría implementar un sistema de notificación que muestre cosas como "X te agregó como amigo", "Y te invito a la fiesta", "Z ha tomado la última prueba" ... y yo no saber cómo hacer.
Me pregunto cuál es la mejor solución:
- Solución 1, también conocido como "registro".
Una tabla dedicada "notificación". Agrego filas en esta tabla cada vez que surge algo similar a una notificación (agregar amigo, responder preguntas, etc.). La tabla "notificación" tiene campos que contienen información diferente, de acuerdo con el tipo de notificación que se agrega a la tabla.
Bueno: fácil de codificar, separación entre la función de notificación y las características "normales", no consume demasiados recursos cuando necesito leer la tabla.
Malo: Notificación mesa crecerá probablemente muy grande (creo que voy a añadir 10k filas/día en la tabla), "duplicar" la información: la información en la tabla de notificación se puede encontrar en el resto de la mesa usando fecha/lista/lo que sea comparación
- Solución 2, también conocido como "busque en todas partes".
Cada vez que necesito mostrar la lista de notificaciones o mostrar cuántas notificaciones nuevas hay, miro toda la tabla correspondiente, comparo la fecha/etc para saber si sucedió algo nuevo desde la última vez que el usuario notificación.
Bueno: No es una tabla demasiado grande en comparación con la solución 1, no hay "redundancia" de información.
Malo: Tengo miedo debido a la cantidad de usuarios (~ 1k +), hace que el servidor explote porque consume recursos/tiempo, es un poco más difícil de codificar/mantener.
¿Puede decirme qué piensa mejor y por qué, o tiene una solución que no imaginé?
Gracias =)
Editar: Digamos que utilizar un diseño muy básico DB: los usuarios tienen amigos, puede hacer pruebas. 1 tabla para la lista de usuarios, lista de preguntas, 1 tabla quizz < -> relación de usuario, 1 usuario de tabla < -> usuario de amistad. Cada vez que un usuario visita su propio perfil, puede ver lo que sucedió: nuevo cuestionario < -> relación de usuario, nuevo usuario < -> relación de usuario, etc. ¿Cómo diseñaría una notificación como esa?
Esa es una solución que me gusta también. Pero me pregunto si la tabla de "cola" que contendría las notificaciones de cada usuario no sería demasiado grande después de un tiempo. Digamos que tengo 2k usuarios, que tienen 5 notificaciones/día (que es aproximadamente lo que sucederá), son 10k/día nuevas filas en esta tabla. Qué piensas ? –
Puede tener colas de "agente libre", que se asignan a usuarios que tienen mensajes pendientes y, una vez que todos los mensajes se han ido, la cola puede ir a un grupo de colas libres para ser utilizadas por otros usuarios. Esto también puede controlar qué tan rápido genera actualizaciones, la agrupación limitada es útil y monitoreando el promedio de mensajes por cola o los mensajes en cola de espera pueden indicarle cuándo necesita escalar horizontalmente el sistema. – AlexC
Mm, ¿puedes explicarlo con mayor precisión? Entre el ayuno que no soy estadounidense ni inglés, y el hecho de que apestaba en dev (^^), no entendí todo lo que dijiste. gracias =) –