Mongo:笔记三(固定集合 GridFS)

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.filesfs.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中存储的是一些实际的内容数据信息


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值