2011-12-02 16 views
5

Estoy pensando en comenzar mi primer proyecto CouchDB y proceder de un fondo ORM Me preocupa cómo crear mis documentos que pueden ser difíciles de mantener.noSQL y datos normalizados

Por ejemplo, si tengo el siguiente modelo:

A * ---> (1) B

que significa que por cada Un objeto hay un objeto B y hay muchas instancias de una que puede compartir un objeto B En este caso, hay punteros/clave externa en A a B.

Podría crear un documento que contenga todos los datos A y B. Sin embargo, el problema que tengo es si en una etapa posterior (después de que se creen 10000 de documentos), es posible que necesite cambiar algunos datos, lo que significa que tengo que actualizar todos mis documentos.

En un mundo de base de datos ORM/normalizada, simplemente actualizaría B y todas mis referencias están ahora en la base de datos.

¿Cómo manejo esto en CouchDB o el enfoque NoSQL no es adecuado para este tipo de situaciones?

JD

Respuesta

5

La respuesta general a esta pregunta: ¿No hay una respuesta general a esta pregunta.

El punto es que en NoSQL, la estructura de datos no está dictada por los datos, sino más bien por las consultas que la estructura de datos debe admitir. Entonces, en lugar de usar el mismo patrón para cada instancia de un problema de asociación 1: N o M: N, la manera NoSQL es usar diferentes patrones dependiendo de sus necesidades específicas. Estos pueden ser, por ejemplo:

  • Lectura/Escritura Relación
  • características de bases de datos específicas que hacen incrustación fácil o más difícil
  • Los tipos de consultas que se necesitan para apoyar
  • consideraciones de rendimiento sobre la forma en que los datos pueden indexar, fragmentada, federados o en cualquier otra forma o dividida en caché

en general, mi sensación es que los principiantes tienden a 'sobre-incrustar', pero sólo se puede hablar de MongoDB. La incrustación es una característica poderosa, pero los objetos incrustados no son 'ciudadanos de primera clase', por lo que no debe usarse como un reemplazo para cada relación 1: n. Sólo para algunos :)

+0

+1 excelente información aquí. – Petrogad

+3

De acuerdo. Creo que hay dos indicadores principales: a) ¿Cuántas veces cambias el objeto incrustado? b) ¿Necesitas mostrar el objeto incrustado cada vez que se muestra el padre? Y si es así, en qué dispositivo lo está haciendo (por ejemplo, es posible o no una consulta). Porque si solo cambia una vez cada 100000 documentos, entonces es más fácil almacenarlo incrustado y una vez cambiarlo frente a consultas cada vez que se muestra el objeto al usuario – rit

+0

Gracias por la información. El objeto incrustado solo cambiaría en circunstancias excepcionales. ¿Estás diciendo que debería tenerlo incrustado (es decir, el documento contiene A y B)? Las consultas son importantes ya que serán utilizadas por cada solicitud. Por favor, puedes aclarar un poco. –