1. 程式人生 > >GridFS是一種將大型檔案儲存在MongoDB的檔案

GridFS是一種將大型檔案儲存在MongoDB的檔案

預設chunk的大小是256K: public static final int DEFAULT_CHUNKSIZE = 256 * 1024; 寫入: 如果檔案大於chunksize,則把檔案分割成多個chunk,再把這些chunk儲存到fs.chunks中,最後再把檔案資訊存入到fs.files中。 讀取: 先據查詢的條件,在fs.files中找到一個合適的記錄,得到“_id”的值,再據這個值到fs.chunks中查詢所有“files_id”為“_id”的chunk,並按“n”排序,最後依次讀取chunk中“data”物件的內容,還原成原來的檔案。 自定義Gridfs的hash函式: 儘管從理論上,無論用什麼hash函式,都有可能出現hash值相同,但內容不相同的檔案,但是對於GridFS預設使用的md5演算法,目前已出現長度和md5值都相同但內容不一樣的檔案。 如果想要自已改用其它hash演算法,可以從驅動入手。因為GridFS在MongoDB中實際也只是兩個普通的集合,所以完全可以自已修改驅動,替換下hash演算法即可。 注意事項:
1. GridFS不自動處理md5相同的檔案,對於md5相同的檔案,如果想在GridFS中只有一個儲存,要使用者自已處理。Md5值的計算由客戶端完成。 2. 因為GridFS在上傳檔案過程中是先把檔案資料儲存到fs.chunks,最後再把檔案資訊儲存到fs.files中,所以如果在上傳檔案過程中失敗,有可能在fs.chunks中出現垃圾資料。這些垃圾資料可以定期清理掉。