CappedCollection固定集合:
简单介绍
cappedcollections是性能出色的有着固定大小的集合,以LRU(LeastRecentlyUsed最近最少使用)规则和插入顺序进行age-out(老化移出)处理,自动维护集合中对象的插入顺序,在创建时要预先指定大小。如果空间用完,新添加的对象将会取代集合中最旧的对象永远保持最新的数据
注意:
可以插入及更新,但更新不能超出collection的大小,否则更新失败。不允许删除,但是可以调用drop()删除集合中的所有行,但是drop后需要显式地重建集合。在32位机上一个cappedcollection的最大值约482.5M,64位上只受系统文件大小的限制。
优点及使用场景
优点:
1:对固定集合进行插入速度极快
2:按照插入顺序的查询输出速度极快。
3:能够在插入最新数据时,淘汰最早的数据。
使用场景:
1:储存日志信息。
2:缓存一些少量的文档
创建固定集合
不像普通集合,固定集合需要显式的创建使用createCollection命令来创建。
db.createCollection(“my_collection”,{capped:true,size:10000})
创建一个集合为‘my_collection’的固定集合,大小为10000字节。还可以限定文档条目。加上Max:100属性。
注意:指定文档上限,必须指定大小。文档限制是在容量没满时进行淘汰,要是满了,就根据容量限制来进行淘汰。
转换集合
把普通的集合转换成固定集合,需要使用convertTocapped命令
db.runCommand({convertTocapped:”test”,size:10000,max:3})
把test普通集合转换为固定集合,大小为10000字节。
自然排序
固定集合文档按照插入顺序储存的,默认情况下查询就是按照插入顺序返回的,也可以使用$natural调整返回顺序。
db.my_collection.find().sort({“$natural”:1}) 1表示默认顺序,-1则相反。
db.c2.isCapped(); //判断是否是固定集合
db.c2.status();// 查看状态
GridFS
GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS的原因有以下几种:
储存巨大的文件,比如视频、高清图片等。
利用GridFS可以简化需求。
GridFS会直接利用已经建立的复制或分片机制,故障恢复和扩展都很容易
GridFS可以避免用户上传内容的文件系统出现问题。
GridFS不产生磁盘碎片
GridFS使用两个表来存储数据:
files包含元数据对象
chunks包含其他一些相关信息的二进制块
为了使多个GridFS命名为一个单一的数据库,文件和块都有一个前缀,默认情况下,前缀是fs,所以任何默认的GridFS存储将包括命名空间fs.files和fs.chunks。
各种第三方语言可以更改其前缀
使用GridFS mongofiles
mongofiles是从命令行操作GridFS的一种工具
常用命令:put(存储)get(取得)list(列表)delete(删除)search(搜索) --help
例如:我们将”testfile”这个文件存到库里面,
具体用法如下:
[root@localhostbin]# ./mongofiles put testfile
db.fs.files.find()
{"_id" : ObjectId("4fc60175c714c5d960fff76a"),
"filename" : "testfile",
"chunkSize" :262144,
"uploadDate" : ISODate("2012-05-30T11:16:05.745Z"),
"md5" :"8addbeb77789ae6b2cb75deee30faf1a",
"length" : 16 }
字段说明:
Filename:存储的文件名
chunkSize:chunks分块的大小
uploadDate:入库时间
md5:此文件的md5码
length:文件大小,单位”字节”
fs.files中存储的是一些基础的元数据信息
db.fs.chunks.find()
{"_id" : ObjectId("4fc60175cf1154905d949336"),
"files_id" :ObjectId("4fc60175c714c5d960fff76a"),
"n" : 0,
"data" :BinData(0,"SGVyZSBpcyBCZWlqaW5nCg==")}
_id:块自身的id
files_id:包含这个块的元数据文档文件id
n:它代表的是chunks的序号,此序号从0开
data:组成文件块的二进制文件
fs.chunks中存储的是一些实际的内容数据信息