2016-08-28 3 views
2

MongoDB Gridfs sagt der große Vorteil ist, dass große Datei in Stücke aufgeteilt, und dann müssen Sie nicht die gesamte Datei in den Speicher laden, wenn Sie nur einen Teil der Datei sehen wollen. Aber meine Verwirrung ist, dass, obwohl ich eine große Datei von der lokalen Festplatte öffne, ich einfach skip() API verwenden kann, um nur einen Teil der Datei zu laden, die ich wollte. Ich muss nicht die gesamte Datei laden. Wie kommt es, dass MongoDB sagt, dass das der Vorteil ist?verwirrt über den Vorteil von MongoDB Gridfs

Antwort

2

Auch wenn die Methode cursor.skip() nicht die gesamte Datei zurückgibt, muss sie in den Speicher geladen werden. Es erfordert, dass der Server vom Anfang der Auflistung oder des Index ausgeht, um die Position "Offset" oder "Skip" zu erhalten, bevor mit der Rückgabe der Ergebnisse begonnen wird (wirkt sich nicht sehr auf die Größe der Sammlung aus). Mit zunehmendem Offset wird cursor.skip() langsamer und CPU-intensiver. Bei größeren Sammlungen kann cursor.skip() IO gebunden werden.

Anstatt jedoch eine Datei in einem einzelnen Dokument zu speichern, teilt GridFS die Datei in Teile oder Chunks auf und speichert jeden Chunk als separates Dokument. So ermöglicht der Benutzer den Zugriff auf Informationen aus beliebigen Abschnitten von Dateien, z. B. "überspringen" in der Mitte der Datei (mit ID oder Dateiname) ohne CPU-intensiv.

Offizielle Dokumentationen: 1. Skip 2. GridFS.

Update:

Worüber Peter Brittain vorschlägt:

Es gibt viele Dinge zu berücksichtigen (Infrastruktur, vorausgesetzt Nutzungsstatistiken, die Dateigröße etc.), während man zwischen Dateisystem und GridFS wählen.

Zum Beispiel: Wenn Sie Millionen von Dateien haben, GridFS zu Griff neigt es besser, auch müssen Sie die Dateisystemeinschränkungen wie die maximale Anzahl von Dateien/Verzeichnis usw.

Vielleicht möchten Sie prüfen, betrachten Durch diesen Artikel gehen: Why use GridFS over ordinary Filesystem Storage?

+0

Dies erklärt, warum Sie GridFS anstelle eines normalen BinData-Objekts verwenden möchten. Die Frage ist jedoch, warum GridFS besser ist als die lokale Festplatte. Insbesondere glaube ich nicht, dass es sich hier um einen Cursorsprung handelt, sondern eher [fseek] (http://man7.org/linux/man-pages/man3/fseek.3.html) oder gleichwertig ... –

+0

Antwort warum oder besser unter welchen Bedingungen GridFS ist besser als die lokale Festplatte. – DeGe

Verwandte Themen