2011-09-09 13 views
6

Me gustaría codificar una aplicación web donde la mayoría de las secciones dependen del perfil del usuario (por ejemplo, diferentes listas de tareas por persona, etc.) y Me encantaría usar MongoDB. Estaba pensando en crear unos 10 documentos embebibles para el documento de perfil principal y mantener todo lo relacionado con un usuario dentro de su propio documento.MongoDB documentos incrustados vs. referencias por ObjectIds únicos para un perfil de usuario del sistema

No veo una forma clara de usar claves foráneas para mongodb, la única manera sería crear un campo to_do_id con el tipo de ObjectId por ejemplo, pero no estarían totalmente relacionadas internamente, simplemente tiene el mismos Id. que tendría que consultar.

  1. ¿Existe un límite en el número de tipos de documentos incrustados dentro de un documento de nivel superior que podría degradar el rendimiento?
  2. ¿Cómo resuelven ustedes el problema de tener un documento de perfil central con el que la mayoría de los documentos tienen que relacionarse al presentar una vista por persona?
  3. ¿Utiliza claves semiexternas dentro de MongoDb y tiene campos con tipos ObjectId que tendrían Id único de otro documento en lugar de incrustarlos?

No puedo sentir qué enfoque se debe tomar cuando. ¡Muchas gracias!

+0

+1 para la buena pregunta. – Adelin

Respuesta

2
  1. No hay un límite especial con respecto al rendimiento. Sin embargo, cuanto más grande es el documento, más tiempo se tarda en transmitir por el cable. El documento completo siempre se recupera.
  2. Lo hago con referencias. Puede elegir entre referencias manuales simples y la base de datos DBRef como en esta página: http://www.mongodb.org/display/DOCS/Database+References
  3. El enlace de arriba documenta cómo tener referencias en un documento de forma semi-foránea. El DBRef puede ser bueno para lo que estás tratando de hacer, pero la simple referencia manual es muy eficiente.

No estoy seguro de que exista una regla general para la cual el enfoque de referencia es el mejor. Como uso Java o Groovy principalmente, me gusta el hecho de que me devuelvan un objeto DBRef. Puedo verificar este tipo de datos y usarlo para decidir cómo manejar la referencia de una manera genérica.

Por lo tanto, tiendo a usar una referencia manual simple para las referencias a diferentes documentos en la misma colección, y un DBRef para referencias entre colecciones.

Espero que ayude.

+0

Aparentemente, no hay reglas establecidas, solo lo que es más conveniente para codificar. El objetivo de transmitir un documento grande tiene sus ventajas, porque siempre tengo que decirle a la aplicación que seleccione solo los campos seleccionados si hay aproximadamente 10 documentos incrustados. Gracias. –

+0

Bueno, hay algunas mejores prácticas con respecto al diseño del esquema, y ​​algunas de ellas se refieren al uso de referencias. Vale la pena echarle un vistazo: http://www.mongodb.org/display/DOCS/Schema+Design – dlaidlaw

Cuestiones relacionadas