GridFS是一種將大型檔案儲存在MongoDB的檔案
阿新 • • 發佈:2019-01-22
預設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中出現垃圾資料。這些垃圾資料可以定期清理掉。