mongoDB--GridFS簡介
前言 :GridFS從名字來看,就明白是一個文件系統,它是mongodb的一個子模塊,使用GridFS可以基于mongodb來持久存儲文件.并且支持分布式應用(文件分布存儲和讀取).
使用場景:如果你的系統有如下情景
1) 有大量的上傳圖片(用戶上傳或者系統本身的文件發布等)
2) 文件的量級處于飛速增長,有可能打到單機操作系統自己的文件系統的查詢性能瓶頸,甚至超過單機硬盤的擴容范圍.
3) 文件的備份(不適用gridfs這種三方也可以做,但是不盡方便),文件系統訪問的故障轉移和修復..
4) 文件的索引,存儲除文件本身以外還需要關聯更多的元數據信息(比如,不僅僅存儲文件,還要保存一些文件的發布式作者/發布時間/文件tag屬性等等自定義信息)并且需要索引的...
5) 基于4),對文件的分類模糊,如果采用操作系統的文件系統,文件夾分類關系混亂或者無法分類時..
6) 當前系統是基于web的,對圖片的訪問根據url了規則路由的..(普通文件系統也可以)
7) 文件尺寸較小,而且眾多,且文件有可能被遷移/刪除等..
GridFS和其他分布式文件系統相比,并沒有什么特殊的地方....如果有,那就是它和mongodb有一腿...
GridFS是mongodb中用戶存儲大對象的工具,對于mongodb,BSON格式的數據(文檔)存儲有尺寸限制,最大為16M.但是在實際系統開發中,經常會有上傳圖片或者文件的功能,這些文件可能尺寸會很大..我們可以借用Gridfs來輔助實現這些文件的管理.
GridFS會將大文件對象分割成多個小的chunk(文件片段),一般為256k/個,每個chunk將作為mongodb的一個文檔 (document)被存儲在chunks集合中..gridfs模塊會為每個文件創建chunks和files信息.每個文件的實際內容被存在 chunks(二進制數據)中,和文件有關的meta數據(filename,content_type,還有用戶自定義的屬性)將會被存在files集合中.files集合中的文檔就是BSON格式,可以使用mongodb的索引等等特性,當然可以對files文檔做數據分析..
java中使用GridFS存儲文件的代碼樣例:
DB db = fsMongoDB.getDB("img");//Mongodb DB對象,將文件存放在哪個DB中 GridFS gridFS = new GridFS(db,"s");//獲取一個gridFS的對象,同時指定collection GridFSInputFile file = gridFS.createFile(fileItem.getInputStream());//創建gridfs文件 file.setFilename(fileItem.getFileName());//指定唯一文件名稱 file.save();//保存
存儲的文件,可以通過mongo的指令去查看..
對于GridFS文件的web訪問方式,大家可以搜索一下Gridfs + nginx,既可獲取相應的信息..