elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Dilema]: La manera más eficaz y óptima.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Dilema]: La manera más eficaz y óptima.  (Leído 3,696 veces)
Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
[Dilema]: La manera más eficaz y óptima.
« en: 22 Junio 2021, 06:33 am »

Hola,

básicamente estaba por implementar un mini sistema que me permita optimizar una tabla de mi base de datos, hace ya un tiempo había hecho un tema en el foro sobre eso. La tabla es de notificaciones entonces cuando el usuario llegue a 51 notificaciones (o más) se evaluarían los registros (con registros me refiero a notificaciones) desde 51 hasta N (N es hasta las que tenga)
entonces aquellas notificaciones que tengan una vigencia de 7 días serán eliminadas.

Para que se entienda mejor, hice este dibujo:


El dilema, se me presentan 2 formas de poder hacer esto. La primer forma sería por medio de un algoritmo que se ejecutará cada vez que el usuario está por mirar sus notificaciones. La segunda forma sería con una consulta CRON.

Ahora en materia de que es más eficaz sería una consulta CRON que se ejecute cada 1 minuto, pero en materia de que es más óptimo (creo yo) sería con el primer método. No sé que opinen ustedes...


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: [Dilema]: La manera más eficaz y óptima.
« Respuesta #1 en: 22 Junio 2021, 15:32 pm »

Ninguno de los dos, es lo sufiicientemente adecuado. Mucha sobrecarga a cambio de incertidumbre. Más bien sería un cron, pero anónimo respecto de un usuario, actuando solo por máximo número de consultas y planificación flexible. Me explico...

Sería preferible tener esa tabla ordenada por el número de notificaciones (O bien crear una consulta para devolverte los usuarios que sobrepasen las 50 activaciones, si no hay ninguno para devolver el usuario con más notificaciones, luego entenderás para qué esto último). Y si la cantidad de usuarios devueltos es mayor que 0...

Luego, tu 'cron' solo consulta si hay usuarios que sobrepasen el número límite de notificaciones (esto es fácil si es una tabla ordenada o si mantiene un campo 'orden' (que vas actualizando para ese usuario cuando recibe una nueva notificación) o si usas una consulta expresa). En caso positivo despachas esos usuarios que sobrepasan ese límite.

La planificación cada minuto (según el caso, claro) puede ser excesiva. No debería estar activado cada minuto, antes de salir (de su previa puesta en marcha), consulta el valor de notificación más próximo al límite (el que ahora es el número de notificaciones mayor en la tabla). Si por ejemplo está en 30 y tu limite es 50, (si por ejemplo se presupone que las notificaciones de media por usuario se recibe 1 cada 20 minutos), lo activas para dentro de 6 horas (20*20=400 minutos)... si está en 45, lo activas para dentro de 90 minutos (5*20=100 minutis), si tiene 49, lo activas para dentro de 20 minutos (1*20=20 minutos)... no pasa nada si se atiende de repente 5 usuarios que han sobrepasado ese limite de 50, es decir en una sola consulta se tenga que despachar a tantos usuarios como hayan sobrepasado las notificaciones.

Si sucede que las notificaciones se reciben de media por usuario, 1 cada minuto (por ejemplo), pués si el de valor más alto es 30, pues considera que hasta 50 notificaciones quizás tarde esos 20 minutos (20*1=20 minutos)... no pasa nada si lo sobrepasa 2 minutos antes o si es otro usuario que lo adelanta porque recibe más), pués lo activas para dentro de 20 minutos... etc... es decir no tiene que ser exhaustivamente programado para que sea perfectamente exacto, eso supone una sobrecarga innecesaria, etc.

p.d.:
Esto va purgando los usuarios con muchas notificaciones, para los que tienen pocas notificaciones y que por tanto la antigüedad de sus notificaciones (y no el número) pueda llegar a ser elevada, puedes programar otro que consulte el menor número de notificaciones... por ejemplo para una base de datos de 1000 usuarios los 10 con menor número de notificaciones (pero mayor que 0, es decir ignora los de 0 notificaciones, esto lo falsearía), y ver si para hay que eliminar para ellos las notificaciones más antiguas si tienen una antigüedad x. Esta programación debería ser más distante en el tiempo, quizas 1 vez al día o 1 vez a la hora. Dependerá de la cantidad de usuarios y la 'actividad' de las notificaciones.

Habrá un grueso en medio que ni estarán arriba, ni abajo, para estos bastaría una programación que se ejecute cada mes (por ejemplo), para borrar consultas más antiguas de x tiempo.


« Última modificación: 22 Junio 2021, 15:42 pm por Serapis » En línea

Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
Re: [Dilema]: La manera más eficaz y óptima.
« Respuesta #2 en: 23 Junio 2021, 06:03 am »

Hola,
según una cosa que me comentaron es que una buena manera es ejecutar dicho algoritmo o cron para determinado usuario en el momento que se le agrega una notificación.

Dejo esto acá para cualquier "reseña" sobre esta solución que me comentaron.
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: [Dilema]: La manera más eficaz y óptima.
« Respuesta #3 en: 23 Junio 2021, 16:46 pm »

Hola,
según una cosa que me comentaron es que una buena manera es ejecutar dicho algoritmo o cron para determinado usuario en el momento que se le agrega una notificación.
Sí, es una opción adecuada cuando el lapso entre agregado de notificaciones de los usuarios es un período largo (la definición de 'largo' es algo a valorar por uno mismo según su sistema y la potencia del equipo, etc...). Por ejemplo en un foro, los mensajes privados, habrá usuarios que cada día redacten 4 o 5 mensajes privados, pero la gran mayoría quizás solo redacte 1 a la semana.

Si el lapso entre añadidos es muy corto, no es eficiente.
Imagina un usuario que tiene 10 notificaciones, lo has limitado a 50, y recibe 1 notificación cada 10 minutos... si está con 10 notificaciones, hasta que llegue a 50, estarás ejecutando el algoritmo 40 veces solo para ese usuario (multiplícalo por el número de usuarios). Acaso no ves más 'saludable' y eficiente tratar solo aquellos que superen cierto umbral (>45 por ejemplo).

Opcionalmente en vez de ser programado a ejecutarse automaticamente cada x tiempo, podrías derivarlo a que tras cada añadido, verifique lo que comentaba en el mensaje anterior (si hay usuarios que han alcanzado el límite). Decidirse por uno u otro es algo a decidir en función d ela frecuencia de añadidos y lo que tarde es tratar el número de usuarios que sobrepasen el umbral.

En cualquier caso ese tratamiento conviene que sea asíncrono respecto del añadido de notificaciones, para que una cosa interfiera lo menos posible con la otra.

Dejo esto acá para cualquier "reseña" sobre esta solución que me comentaron.
????


Hay varias formas de implementarlo, pero si tienes dudas (para avanzar y no quedarte parado), toma la solución que más te convenza y cuando al tiempo observes los problemas que acarrea, pués repasas el tema y ves de implementar una solución que ataje esos problemas.

La que te propuse en el mensaje anterior es la más óptima, aunque requiere un poquito (no mucho más) de trabajo para implementarlo.

La solución que revisa cuando un usuario añade-recibe una notificación es sobretodo muy cómoda de implementar e incluso su eficiencia podría ser suficiente en sistemas donde el tiempo entre añadidos (como ya he comentado), es más o menos dilatado. Es decir si el sistema no está muy concurrido podría bastarte.
En línea

massif.exe

Desconectado Desconectado

Mensajes: 11

F = Gm1m2/r^2


Ver Perfil
Re: [Dilema]: La manera más eficaz y óptima.
« Respuesta #4 en: 12 Julio 2021, 07:11 am »

Yo también opino que el primer método que mencionas es más óptimo.
 :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Configuracion optima PS3 - Router
Juegos y Consolas
aquisgran 0 3,886 Último mensaje 30 Marzo 2010, 21:23 pm
por aquisgran
PHP y C++ conexión óptima
PHP
ampere 1 2,302 Último mensaje 4 Diciembre 2011, 19:51 pm
por ~ Yoya ~
Duda Refrigeracion Optima
Hardware
darkertrust 6 3,959 Último mensaje 4 Diciembre 2012, 00:03 am
por darkertrust
Lectura óptima XML pesado
Desarrollo Web
OssoH 2 3,296 Último mensaje 20 Agosto 2013, 16:11 pm
por OssoH
¿Alguna idea para trabajar en coperativo de manera eficaz? « 1 2 »
Dudas Generales
#Aitor 18 10,090 Último mensaje 26 Marzo 2018, 18:24 pm
por De{M}iuM
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines