2008-11-21 11 views
10

¿Cómo haría una fuente de noticias de diseño de base de datos "amigable", para que no fuera extremadamente costoso obtener todos los elementos (consulta) para poner en el feed de noticias? La única forma en que puedo pensar involucraría la UNIÓN de casi todas las tablas (representando grupos, notas, amigos, etc.) y obteniendo las fechas y tal, que parece que sería una consulta realmente costosa para cada usuario, y Sería bastante difícil guardar en caché algo así con todos siendo diferentes.Diseño de la base de datos de noticias como en Facebook

+1

Para aquellos de nosotros que no usamos Facebook, ¿puedes describir el problema un poco más? –

+0

Discusión sobre la implementación de flujos de actividad social aquí: [https://stackoverflow.com/questions/202198/whats-the-best-manner-of-implementing-a-social-activity-stream](https://stackoverflow.com/questions/202198/whats-the-best-manner-of-implementation-a-social-activity-stream) – Strelok

Respuesta

12

En primer lugar, considere la realización de un prototipo de rendimiento para comprobar su presentimiento de que la unión sería demasiado costosa. Es posible que optimice prematuramente algo que no sea un problema.

Si se trata de un problema real, considere una tabla diseñada exclusivamente para contener los datos de alimentación de eventos, que deben actualizarse en paralelo con las otras tablas.

E.g. cuando crea un registro de notas, también crea un registro de eventos en la tabla de eventos con la fecha, la descripción y el usuario involucrados.

Considere la posibilidad de indexar la tabla de eventos según UserId (o UserId y Date). También considere borrar los datos antiguos cuando ya no sean necesarios.

Este no es un esquema normalizado, pero puede ser más rápido si obtener un evento de alimentación es una operación frecuente.

2

Es difícil responder a esta pregunta sin un esquema, pero mi impresión es que una unión que participan 10 o más correctamente indexada tablas no es nada:
Una aplicación típica de una lámpara como WordPress o PHPBB corre más de 10 consultas por visita de página sin problemas . Entonces no te preocupes

+0

Sé que no debería topar con este tema, lo siento, pero ¿hay algún recurso que pueda vincular para confirmar su palabras: "Una aplicación LAMP típica como WordPress o PHPBB ejecuta más de 10 consultas por vista de página sin problemas". –

2

UNION = caro, porque el conjunto de resultados completo está sujeto a una operación DISTINCT. UNION ALL = más económico, porque efectivamente se trata de múltiples consultas para las cuales se añaden los resultados de cada una de ellas.

Depende del volumen de datos o del curso.

El principal impulsor de la eficiencia serían las consultas individuales que están unidas, pero no hay ninguna razón por la que seleccionar los 10 registros más recientes de cada una de las 10 tablas lleve más de una fracción de segundo.

Cuestiones relacionadas