MongoDB speichert Daten standardmäßig als BSON Dokumente. Ein großer Vorteil von BSON (Binary JSON) ist es, daß auch Binärdaten abgespeichert werden können. Aus diesem Grund ist es in MongoDB auch möglich Dateien beliebiger Größe abzulegen.
MongoDB hat dafür ein eigenes Konstrukt mit dem Namen GridFS geschaffen. Die Dateien werden dabei auf zwei Collections aufgeteilt. Die Metadaten-Collection enthält alle Informationen zu den Dateien. In der Chunks-Collection wird die, in Chunks zerlegte, Datei selbst abgelegt.
Der Einsatz von GridFS ist vor allen dann sinnvoll wenn
- man mehr Dateien hat, als das Dateisystem verwalten kann
- man nur auf Teile einer sehr großen Datei zugreifen möchte, ohne diese komplett zu laden
- man Dateien, und deren Meta-Daten, über mehrere Standorte synchronisieren möchte
Man sollte GridFS nicht einsetzen wenn
- man viele atomare Updates auf sehr große Dokumente macht
- die Dokumente kleiner als 16 MB sind
GridFS kann nur über einen Datenbanktreiber angesprochen werden und nicht direkt auf der Konsole (siehe Grafik). MongoDB bringt aber das Hilfsprogramm "mongofiles" mit um Dateien nach GridFS zu laden. Der Treiber ist für das Zerlegen und wieder zusammensetzen der Chunks zuständig.
Beispiel für den Befehlsaufruf
mongofiles -d gridfs put Nyan_Cat-15_Minutes.mp3
Ist die Datei dann in GridFS geladen kann man in der Mongo Konsole die einzelnen Chunks sehen und kann auch darauf zugreifen.
Beispiel für den Zugriff
db.fs.files.find().pretty()
db.fs.chunks.find({files_id:ObjectId(object_id)})
db.fs.chunks.find({files_id:ObjectId(object_id)}).count()