sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo lidiar con las relaciones al usar mongodb

EDITAR:

Acabo de encontrar una respuesta de Brendan McAdams, chico de 10gen, que obviamente tiene mucha más autoridad que yo, y recomienda incrustar documentos.

texto anterior:

El primero es incluir manualmente a cada comentario ObjectID del usuario al que pertenecen.

comment: { text : "...", 
           date: "...", 
           user: ObjectId("4b866f08234ae01d21d89604"),
           votes: 7 }

La segunda forma inteligente es usar DBRefs

añadimos E/S extra a nuestro disco, perdiendo rendimiento, ¿verdad? (No estoy seguro de cómo funciona esto internamente), por lo tanto, debemos evitar vincular si es posible, ¿verdad?

Sí, habría una consulta más, pero el controlador lo hará por usted; puede pensar en esto como una especie de azúcar de sintaxis. ¿Afecta el rendimiento? En realidad, también depende :) Una de las razones por las que Mongo es tan increíblemente rápido es que está usando archivos mapeados en memoria y mongo hace todo lo posible para mantener todo el conjunto de trabajo (más los índices) directamente en la RAM. Y cada 60 segundos (de forma predeterminada) sincroniza la instantánea de RAM con el archivo basado en disco.
Cuando digo conjunto de trabajo , me refiero a cosas con las que estás trabajando:puedes tener tres colecciones - foo , barra , baz , pero si está trabajando ahora solo con foo y bar, deben cargarse en ram, mientras que baz permanece en el disco abandonado. Además, los archivos mapeados en memoria permiten cargar solo una parte de la colección. Entonces, si está creando algo como engadget o techcrunch, existe una alta probabilidad de que el conjunto de trabajo sean los comentarios de los últimos días y las páginas antiguas se revivan con mucha menos frecuencia (los comentarios se generarían en la memoria a pedido), por lo que no t afecta significativamente el rendimiento.

Así que recapitula:mientras sigas trabajando en la memoria (puedes pensar que es almacenamiento en caché de lectura/escritura), la obtención de esas cosas es súper rápida y una consulta más no sería un problema. Si trabaja con porciones de datos que no caben en la memoria, habría velocidad degradación , pero no conozco sus circunstancias; podría ser aceptable, por lo que en ambos casos tiendo a elegir hacer uso enlace.