简介
mongoDB的单文件存储空间要求不超过16MB,这使得存储大文件收到限制,但是MongDB提供了一种解决方案:GridFS,它可以对大型文件(图片,影片等)进行存取。
GridFS 会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中。
GridFS 用两个集合来存储一个文件:fs.files与fs.chunks。
每个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta数据(filename,content_type,还有用户自定义的属性)将会被存在files集合中。
以下是简单的 fs.files 集合文档:
{
"filename": "test.txt",
"chunkSize": NumberInt(261120),
"uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
"md5": "7b762939321e146569b07f72c62cca4f",
"length": NumberInt(646)
}
以下是简单的 fs.chunks 集合文档:
{
"files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
"n": NumberInt(0),
"data": "Mongo Binary Data"
}
基本使用
GridFS命令很简单,通过mongofiles工具,就可以直接对文档进行增加,删除,查询,修改操作。
mongofiles工具包含5个命令:
- 上传文件 put
- 查看文件列表 list
- 下载文件get
- 删除文件 delete
- 查找文件 search
上传
命令格式如下:
mongofiles put <文件绝对路径> --port <端口> -u <账号> -p <密码> -d <数据库> --authenticationDatabase <认证DB>
测试:
./mongofiles put /root/mongodb-linux-x86_64-rhel70-4.2.11.tgz --port 27017 -u root -p root -d test --authenticationDatabase admin
上传完毕后,test数据库会多出两个集合 fs.files 和 fs.chunks
db.fs.files.find()
db.fs.chunks.find()
查看文件列表
格式如下:
mongofiles list <文件绝对路径> --port <端口> -u <账号> -p <密码> -d <数据库> --authenticationDatabase <认证DB>
测试:
./mongofiles list --port 27017 -u root -p root -d test --authenticationDatabase admin
下载命令
格式如下:
mongofiles get <文件名> -l <新的文件绝对路径> --port <端口> -u <账号> -p <密码> -d <数据库> --authenticationDatabase <认证DB>
测试:
./mongofiles get /root/mongodb-linux-x86_64-rhel70-4.2.11.tgz -l /opt/mongodb.tgz --port 27017 -u root -p root -d test --authenticationDatabase admin
删除文件
格式如下:
mongofiles delete <文件名> --port <端口> -u <账号> -p <密码> -d <数据库> --authenticationDatabase <认证DB>
测试:
./mongofiles delete /root/mongodb-linux-x86_64-rhel70-4.2.11.tgz --port 27017 -u root -p root -d test --authenticationDatabase admin
查找文件
格式如下:
mongofiles search <文件名> --port <端口> -u <账号> -p <密码> -d <数据库> --authenticationDatabase <认证DB>
测试:以mongo作为模糊查询条件:
./mongofiles search 'mongo' --port 27017 -u root -p root -d test --authenticationDatabase admin
其余常用参数
- --quiet 安静模式,减少输出结果
- --host 指定要连接的MongoDB主机
- --replace 在put时使用,用本地文件替换GridFS上存储的文件文件。
- --prefix 集合前缀名