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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM