MongoDB:GridFS大文件存储

简介

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工具,就可以直接对文档进行增加,删除,查询,修改操作。

image-20210110220728568

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

image-20210110221408883

上传完毕后,test数据库会多出两个集合 fs.files 和 fs.chunks

image-20210110221606703

db.fs.files.find()

image-20210110221632901

db.fs.chunks.find()

image-20210110221742987

查看文件列表

格式如下:

mongofiles list <文件绝对路径> --port <端口> -u <账号> -p <密码> -d <数据库> --authenticationDatabase <认证DB>

测试:

./mongofiles list --port 27017 -u root -p root -d test --authenticationDatabase admin

image-20210110222234648

下载命令

格式如下:

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

image-20210110222711433

删除文件

格式如下:

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

image-20210110223218452

查找文件

格式如下:

mongofiles search <文件名> --port <端口> -u <账号> -p <密码> -d <数据库> --authenticationDatabase <认证DB>

测试:以mongo作为模糊查询条件:

./mongofiles search 'mongo' --port 27017 -u root -p root -d test --authenticationDatabase admin

image-20210110223703629

其余常用参数

  • --quiet 安静模式,减少输出结果
  • --host 指定要连接的MongoDB主机
  • --replace 在put时使用,用本地文件替换GridFS上存储的文件文件。
  • --prefix 集合前缀名
原文地址:https://www.cnblogs.com/wwjj4811/p/14260008.html