MongoDB(八)Mongodb——GridFS儲存

來源:互聯網
上載者:User

標籤:string   cli   highlight   實現   script   sni   分割   sse   tar   


 

     mongoDB的文檔以BSON格式儲存,支援二進位的資料類型,當我們把二進位格式的資料直接儲存到mongoDB的文檔中。但是當檔案太大時,例片和視頻等檔案,每個文檔的長度是有限的,於是mongoDb會提供了一種處理大檔案的規範--GridFS。

GridFS實現原理

     在GridFS資料庫中,預設使用fs.chunks 和fs.files來隱藏檔,其中fs.files集合存放檔案的資訊,fs.chunks存放檔案的資料,一個fs.files集合中的一條記錄內容如下,即一個file資訊如下所示:

 

[sql] view plain copy print?
  1. <pre name="code" class="javascript">{   
  2. "_id" : ObjectId("4f4608844f9b855c6c35e298"),       //唯一id,可以是使用者自訂的類型  
  3. "filename" : "CPU.txt",      //檔案名稱  
  4. "length" : 778,      //檔案長度  
  5. "chunkSize" : 262144,    //chunk的大小  
  6. "uploadDate" : ISODate("2012-02-23T09:36:04.593Z"), //上傳時間  
  7. "md5" : "e2c789b036cfb3b848ae39a24e795ca6",      //檔案的md5值  
  8. "contentType" : "text/plain"     //檔案的MIME類型  
  9. "meta" : null    //檔案的其它資訊,預設是沒有”meta”這個key,使用者可以自己定義為任意BSON對象  
  10. }  



     對應fs.chunks中的chunk(中文意思資料區塊),如下所示:

 

[javascript] view plain copy print?
  1. {   
  2. "_id" : ObjectId("4f4608844f9b855c6c35e299"),    //chunk的id  
  3. "files_id" : ObjectId("4f4608844f9b855c6c35e298"),  //檔案的id,對應fs.files中的對象,相當於fs.files集合的外鍵  
  4. "n" : 0,     //檔案的第幾個chunk塊,如果檔案大於chunksize的話,會被分割成多個chunk塊  
  5. "data" : BinData(0,"QGV...")     //檔案的位元據,這裡省略了具體內容  
  6. }  


     預設大小是256k,所以把檔案存入到GridFS過程中,如果檔案大於chunksize,則把檔案分割多個chunk,再把這些chunk儲存在fs.chunks中,最後再把檔案資訊存入fs.files中。

在讀取檔案的時候,先根據查詢的條件,在fs.files中找到一個合適的記錄,得到“_id”的值,再根據這個值到fs.funks中尋找所有files_id 為 _id 的chunk,並按照“n”排序,最後依次讀取chunk中的“data”對象的內容,還原成原來的檔案。


註:

     1、GridFS不自動處理md5相同的檔案,對於md5相同的檔案,如果想在GridFS中只有一個儲存,要使用者處理,md5值的計算由用戶端完成。

     2、因為GridFS在上傳檔案過程中是先把檔案資料儲存到fs.chunks,最後再把檔案的資訊儲存到fs.files中,所以如果上傳檔案過程中失敗,有可能在fs.chunks中出現垃圾資料,這些垃圾資料,可以定期清理掉。

MongoDB(八)Mongodb——GridFS儲存

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.