一、固定集合
简介:
capped collections是性能出色的有着固定大小的集合,以LRU(Least Recently Used最近最少使用)规则和插入顺序进行ageout(老化移出)处理,自动维护集合中对象的插入顺序,在创建时要预先指定大小。如果空间用完,新添加的对象将会取代集合中最旧的对象,永远保持最新的数据。
特点:
可以插入以及更新,但是更新不能超出collection的大小,否则更新失败。不允许删除,但是可以调用drop()删除集合中的所有行,但是drop后需要显示的重建集合。在32位机器上一个capped collection最大值约482.5M,64位机器上只受系统文件大小的限制。
属性:
属性1: 对固定集合进行插入速度极快
属性2: 按照插入顺序的查询输出速度极快
属性3: 能够在插入最新数据时,淘汰最早的数据。
用法:
用法1: 储存日志信息
用法2: 缓存一些少量的文档
创建固定集合:
创建固定集合不像普通集合,固定集合需要显式的创建使用,通过createCollection命令来创建。
显示的创建一个普通集合:> db.createCollection("c1");
创建一个固定集合:>db.createCollection("c2",{capped:true,size:10000});
>db.createCollection("c2",{capped:true,size:10000,max:5});
说明:创建一个集合"c2"的固定集合,大小为10000字节。还可以限制文档个数。加上max:100属性。
注意: 指定文档上限,必须指定大小。文档限制是在容量没满时进行淘汰,要是满了,就根据容量限制进行淘汰了!
查看一下集合的状态:>db.c2.stats();
converToCapped命令
作用:转换集合,把普通的集合转换为固定集合。
>db.runCommand({convertToCapped:"c1",size:1000000,max:3});
二、GridFS
简介:
GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS的原因有以下几种:
《1.》储存巨大的文件,比如视频、高清图片等。
《2.》利用GridFS可以简化需求。
《3.》GridFS会直接利用已经建立的复制或分片机制,故障恢复和扩展都很容易。
《4.》GridFS可以避免用户上传内容的文件系统出问题
《5.》GridFS不产生磁盘碎片
使用:
GridFS使用两个集合来存储数据:
files :包含元数据对象,如文件的名称,文件的上传时间。
chunks :包含其他一些相关信息的二进制块,比如图片的内容
为了使多个GridFS命名为一个单一的数据库,文件和块都有一个前缀,默认情况下,前缀是fs,所以任何默认的GridFS存储将包括命名空间fs.files和fs.chunks。各种第三方语言都可以更改其前缀。
常用的方法:
#查看是否有文件:/usr/local/mongodb/bin/mongofiles list#制作一个tar文件cd /opttar -zcf pic.tar.gz pic#上传一个文件到MongoDB/usr/local/mongodb/bin/mongofiles put /opt/pic.tar.gz [root@localhost opt]# /usr/local/mongodb/bin/mongofiles list2018-05-26T23:59:42.244-0400 connected to: localhost/opt/pic.tar.gz 103268
MongoDB命令行查看> show collections;
fs.chunks fs.files > db.fs.files.find();#fs.files中存储的是一些基础的元数据信息{ "_id" : ObjectId("5b0a30a3421aa9109f1898a5"), "chunkSize" : 261120, "uploadDate" : ISODate("2018-05-27T04:14:27.028Z"), "length" : 103268, "md5" : "87b3824d56ec390b6dd260eea4503e6e", "filename" : "/opt/pic.tar.gz" }字段说明:filename: 存储的文件名chunkSize: chunks分块的大小uploadDate: 入库时间md5: 此文件的md5码 【主要是验证上传的文件是否被修改过,比如:md5sum pic.tar.gz 可以查看上传前的Md5值!】length: 文件大小,单位“字节”#查看源文件的MD5值[root@localhost opt]# md5sum pic.tar.gz 87b3824d56ec390b6dd260eea4503e6e pic.tar.gz> db.fs.chunks.find(); 压缩包是存在这里的!
#下载文件(刚才我删除了/opt/下面的pic相关的文件)注意:路径名带上!!因为上传时有路径![root@localhost opt]# /usr/local/mongodb/bin/mongofiles get pic.tar.gz2018-05-27T00:09:02.489-0400 connected to: localhost2018-05-27T00:09:02.490-0400 Failed: error opening GridFS file 'pic.tar.gz': not found[root@localhost opt]# /usr/local/mongodb/bin/mongofiles get /opt/pic.tar.gz2018-05-27T00:09:22.686-0400 connected to: localhostfinished writing to /opt/pic.tar.gz[root@localhost opt]#
#删除[root@localhost pic]# /usr/local/mongodb/bin/mongofiles delete /opt/pic.tar.gz2018-05-27T00:11:34.116-0400 connected to: localhostsuccessfully deleted all instances of '/opt/pic.tar.gz' from GridFS[root@localhost pic]# /usr/local/mongodb/bin/mongofiles list2018-05-27T00:11:49.259-0400 connected to: localhost
Mongo命令查询,结果也为空!!
> show collections;
fs.chunks fs.files > db.fs.files.find(); > db.fs.chunks.find();