GridFS je jednoduchá abstrakce souborového systému nad MongoDB. Pokud znáte Amazon S3, GridFS je velmi podobná abstrakce. Proč nyní databáze orientovaná na dokumenty, jako je MongoDB, poskytuje abstrakci souborové vrstvy? Ukázalo se, že existuje několik velmi dobrých důvodů:
-
Ukládání obsahu souboru vytvořeného uživatelem
Velký počet webových aplikací umožňuje uživatelům nahrávat soubory. Historicky se při práci s relačními databázemi tyto uživatelem generované soubory ukládají do systému souborů odděleně od databáze. To vytváří řadu problémů. Jak replikovat soubory na všechny potřebné servery? Jak odstranit všechny kopie, když je soubor odstraněn? Jak zálohovat soubory pro bezpečnost a obnovu po havárii? GridFS řeší tyto problémy za uživatele tím, že ukládá soubory spolu s databází a můžete využít zálohu databáze k zálohování souborů. Také kvůli replikaci MongoDB je kopie vašich souborů uložena v každé replice. Smazání souboru je stejně snadné jako smazání objektu v databázi.
-
Přístup k částem obsahu souboru
Když je soubor nahrán do GridFS, je rozdělen na části po 256 kB a uložen samostatně. Když tedy potřebujete přečíst pouze určitý rozsah bajtů souboru, do paměti se přenesou pouze tyto části, nikoli celý soubor. To je mimořádně užitečné při práci s velkým mediálním obsahem, který je třeba selektivně číst nebo upravovat.
-
Ukládání dokumentů větších než 16 MB v MongoDB
Ve výchozím nastavení je velikost dokumentu MongoDB omezena na 16 MB. Pokud tedy máte dokumenty větší než 16 MB, můžete je uložit pomocí GridFS.
-
Překonávání omezení systému souborů
Pokud ukládáte velké množství souborů, budete muset vzít v úvahu omezení systému souborů, jako je maximální počet souborů/adresářů atd. S GridFS nemusíte nemusíte se starat o limity souborového systému. S GridFS a MongoDB sharding také můžete distribuovat své soubory na různé servery, aniž byste výrazně zvýšili provozní složitost.
GridFS – ze zákulisí
GridFS používá k ukládání dat dvě kolekce:
> zobrazit sbírky;fs.chunksfs.filessystem.indexes>
Kolekce fs.files obsahují metadata o souborech a kolekce fs.chunks ukládají skutečných 256k bloků. Pokud máte rozdělenou sbírku, jsou části distribuovány na různé servery a můžete dosáhnout lepšího výkonu než souborový systém!
> db.fs.files.findOne();{"_id" :ObjectId("530cf1bf96038f5cb6df5f39"),"název souboru" :"./conn.log","chunkSize" :262144,"uploadDate" :ISODate("2014) -25T19:40:47.321Z"),"md5" :"6515e95f8bb161f6435b130a0e587ccd","length" :1644981}>
MongoDB také vytváří složený index pro files_id a číslo bloku, aby pomohl rychle získat přístup k blokům:
> 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"}]>Příklady MongoDB GridFS
MongoDB má vestavěnou utilitu nazvanou „mongofiles“, která pomáhá procvičovat scénáře GridFS. Informace o použití GridFS s vaším ovladačem naleznete v dokumentaci k ovladači.
Put#mongofiles -h -u -p --db soubory vložit /conn.logpřipojeno k:127.0.0.1přidaný soubor:{ _id:ObjectId('530cf1009710ca8fd47d7d5d'), název souboru:"./conn.log", chunkSize :262144, uploadDate:new Date(1393357057021), md5:"6515e95f8bb161f6435b130a0e587ccd", délka:1644981 }done!Getconnect#mongofiles -hlog -u -conn.0.db files ./conn.logList# mongofiles -h -u -p listpřipojeno k:127.0.0.1/conn.log 1644981Delete[root@ip-10-198-25-43 tmp]# mongofiles -h -u -p --db souborů delete /conn.logconnected to:127.0.0.1done!Moduly GridFS
Pokud byste chtěli obsluhovat data souborů uložená v MongoDB přímo z vašeho webového serveru nebo souborového systému, je k dispozici několik modulů zásuvných modulů GridFS:
- GridFS-Fuse – Plugin GridFS do souborového systému
- GridFS-Nginx – Plugin pro serverové soubory GridFS přímo z Nginx
Omezení GridFS
-
Pracovní sada
Poskytování souborů spolu s obsahem vaší databáze může výrazně narušit vaši paměť. Pokud nechcete rušit vaši pracovní sadu, může být nejlepší poskytnout vaše soubory z jiného serveru MongoDB.
-
Výkon
Výkon poskytování souborů bude pomalejší než nativní poskytování souboru z vašeho webového serveru a souborového systému. Přidané výhody správy však mohou stát za zpomalení.
-
Aktuální aktualizace
GridFS neposkytuje způsob, jak provést atomickou aktualizaci souboru. Pokud je tento scénář nezbytný, budete muset udržovat více verzí souborů a vybrat správnou verzi.