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

MongoDB:¿Aún debe proporcionar ID que vinculen a otras colecciones o simplemente incluir colecciones?

Depende.

Depende de cuántos de cada uno de estos tipos de objetos esperas tener. ¿Puede incluirlos todos en un solo documento MongoDB para un tema determinado? Probablemente no.

Depende de las relaciones:¿tiene relaciones de uno a muchos o de muchos a muchos? Si es uno a muchos y la cantidad de entidades relacionadas es pequeña, puede optar por insertarlas en una IList en un documento. Si se trata de muchos a muchos, puede optar por utilizar una relación más tradicional o puede optar por integrar ambos lados como ILists.

Todavía puede modelar relaciones en MongoDB con colecciones separadas PERO no hay uniones en la base de datos, por lo que debe hacerlo en el código. Cargar un tema y luego cargar los comentarios para él podría estar bien desde una perspectiva de rendimiento.

Otros consejos:

Con MongoDB puede indexar matrices INTO en documentos. Así que no piense en un índice como un índice en un campo simple en un documento (como SQL). Puede usar, por ejemplo, una colección de etiquetas en un tema e indexar las etiquetas. (Ver http://www.mongodb.org/display/DOCS/Indexes #Índices-Matrices )

Cuando recupera o escribe datos, puede hacer una lectura parcial y una escritura parcial de cualquier documento. (ver http://www.mongodb.org/display /DOCS/Recuperando+un+subconjunto+de+campos )

Y, finalmente, cuando no puede ver cómo obtener lo que desea usando colecciones e índices, es posible que pueda lograrlo usando map reduce. Por ejemplo, para encontrar todas las etiquetas actualmente en uso ordenadas por su frecuencia de uso, asignaría cada tema que emite las etiquetas utilizadas en él y luego reduciría ese conjunto para obtener el resultado que desea. Luego, puede almacenar el resultado de esa reducción de mapa de forma permanente y actualizarlo solo cuando lo necesite.

Es un cambio de mentalidad bastante significativo del pensamiento relacional, pero vale la pena si necesita la escalabilidad y flexibilidad que brinda un enfoque NOSQL.