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的組合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章