GridFS este specificația MongoDB pentru stocarea și recuperarea fișierelor mari, cum ar fi imagini, fișiere audio, fișiere video, etc. Este un fel de sistem de fișiere pentru stocarea fișierelor, dar datele sale sunt stocate în cadrul colecțiilor MongoDB. GridFS are capacitatea de a stoca fișiere chiar mai mari decât limita de dimensiune a documentului său de 16 MB.
GridFS împarte un fișier în bucăți și stochează fiecare bucată de date într-un document separat, fiecare cu o dimensiune maximă de 255k.
GridFS utilizează în mod implicit două colecții fs.files și fs.chunks pentru a stoca metadatele fișierului și bucățile. Fiecare chunk este identificat prin câmpul său unic _id ObjectId. Fs.files servește drept document părinte. Câmpul files_id din documentul fs.chunks leagă chunk-ul de părintele său.
În continuare este un exemplu de document al colecției fs.files –
{ "filename": "test.txt", "chunkSize": NumberInt(261120), "uploadDate": ISODate("2014-04-13T11:32:33.557Z"), "md5": "7b762939321e146569b07f72c62cca4f", "length": NumberInt(646)}
Documentul specifică numele fișierului, dimensiunea chunk-ului, data încărcării și lungimea.
În continuare este un exemplu de document al documentului fs.chunks –
{ "files_id": ObjectId("534a75d19f54bfec8a2fe44b"), "n": NumberInt(0), "data": "Mongo Binary Data"}
Adaugarea de fișiere în GridFS
Acum, vom stoca un fișier mp3 folosind GridFS folosind comanda put. Pentru aceasta, vom folosi utilitarul mongofiles.exe prezent în dosarul bin din dosarul de instalare MongoDB.
Deschideți promptul de comandă, navigați la mongofiles.exe din dosarul bin din dosarul de instalare MongoDB și tastați următorul cod –
>mongofiles.exe -d gridfs put song.mp3
Aici, gridfs este numele bazei de date în care va fi stocat fișierul. În cazul în care baza de date nu este prezentă, MongoDB va crea automat un nou document din mers. Song.mp3 este numele fișierului încărcat. Pentru a vedea documentul fișierului în baza de date, puteți utiliza interogarea find –
>db.fs.files.find()
Comanda de mai sus a returnat următorul document –
{ _id: ObjectId('534a811bf8b4aa4d33fdf94d'), filename: "song.mp3", chunkSize: 261120, uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41", length: 10401959 }
Puteți vedea, de asemenea, toate chunks prezente în fs.chunks collection referitoare la fișierul stocat cu următorul cod, folosind ID-ul documentului returnat în interogarea anterioară –
>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})
În cazul meu, interogarea a returnat 40 de documente, ceea ce înseamnă că întregul document mp3 a fost împărțit în 40 de bucăți de date.
.