MongoDB GridFS

GridFS wird zum Speichern und Abrufen von Dateien verwendet, die 16M überschreiten (das BSON-Dokumentlimit), wie z. B. Bilder, Audio, Video usw.

GridFS ist auch eine Art der Dateispeicherung, aber es speichert Dateien in MongoDB-Collections.

GridFS kann Dateien, die größer als 16M sind, effizienter speichern.

GridFS teilt große Dateiobjekte in mehrere kleine Chunks (Dateifragmente) auf, in der Regel jeweils 256k. Jeder Chunk wird als MongoDB-Dokument in der chunks-Collection gespeichert.

GridFS verwendet zwei Collections zum Speichern einer Datei: fs.files und fs.chunks.

Der eigentliche Inhalt jeder Datei wird in Chunks (Binärdaten) gespeichert, und dateibezogene Metadaten (Dateiname, content_type und benutzerdefinierte Attribute) werden in der files-Collection gespeichert.

Im Folgenden sehen Sie ein einfaches Dokument der fs.files-Collection:

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

Im Folgenden sehen Sie ein einfaches Dokument der fs.chunks-Collection:

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

Datei mit GridFS hinzufügen

Jetzt verwenden wir den GridFS-put-Befehl, um mp3-Dateien zu speichern. Rufen Sie das Tool mongofiles.exe im bin-Verzeichnis unter dem MongoDB-Installationsverzeichnis auf.

Öffnen Sie die Eingabeaufforderung, wechseln Sie in das bin-Verzeichnis des MongoDB-Installationsverzeichnisses, finden Sie mongofiles.exe und geben Sie den folgenden Code ein:

>mongofiles.exe -d gridfs put song.mp3

-d gridfsGeben Sie den Datenbanknamen zum Speichern der Datei an. Wenn die Datenbank nicht existiert, erstellt MongoDB sie automatisch. Wenn die Datenbank nicht existiert, erstellt MongoDB sie automatisch. Song.mp3 ist der Name der Audiodatei.

Verwenden Sie den folgenden Befehl, um die Dateidokumente in der Datenbank anzuzeigen:

>db.fs.files.find()

Nach Ausführung des obigen Befehls werden die folgenden Dokumentdaten zurückgegeben:

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

Wir können alle Chunks in der fs.chunks-Collection sehen. Nachfolgend erhalten wir den _id-Wert der Datei. Mit dieser _id können wir die Chunk-Daten abrufen:

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

Im obigen Beispiel hat die Abfrage Daten aus 40 Dokumenten zurückgegeben, was bedeutet, dass die MP3-Datei in 40 Chunks gespeichert ist.

Andere Erweiterungen