Debe utilizar documentos incrustados si son documentos estáticos o que no son más de unos pocos cientos debido al impacto en el rendimiento. He analizado ese tema hace un tiempo. Recientemente, Asya Kamsky, que trabaja como arquitecto de soluciones para MongoDB, había escrito un artículo sobre "uso de subdocumentos".
Espero que eso ayude a quienes buscan soluciones o las mejores prácticas.
Primero que nada, tenemos que considerar por qué querríamos hacer tal cosa. Normalmente, recomendaría a las personas que incorporen cosas que siempre quieran recuperar cuando obtengan este documento. La otra cara de la moneda es que no desea incrustar cosas en el documento que no desea recuperar.
Si inserta la actividad que realizo en el documento, funcionará muy bien al principio porque toda mi actividad está allí y con una sola lectura puede recuperar todo lo que podría querer mostrarme: "recientemente hizo clic en esto y aquí son tus dos últimos comentarios "pero ¿qué pasa después de que pasen seis meses y no me importen las cosas que hice hace mucho tiempo y no quieres mostrármelas a menos que vaya específicamente a buscar alguna actividad antigua?
Primero, terminará devolviendo un documento cada vez más grande y preocupándose por una parte cada vez más pequeña. Pero puede usar la proyección para devolver solo parte de la matriz, el verdadero problema es que el documento en el disco se hará más grande y aún se leerá todo, incluso si solo va a devolver una parte al usuario final, pero dado que mi actividad no se detendrá mientras esté activo, el documento seguirá creciendo y creciendo.
El problema más obvio con esto es que eventualmente alcanzará el límite de documentos de 16 MB, pero eso no es en absoluto lo que debería preocuparle. Un documento que crece continuamente tendrá un costo cada vez más alto cada vez que tenga que ser reubicado en el disco, e incluso si toma medidas para mitigar los efectos de la fragmentación, sus escrituras serán en general innecesariamente largas, lo que afectará el rendimiento general de toda su aplicación.
Hay una cosa más que puede hacer que matará por completo el rendimiento de su aplicación y es indexar esta matriz en constante aumento. Lo que eso significa es que cada vez que se reubica el documento con esta matriz, la cantidad de entradas de índice que deben actualizarse es directamente proporcional a la cantidad de valores indexados en ese documento, y cuanto mayor sea la matriz, mayor será ese número. ser.
No quiero que esto le impida usar matrices cuando se ajustan bien al modelo de datos; son una característica poderosa del modelo de datos de la base de datos de documentos, pero como todas las herramientas poderosas, debe usarse en las circunstancias adecuadas. y debe usarse con cuidado.