Webapp: el mejor método para limitar el uso del usuario

Estoy creando una aplicación web en la que me gustaría limitar el uso excesivo de la aplicación por parte del usuario.

Me gustaría limitar la cantidad de veces que el usuario envía notificaciones por correo electrónico cada mes.

La forma en que estaba pensando en hacer esto es registrando cada notificación con la fecha y hora de user_id. Entonces, antes de enviar una notificación, seleccionaré * WHERE user_id Entre Fecha y Fecha+30. Y haga una validación de que el número de entradas es menor que el límite.

¿Hay una manera fácil y más rápida de hacer esto? Estoy un poco nervioso cuando tendré 1/2 millones de entradas de registro.

preguntado el 16 de septiembre de 13 a las 00:09

me parece un enfoque sensato. -

1 Respuestas

Este tipo de problema es perfecto para que lo resuelva Redis.

Básicamente, puede tener un elemento de caché para cada usuario y luego incrementarlo cada vez que el usuario envía un correo electrónico. El elemento del caché expiraría a fin de mes. Puede leer este elemento de caché cuando lo desee. De esta manera, no necesita ninguna tabla de base de datos ni consultas, y la velocidad debería ser súper rápida.

Si desea limitar con precisión al usuario durante el período de "30 días anteriores", las cosas se complican un poco más. En esa situación, registra un evento de usuario al volcarlo en un conjunto ordenado en Redis, codificado con la identificación del usuario. Luego, puede usar la función ZCOUNT en el conjunto ordenado para averiguar cuántos eventos se produjeron para este usuario en los 30 días anteriores con precisión. La puntuación sería la marca de tiempo del evento, por supuesto.

Por cierto, un sistema Redis es increíblemente fácil de instalar y es posible que no necesite ninguna configuración en su situación.

Respondido el 16 de Septiembre de 13 a las 01:09

El sistema Redis es más rápido que mysql. - MathieuB

La estructura de datos subyacente debe ser la misma (un conjunto de datos indexado como un btree o algo así), por lo que el rendimiento del algoritmo debe estar a la par entre Redis y MySQL. La ventaja adicional es que lo más probable es que Redis realice la operación en la memoria, y no tiene los requisitos ACID de MySQL, por lo que diría que Redis tiene una ligera ventaja. - stevel

Gracias por tu ayuda. Probaré Redis este fin de semana antes de instalarlo en línea en mi servidor de producción. - MathieuB

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.