Pregunta

sitio web de redes sociales, probablemente, a mantener las tablas para los usuarios, los amigos y los acontecimientos ...

¿Cómo utilizan estas tablas para calcular amigos acontecimientos de una manera eficiente y escalable?

¿Fue útil?

Solución

Muchos de los sitios de redes sociales como Twitter no utilizar un RDBMS en absoluto, sino una aplicación de Message Queue. Muchos de ellos comienzan con una aplicación ya está presente como RabbitMQ. Algunos de ellos conseguir lo suficientemente grande que tienen que personalizar mucho o construir su propia cuenta. Twitter está en el proceso de hacer esto por segunda vez.

Una aplicación de cola de mensajes funciona mediante la celebración de mensajes de un servicio para uno o más servicios. Por ejemplo decir que el servicio Frank está publicando mensajes a una cola de foo. Joe y Jill están suscritos a la cola de foo francos. la aplicación hará un seguimiento de si o no Joe o Jill haber recibido los mensajes y una vez que todos los abonados a la cola ha recibido el mensaje se descarta. Frank dispara mensajes y se olvida de él. Joe y Jill piden mensajes de foo y conseguir lo que los mensajes no han llegado aún. Joe y Jill hacen lo que tienen que hacer con el mensaje. Tal vez manteniéndola alrededor tal vez no.

La aplicación garantiza la cola de mensajes que todos los que se supone que debe llegar el mensaje puede y va a llegar el mensaje cuando lo soliciten. El editor puede enviar los mensajes seguros de ese abonado puede conseguir con el tiempo. Esto tiene la ventaja de ser completamente asíncrona y que no requieren costosas uniones.

Edit: Debo mencionar también que por lo general el almacenamiento de este tipo de cosas a gran escala están fuertemente desnormalizará. Así que Joe y Jill se pueden almacenar una copia del mismo mensaje exacto. Esto se considera aceptable ya que ayuda a la escala de aplicación a los mil millones de usuarios.

Otro lectura:

  1. http://www.rabbitmq.com/
  2. http://qpid.apache.org/

Otros consejos

La estructura de datos de los pilares de las redes sociales es la gráfico . En Facebook la gráfica es no dirigido (Cuando eres amigo de alguien, ellos son eres amigo). En twitter la gráfica se dirige (sigues a alguien, pero no necesariamente sigue).

Las dos formas populares para representar gráficos se listas de adyacencia y matrices de adyacencia .

Una lista de adyacencia es simplemente una lista de los bordes en el gráfico. Considere un usuario con una id de usuario entero.

User1, User2
  1      2
  1      3
  2      3

La interpretación de estos registros no dirigido es que el usuario 1 es amigo de los usuarios 2 y 3 y el usuario 2 es también amigo de usuario 3.

En representación de esta en una tabla de base de datos es trivial. Es la relación muchos a muchos tabla de unión que estamos familiarizados. consultas SQL para encontrar amigos de un usuario en particular son bastante fáciles de escribir.

Ahora que ya conoce amigos de un usuario en particular, sólo tiene que unirse a esos resultados a la mesa de actualizaciones. Esta tabla contiene todas las actualizaciones del usuario indexados por ID de usuario.

Mientras todas estas tablas se indexan correctamente, tendría un tiempo bastante fácil diseñar consultas eficientes para responder a las preguntas que le interesan.

Travis escribió un gran post sobre esto,

Registros de actividad y amigo se alimenta de rieles y pfeed

Para la pequeña escala que hace una combinación en users.friends y users.events y almacenamiento en caché de consulta es probablemente muy bien, pero que frenar bastante rápido como amigos y eventos crecen. También puede probar un modelo basado en eventos en los que cada vez que un usuario crea un evento se crea una entrada en una tabla de unión (tal vez llamado "friends_events"). Por lo tanto cada vez que un usuario quiere ver qué eventos sus amigos han creado ellos pueden hacer simplemente una unión entre su propia identificación y la mesa friends_events y lo averigüe. De esta manera se evita el acaparamiento de todos los usuarios una con amigos y luego unirse a sus amigos con la tabla de eventos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top