Mongodb——GridFS



GridFS用於存儲和恢復那些超過16M(BSON文件限制)的文件。

GridFS將文件分成大塊,將每個大塊存儲為單獨的文件.GridFS中限制chunk最大為256k。GridFS使用兩個collection存儲,一個存儲chunks,一個存儲元數據(metadata)。
fs.files和fs.chunks


When should I use GridFS?
http://docs.mongodb.org/manual/faq/developers/#faq-developers-when-to-use-gridfs

 


file Collection:具體形式如下
{
  "_id" : <ObjectID>,
  "length" : <num>,
  "chunkSize" : <num>
  "uploadDate" : <timestamp>
  "md5" : <hash>

  "filename" : <string>,
  "contentType" : <string>,
  "aliases" : <string array>,
  "metadata" : <dataObject>,
}

Documents in the files collection contain some or all of the following fields. Applications may create additional arbitrary fields:

files._id
    The unique ID for this document. The _id is of the data type you chose for the original document. The default type for MongoDB documents is BSON ObjectID.

files.length
    The size of the document in bytes.

files.chunkSize
    The size of each chunk. GridFS divides the document into chunks of the size specified here. The default size is 256 kilobytes.

files.uploadDate
    The date the document was first stored by GridFS. This value has the Date type.

files.md5
    An MD5 hash returned from the filemd5 API. This value has the String type.

files.filename
    Optional. A human-readable name for the document.

files.contentType
    Optional. A valid MIME type for the document.

files.aliases
    Optional. An array of alias strings.

files.metadata
    Optional. Any additional information you want to store.


The chunks Collection:舉例如下
{
  "_id" : <string>,
  "files_id" : <string>,
  "n" : <num>,
  "data" : <binary>
}

A document from the chunks collection contains the following fields:
chunks._id
    The unique ObjectID of the chunk.

chunks.files_id
    The _id of the “parent” document, as specified in the files collection.

chunks.n
    The sequence number of the chunk. GridFS numbers all chunks, starting with 0.

chunks.data
    The chunk’s payload as a BSON binary type.

GridFS Index

GridFS使用chunks中files_id和n域作為混合索引,files_id是父文檔的_id,n域包含chunk的序列號,該值從0開始。
GridFS索引支持快速恢復數據。

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

如果沒有建立索引,可以使用下列shell命令:
db.fs.chunks.ensureIndex( { files_id: 1, n: 1 }, { unique: true } );

Example Interface:

// returns default GridFS bucket (i.e. "fs" collection)
GridFS myFS = new GridFS(myDatabase);

// saves the file to "fs" GridFS bucket
myFS.createFile(new File("/tmp/largething.mpg"));

接口支持額外的GridFS buckets
// returns GridFS bucket named "contracts"
GridFS myContracts = new GridFS(myDatabase, "contracts");

// retrieve GridFS object "smithco"
GridFSDBFile file = myContracts.findOne("smithco");

// saves the GridFS file to the file system
file.writeTo(new File("/tmp/smithco.pdf"));


免責聲明!

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



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