MongoDB整理筆記のGridFS

來源:互聯網
上載者:User

標籤:

    GridFS 是一種將大型檔案儲存體在MongoDB 資料庫中的檔案規格。所有官方支援的驅動均實現了GridFS 規範。

    GridFS是MongoDB中的一個內建功能,可以用於存放大量小檔案。

   官網學習:

    http://www.mongodb.org/display/DOCS/GridFS

    http://www.mongodb.org/display/DOCS/GridFS+Specification

     1、為什麼要用GridFS

    由於MongoDB 中BSON 對象大小是有限制的,所以GridFS 規範提供了一種透明的機制,可以將一個大檔案分割成為多個較小的文檔,這樣的機制允許我們有效儲存大檔案對象,特別對於那些巨大的檔案,比如視頻、高清圖片等。

    2、如何?海量儲存

    為實現這點,該規範指定了一個將檔案分塊的標準。每個檔案都將在檔案集合對象中儲存一個中繼資料對象,一個或多個chunk 塊對象可被組合儲存在一個chunk 塊集合中。大多數情況下,你無需瞭解此規範中細節,而可將注意力放在各個語言版本的驅動中有關GridFS API 的部分或是如何使用mongofiles 工具上。

    3、語言支援

    GridFS 對Java, Perl, PHP, Python, Ruby 等程式語言均支援,且提供了良好的API 介面。

    4、簡單介紹

    GridFS 使用兩個表來儲存資料:

    files 包含中繼資料對象

    chunks 包含其他一些相關資訊的二進位塊

    為了使多個GridFS 命名為一個單一的資料庫,檔案和塊都有一個首碼,預設情況下,首碼是fs,所以任何預設的GridFS 儲存將包括命名空間fs.files 和fs.chunks。各種第三方語言的驅動有許可權改變這個首碼,所以你可以嘗試設定另一個GridFS 命名空間用於儲存照片,它的具體位置為:photos.files 和photos.chunks。下面我們看一下實際的例子吧。

    5、命令列工具

mongofiles 是從命令列操作GridFS 的一種工具,例如我們將”testfile”這個檔案存到庫裡面,具體用法如下:    [[email protected] bin]# ./mongofiles put testfile    connected to: 127.0.0.1    added file: { _id: ObjectId(‘4fc60175c714c5d960fff76a‘), filename: "testfile", chunkSize: 262144,    uploadDate: new Date(1338376565745), md5: "8addbeb77789ae6b2cb75deee30faf1a", length:    16 }    done!

    下面我們查一下看庫裡有哪些GridFS 檔案,在”mongofiles”後加一個參數”list”即可

[[email protected] bin]# ./mongofiles list    connected to: 127.0.0.1    testfile 16

    接下來我們進庫裡看一下是否有新的東西

 [[email protected] bin]# ./mongo    MongoDB shell version: 1.8.1    connecting to: test    > show collections    fs.chunks --上文提到的fs.chunks    fs.files --上文提到的fs.files    system.indexes    system.js    >

    我們繼續查看fs.files 中的內容

> db.fs.files.find()    { "_id" : ObjectId("4fc60175c714c5d960fff76a"), "filename" : "testfile", "chunkSize" : 262144,    "uploadDate" : ISODate("2012-05-30T11:16:05.745Z"), "md5" :    "8addbeb77789ae6b2cb75deee30faf1a", "length" : 16 }

    欄位說明:
    Filename: 儲存的檔案名稱
    chunkSize: chunks 分塊的大小
    uploadDate: 入庫時間
    md5: 此檔案的md5 碼
   length: 檔案大小, 單位”位元組”
    看來fs.files 中儲存的是一些基礎的中繼資料資訊
    我們繼續查看fs.chunks 中的內容 

> db.fs.chunks.find()    { "_id" : ObjectId("4fc60175cf1154905d949336"), "files_id" :    ObjectId("4fc60175c714c5d960fff76a"), "n" : 0, "data" :    BinData(0,"SGVyZSBpcyBCZWlqaW5nCg==") }

    其中比較重要的欄位是”n”,它代表的是chunks 的序號,此序號從0 開始,看來fs.chunks中儲存的是一些實際的內容資料資訊
    我們即然能將此檔案存進去,我們就應該有辦法將其取出來,下面看一下執行個體:

 [[email protected] bin]# rm testfile    rm:是否刪除 一般檔案 “testfile”? y --先刪檔案    [[email protected] bin]# ./mongofiles get testfile --將其從庫裡取出來    connected to: 127.0.0.1    done write to: testfile    [[email protected] bin]# md5sum testfile --校正md5,結果跟庫裡相同    8addbeb77789ae6b2cb75deee30faf1a testfile    [[email protected] bin]#

    6、索引

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

    這樣,一個塊就可以利用它的files_id 和 n 的值進行檢索。注意,GridFS 仍然可以用findOne得到第一個塊,如下:

db.fs.chunks.findOne({files_id: myFileID, n: 0});

    7、應用

    MongoDB提供了一個命令列工具mongofiles可以來處理GridFS,在bin目錄下。
    列出所有檔案:
    mongofiles list
    上傳一個檔案:
    mongofiles put xxx.txt
   下載一個檔案:
    mongofiles get xxx.txt
    尋找檔案:
    mongofiles search xxx    //會尋找所有檔案名稱中包含“xxx”的檔案
    mongofiles list xxx //會尋找所有檔案名稱以“xxx”為首碼的檔案

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.