[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