MongoDB - GridFS

GridFSes la especificación de MongoDB para almacenar y recuperar archivos grandes como imágenes, archivos de audio, archivos de video, etc. Es una especie de sistema de archivos para almacenar archivos, pero sus datos se almacenan dentro de las colecciones de MongoDB. GridFS tiene la capacidad de almacenar archivos incluso mayores que su límite de tamaño de documento de 16 MB.

GridFS divide un archivo en fragmentos y almacena cada fragmento de datos en un documento separado, cada uno de un tamaño máximo de 255k.

GridFS por defecto usa dos colecciones fs.files y fs.chunkspara almacenar los metadatos del archivo y los fragmentos. Cada fragmento se identifica por su campo _id ObjectId único. Los archivos fs. sirven como documento principal. losfiles_id campo en el documento fs.chunks vincula el fragmento a su padre.

A continuación se muestra un documento de muestra de la colección fs.files:

{
   "filename": "test.txt",
   "chunkSize": NumberInt(261120),
   "uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
   "md5": "7b762939321e146569b07f72c62cca4f",
   "length": NumberInt(646)
}

El documento especifica el nombre del archivo, el tamaño del fragmento, la fecha de carga y la longitud.

A continuación se muestra un documento de muestra del documento fs.chunks:

{
   "files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
   "n": NumberInt(0),
   "data": "Mongo Binary Data"
}

Agregar archivos a GridFS

Ahora, almacenaremos un archivo mp3 usando GridFS usando el putmando. Para esto, usaremos elmongofiles.exe utilidad presente en la carpeta bin de la carpeta de instalación de MongoDB.

Abra el símbolo del sistema, navegue hasta mongofiles.exe en la carpeta bin de la carpeta de instalación de MongoDB y escriba el siguiente código:

>mongofiles.exe -d gridfs put song.mp3

Aquí, gridfses el nombre de la base de datos en la que se almacenará el archivo. Si la base de datos no está presente, MongoDB creará automáticamente un nuevo documento sobre la marcha. Song.mp3 es el nombre del archivo cargado. Para ver el documento del archivo en la base de datos, puede usar buscar consulta -

>db.fs.files.find()

El comando anterior devolvió el siguiente documento:

{
   _id: ObjectId('534a811bf8b4aa4d33fdf94d'), 
   filename: "song.mp3", 
   chunkSize: 261120, 
   uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
   length: 10401959 
}

También podemos ver todos los fragmentos presentes en la colección fs.chunks relacionados con el archivo almacenado con el siguiente código, utilizando la identificación del documento devuelta en la consulta anterior:

>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})

En mi caso, la consulta arrojó 40 documentos, lo que significa que todo el documento mp3 se dividió en 40 fragmentos de datos.