MongoDB GridFS——本質上是將一個文件分割為大小為256KB的chunks 每個chunk里會放md5標識 取文件的時候會將這些chunks合並為一個整體返回


MongoDB GridFS

GridFS 用於存儲和恢復那些超過16M(BSON文件限制)的文件(如:圖片、音頻、視頻等)。

GridFS 也是文件存儲的一種方式,但是它是存儲在MonoDB的集合中。

GridFS 可以更好的存儲大於16M的文件。

GridFS 會將大文件對象分割成多個小的chunk(文件片段),一般為256k/個,每個chunk將作為MongoDB的一個文檔(document)被存儲在chunks集合中。

 

GridFS 用兩個集合來存儲一個文件:fs.files與fs.chunks。

每個文件的實際內容被存在chunks(二進制數據)中,和文件有關的meta數據(filename,content_type,還有用戶自定義的屬性)將會被存在files集合中。

以下是簡單的 fs.files 集合文檔:

{ "filename": "test.txt", "chunkSize": NumberInt(261120), "uploadDate": ISODate("2014-04-13T11:32:33.557Z"), "md5": "7b762939321e146569b07f72c62cca4f", "length": NumberInt(646) }

以下是簡單的 fs.chunks 集合文檔:

{ "files_id": ObjectId("534a75d19f54bfec8a2fe44b"), "n": NumberInt(0), "data": "Mongo Binary Data" }

GridFS 添加文件

現在我們使用 GridFS 的 put 命令來存儲 mp3 文件。 調用 MongoDB 安裝目錄下bin的 mongofiles.exe工具。

打開命令提示符,進入到MongoDB的安裝目錄的bin目錄中,找到mongofiles.exe,並輸入下面的代碼:

>mongofiles.exe -d gridfs put song.mp3

GridFS 是存儲文件的數據名稱。如果不存在該數據庫,MongoDB會自動創建。Song.mp3 是音頻文件名。

 

使用以下命令來查看數據庫中文件的文檔:

>db.fs.files.find()

以上命令執行后返回以下文檔數據:

{ _id: ObjectId('534a811bf8b4aa4d33fdf94d'), filename: "song.mp3", chunkSize: 261120, uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41", length: 10401959 }

我們可以看到 fs.chunks 集合中所有的區塊,以下我們得到了文件的 _id 值,我們可以根據這個 _id 獲取區塊(chunk)的數據:

>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})

以上實例中,查詢返回了 40 個文檔的數據,意味着mp3文件被存儲在40個區塊中。


免責聲明!

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



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