what replica español disponibilidad consultas complejas arquitectura alta mongodb

replica - sharding mongodb español



¿Funciona mongodb para sitios como stackoverflow? (7)

¿Es mongodb apropiado para sitios como stackoverflow?


Con RDBMS para el lado OLTP de su aplicación y almacenamiento en caché adecuado, debería funcionar correctamente.

En realidad, hay un clon de upflow de fuente abierta que usa RoR y MongoDB. :)


Creo que es.

Puede almacenar la pregunta en sí, las respuestas y los comentarios sobre la pregunta + respuestas como un monográfico. El tamaño máximo de documento es de 4 mb, por lo que ningún documento en será demasiado grande para mongo. He descargado el contenido de (data dump) con bittorrent y he podido importar este contenido a mongo.

La importación de estos datos en mongo no es trivial porque el volcado de consiste en múltiples archivos xml y cada archivo xml coincide con una tabla relacional, por lo que debe recombinarse en formato de documento.

También agregué el nombre para mostrar + reputación de OP + respondedores + comentaristas a este documento. Esto significa que si un usuario cambia su nombre de pantalla debe actualizar todos los documentos con su ID de usuario. Hay un precio a pagar si desnormaliza sus datos. Lo mismo si la reputación de un usuario cambia.

La idea es que todos los datos que ves en una página como esta están contenidos en un monográfico. Tiene toda la información necesaria con una búsqueda y sin uniones.

Aquí puede descargar el volcado de datos de : http://blog..com/category/cc-wiki-dump/


Creo que sería una buena opción. Hay muchas razones para usar bases de datos de Nonrel como MongoDB en sitios que funcionan de manera similar a . Piense en cómo las RDBM almacenan datos en el disco y toman en cuenta el tamaño del bloque del sistema de archivos y los atributos similares del disco al planificar su diseño. Me gusta aprovechar los documentos que abarcan múltiples bloques del sistema de archivos y almacenar mucha información relacionada en sí misma, agradable y plana. Encuentro que el almacenamiento está menos disperso y se puede escribir un solo bloque que contiene MUCHA información donde se escribirían varios bloques usando otras soluciones.


Para mí, MongoDB es realmente genial para todos los sitios web que no necesitan transacciones.


También puede usar $ inc / $ dec para el seguimiento de votos, por lo que no es necesario usar db.eval


Yo diría que no, que no encaja bien, cuanto más complicados sean sus objetos, más sentido tendrá una base de datos objeto / documento. Pero si nos fijamos en SO, la mayoría no son relaciones de objeto complicadas.

Hay una tabla de preguntas, con muchas propiedades, luego una colección de respuestas ... pero se debe acceder a todas ellas de forma independiente según la vista de la que provenga, por ejemplo, la pantalla de actividad o las pantallas de preguntas y respuestas. Como está accediendo a él en muchos ángulos y cada pieza es comparativamente simple, un modelo relacional funciona mejor.

Hay consultas que se ejecutan en segundo plano para las insignias y, por lo tanto, debe verificar rápidamente si está alcanzando límites de reputación para los votos ... muchas consultas relacionales que son más simples en un RDBMS dada la complejidad del modelo de objetos.

Por supuesto, esta es mi opinión, tal vez la estructura de SO sea mucho más complicada de lo que parece ser


En pocas palabras: sí, podría ser.

Analicemos las diversas páginas / características y veamos cómo se pueden almacenar / reproducir en MongoDB.

Toda la información en esta página podría almacenarse en un solo documento bajo las questions la colección. Esto podría incluir "sub documentos" para cada respuesta para mantener la recuperación de esta página rápidamente.

Editar: como señaló @ beagleguy , podría alcanzar el límite de tamaño de documento de 4MB bastante rápido de esta manera, por lo que sería mejor almacenar las respuestas en documentos separados y vincularlas a la pregunta almacenando los ObjectID en una matriz.

Los votes se pueden almacenar en una colección separada, con enlaces simples a la pregunta y al user que votó. Una llamada db.eval() podría ejecutarse para incrementar / disminuir el recuento de votos directamente en el documento cuando se agrega un voto (aunque bloquea por lo que no sería muy eficiente), o una llamada MapReduce podría realizarse regularmente para compensar esa trabajo. Podría funcionar de la misma manera para los favourites .

Cosas como los números "vistos", los tiempos de acceso del usuario de registro, etc. generalmente se manejarían usando una operación modificadora para incrementar un contador. Desde v1.3 hay un nuevo comando "Buscar y modificar" que puede emitir un comando de actualización al recuperar el documento, lo que le permite realizar una llamada adicional.

Cualquier tipo de datos estadísticos (como reputación, insignias, etiquetas únicas) se pueden recopilar utilizando MapReduce y enviar a colecciones específicas. Las cosas como las notificaciones pueden enviarse a otra colección que actúa como una cola de trabajos, con varios trabajadores escuchando nuevos elementos en la cola (notificaciones de distintivos, nuevas respuestas desde la última vez que el usuario accede, etc.).

La página de Preguntas y sus filtros podrían manejarse con colecciones limitadas en lugar de consultar esos datos de inmediato.

En definitiva, YMMV. Como con todas las herramientas, hay ventajas y costos. Hay algunas características de SO que requerirían mucho trabajo en un SGBDR, pero podrían manejarse de manera sencilla en Mongo, y viceversa.

Creo que la principal ventaja de Mongo en los RDBMS es el enfoque y la replicación sin esquema. Cambiar el esquema de forma regular en una aplicación "en vivo" basada en RDMBS puede ser doloroso, incluso imposible si se usa mucho con grandes cantidades de datos: esos tipos de operaciones pueden bloquear las tablas durante demasiado tiempo. En Mongo, agregar nuevos campos es trivial ya que puede que no sea necesario agregarlos a cada documento. Si lo hace, es una operación relativamente rápida para ejecutar un mapa / reducir para actualizar documentos.

En cuanto a la replicación, Mongo tiene la ventaja de que no es necesario detener la base de datos para tomar una instantánea de los esclavos. Muchos RDBMS no pueden configurar la replicación sin este enfoque, que en grandes bases de datos pueden tomar el master por mucho tiempo (¡te estoy mirando a ti, MySQL!). Esto puede ser una bendición para los sitios de tipo , donde necesita escalar con el tiempo, sin quitar el maestro cada vez que necesita agregar un nodo.