標籤:mongodb gridfs
GridFS的原理是將大檔案分割為多個比較大的塊,將每個塊作為獨立的文檔進行儲存。
(1)GridFS中的塊會被存貯到專用的集合中,預設為fs.chunks;
(2)除了將檔案的每一個塊單獨儲存外,還需要將每個檔案塊的元資訊放入一個文檔儲存,並將這些文檔預設集中在fs.files集合中;
例如將foo.txt文檔加入到資料庫foo中:
[[email protected] ~]# echo "hello world" >foo.txt [[email protected] ~]# mongofiles -d foo put foo.txt connected to: 127.0.0.1 added file: { _id: ObjectId(‘54b3d62983047a88669bc529‘), filename: "foo.txt", chunkSize: 261120, uploadDate: new Date(1421071914003), md5: "6f5902ac237024bdd0c176cb93063dc4", length: 12 } done!
查看相應的集合:
> show collections fs.chunks fs.files system.indexes >
查看這個文檔:
[[email protected] ~]# mongo foo MongoDB shell version: 2.6.6 connecting to: foo > db.fs.chunks.findOne() { "_id" : ObjectId("54b51dc15caeb0e1a8722e8d"), "files_id" : ObjectId("54b51dc0c3ab6ae7c08f6028"), "n" : 0, "data" : BinData(0,"aGVsbG8gd29ybGQK") } >
files_id:塊所屬檔案的元資訊;
n: 塊在檔案中的相對位置;
data:塊所包含的位元據;
> db.fs.files.findOne() { "_id" : ObjectId("54b51dc0c3ab6ae7c08f6028"), "filename" : "foo.txt", "chunkSize" : 261120, "uploadDate" : ISODate("2015-01-13T13:29:37.525Z"), "md5" : "6f5902ac237024bdd0c176cb93063dc4", "length" : 12 } >
_id:檔案的唯一ID,跟檔案的每個塊中的files_id的值是一致的;
length:檔案所包含的位元組數;
chunkSize:組成檔案的每個塊的大小,單位是位元組;
updateDate:檔案被上傳到GridFS的時間;
MD5:檔案的MD5值,由伺服器計算所得;
本文出自 “緣隨心愿” 部落格,請務必保留此出處http://281816327.blog.51cto.com/907015/1603698
【MongoDB學習筆記29】MongoDB的GridFS儲存深入