De MongoDB La guía definitiva:
Los documentos de más de 4 MB (cuando se convierten a BSON) no se pueden guardar en la base de datos. Este es un límite algo arbitrario (y puede aumentarse en el futuro); es principalmente para evitar un mal diseño de esquema y garantizar un rendimiento constante.
No entiendo este límite, ¿significa esto que un documento que contiene una publicación de blog con muchos comentarios y que es mayor que 4 MB no se puede almacenar como un solo documento?
¿Esto también cuenta los documentos anidados?
¿Qué pasaría si quisiera un documento que audite los cambios a un valor? (Eventualmente puede crecer, excediendo el límite de 4MB).
Espero que alguien explique esto correctamente.
Acabo de empezar a leer sobre MongoDB (primera base de datos nosql sobre la que estoy aprendiendo).
Gracias.
db.isMaster().maxBsonObjectSize/(1024*1024)+' MB'
comando en elmongo
shell.Respuestas:
En primer lugar, esto se plantea en la próxima versión para
8MB
o16MB
... pero creo que para poner esto en perspectiva, Eliot de 10gen (que desarrolló MongoDB) lo expresa mejor:EDITAR: El tamaño ha sido oficialmente 'elevado' a
16MB
Creo que sería muy difícil llegar al límite ... y con el tiempo, si actualizas ... tendrás que preocuparte cada vez menos.
El punto principal del límite es que no use toda la RAM en su servidor (ya que necesita cargar todos
MB
los documentos en la RAM cuando lo consulta).Entonces, el límite es un% de la RAM utilizable normal en un sistema común ... que seguirá creciendo año tras año.
Nota sobre el almacenamiento de archivos en MongoDB
Si necesita almacenar documentos (o archivos) más grandes de lo
16MB
que puede, use la API de GridFS que dividirá automáticamente los datos en segmentos y los transmitirá de nuevo a usted (evitando así el problema con los límites de tamaño / RAM).Puede usar este método para almacenar imágenes, archivos, videos, etc. en la base de datos de la misma manera que lo haría en una base de datos SQL. Lo he usado incluso para almacenar archivos de video de varios gigabytes.
fuente
Muchos en la comunidad preferirían no tener límite con las advertencias sobre el rendimiento, vea este comentario para ver un argumento bien razonado: https://jira.mongodb.org/browse/SERVER-431?focusedCommentId=22283&page=com.atlassian.jira.plugin. system.issuetabpanels: comment-tabpanel # comment-22283
Mi opinión, los desarrolladores principales son tercos sobre este problema porque decidieron que era una "característica" importante desde el principio. No lo van a cambiar en el corto plazo porque sus sentimientos están heridos porque alguien lo cuestionó. Otro ejemplo de personalidad y política que perjudica a un producto en las comunidades de código abierto, pero este no es realmente un problema paralizante.
fuente
Para publicar una aclaración, responda aquí para aquellos a quienes Google dirige aquí.
El tamaño del documento incluye todo en el documento, incluidos los subdocumentos, los objetos anidados, etc.
Entonces un documento de:
Tiene un tamaño máximo de 16meg.
Sbudocuments y objetos anidados se cuentan para el tamaño del documento.
fuente
size_t
índices de matriz (64 bits) internamente, el límite de tamaño de documento de 16 MB sería, en el mejor de los casos, capaz de representar un documento que contenga una sola matriz que contenga dos millones de NULL.{"f": 1}
es dos bytes más pequeño que{"foo": 1}
. Esto puede sumar rápidamente si no tiene cuidado, aunque la compresión moderna en disco ayuda.Todavía no he visto un problema con el límite que no involucre archivos grandes almacenados dentro del documento mismo. Ya hay una variedad de bases de datos que son muy eficientes para almacenar / recuperar archivos grandes; Se llaman sistemas operativos. La base de datos existe como una capa sobre el sistema operativo. Si está utilizando una solución NoSQL por razones de rendimiento, ¿por qué desearía agregar una sobrecarga de procesamiento adicional al acceso de sus datos colocando la capa de base de datos entre su aplicación y sus datos?
JSON es un formato de texto. Entonces, si está accediendo a sus datos a través de JSON, esto es especialmente cierto si tiene archivos binarios porque tienen que estar codificados en uuencode, hexadecimal o Base 64. La ruta de conversión podría verse así
archivo binario <> JSON (codificado) <> BSON (codificado)
Sería más eficiente poner la ruta (URL) al archivo de datos en su documento y mantener los datos en binario.
Si realmente desea mantener estos archivos de longitud desconocida en su base de datos, probablemente sea mejor ponerlos en GridFS y no arriesgarse a matar su concurrencia cuando se accede a los archivos grandes.
fuente
Profundidad anidada para documentos BSON: MongoDB admite no más de 100 niveles de anidamiento para documentos BSON.
Más más información vist
fuente
Quizás almacenar una publicación de blog -> relación de comentarios en una base de datos no relacional no es realmente el mejor diseño.
De todos modos, probablemente debería almacenar los comentarios en una colección separada para las publicaciones de blog.
[editar]
Vea los comentarios a continuación para mayor discusión.
fuente
De acuerdo con https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1
Si espera que una publicación de blog supere el límite de documentos de 16Mb, debe extraer los comentarios en una colección separada y hacer referencia a la publicación de blog desde el comentario y hacer una unión a nivel de aplicación.
fuente