2011-09-21 14 views
6

Diga en un sitio de intercambio de enlaces que la gente puede compartir enlaces y publicar comentarios. Los usuarios que siguen un enlace deben ser notificados cuando los comentarios se publican allí. Los usuarios que siguen una categoría deben recibir una notificación cuando los enlaces se comparten en esa categoría. ¿Cuál sería la mejor manera de almacenar estas notificaciones?¿La mejor manera de almacenar notificaciones de usuario?

Pude almacenarlos individualmente, en cuyo caso buscarlos sería simple, pero cada vez que se publique un enlace tendré que agregar una notificación para cada uno de, digamos, 10,000 personas siguiendo esa categoría.

que podría también acaba de calcular las notificaciones cada vez, en cuyo caso me gustaría contar el número de nuevos comentarios desde la última vez que un usuario inicia sesión y mostrar eso. Sin embargo, entonces no podría guardar notificaciones antiguas.

¿Cuáles son mis opciones?


bien, aquí es mi esquema de base de datos:

comments 
- id 
- user 
- link 
- content 

links 
- id 
- user 
- content 

subscriptions 
- id 
- user 
- link 

Cada vez que un nuevo comentario se hace en un enlace, todos los usuarios que están suscritos a ese enlace debe tener una "notificación" que van a recibir en su próximo inicio de sesión.

+0

Estoy volviendo a leer el requisito, tratando de entender. ¿Puedes publicar el esquema db que tienes hasta ahora? – ThinkCode

+0

@ThinkCode, publicado. –

+0

¿Qué tal una marca de tiempo en cada tabla y registrar la marca de tiempo cada vez que un usuario se suscribe? Cada vez que se notifica al usuario, las viejas marcas de tiempo se mueven a una tabla de registro si desea las notificaciones antiguas. – ThinkCode

Respuesta

4

Las notificaciones son por lo general un objeto altamente leer, por lo que desea ser capaz de obtener la lista de notificaciones no leídas actualmente muy rápidamente, no tratar de calcular sobre la marcha. Además, intentar comparar con los tiempos de inicio de sesión no es una buena experiencia para el usuario. Si el usuario no los nota inicialmente, o actualiza la página, o hace clic en uno para ver sus detalles, todas las notificaciones desaparecen.

Con esto en mente, sugeriría tener una mesa user_notification con una lectura/columna sin leer en ella. Si bien es bueno saber en qué parte de la escalabilidad de su programa podría haber problemas, no será hasta que esté en marcha (millones de registros). Puede indexar la columna de usuario para aumentar la velocidad, y si alguna vez tiene la necesidad, puede realizar una partición por usuario para ayudar a escalar a través de unidades/servidores.

Depende de usted decidir si desea que las notificaciones estén en una tabla separada, o solo parte de la tabla users_notifications y esa sería otra área para optimizar.

1

Simplemente no perder de vista la última vez que se vieron las notificaciones. Luego, las publicaciones a las que se suscriban que se crearon después de esa hora estarán en las notificaciones para la próxima vez que vean las notificaciones.

Cuestiones relacionadas