GridFS adalah abstraksi sistem file sederhana di atas MongoDB. Jika Anda terbiasa dengan Amazon S3, GridFS adalah abstraksi yang sangat mirip. Sekarang, mengapa database berorientasi dokumen seperti MongoDB menyediakan abstraksi lapisan file? Ternyata ada beberapa alasan yang sangat bagus:
-
Menyimpan konten file yang dibuat pengguna
Sejumlah besar aplikasi web memungkinkan pengguna mengunggah file. Secara historis, ketika bekerja dengan database relasional, file yang dibuat pengguna ini disimpan di sistem file yang terpisah dari database. Ini menciptakan sejumlah masalah. Bagaimana cara mereplikasi file ke semua server yang dibutuhkan? Bagaimana cara menghapus semua salinan saat file dihapus? Bagaimana cara membuat cadangan file untuk keamanan dan pemulihan bencana? GridFS memecahkan masalah ini bagi pengguna dengan menyimpan file bersama dengan database, dan Anda dapat memanfaatkan cadangan database Anda untuk membuat cadangan file Anda. Juga, karena replikasi MongoDB, salinan file Anda disimpan di setiap replika. Menghapus file semudah menghapus objek dalam database.
-
Mengakses sebagian konten file
Saat file diunggah ke GridFS, file akan dibagi menjadi 256k dan disimpan secara terpisah. Jadi, ketika Anda hanya perlu membaca kisaran byte tertentu dari file, hanya potongan tersebut yang dibawa ke memori dan bukan keseluruhan file. Ini sangat berguna saat menangani konten media besar yang perlu dibaca atau diedit secara selektif.
-
Menyimpan dokumen lebih dari 16MB di MongoDB
Secara default, ukuran dokumen MongoDB dibatasi hingga 16MB. Jadi, jika Anda memiliki dokumen yang lebih besar dari 16 MB, Anda dapat menyimpannya menggunakan GridFS.
-
Mengatasi batasan sistem file
Jika Anda menyimpan banyak file, Anda harus mempertimbangkan batasan sistem file seperti jumlah maksimum file/direktori, dll. Dengan GridFS, Anda tidak perlu' t perlu khawatir tentang batas sistem file. Selain itu, dengan sharding GridFS dan MongoDB, Anda dapat mendistribusikan file Anda ke berbagai server tanpa meningkatkan kerumitan operasional secara signifikan.
GridFS – Di balik layar
GridFS menggunakan dua koleksi untuk menyimpan data:
> tampilkan koleksi;fs.chunksfs.filessystem.indexes>
Koleksi fs.files berisi metadata tentang file, dan koleksi fs.chunks menyimpan 256 ribu potongan yang sebenarnya. Jika Anda memiliki koleksi sharding, potongan didistribusikan ke server yang berbeda dan Anda mungkin mendapatkan kinerja yang lebih baik daripada sistem file!
> db.fs.files.findOne();{"_id" :ObjectId("530cf1bf96038f5cb6df5f39"),"namafile" :"./conn.log","chunkSize" :262144,"uploadDate" :ISODate("2014-02 -25T19:40:47.321Z"),"md5" :"6515e95f8bb161f6435b130a0e587ccd","length" :1644981}>
MongoDB juga membuat indeks gabungan pada files_id dan nomor potongan untuk membantu mengakses potongan dengan cepat:
> 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"}]>Contoh MongoDB GridFS
MongoDB memiliki utilitas bawaan yang disebut "mongfiles" untuk membantu menjalankan skenario GridFS. Silakan merujuk ke dokumentasi driver Anda tentang cara menggunakan GridFS dengan driver Anda.
Letakkan#mongfiles -h -u -p --db files put /conn.logconnected to:127.0.0.1added file:{ _id:ObjectId('530cf1009710ca8fd47d7d5d'), nama file:"./conn.log", chunkSize :262144, uploadDate:new Date(1393357057021), md5:"6515e95f8bb161f6435b130a0e587ccd", panjangnya:1644981 }selesai!Get#mongfiles -h -u -p --db files get /conn.logconnected to:127.0.0.1done tulis ke:./conn.logList# mongofiles -h -u -p daftar terhubung ke:127.0.0.1/conn.log 1644981Hapus[root@ip-10-198-25-43 tmp]# mongofiles -h -u -p --db files hapus /conn.logterhubung ke:127.0.0.1done!Modul GridFS
Jika Anda ingin menyajikan data file yang disimpan di MongoDB langsung dari server web atau sistem file Anda, ada beberapa modul plugin GridFS yang tersedia:
- GridFS-Fuse – Plugin GridFS ke dalam sistem file
- GridFS-Nginx - Plugin ke server file GridFS langsung dari Nginx
Batasan GridFS
-
Set Kerja
Menyajikan file bersama dengan konten database Anda dapat secara signifikan mengubah set kerja memori Anda. Jika Anda tidak ingin mengganggu perangkat kerja Anda, mungkin yang terbaik adalah menyajikan file Anda dari server MongoDB yang berbeda.
-
Kinerja
Kinerja penyajian file akan lebih lambat daripada penyajian file secara native dari server web dan sistem file Anda. Namun, manfaat manajemen tambahan mungkin sepadan dengan perlambatannya.
-
Pembaruan atom
GridFS tidak menyediakan cara untuk melakukan pembaruan atom pada file. Jika skenario ini diperlukan, Anda harus memelihara beberapa versi file Anda dan memilih versi yang tepat.