MongoDB: GridFS-Tutorial

In diesem GridFS-Tutorial wird erläutert, wie Sie GridFS zum Speichern größerer Dateien in MongoDB verwenden und wann Sie GridFS in MongoDB verwenden. In diesem GridFS-Tutorial wird eine Bilddatei mit einer Größe von 16,5 MB gespeichert, um ein Beispiel zu veranschaulichen.

MongoDB begrenzt die Größe des Dokuments in einer Sammlung auf 16 MB. Realistisch gesehen sollte dies für Daten ausreichen, bei denen es sich um eine Gruppe von Schlüssel-Wert-Paaren handelt. Wenn Sie jedoch Dateien zusammen mit diesen Schlüssel-Wert-Paaren speichern möchten, stellen wir häufig fest, dass die Obergrenze von 16 MB eine Einschränkung darstellt. Um dies zu überwinden, stellt MongoDB eine API namens bereit GridFS Hier können wir Dateien mit einer Größe von mehr als 16 MB zusammen mit allen Metadaten im Zusammenhang mit der Datei speichern.

In diesem Beitrag werden wir uns ansehen, wie wir mithilfe von GridFS und dem MongoDB-Java-Treiber Dateien von und nach MongoDB speichern und abrufen können. Schauen wir uns zunächst die Grundlagen von GridFS an.

GridFS-Tutorial

Gitter

Grundlagen von GridFS

GridFS speichert die Dateien in Form einer Reihe von Blöcken, wobei die Größe jedes Blocks standardmäßig maximal 255 KB betragen kann. Es gibt nämlich zwei Sammlungen files Und chunks. Der files Die Sammlung speichert die Metadaten der Datei und chunks Die Sammlung speichert die Teile der Dateien, wobei jeder Teil über verfügt file_id Und n Wo file_id ist der _id des übergeordneten Blocks und n ist die Chunk-Nummer.

Die Sammlungen files Und chunks werden unter einem Namensraum gespeichert. Standardmäßig ist der Namespace fs. Wir können den Namespace überschreiben und unseren eigenen bereitstellen.

Dateien mit GridFS in Mongodb speichern

Schauen wir uns zunächst das Speichern der Datei an Mongodb mit GridFS. Hierfür werde ich ein Bild mit einer Größe von 16,5 MB in Betracht ziehen.

  • Lesen Sie auch: Node.js + MongoDB – Durchführen von CRUD-Operationen

Notiz: Sie können jede große Bilddatei für Ihre Verwendung herunterladen.
Der folgende Code speichert das Bild an einem bestimmten Ort Mongodb mit GridFS:

import java.io.File;
import java.io.IOException;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSInputFile;

public class GridFsSaveDemo {

  public static void main(String[] args) throws IOException {
    MongoClient mongo = new MongoClient("localhost", 27017);
    DB db = mongo.getDB("filesdb");

    //Location of file to be saved
    String imageLocation = "C:/Users/Mohamed/Pictures/image2.jpg";

    //Create instance of GridFS implementation
    GridFS gridFs = new GridFS(db);

    //Create a file entry for the image file
    GridFSInputFile gridFsInputFile = gridFs.createFile(new File(imageLocation));

    //Set a name on GridFS entry
    gridFsInputFile.setFilename("image1");

    //Save the file to MongoDB
    gridFsInputFile.save();
  }
}

Lasst uns öffnen mongo Shell, um zu überprüfen, ob die obige Datei gespeichert wurde:

> use filesdb
switched to db filesdb
> show collections
fs.chunks
fs.files
system.indexes
> db.fs.chunks.find().count()
67
> db.fs.files.find().pretty()
{
        "_id" : ObjectId("55e3279f355311259428f3a9"),
        "filename" : "image1",
        "aliases" : null,
        "chunkSize" : NumberLong(261120),
        "uploadDate" : ISODate("2015-08-30T15:56:15.017Z"),
        "length" : NumberLong(17315594),
        "contentType" : null,
        "md5" : "a6bc0171f7beff8036715dd1d022c1a0"
}

Sie können oben erkennen, dass die Datei in 67 gespeicherte Blöcke aufgeteilt wurde fs.chunks Sammlungs- und Dateimetadaten, z. B. die feste Größe, der Dateiname und das Upload-Datum, in denen gespeichert ist fs.files Sammlung.

Lesen von Dateien aus MongoDB mit GridFS

Der Code zum Lesen des oben gespeicherten Bildes ist unten angegeben:

import java.io.IOException;
import com.mongodb.DB;
import com.mongodb.MongoClient;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;

public class GridFsReadDemo {
  public static void main(String[] args) throws IOException {
    MongoClient mongo = new MongoClient("localhost", 27017);
    DB db = mongo.getDB("filesdb");

    //Create instance of GridFS implementation
    GridFS gridFs = new GridFS(db);

    //Find the image with the name image1 using GridFS API
    GridFSDBFile outputImageFile = gridFs.findOne("image1");

    //Get the number of chunks
    System.out.println("Total Chunks: " + outputImageFile.numChunks());

    //Location of the image read from MongoDB to be written
    String imageLocation = "C:/Users/Mohamed/Pictures/mongoImage.jpg";
    outputImageFile.writeTo(imageLocation);
    mongo.close();

  }
}

Der obige Code fragt MongoDB ab, um die Bildblöcke mithilfe des Bildnamens zu finden. Und schreibt dann diese Bildblöcke in das Dateisystem.

  • Lesen Sie auch: Spring Boot: RESTful API mit Spring Boot und MongoDB

GridFS macht es sehr einfach, Dateien von MongoDB zu speichern und abzurufen. Wir können damit nicht nur Dateien speichern, die größer als 16 MB sind, sondern auch Dateien, die kleiner als 16 MB sind.

Ich hoffe, dieses GridFS-Tutorial hat Ihnen geholfen zu verstehen, wie Sie Dateien mit einer Größe von mehr als 16 MB und eine Bilddatei in der MongoDB-Datenbank speichern.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen