zoukankan      html  css  js  c++  java
  • GridFS大文件的添加、获取、查看、删除

    GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS的原因有以下几种:

    存储巨大的文件,比如视频、高清图片等。

    利用GridFS可以简化需求。

    GridFS会直接利用已经建立的复制或分片机制,故障恢复和扩展都很容易

    GridFS可以避免用户上传内容的文件系统出现问题。

    GridFS不产生磁盘碎片。

    GridFS使用两个表来存储数据:

    fiiles包含元数据对象(如文件的名称、上传的时间)

    chunks包含其他一些相关信息的二进制块

    为了使度个GridF命名为一个单一的数据库,文件和块都有一个前缀,默认情况下,前缀是fs。

    所以任何默认的GridFS存储将包括命名空间fs.files和fs.chunks。(图片可以命名为ps.files和ps.chunks,视频可以命名为vs.files和vs.chunks)。

    各种第三方语言可以更改其前缀。

    本文是oschina的happyBKs的文章,请自己标明出处:http://my.oschina.net/u/1156339/blog/388156

    使用GridFS mongofiles

    mingofiles是从命令行操作GridFS的一种工具

    三个命令:put(存储) get(取得) list(列表)

    例如:我们将“testfile”这个文件存储到库中,具体做法是 ./mongofiles put testfile

    首先,我们尝试压缩归档一个文件。

    1.  
      [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list
    2.  
      [sudo] password for neil: 
    3.  
       
    4.  
      connected to: 127.0.0.1
    5.  
      [neil@neilhost ~]$ tar zcf mongodbBook.tar.gz Downloads/MongoDB权威指南.pdf 
    6.  
      [neil@neilhost ~]$ ll mongodbBook.tar.gz 
    7.  
      -rw-rw-r--. 1 neil neil 203 3月  16 19:10 mongodbBook.tar.gz

    下面我们将这个归档文件存储到mongoDB中。默认存放到test数据库中。

    1.  
      [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles put ./mongodbBook.tar.gz 
    2.  
      connected to: 127.0.0.1
    3.  
      added file: { _id: ObjectId('5506bc01581b37b38b49fecd'), filename: "./mongodbBook.tar.gz", chunkSize: 261120, uploadDate: new Date(1426504705885), md5: "85c0c93f51ebe9c609ffe4f9da71c63e", length: 203 }
    4.  
      done!
    5.  
      [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list
    6.  
      connected to: 127.0.0.1
    7.  
      ./mongodbBook.tar.gz 203
    8.  
      [neil@neilhost ~]$

    之后,我们进入mongodb客户端查看test数据库,发现里面多了两个集合,一个是fs.files,查看之后发现里面记录着上传文件的以下像信息:文件名称、上传时间、md5码、文件长度、大小等。

    fs.chunks查看显示二进制信息。

    1.  
      [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongo
    2.  
      [sudo] password for neil: 
    3.  
      MongoDB shell version: 2.6.8
    4.  
      connecting to: test
    5.  
      > show tables
    6.  
      fs.chunks
    7.  
      fs.files
    8.  
      system.indexes
    9.  
    10.  
    11.  
      > db.fs.files.find()
    12.  
      "_id" : ObjectId("5506bc01581b37b38b49fecd"), "filename" : "./mongodbBook.tar.gz", "chunkSize" : 261120, "uploadDate" : ISODate("2015-03-16T11:18:25.885Z"), "md5" : "85c0c93f51ebe9c609ffe4f9da71c63e", "length" : 203 }
    13.  
      > db.fs.chunks.find()
    14.  
      "_id" : ObjectId("5506bc011b359e376ad0011e"), "files_id" : ObjectId("5506bc01581b37b38b49fecd"), "n" : 0, "data" : BinData(0,"H4sIADm6BlUAA+3OvwsBcRjH8a+uZOE/kNuYuOO+btetMvkD1CHFnfzISgYDZqWU0d9g4w+x3W1mq7uUkmKgpN6v4Xnq+Tz1PJY7ctpuze7nyq7TdK2Sv5l6u4m/mHnLVbZrN8TntEDR0MKum/Kh30gp9LzUdFkIiwhSwzCFqn3h9lvD/qDWU1Xh1FvtV3vv8j+VmsdEfB+tCuV8iMSDwXF7qXQS5va+MTaV9SmZFpmf/QgAAAAAAAAAAAAAAAAAeHYFpzavuwAoAAA=") }
    15.  
      >

    这个文件不大,所以二进制信息很短。

    1.  
      [neil@neilhost ~]$ du mongodbBook.tar.gz 
    2.  
      4 mongodbBook.tar.gz

    接下来,我尝试将mongodbBook.tar.gz的原文件删除,然后从mongodb中获取恢复。

    这里用到的是mongofiles get命令。这里注意的是

    1.  
      [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list
    2.  
      connected to: 127.0.0.1
    3.  
      ./mongodbBook.tar.gz 203
    4.  
      [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles get mongodbBook.tar.gz
    5.  
      connected to: 127.0.0.1
    6.  
      ERROR: file not found
    7.  
      [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles get ./mongodbBook.tar.gz
    8.  
      connected to: 127.0.0.1
    9.  
      done write to: ./mongodbBook.tar.gz
    10.  
      [neil@neilhost ~]$ ll
    11.  
      总用量 44
    12.  
      drwxr-xr-x. 2 neil neil 4096 2月  13 18:36 Desktop
    13.  
      drwxr-xr-x. 3 neil neil 4096 2月  13 21:35 Documents
    14.  
      drwxr-xr-x. 5 neil neil 4096 3月  15 21:56 Downloads
    15.  
      -rw-r--r--. 1 root root  203 3月  17 18:27 mongodbBook.tar.gz
    16.  
      drwxr-xr-x. 2 neil neil 4096 2月  13 18:36 Music
    17.  
      drwxr-xr-x. 3 neil neil 4096 3月  15 22:50 Pictures

    这里需要注意的是,后面get的文件名称需要指定路径,这里要加上./,否则会显示文件不存在。

    注意,这个./指的不是linux当前的路径,而是在Mongodb的文件存储中的路径。

    之后,有put有get必有delete。

    接下来看看如何删除MongoDB中的大文件.

    1.  
      [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list
    2.  
      [sudo] password for neil: 
    3.  
      connected to: 127.0.0.1
    4.  
      ./mongodbBook.tar.gz 203
    5.  
      [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles delete ./mongodbBook.tar.gz 
    6.  
      connected to: 127.0.0.1
    7.  
      done!
    8.  
      [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list
    9.  
      connected to: 127.0.0.1
    10.  
      [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongo
    11.  
      MongoDB shell version: 2.6.8
    12.  
      connecting to: test
    13.  
      > db
    14.  
      test
    15.  
      show collections
    16.  
      fs.chunks
    17.  
      fs.files
    18.  
      system.indexes
    19.  
      > db.fs.files.find()
    20.  
    21.  
      > db.fs.chunks.find()
    22.  
      >

    删除之后可以看到fs.files中的元数据和fs.chunk中的二进制数据都没有了。

    --------------------- 本文来自 Ghost丶 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/linux_hacher/article/details/79663911?utm_source=copy 

  • 相关阅读:
    Mybatis异常--java.lang.IllegalArgumentException: NO ENUM const class org.apache.ibatis.type.JdbcType.int
    JAVA(IO流)文件复制
    JAVA继承与覆写
    收藏一些是实用的小技巧
    利用JS生成01010101……长度可控的序列
    JS脚本收藏(一些实用的函数)
    利用JavaScript生成随机数字!
    JavaScript自学之数组排序
    前端开发自学之JavaScript——显示当前时间
    Spring Boot Sample 016之spring-boot-error-exception
  • 原文地址:https://www.cnblogs.com/ExMan/p/9712390.html
Copyright © 2011-2022 走看看