2012-04-30 19 views
9

Reddit está migrando actualmente su base de datos de PosgreSQL a Apache Cassandra. ¿Alguien sabe qué esquema de base de datos usa Reddit en Cassandra?¿Cuál es el esquema de la base de datos de Cassandra utilizado en Reddit?

+0

No, y no estoy seguro de que alguien fuera de Reddit lo haga, pero ¿realmente debería importar? Espero que algunas personas aquí en SO puedan ayudar a determinar el esquema adecuado para * su * aplicación. –

+2

Reddit publicó el código que impulsa el sitio en GitHub: https://github.com/reddit/reddit. Pude buscar en el código y determinar el esquema desde allí. Pero pensé que eso es más fácil de preguntar aquí. –

+1

He echado un vistazo al código, y veo algo así como dos docenas de familias de columnas diferentes que se crean y usan de diferentes maneras. ¿Hay alguna área en particular de la que se esté preguntando, o está buscando algo más parecido a la salida 'show schema' de cassandra-cli? –

Respuesta

-1

Tampoco conozco el esquema exacto de Reddit, pero para lo que desea archivar, está en el camino correcto, guardando una jerarquía de comentarios en una base de datos basada en documentos en lugar de una base de datos relacional. Recomendaría mantener un documento para cada comentario raíz, y luego agregar todos los niños (y los hijos de los niños) a ese comentario.

En CouchDB y MongoDB puede almacenar documentos JSON directamente. En Cassandra Guardaría el JSON como una cadena. Por lo que la estructura de datos sólo sería

root-comments 
{ 
    root-comment-id 
    root-comment-json-string 
} 

y cada raíz-comment-JSON-string se vería así:

{ 
comment : "hello world" 
answers : 
[ 
    { 
    comment : "reply to hello world" 
    answers : 
    [ 
     { 
     comment : "thanks for the good reply" 
     answers : [] 
     }, 
     { 
     comment : "yes that reply was indeed awesome" 
     answers : [] 
     } 

    ] 
    } 

] 
} 

, además, es posible que desee agregar un nombre de usuario, ID de usuario, fecha y hora, .. .. etc. a la estructura de cada comentario.

Esta estructura 'desnormalizada' hará que las consultas sean muy rápidas en comparación con una estructura relacional normalizada SI usted tiene MUCHOS datos.

En cualquier caso, tendrá que encargarse de todas las excepciones, eso puede suceder cuando se implementa un sistema de este tipo para una escala de usuario grande, por ej. ¿Qué sucede si alguien responde al comentario A con el comentario B, pero al mismo tiempo (o después) se elimina el comentario A?

Si busca en Internet "datos jerárquicos de cassandra", encontrará otros enfoques, pero todos vuelven a la normalización o no están completos para una jerarquía "infinita".

+1

El problema con el enfoque que describes es que cada vez que se agrega un nuevo comentario tienes que actualizar el JSON, es decir, analizarlo, fusionar el comentario en él y luego escribirlo en Cassandra. Imagina un árbol con miles de comentarios. Por lo tanto, este enfoque es más económico para la recuperación, pero costoso cuando se actualiza. El enfoque relacional es al revés, costoso al recuperar un árbol de comentarios y barato cuando se actualiza. Creo que el mejor enfoque es uno híbrido, almacena los comentarios más importantes a medida que describes y los menos importantes de forma relacional. –

+1

@ Calin-AndreiBurloiu Sí cierto. Tengo entendido que dicho sistema de comentarios (como en reddit) tiene muchas más lecturas que actualizaciones. Entonces mi respuesta es exactamente la solución correcta. –

+0

Y la parsin del resultado se puede hacer fácilmente en JavaScript en el cliente, ya que es JSON. –

Cuestiones relacionadas