• mongodb的gridfs


    mongodb中是可以保存二进制文件的,其用于存储文件的文件系统叫做gridfs,有点类似hadoop的HDFS的感觉。

    gridfs的入门操作,如保存、查看、删除,还是比较简单的,也不需要复杂的配置,只要mongodb安装好就ok,我的mongodb已经安装好,使用默认的配置。

    XXXXX@XXXXX-asus:~$ ls -al mongodb_log_bak.log 
    -rw-r--r-- 1 XXXXX XXXXX 122106  3月 21 14:18 mongodb_log_bak.log
    XXXXX@XXXXX-asus:~$ mongofiles --host localhost --port 27017 list
    connected to: localhost:27017
    XXXXX@XXXXX-asus:~$ mongofiles --host localhost --port 27017 put mongodb_log_bak.log 
    connected to: localhost:27017
    added file: { _id: ObjectId('532bde4f11647a7d20f88825'), filename: "mongodb_log_bak.log", chunkSize: 262144, uploadDate: new Date(1395383887367), md5: "37563b840ee4b7fe92d3a6051aac4665", length: 122106 }
    done!
    XXXXX@XXXXX-asus:~$ mongofiles --host localhost --port 27017 list
    connected to: localhost:27017
    mongodb_log_bak.log    122106
    XXXXX@XXXXX-asus:~$ rm mongodb_log_bak.log
    XXXXX@XXXXX-asus:~$ mongofiles --host localhost --port 27017 get mongodb_log_bak.log
    connected to: localhost:27017
    done write to: mongodb_log_bak.log
    XXXXX@XXXXX-asus:~$ ls -al mongodb_log_bak.log 
    -rw-rw-r-- 1 XXXXX XXXXX 122106  3月 21 14:42 mongodb_log_bak.log
    XXXXX@XXXXX-asus:~$ mongofiles --host localhost --port 27017 delete mongodb_log_bak.log
    connected to: localhost:27017
    done!
    XXXXX@XXXXX-asus:~$ 

    在这个例子中,我将之前的mongodb的log备份出来,mongodb_log_bak.log,用于测试。保存、查询、获取、删除分别是put、list、get、delete,更多的选项也可以用mongofiles --help来看。gridfs也有一些不足的地方,比如,保存文件的时候没有保存时间戳,只保存了文件内容。

    也可以登陆mongodb的client看fs.chunks和fs.files。

    XXXXX@XXXXX-asus:~$ mongo
    MongoDB shell version: 2.2.4
    connecting to: test
    > show collections
    emp_dept
    fs.chunks
    fs.files
    master_slave
    result
    system.indexes
    testrep
    > db.fs.chunks.find({},{"_id":1,"n":1,"files_id":1})
    { "_id" : ObjectId("532bde4fb65a5f88fa9c1649"), "files_id" : ObjectId("532bde4f11647a7d20f88825"), "n" : 0 }
    > db.fs.files.find()
    { "_id" : ObjectId("532bde4f11647a7d20f88825"), "filename" : "mongodb_log_bak.log", "chunkSize" : 262144, "uploadDate" : ISODate("2014-03-21T06:38:07.367Z"), "md5" : "37563b840ee4b7fe92d3a6051aac4665", "length" : 122106 }
    > 

    fs.chunks实际上还有一个元素“data”,看名字就知道这个是保存文件的具体内容,由于文件比较大,我就没有列出来,文件的大部分信息在fs.files中有列出,与之前使用mongofiles时候的提示信息一致。其实,把文件存入到GridFS过程中,如果文件大于chunksize,gridfs会把文件分割成多个chunk,再把这些chunk保存到fs.chunks中,最后再把文件信息存入到fs.files中。我的这个实验中,数据文件似乎还是小了一点,只有1个chunk。

    于是加大文件,使用cat mongodb_log_bak.log >> 1.txt,执行3次,得到一个源文件3倍大小的文件,这次应该会出现2个chunk,重复上述步骤,发现的确如此

    XXXXX@XXXXX-asus:~$ mongo
    MongoDB shell version: 2.2.4
    connecting to: test
    > db.fs.chunks.find({},{"_id":1,"n":1,"files_id":1})
    { "_id" : ObjectId("532be575b65a5f88fa9c164b"), "files_id" : ObjectId("532be575c305f3ace8c29bc1"), "n" : 0 }
    { "_id" : ObjectId("532be576b65a5f88fa9c164c"), "files_id" : ObjectId("532be575c305f3ace8c29bc1"), "n" : 1 }
    > db.fs.files.find()
    { "_id" : ObjectId("532be575c305f3ace8c29bc1"), "filename" : "1.txt", "chunkSize" : 262144, "uploadDate" : ISODate("2014-03-21T07:08:38.016Z"), "md5" : "518bd138bd4fd009b96181b207217d04", "length" : 366318 }
    > 
  • 相关阅读:
    ASP.NET AJAX 's UpdatePanel 中使用Page.ClientScript.RegisterStartupScript 失败
    从struct到byte[]之RawFormatter
    一个HTTP.二进制POST和HTTP指定长度接收的C++实现
    发现移动太NB了,验证码图像路径直接包含验证码
    又一个网页下载者木马
    Trojan program TrojanDownloader.JS.IstBar.ai 病毒样本
    用控件的方式解决问题在客户端关联WEB控件引用
    需要防范的XSS攻击
    用"指定字符组成的任意进制"转换生成不带4的卡号
    人为漏洞的构造、文件的载入、验证机制的突破
  • 原文地址:https://www.cnblogs.com/valleylord/p/3615915.html
Copyright © 2020-2023  润新知