MongoDBGridFS最佳应用概述

2014-11-24 11:43:54 · 作者: · 浏览: 0

《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也并非十全十美的,它也有一些局限性: