[pyar] algoritmo para ads en django
Manuel Kaufmann
humitos en gmail.com
Lun Jul 28 13:13:55 ART 2014
A ver si algo así puede tirarte una idea o abrir una discusión:
(es pseudocódigo que se parece a Django, no quiere decir que funcione)
class Ads(models.Model):
product = models.ForeignKey('Product')
displays = models.IntegerField(default=0) # this is global
user = models.ForeignKey('User', throught=Seen)
def get_ad_for_user(self, user):
# get all Ads not seen for this user and order by number of displays
ads = user.ads_set.filter(seen=False).order_by('displays')
# some random function is missing here
ad.seen = True
ad.displays += 1
ad.save()
return ad
class Seen(models.Model):
user = models.ForeignKey('User')
seen = models.BooleanField(default=False) # this is per-user
* con esto estaría diciendo que voy a tener un Ads por cada Product
que exista en la DB (eso se puede hacer manejando una señal)
* además, para cada Ads guardo cuántas veces se mostró globalmente
(displays) -cada vez que se selecciona ese Ads para mostrar le suma 1
* por otro lado, guardo una referencia a User en el Ads a través de
otra tabla para saber si a ese usuario en particular ya se le mostró
ese Ads
Ahora bien, cuando llamo al método "get_ad_for_user" lo primero que
hago es filtrar los Ads que ese User no ha visto todavía y después los
ordeno por el número de veces que ese Ads fue mostrado globalmente y
luego eligo uno aleatoriamente (funcion que no está definida en mi
código) de los que tienen menos frecuencia.
¿Cómo lo ves?
2014-07-28 12:43 GMT-03:00 Gonzalo Almeida <flecox en gmail.com>:
> Buenas,
>
> creo que Martín pregunto algo en el chat.. pero aqui mando los
> requerimientos completos.. a ver si a alguno se le ocurre algo:
>
> tenemos que implementar un sistema de "ads" que muestran productos del sitio.
>
> el tema es el siguiente:
>
> 1) podemos tener varios ads en la misma pagina y no tienen que repetir productos
> 2) si tenemos 1000 productos tenemos que tratar de mostrarlos
> uniformemente y no mostrar siempre los mismos 100, tratar de mostrar
> todos.
> 3) tenemos que tratar de no repetir por usuario.
>
> asi que hay que tratar de no repetir a nivel de usuario y a nivel global.
>
> una idea era armar una lista de los 1000 ids de productos y crear una
> shuffleada para cada usuario.
> asi cumplimos que no se repiten para cada usuario. pero si nos puede pasar que:
> 1) al agregar un nuevo producto tengamos que actualizar cada lista
> appendeando el producto al ultimo de cada una.
> 2) puede pasar que un producto sea visto varias veces a nivel global
> (visto por varios usuarios) y otro no se vea nunca. asi que no se
> cumple el requerimiento de que los productos se muestren uniformes a
> nivel global.
>
> el principal problema es mantener la uniformidad a nivel global y a
> nivel usuario y hacerlo rapido.
>
> pre-asignar una lista no estoy seguro que sea la solución yo creo que
> deberiamos:
> al momento de acceder a la pagina. ver a nivel global cuales
> productos son los "menos vistos" y de esos, mostrar los que el usuario
> todavía no vio. teniendo en cuenta todos los casos y hacerlo muy
> rapido.
>
> pero no se como :P
>
> alguna idea?
>
> muchisimas gracias por su tiempo :)
>
> --
> Linux user #466939
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar
--
Kaufmann Manuel
-- http://elblogdehumitos.com.ar
More information about the pyar
mailing list