• mongodb学习之:GridFS


    GridFS是一种在Mongodb中存储大二进制文件的机制。GridFS 用于存储和恢复那些超过16MBSON文件限制)的文件(如:图片、音频、视频等)

    使用GridFS有如下几个原因:

    利用GridFS可以简化需求

    2 GridFS会直接利用已建立的复制或分片机制,所以对于文件存储来说故障恢复和扩展都容易

    3 GridFS可以避免用于存储用户上传内容的文件系统出现的某些问题。GridFS 会将大文件对象分割成多个小的chunk(文件片段),一般为256k/,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中。

    4 GridFS不产生磁盘碎片。

    下面来看下具体的使用方法:

    GridFS最近的使用方法就是采用mongofiles的命令,mongofiles可以用来在GridFS中上传,下载,显示文件。

    (1)新建一个test.txt文档

    root@zhf-maple:/home/zhf# echo "hello mongod" > test.txt

    root@zhf-maple:/home/zhf# cat test.txt

    hello mongod

    (2)通过mongofiles上传

    root@zhf-maple:/home/zhf# mongofiles put test.txt

    2017-12-31T22:06:26.489+0800 connected to: localhost

    added file: test.txt

    (3)显示文件

    root@zhf-maple:/home/zhf# mongofiles list

    2017-12-31T22:06:41.308+0800 connected to: localhost

    test.txt 13

    (4)在本端删除掉该文件

    root@zhf-maple:/home/zhf# rm test.txt

    root@zhf-maple:/home/zhf# cat test.txt

    cat: test.txt: 没有那个文件或目录

    (5)GridFS下载文件。

    root@zhf-maple:/home/zhf# mongofiles get test.txt

    2017-12-31T22:07:43.762+0800 connected to: localhost

    finished writing to test.txt

    root@zhf-maple:/home/zhf# cat test,txt

    cat: test,txt: 没有那个文件或目录

    root@zhf-maple:/home/zhf# cat test.txt

    hello mongod

    那么GridFS具体是如何存储文件的呢。前面介绍到GridFS是为了解决单个document不能超过16M的问题而推出的。通过将文件进行切分存成一个单独的集合:fs.chunks,并保存一个文件索引表:fs.files。在前面的例子中我们上传了一个test.txt文件。我们进入数据库看下是如何存储的。

    在数据库中多了test数据库

    > show dbs

    admin  0.000GB

    local  0.000GB

    maple  0.000GB

    test   0.000GB

    test数据库下有fs.chunksfs.files两个集合。

    > use test

    switched to db test

    > show collections

    fs.chunks

    fs.files

    chunks中字段解释如下:

    _id:文件唯一的id

    files_id:包含这个块元数据的文件文档的_id

    n:表示块编号。也就是这个块在原文件中的顺序编号。这里为0代表只有一个块

    data:组成文件块的二进制数据

    > db.fs.chunks.find()

    { "_id" : ObjectId("5a48eee22d33c14783a13d55"), "files_id" : ObjectId("5a48eee22d33c14783a13d54"), "n" : 0, "data" : BinData(0,"aGVsbG8gbW9uZ29kCg==") }

    files中的字段解释如下:

    _id:文件中唯一的id

    length:文件长度

    chunksize:每块的大小。以字节为单位

    uploadDate:文件存入GridFS的时间戳

    md5:文件内容的md5校验和。由服务器端生成。

    > db.fs.files.find()

    { "_id" : ObjectId("5a48eee22d33c14783a13d54"), "chunkSize" : 261120, "uploadDate" : ISODate("2017-12-31T14:06:27.294Z"), "length" : 13, "md5" : "40a1f080f26be5a4c8cef7d78f974659", "filename" : "test.txt" }

  • 相关阅读:
    jquery常用获取属性的方法有哪些(attr prop区别)
    Java中 List、Set、Map 之间的区别
    mysql查询语句where后面加if判断
    mysql if 排序_MySQL ORDER BY IF() 条件排序
    Java 如何逆向遍历一个 List
    解决java.util.concurrent.RejectedExecutionException(Java多线程问题)
    list,map,set的区别
    Java8 List去掉重复对象以及保证添加顺序
    java 常用的几种集合类总结
    浅析Pinia的简单使用
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/8159259.html
Copyright © 2020-2023  润新知