2010-08-16 11 views
9

¿Cuál sería la mejor manera de diseñar una base de datos para almacenar entradas de blog y comentarios? Actualmente estoy pensando en una tabla para publicaciones y otra para comentarios, cada una con una ID de publicación.Diseño de base de datos más eficiente para un blog (publicaciones y comentarios)

Me parece, sin embargo, navegar a través de una gran tabla de comentarios para encontrar aquellos para la publicación relevante sería costoso, y se haría cada vez que se carga una publicación de blog (quizás con cierta cantidad de almacenamiento en caché).

¿Hay una manera mejor?

+0

posible duplicado de [MYSQl Optimizar tabla de publicaciones de blog con comentarios] (http://stackoverflow.com/questions/3297583/mysql-optimize-table-of-blog-posts-with-comments) –

+2

"mejor manera" ? ¿Pequeñísimo? La mayoría del uso de las características de Oracle? ¿Qué significa "lo mejor" en este contexto? –

+0

@S. Lott: voto por "la mayor parte del uso de las características de Oracle". ¡Cuantas más funciones, mejor! : P – FrustratedWithFormsDesigner

Respuesta

17

Me parece, sin embargo, la pesca de arrastre a través de una gran mesa de comentarios

Todos los proveedores de bases de acuerdo con usted.

Ofrecen "índices" para limitar esto.

13

Cada sistema de base de datos que utilizaría para implementar su blog usará indexando. Lo que esto significa es que, en lugar de "buscar en una tabla grande", el sistema de la base de datos mantiene una lista separada de comentarios y de las publicaciones a las que están asociados, al igual que el índice al final de un libro. Esto permite que el sistema de base de datos cargue los comentarios asociados con una publicación de forma extremadamente rápida, y no veo ningún problema con el diseño propuesto para un blog de cualquier tamaño.

Los índices se utilizan rutinariamente para asociar tablas con millones de filas con otras tablas con millones de filas. Tendría que tener un blog excepcionalmente grande para exigir desnormalización de comentarios, y aún así, el almacenamiento en caché probablemente le serviría mucho mejor que desnormalización de la base de datos.

Deberá definir un índice en su tabla de comentarios y asociarlo a cualquier columna que contenga la ID de publicación. Cómo se hace eso depende de qué sistema de base de datos esté utilizando.

1

arrastre a través de una gran mesa de comentarios para encontrar los de la empleo relevante que sería caro,

Un índice es siempre allí para rescatar a usted! En primer índice en postId y otro de commentdate (desc)

7

intentar algo como esto:

Blog 
BlogID  int auto number PK 
BlogName string 
... 

BlogPost 
BlogPostID int auto number PK 
BlogID  int FK to Blog.BlogID, index 
BlogContent string 
.... 

Comment 
CommentID  int auto number PK 
BlogPostID  int FK to BlogPost.BlogPostID, index 
ReplyToCommentID int FK to Comment.CommentID <<for comments on comments 
... 
1

Está bien, vamos a ver.

arrastre a través de una gran mesa de comentarios para encontrar aquellos en el mensaje pertinente sería caro

¿Por qué cree que sería caro? Porque posiblemente crea que se realizará una búsqueda lineal cada vez tomando O (n) tiempo. Para mil millones de comentarios, se realizarán mil millones de iteraciones.

Supongamos ahora que se construye un árbol de búsqueda binaria para comment_ID. Para buscar cualquier comentario, necesita log (n) time [base 2]. Entonces, para incluso mil millones de comentarios, solo se necesitarán alrededor de 32 iteraciones.

Consideremos ahora una BST ligeramente modificada, donde cada nodo contiene k elementos en lugar de 1 (en una lista) y tiene k + 1 nodos hijos. Las mismas propiedades de BST se siguen en esta estructura de datos también. Lo que tenemos aquí se llama B-tree. Más información: GeeksForGeeks - B Tree Introduction

Para un B-Tree, el tiempo de búsqueda es log (n) [base k]. Por lo tanto, si k = 10, para 1 billón de entradas, solo se necesitarán 9 iteraciones.

Todas las bases de datos guardan los índices de las claves principales en B-Trees. Por lo tanto, la tarea indicada no sería costosa, y debería seguir adelante y diseñar la base de datos de la manera que parecía obvia.

PD: Puede construir un índice en cualquier columna de la tabla. Por defecto, los índices de clave primaria ya están almacenados. Pero tenga cuidado, no haga índices innecesarios ya que ocupan espacio en disco.

Cuestiones relacionadas