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?
Respuesta
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".
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. –
@ 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. –
Y la parsin del resultado se puede hacer fácilmente en JavaScript en el cliente, ya que es JSON. –
- 1. ¿Cuál es el estado de la base de datos HTML5?
- 2. ¿Cuál es el propósito del esquema de la base de datos?
- 3. Búsqueda de comodines en la base de datos de cassandra
- 4. ¿Cuál es la mejor práctica cuando el esquema de la base de datos cambia en el marco de la entidad?
- 5. Esquema de la base de datos EtherPad?
- 6. Generar una imagen de un esquema de base de datos utilizado en una aplicación de Rails
- 7. ¿Cómo prueba (unidad) el esquema de la base de datos?
- 8. Esquema de base de datos de sondeo
- 9. Base de datos con "Esquema abierto" - ¿Buena o mala idea?
- 10. Simplifique el diagrama/esquema ER de la base de datos
- 11. heroku no actualiza el esquema de la base de datos
- 12. JavaScript dibuje el esquema de la base de datos
- 13. Esquema de la base de datos: representando la ubicación
- 14. El diseño de un esquema de base de datos localizada
- 15. Esquema de la base de datos para la ACL
- 16. Esquema de la base de datos para almacenar datos SNMP
- 17. ¿Cuál es la diferencia entre un esquema y una tabla y una base de datos?
- 18. Actualizaciones de esquema de base de datos
- 19. Recuperar esquema de base de datos
- 20. ¿Cuál es la diferencia entre el esquema y el diccionario de datos?
- 21. ¿Cuál es el método más utilizado para acceder a la base de datos desde C# hoy en día
- 22. django: actualizar esquema de base de datos sin perder datos
- 23. base de datos de Cassandra, ¿qué interfaz de python?
- 24. Mongoose: Esquema de base de datos sugerido
- 25. El 'System.Web.Security.SqlMembershipProvider' requiere un esquema de base de datos compatible con la versión de esquema '1'
- 26. Esquema de la base de datos - Sistema de reserva/disponibilidad
- 27. Generar esquema de base de datos de la asignación NHibernate
- 28. ¿Cómo llegar al esquema de la base de datos de una base de datos oculta?
- 29. Pivoteo de base de datos: ¿cuál es el propósito?
- 30. Esquema de la base de datos de descifrado
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. –
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í. –
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? –