《MongoDB GridFS最佳应用概述》
作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs
GridFS是MongoDB数据库之上的一个简单文件系统抽象。如果你熟悉Amazon S3的话,那么GridFS与之相似。为什么像MongoDB这样的NoSQL数据库会提供这样的一个文件层抽象呢?
一、使用GridFS的理由
理由如下:
1)存储用户产生的文件内容
2)访问文件内容的分区
3)在MongoDB中存储16MB以上的文件
4)克服文件系统的限制
二、深入GridFS
GridFS使用了两种集合Collection来存储数据
> show collections; fs.chunks fs.files system.indexes >fs.files集合包含了文件的元数据,而fs.chunks集合则存储实际的以256KB尺寸进行分割的文件块。如果你有分片的集合,那么文件块会分布到多台服务器上,或许能获得比文件系统更好的性能。
> db.fs.files.findOne(); { "_id" : ObjectId("530cf1bf96038f5cb6df5f39"), "filename" : "./conn.log", "chunkSize" : 262144, "uploadDate" : ISODate("2014-02-25T19:40:47.321Z"), "md5" : "6515e95f8bb161f6435b130a0e587ccd", "length" : 1644981 } >
MongoDB还在files_id和文件块数中创建了复合索引,以帮助快速访问这些文件块
> db.fs.chunks.getIndexes(); [ { "v" : 1, "key" : { "_id" : 1 }, "ns" : "files.fs.chunks", "name" : "_id_" }, { "v" : 1, "key" : { "files_id" : 1, "n" : 1 }, "ns" : "files.fs.chunks", "name" : "files_id_1_n_1" } ] >
三、GridFS实例
MongoDB有一个内建的工具mongofiles,可以帮助练习实际使用GridFS的场景。请参阅相关的Driver文档,查看如何使用GridFS。
Put
#mongofiles -h -u -p --db files put /conn.log
connected to: 127.0.0.1
added file: { _id: ObjectId('530cf1009710ca8fd47d7d5d'), filename: "./conn.log", chunkSize: 262144, uploadDate: new Date(1393357057021), md5: "6515e95f8bb161f6435b130a0e587ccd", length: 1644981 }
done!
Get
#mongofiles -h -u -p --db files get /conn.log
connected to: 127.0.0.1
done write to: ./conn.log
List
# mongofiles -h -u -p list
connected to: 127.0.0.1
/conn.log 1644981
Delete
[root@ip-10-198-25-43 tmp]# mongofiles -h -u -p --db files delete /conn.log
connected to: 127.0.0.1
done!
四、GridFS的模块
如果你想把存储在MongoDB的GridFS的文件直接服务于Web服务器或文件系统,那么你可以使用下面的GridFS插件:
五、GridFS的局限性
GridFS也并非十全十美的,它也有一些局限性: