MongoDB——GridFS

來源:互聯網
上載者:User

標籤:mongodb   分布式   gridfs   

    GridFS是一個規範的儲存和檢索檔案超過16 mb的bson文檔大小限制。

而不是將檔案儲存體在一個文檔中,GridFS檔案分為部分,或塊,每個塊作為一個單獨的文檔。使用FridFS與使用分區無

關。在預設情況下網格檔案系統塊大小限制為255 k。GridFS檔案系統使用兩個集合隱藏檔。一個收集隱藏檔塊,

其他商店檔案中繼資料。


    當你查詢GridFS檔案系統隱藏檔時,驅動或用戶端將重新組裝塊。你可以通過GridFS檔案系統上執行範圍查詢

檔案儲存體。你也可以從任意部分的檔案訪問資訊,你可以“跳過”的視頻或音頻檔案。

網格檔案系統不僅是有用的用於儲存超過16 mb的檔案,還用於儲存任何檔案,您想要訪問而不需要整個檔案載入到內

存中。


什麼情況下使用?

    在MongoDB文檔集合,你應該總是使用GridFS隱藏檔大於16 MB。在某些情況下,在MongoDB資料庫比系統級檔案

系統儲存大檔案可能更有效。

    (1)如果你的檔案系統限制一個目錄中的檔案的數量,你可以根據需要使用GridFS檔案系統儲存儘可能多的檔案。

    (2)當你想讓你的檔案和中繼資料自動同步和部署多個系統和設施。當使用分布式複本集MongoDB可以分發檔案和

中繼資料自動產生mongod執行個體和設施。

    (3)當您想要訪問的資訊來自部分大檔案,而無需全部檔案載入到記憶體中,您可以使用GridFS召回部分檔案不用

讀取整個檔案到記憶體中。

    如果需要自動更新整個檔案的內容,不要使用GridFS。作為替代,你可以將每個檔案儲存體多個版本,每個檔案並指定中繼資料檔案的目前的版本。

    當上傳新版本的檔案之後,您可以更新中繼資料欄位,在原子鐘標明最新狀態。之後刪除以前的版本。


實現GridFS

    使用GridFS檔案系統來儲存和檢索檔案:

    (1)引入驅動

    (2)mongofiles mongo shell命令列工具。參考文檔    點擊開啟連結


GridFS集合
    GridFS將檔案儲存體在兩個集合:
    塊集合——儲存位元據塊。

    塊中的每個文檔集合代表一個單獨的塊GridFS檔案。下面是一個原型文檔塊集合。

{  "_id" : <ObjectId>,  "files_id" : <ObjectId>,  "n" : <num>,  "data" : <binary>}

    該塊集合包含以下欄位:
    chunks._id  獨特的ObjectId塊。
    chunks.files_id   父類文檔事務id
    chunks.n     塊的序號。GridFS檔案系統資料區塊,從0開始。
    chunks.data   塊的有效載荷BSON二進位類型。
    塊使用複合索引檔案集合id和n


檔案——隱藏檔的中繼資料。


    每個文檔的檔案集合表示GridFS檔案系統中的一個檔案儲存體。考慮下面的原型文檔的檔案集合:

{  "_id" : <ObjectId>,  "length" : <num>,  "chunkSize" : <num>,  "uploadDate" : <timestamp>,  "md5" : <hash>,  "filename" : <string>,  "contentType" : <string>,  "aliases" : <string array>,  "metadata" : <dataObject>,}

    文檔的檔案集合包含以下欄位的部分或全部。應用程式可以建立額外的任意欄位:

    files._id  本文檔的惟一ID。id是為原始文檔選擇的資料類型。BSON ObjectId MongoDB文檔的預設類型。

    files.length  檔案的大小(以位元組為單位)。

    files.chunkSize  每個塊的大小。GridFS檔案系統將文檔劃分為指定的塊大小。預設大小是255位元組。2.4.10版

本的變化:預設從256 k到256 k塊大小改變。

    files.uploadDate  文檔第一次由GridFS儲存的日期。這個值的日期類型。

    files.md5  MD5散列filemd5返回的命令。這個值是字串類型。

    files.filename  可選的。一個可讀的文檔的名稱。

    files.contentType  可選的。一個合法的文檔的MIME類型。

    files.aliases  可選的。一個別名字串數組。

    files.metadata  可選的。想要儲存任何額外的資訊。



GridFS索引


    GridFS檔案系統使用一個獨特的、複合索引檔案的塊集合id和n欄位。id欄位包含的id的檔案塊的“父”文檔。n

欄位包含塊的序號。網格檔案系統資料區塊,從0開始。

    GridFS檔案系統索引允許使用的檔案塊的有效檢索id和n值,如以下樣本所示:

cursor = db.fs.chunks.find({files_id: myFileID}).sort({n:1});

    如果你的驅動沒有建立這個索引,使用mongo shell執行以下操作:

db.fs.chunks.ensureIndex( { files_id: 1, n: 1 }, { unique: true } );


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.