Modelo de datos para la gestion de novedades vistadas por usuario

05/07/2006 - 12:41 por bruno.rafols | Informe spam
Hola a todos!!

Necesito implementar un modelo de datos que me permita llevar un
control de novedades sobre un usuario. Es decir, cuando un usuario
accede a la aplicación, se le muestran qué contenidos nuevos no ha
visitado aun. En cuando los visita, se desmarcan como novedad.

Pensad que existen miles de usuarios concurrentes y miles de
contenidos. Así que no sirve el hecho de mantener una tabla que
relacione contenidos y usuarios y marque los que ha visitado o no.

Una solución que hemos pensado está en el uso de máscaras. Cada
usuario tendrá una máscara, y cada contenido residirá en una
posición de la máscara. De alguna manera se pueden controlar así
qué elementos se han visitado.

Éste es un problema que se deben producir en muchas aplicaciones con
muchos usuarios. Conocéis la manera de solucionar el problema???
Resulta eficiente la utilización de máscaras?

Un saludo, y grácias de antemano!!

Preguntas similare

Leer las respuestas

#1 Maxi
05/07/2006 - 14:31 | Informe spam
Hola, no veo porque no hacer la opcion de usuarios, contenidos y una tabla
de moviemientos, cada vez que hace un evento llenar esa tabla, o sea: te
queda como una auditoria


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


escribió en el mensaje
news:
Hola a todos!!

Necesito implementar un modelo de datos que me permita llevar un
control de novedades sobre un usuario. Es decir, cuando un usuario
accede a la aplicación, se le muestran qué contenidos nuevos no ha
visitado aun. En cuando los visita, se desmarcan como novedad.

Pensad que existen miles de usuarios concurrentes y miles de
contenidos. Así que no sirve el hecho de mantener una tabla que
relacione contenidos y usuarios y marque los que ha visitado o no.

Una solución que hemos pensado está en el uso de máscaras. Cada
usuario tendrá una máscara, y cada contenido residirá en una
posición de la máscara. De alguna manera se pueden controlar así
qué elementos se han visitado.

Éste es un problema que se deben producir en muchas aplicaciones con
muchos usuarios. Conocéis la manera de solucionar el problema???
Resulta eficiente la utilización de máscaras?

Un saludo, y grácias de antemano!!
Respuesta Responder a este mensaje
#2 bruno.rafols
05/07/2006 - 14:45 | Informe spam
Maxi ha escrit:
Hola, no veo porque no hacer la opcion de usuarios, contenidos y una tabla
de moviemientos, cada vez que hace un evento llenar esa tabla, o sea: te
queda como una auditoria




Ummm, piensa que tenemos hasta 100000 usuarios, y que se pueden llegar
a insertar cientos de contenidos al dia... imaginate la tabla como
puede llegar a crecer al largo de un año... el mantenimiento y el
rendimiento creo que no seria viable...
Respuesta Responder a este mensaje
#3 qwalgrande
07/07/2006 - 15:36 | Informe spam
Hola.

No veo tanto problema en lo que planteas y la forma de hacerlo no tiene
porqué tener un rendimiento bajo. Tienes una tabla de usuarios y una tabla
de contenidos. Luego tienes una tabla de relación, llamémosla
Rela_Usuarios_Contenidos, con dos campos enteros, IdUsuario e IdContenido,
con su correspondiente índice clustered sobre clave primaria. En esta tabla
vas metiendo el registro cada vez que el usuario acceda a una página por
primera vez con un procedimiento almacenado:

create proc InsertarContenido (@IdUsuario int, @IdContenido int) as
if not exists(select IdUsuario from Rela_Usuarios_Contenidos with (nolock)
where IdUsuario = @IdUsuario and IdContenido = @IdContenido)
insert Rela_Usuarios_Contenidos (IdUsuario, IdContenido) values
(@IdUsuario, @IdContenido)
return 0

No creo que se hagan ni diez lecturas. Luego, cuando para mostrar tu home
tienes que filtrar los contenidos cruzándolo nuevamente con esta tabla.
Entiendo que el negocio definirá qué contenidos se muestran antes y cuáles
después. Y lo diga o no el negocio (ahí tendrás que fijar un límite por
rendimiento), se listarán 10 ó 20 contenidos, es decir, no se expondrán de
primeras miles de contenidos (porque eso no lo ve nadie). Así, tendrías algo
parecido a lo siguiente:

create proc DameContenidosNoVistos (@IdUsuario) as

select top 20 C.IdContenido, C.NombreContenido --, Otras características de
los contenidos
from Contenidos C with (nolock) left join Rela_Usuarios_Contenidos R
with(nolock) on C.IdContenido = R.IdContenido and R.IdUsuario = @IdUsuario
where R.IdUsuario is null
order by C.Importancia desc
return 0

No sé si te servirá. En cualquier caso, yo probaría a ver qué tal va (con
esto o con algo similar).

Alberto López Grande (qwalgrande)


escribió en el mensaje
news:

Maxi ha escrit:
Hola, no veo porque no hacer la opcion de usuarios, contenidos y una tabla
de moviemientos, cada vez que hace un evento llenar esa tabla, o sea: te
queda como una auditoria




Ummm, piensa que tenemos hasta 100000 usuarios, y que se pueden llegar
a insertar cientos de contenidos al dia... imaginate la tabla como
puede llegar a crecer al largo de un año... el mantenimiento y el
rendimiento creo que no seria viable...
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida