天天看點

GridFS簡介

\1. 簡介

​ GridFS是MongoDB中存儲和查詢超過BSON檔案大小限制(16M)的規範,不像BSON檔案那樣在一個單獨的文檔中存儲檔案,GridFS将檔案分成多個塊,每個塊作為一個單獨的文檔。預設情況下,每個GridFS塊是255kB,意味着除了最後一個塊之外(根據剩餘的檔案大小),文檔被分成多個255kB大小的塊存儲。

​ GridFS使用兩個集合儲存資料,一個集合存儲檔案塊,另外一個存儲檔案中繼資料。

​ 當從GridFS中擷取檔案時,MongoDB的驅動程式負責将多個塊組裝成完整檔案,你可以通過GridFS進行範圍查詢,可以通路檔案的任意部分(例如跳到視訊檔案或者音頻檔案的任意位置)。

​ 無論是超過16M的檔案和其他檔案,隻要存在通路時不想加載整個檔案的場景存在,GridFS就有幫助。

\2. 應用場景

​ 在MongoDB中,使用GridFS存儲超過16M的檔案(BSON檔案不能超過16M)。在某些情況下,MongoDB存儲大檔案會比作業系統的檔案系統更高效:

​ \1. 如果你的檔案系統限制目錄下檔案的個數,可以使用MongoDB在目錄下存儲任意多的檔案。

​ \2. 通路大資料檔案時,不想一次加載而是分段通路。

​ \3. 在多個系統間實作檔案和中繼資料同步。

​ 對檔案進行原子更新時,MongoDB不适合,不能支援對檔案多個塊更新操作的原子性;如果确有需要,也可以通過在中繼資料中指定目前版本來變通實作。

​ 如果你的檔案都小于16M,應該考慮使用每個檔案存一個獨立文檔的方式來取代GridFS,可以使用BinData類型來存儲二進制資料(也可以使用GridFS,需要修改chunk大小,避免小檔案被拆分,需要進行測試和比較性能)。

\3. 存儲管理

MongodB使用兩個集合來存儲GridFS檔案,一個是fs.files,另一個是fs.chunks。

​ fs.files這個集合中存儲的是每一個上傳到資料庫的文檔的資訊。

​ fs.chunks這個集合存儲的是上傳檔案的内容。一個chunk相當于一個文檔(大檔案被拆分成多個有序的chunk)。

​ GridFS中的bucket這個概念指代的是fs.files和fs.chunks的組合。

抟扶搖而上者九萬裡