sql >> Database >  >> NoSQL >> MongoDB

Wanneer gebruik je GridFS op MongoDB?

GridFS is een eenvoudige bestandssysteemabstractie bovenop MongoDB. Als u bekend bent met Amazon S3, is GridFS een zeer vergelijkbare abstractie. Waarom biedt een documentgeoriënteerde database zoals MongoDB een abstractie van bestandslagen? Blijkt dat er een aantal zeer goede redenen zijn:

  1. Door gebruikers gegenereerde bestandsinhoud opslaan

    Een groot aantal webapplicaties stelt gebruikers in staat om bestanden te uploaden. Historisch gezien worden deze door gebruikers gegenereerde bestanden bij het werken met relationele databases apart van de database op het bestandssysteem opgeslagen. Dit zorgt voor een aantal problemen. Hoe de bestanden te repliceren naar alle benodigde servers? Hoe verwijder ik alle kopieën wanneer het bestand is verwijderd? Hoe maak je een back-up van de bestanden voor veiligheid en noodherstel? GridFS lost deze problemen voor de gebruiker op door de bestanden samen met de database op te slaan, en u kunt uw databaseback-up gebruiken om een ​​back-up van uw bestanden te maken. Dankzij MongoDB-replicatie wordt er ook een kopie van uw bestanden in elke replica opgeslagen. Het verwijderen van het bestand is net zo eenvoudig als het verwijderen van een object in de database.

  2. Toegang tot delen van bestandsinhoud

    Wanneer een bestand wordt geüpload naar GridFS, wordt het bestand opgesplitst in blokken van 256k en apart opgeslagen. Dus als u slechts een bepaald bereik van bytes van het bestand hoeft te lezen, worden alleen die chunks in het geheugen geplaatst en niet het hele bestand. Dit is uitermate handig bij het omgaan met grote media-inhoud die selectief moet worden gelezen of bewerkt.

  3. Documenten groter dan 16 MB opslaan in MongoDB

    Standaard is de MongoDB-documentgrootte beperkt tot 16 MB. Dus als u documenten heeft die groter zijn dan 16 MB, kunt u deze opslaan met GridFS.

  4. Beperkingen van het bestandssysteem overwinnen

    Als u een groot aantal bestanden opslaat, moet u rekening houden met beperkingen van het bestandssysteem, zoals het maximale aantal bestanden/directory, enz. Met GridFS hoeft u dat niet te doen. U hoeft zich geen zorgen te maken over de limieten van het bestandssysteem. Met GridFS en MongoDB sharding kunt u uw bestanden over verschillende servers distribueren zonder de operationele complexiteit aanzienlijk te vergroten.

GridFS – Achter de schermen

GridFS gebruikt twee verzamelingen om de gegevens op te slaan:

> show collections;
fs.chunks
fs.files
system.indexes
>

De fs.files collecties bevatten metadata over de bestanden, en de fs.chunks collecties slaan de daadwerkelijke 256k chunks op. Als je een shard-verzameling hebt, worden de chunks verdeeld over verschillende servers en krijg je mogelijk betere prestaties dan een bestandssysteem!

> db.fs.files.findOne();
{
"_id" : ObjectId("530cf1bf96038f5cb6df5f39"),
"filename" : "./conn.log",
"chunkSize" : 262144,
"uploadDate" : ISODate("2014-02-25T19:40:47.321Z"),
"md5" : "6515e95f8bb161f6435b130a0e587ccd",
"length" : 1644981
}
>

MongoDB maakt ook een samengestelde index op files_id en het chunknummer om snel toegang te krijgen tot de chunks:

> db.fs.chunks.getIndexes();
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "files.fs.chunks",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"files_id" : 1,
"n" : 1
},
"ns" : "files.fs.chunks",
"name" : "files_id_1_n_1"
}
]
>

MongoDB GridFS-voorbeelden

MongoDB heeft een ingebouwd hulpprogramma genaamd "mongofiles" om te helpen bij het uitvoeren van de GridFS-scenario's. Raadpleeg de documentatie bij uw stuurprogramma voor informatie over het gebruik van GridFS met uw stuurprogramma.

Put
#mongofiles -h  -u  -p  --db files put /conn.log
connected to: 127.0.0.1
added file: { _id: ObjectId('530cf1009710ca8fd47d7d5d'), filename: "./conn.log", chunkSize: 262144, uploadDate: new Date(1393357057021), md5: "6515e95f8bb161f6435b130a0e587ccd", length: 1644981 }
done!

Get
#mongofiles -h  -u  -p  --db files get /conn.log
connected to: 127.0.0.1
done write to: ./conn.log

List
# mongofiles -h  -u  -p  list
connected to: 127.0.0.1
/conn.log 1644981

Delete
[root@ip-10-198-25-43 tmp]# mongofiles -h  -u  -p  --db files delete /conn.log
connected to: 127.0.0.1
done!

GridFS-modules

Als u de bestandsgegevens die zijn opgeslagen in MongoDB rechtstreeks vanaf uw webserver of bestandssysteem wilt aanbieden, zijn er verschillende GridFS-plug-inmodules beschikbaar:

  • GridFS-Fuse – Plug-in GridFS in het bestandssysteem
  • GridFS-Nginx - Plug-in voor server GridFS-bestanden rechtstreeks vanuit Nginx

GridFS-beperkingen

  • Werkset

    Als u bestanden samen met uw database-inhoud presenteert, kan uw geheugenwerkset aanzienlijk worden omgegooid. Als u uw werkset niet wilt verstoren, kunt u het beste uw bestanden vanaf een andere MongoDB-server aanbieden.

  • Prestaties

    De prestaties van de bestandsweergave zullen langzamer zijn dan de native weergave van het bestand vanaf je webserver en bestandssysteem. De extra beheervoordelen kunnen de vertraging echter waard zijn.

  • Atoomupdate

    GridFS biedt geen manier om een ​​atomaire update van een bestand uit te voeren. Als dit scenario nodig is, moet je meerdere versies van je bestanden onderhouden en de juiste versie kiezen.


  1. Hoe kan ik redis-server stoppen?

  2. Mongoose:pad voor validatiefout is vereist

  3. Koppelen en maken van MongoDB-joins met SQL:deel 3

  4. Ontdek of iemand in de komende 30 dagen jarig is met mongo