它是mongodb的一個子模塊,使用GridFS可以基於mongodb來持久存儲文件.並且支持分布式應用(文件分布存儲和讀取).GridFS是mongodb中用戶存儲大對象的工具,對於mongodb,BSON格式的數據(文檔)存儲有尺寸限制,最大為16M.但是在實際系統開發中,經常會有上傳圖片或者文件的功能,這些文件可能尺寸會很大..我們可以借用Gridfs來輔助實現這些文件的管理.
Mongo GFS的文件表是由 表名.files和 表名.chunks 構成,前者是文件信息構成,后者是文件的內容,兩者通過_id與files_id建立關聯。
GridFS會將大文件對象分割成多個小的chunk(文件片段),一般為256k/個,每個chunk將作為mongodb的一個文檔(document)被存儲在chunks集合中..gridfs模塊會為每個文件創建chunks和files信息.每個文件的實際內容被存在chunks(二進制數據)中,和文件有關的meta數據(filename,content_type,還有用戶自定義的屬性)將會被存在files集合中.files集合中的文檔就是BSON格式,可以使用mongodb的索引等等特性,當然可以對files文檔做數據分析。
使用場景:如果你的系統有如下情景
1) 有大量的上傳圖片(用戶上傳或者系統本身的文件發布等)
2) 文件的量級處於飛速增長,有可能打到單機操作系統自己的文件系統的查詢性能瓶頸,甚至超過單機硬盤的擴容范圍.
3) 文件的備份(不適用gridfs這種三方也可以做,但是不盡方便),文件系統訪問的故障轉移和修復..
4) 文件的索引,存儲除文件本身以外還需要關聯更多的元數據信息(比如,不僅僅存儲文件,還要保存一些文件的發布式作者/發布時間/文件tag屬性等等自定義信息)並且需要索引的...
5) 基於4),對文件的分類模糊,如果采用操作系統的文件系統,文件夾分類關系混亂或者無法分類時..
6) 當前系統是基於web的,對圖片的訪問根據url了規則路由的..(普通文件系統也可以)
7) 文件尺寸較小,而且眾多,且文件有可能被遷移/刪除等..
下面是兩個PPT,對MongoDB的GridFS都做了介紹,包括了GridFS相對於傳統文件系統存儲,網絡文件系統存儲的優勢。雖然內容相似,但介紹方法各異。推薦給大家。
使用Mongodb存儲上傳物理文件並進行SQUID加速(基於aspx頁面)
http://www.oschina.net/question/12_29127