Foros del Web » Programando para Internet » PHP »

Implementar un sistema de novedades

Estas en el tema de Implementar un sistema de novedades en el foro de PHP en Foros del Web. Hola a todos. Necesito implementar un sistema de novedades. Me explico: esa típica funcionalidad que tienen las redes sociales de avisar a tus amigos de ...
  #1 (permalink)  
Antiguo 24/07/2010, 11:15
Avatar de perryjr  
Fecha de Ingreso: julio-2010
Ubicación: Granada, Spain, Spain
Mensajes: 190
Antigüedad: 14 años, 4 meses
Puntos: 27
Implementar un sistema de novedades

Hola a todos.

Necesito implementar un sistema de novedades. Me explico: esa típica funcionalidad que tienen las redes sociales de avisar a tus amigos de lo que haces. Subes una foto, comentas algo, etc. y cuando tu amigo entra en la web le salen mensajitos tipo pepito tiene 4 fotos etiquetadas o ha publicado no se cuantos comentarios.

La primera aproximación y desde luego prácticamente imposible sería mantener una tabla de novedades que cada vez que alguien haga algo, meta registro para cada usuario. Es decir, un usuario publica un post y suponiendo que tengamos 512 usuarios por ejemplo, pues se insertan 512 registros nuevos. Luego cuando el usuario entra, pues se recuentan las cosas y punto.

Como veis, totalmente impracticable, no es un sistema muy escalable y sería muy lento.

Alguna otra idea? NO necesito exactamente el código para hacerlo si no queréis, solo ideas que os salgan para hacerlo, aun sin hacer o desarrollar.

Gracias de antemano!
  #2 (permalink)  
Antiguo 24/07/2010, 11:31
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 2 meses
Puntos: 334
Respuesta: Implementar un sistema de novedades

bueno yo estoy asiendo algo parecido.. en realidad es cosa de tomar bien el enfoque.. la relacion debes hacerla solo 1 ves
por ejemplo si yo tengo 20 amigos, conocidos, lo que sea y mi ID es 18 entonces relacionas en una tabla mi ID con la de mis friends.
18 - 15
18 - 60
18 - 69

etc...
entonces la consulta solo pasaria por esa tabla para verificar a quien debo buscar informacion

saludos.. si tienes dudas avisa
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 24/07/2010, 11:55
Avatar de perryjr  
Fecha de Ingreso: julio-2010
Ubicación: Granada, Spain, Spain
Mensajes: 190
Antigüedad: 14 años, 4 meses
Puntos: 27
Respuesta: Implementar un sistema de novedades

sí. una duda. como hago para distinguir información leída de no leída?
y otra cosilla, tu sistema está muy bien, para pocas cosas, pero imagina(y no imagines, porque es lo que necsito) leer las novedades de:
- Nuevas propuestas para las encuestas.
- Nuevos posts.
- Nuevos comentarios (para revisarlos)
- Mensajes privados nuevos.
- Posts nuevos.
y posiblemente se añadan unos cuantos más con el tiempo. ese es mi problema. son demasiados! =D
  #4 (permalink)  
Antiguo 24/07/2010, 11:56
Avatar de perryjr  
Fecha de Ingreso: julio-2010
Ubicación: Granada, Spain, Spain
Mensajes: 190
Antigüedad: 14 años, 4 meses
Puntos: 27
Respuesta: Implementar un sistema de novedades

me refería a que son demasiadas peticiones a la base de datos, muchas tablas que consultar, muchos SELECT.

creo que es el momento para aclarar que uso bases de datos de consistencia que no tienen JOIN's lo cual dificulta un poquillo más al operación.
  #5 (permalink)  
Antiguo 24/07/2010, 12:08
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 2 meses
Puntos: 334
Respuesta: Implementar un sistema de novedades

bueno todo a su tiempo.. en el titulo del post no decias nada de mensajes privados ni comentarios ni nada de eso ;D (lo cual es tema aparte por que una cosa nada que ver con la otra)

para los mensajes leidos podrias usar otra tabla, en la cual si tu ID no se encuentra.. significa que no esta leido.. y si lo lees solo haces un INSERT con la ID de la noticia enlazandola con la tuya...
eso es una idea.. ya que por lo que me acuerdo discutimos una ves el sistema que usa este foro es con una tabla memory insertando miles de registros por cada click (lo cual no me dejo muy convencido :P)

saludos
__________________
More about me...
~ @rhyudek1
~ Github
  #6 (permalink)  
Antiguo 27/07/2010, 06:16
Avatar de perryjr  
Fecha de Ingreso: julio-2010
Ubicación: Granada, Spain, Spain
Mensajes: 190
Antigüedad: 14 años, 4 meses
Puntos: 27
Respuesta: Implementar un sistema de novedades

no, si en verdad una pequeña modificación de tu método es lo único que a mí se me ha ocurrido y será lo que use, pero quería ver si había alguien que tenía alguna otra idea para ello.

Al final cogeré una tabla de eventos, cuando alguien publique un post por ejemplo, se meterá una entrada, y una columna para los destinatarios(bloggeros, usuarios normales, administradores, todos). El motor de la base de datos no tiene joins pero un tipo de dato muy útil y rápido son las listas. Así que otra columna para mantener una lista de usuarios que lo han visto. La fecha y hora del evento y el número de usuarios que tengo en la base de datos.
(el contador lo llevo por otro sitio ya de antes) y otra columna más para usuarios que lo han visto.

Luego, cuando alguien entre busca los eventos a los que esté destinado y que todavía no esté en esa lista. al verlo se le añade a la lista y se incrementa el contador. La fecha y la hora del evento se usan para discriminar los que se tienen que mostrar(imagina un usuario recien registrado, no le tendrían que salir eventos anteriores al registro, claro xD). Además un cron job que se ejecuta cada día comprobará que eventos tienen usuarios que lo han visto igual a usuarios que habia en el momentod e lanzar el evento(te recuerdo que como se discrimina por fecha da lo mismo cuantos nuevos usuarios haya, no interfieren). Los que ya hayan sido descartados pues se eliminan.

Me parece la mejor opción porque asi se mete solo un registro para cada evento y para todos los usuarios(o todos los de un tipo) y además se pueden eliminar los antiguos.

Para los que usan bases de datos relacionales en vez de mantener una columna con la lista, es más rápido usar otra tabla adicional. A mi me viene mejor la lista.

Y muchas gracias Hidek1 por contestar-

Etiquetas: implementar, novedades, redes, sociales, usuarios, sitemap
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:23.