2010-02-03 28 views
5

¿Cómo puedo impulsar una característica de Facebook NewsFeed en mi aplicación de comunidad basada en PHP? Por ejemplo, "X usuario subió una foto nueva, Z asistió a un evento". Obtener todos estos datos de diferentes tablas consume demasiados recursos.¿Cómo me gusta las noticias de Facebook?

Gracias.

Respuesta

7

Hay dos maneras diferentes de hacerlo, pero la que yo sugeriría es la siguiente. Mantenga una sola tabla de 'historial' que contenga todos los registros de cada usuario, una marca de tiempo y una descripción de la acción junto con indicadores (o claves predefinidas) para el tipo de acción que ocurrió. Esto le permitiría consultar una única tabla de forma selectiva para ciertos tipos de acciones y dentro de un marco de tiempo establecido para mostrar. Sin embargo, con una gran cantidad de usuarios, esta tabla crecerá rápidamente, por lo que puede considerar eliminar los datos antiguos que sabe que no volverá a usar más adelante. Preste mucha atención a los índices para mantener las consultas rápidas, y considere usar el caché de consultas, ya que probablemente genere los mismos resultados con frecuencia.

Siempre que no esté planeando utilizar esta información histórica para auditar las acciones de los usuarios, entonces debería estar bien descargarla después de un tiempo. Si necesita un seguimiento de auditoría, puede que necesite considerar la creación de una tabla temp_history para mostrar las acciones recientes y luego en un CRON mover sus acciones recientes a una tabla de auditoría permanente para el almacenamiento a largo plazo.

+1

Gracias. Eso es. – cnkt

1

Creo que ha respondido a su propia pregunta: extraiga los datos de una sola tabla.

Un enfoque simple sería que todos sus otros componentes pueden comunicarse con un "registrador de eventos" central que registra algo para el suministro de noticias de los usuarios.

1

Me gustó la solución de Paul (fácil con ciertos marcos como Symfony). Si desea ir más allá en términos de velocidad, puede utilizar además un sistema de caché por usuario que consultará los datos y creará nuevos feeds en la primera solicitud. A continuación, recupere los datos en caché en las siguientes solicitudes. El registrador de eventos borrará la memoria caché para usuarios preocupados cuando se reinicie.

En el caso de Facebook, creo que usan una implementación 'push' ajax para notificar al cliente que hay novedades que mostrar.

El sistema de caché basado en Xcache, Apc o sistema de archivos puede ayudarlo a construir un sistema de este tipo.

+0

No sería una buena idea crear/modificar el índice de suministro de noticias sobre un nuevo artículo (imagen, actualización de estado). ¿O crear el índice sobre una solicitud es mejor? (1 = crear filas de la tabla de noticias cuando un usuario carga una foto de noticias. 2 = crear filas de la tabla de noticias cuando el usuario mira la página de noticias 1 o 2) – cnkt

+0

Ambos son posibles, para alcanzar el rendimiento debe comparar la cantidad de tiempo que solicita un solo usuario su alimentación de noticias frente a cuántas veces se modifican las imágenes. Esta operación puede no ser trivial, pero si la aplicación ya se ha "activado", debe obtener dichos datos de las estadísticas (GA) o incluso de los archivos de registro del servidor web – Benoit

3

Comience definiendo lo que llama actividad en su sitio web. Una actividad puede contener múltiples hipervínculos. Entonces, una matriz multidimensional de php podría ayudar aquí, que puede ir en la tabla como objeto serializado.

Say x ahora está conectado con y, z, a y b. puede definir y, z, a y b como enlaces de perfil. Decir x comentado en una foto nueva. En este caso, conviértase en un nuevo hipervínculo a la foto de perfil de la persona. Say x se hizo fan del grupo zoozoo. En este caso, zoozoo se convierte en un hipervínculo a la página de fans.

Cree una tabla de actividades, para escalarla en grande, conviértala en activity_USER_ID, cada vez que un usuario se registre, cree esta tabla y compruebe que no tiene que volver a crearla.

Define Actividades como en 1,2,3 o lo que sea que sientas es la mejor actividad que las personas pueden estar interesadas en las comunidades que apoyas.

estructura de la tabla debe ser simple: activity php array, timestamp. Si está utilizando jQuery y Ajax para completar la actividad como se hace en Facebook con el desplazamiento del mouse, siempre puede convertir la matriz php en json y formatearla en el lado del cliente.

hacer esto siempre de registro estándar.

Si la base de usuarios es grande dicen que un millón de entonces puede que desee poner en un cierto sistema de procesamiento de la tarea que pondrá eventos en event_MM_DD_YYYY y, a continuación, puede hacer un procesamiento por lotes de esos eventos para almacenarlo en la tabla de actividades.

Nunca muestre más de 10 20 30 actividades recientes.

Espero que esto ayude para usted :)

+0

No recomendaré purgar datos. Los gerentes quieren estar muy interesados ​​en conocer la actividad popular en el sitio web para un mes determinado, en ese caso puede tener trabajos cron que completarán alguna otra tabla de estadísticas que se reflejaría en el Sistema de información de gestión. –

Cuestiones relacionadas