• 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 集合前缀名
  • 相关阅读:
    Linux 操作文件目录
    前端HTML所遇到的报错
    【剑指offer】最小的k个数
    【剑指offer】数组中出现次数超过一半的数字
    【剑指offer】栈的压入、弹出序列
    【剑指offer】二叉树的镜像
    【剑指offer】反转链表
    【剑指offer】数值的整数次方
    【剑指offer】重建二叉树
    【剑指offer】旋转数组的最小数字
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14260008.html
Copyright © 2020-2023  润新知