notification php mysql notifications

push notification php



Sugerencias para un sistema de notificación de usuario en MySql y PHP (3)

Estoy implementando un sistema de notificación y viendo si estas sugerencias son válidas para configurar, si una es mejor que la otra o si hay una mejor solución disponible:

Se agrega una notificación a la base de datos. Un invitado / usuario identificable inicia sesión o usa el sitio. Son recibidos con notificaciones que no han visto antes con la opción de cerrar o leer más tarde.

  • La tabla de notificaciones almacena textos de notificación y Id.
  • Opción 1: tabla de alertas almacena todos los usuarios que han leído la notificación
  • Opción 2: tabla de alertas almacena todos los usuarios que NO han leído la notificación

¿Son estas opciones una gran cantidad, es mejor agregar potencialmente más de 100.000 alertas y cuando esos usuarios descartan o interactúan con el aviso, su estado cambia o la alerta se elimina. Esto podría convertirse en una mesa muy grande ...

¿Qué es una configuración más extensible para notificaciones personalizadas basadas en la actividad del usuario?


Alternativamente, podría almacenar un conjunto de referencias a las notas que aún no se han leído por perfil de usuario y luego eliminarlas cuando se muestren (es probable que el caso de uso general sea leer todas las notas a la vez). De esta forma, solo tiene una pequeña consulta cuando extrae un usuario individual, y su costo se encuentra en el tiempo de inserción para el mensaje global, en lugar de filtrar una gran tabla de mensajes no leídos.


No lo haría de esa manera. Almacenaba un registro para cada uno (usuario, notificación) y marcaba cada registro como leído o no leído. Luego puede grabar cuando lo lean, lo que podría ser importante según su aplicación (por ejemplo, si necesita algún tipo de pista de auditoría).

100k registros no es muy grande. No se preocupe por el tamaño hasta que obtenga al menos 10 millones de registros. Si es necesario archivarlos en algún momento. Pero debe hacer algunas estimaciones sobre la rapidez con la que generará 10 millones de registros. Si son 3 días, entonces sí tienes un problema. Si son 3 años, entonces no.

Esta opción, por supuesto, tiene el texto de notificación en una tabla separada.

Esto también debería escalar extremadamente bien con un número aún mayor de mensajes mientras selecciona los mensajes no leídos para un usuario (indexado) y puede unirse para obtener el texto de notificación (si su tabla tiene un tamaño de decenas de millones de registros) o seleccionarlos y luego selecciona por separado los mensajes.

Particionar la tabla (usuario, notificación) es fácil: la basa en rangos de usuario.

Y cuando los usuarios eliminan mensajes, en general debería marcarlo como eliminado en lugar de eliminarlo. La mayoría de las veces no hay muchas razones para eliminar nada en una base de datos.


Estoy codificando mi sitio web y tengo la misma pregunta, pero me resolví de esta manera:

  1. Almacene todos los registros en una tabla de notificaciones.
  2. Read/Unread = true/false
  3. Trabajo de CRON: borre las 10 notificaciones anteriores si el usuario tiene más de 50 notificaciones.

Creo que Facebook periódicamente ejecuta un trabajo de cron para eliminar las notificaciones antiguas que no podemos ver después de que se ha alcanzado nuestra notificación de límite.