Capper集合是固定大小的集合,有很高的性能及过期特性:即创建时要预先指定大小,如果空间用完,新的对象将会取代集合中最旧的对象
一. 特性:
执行find方法查询,如果没有指定顺序,返回的结果就是按照插入顺序,Capped集合会自动维护集合中的对象的插入顺序,如果需要指定倒序排序,可以使用find().sort($natural:-1)返回倒序
二. 使用约束:
在Capped Collection中,可以添加,但不能对Capped Collection中的数据进行删除,但可以使用drop方法删除collection中的所有行,删除之后需要重新创建这个Collection,在32位机上,一个Capped的最大值约为482MB,64位机上只受系统文件大小限制。
三. 创建Capped Collection
db.createCollection(" mycappedcoll ", { "capped":true, "size" : 100000 })
//指定size空间大小,返回{"ok" : 1}成功创建
以上代码使用db.createCollection()方法创建了一个名为mycappedcoll,空间大小问哦100000的Capped Collection,单位是字节。
四. 限制Capped Collection中对象的个数
如果要限定Collection中对象的数量,就要设置max参数。如果到了限定的数量,就要移除一个最近的插入。
db.createCollection(" mycappedcoll ", { "capped":true, "size" : 100000 , " max " : 100})
//限定个数为100
查询存储空间:
db.mycappedcoll.validate( )
//存储最近对象的版本号方法就是把max = 1
> db.mycappedcoll.validate()
{
"ns" : "test1.mycappedcoll",
"firstExtent" : "0:31000 ns:test.mycappedcoll",
"lastExtent" : "0:31000 ns:test.mycappedcoll",
"extentCount" : 1,
"datasize" : 52,
"nrecords" : 1,
"lastExtentSize" : 4096,
"padding" : 1,
"firstExtentDetails" : {
"loc" : "0:31000",
"xnext" : "null",
"xprev" : "null",
"nsdiag" : "test.mycappedcoll",
"size" : 4096,
"firstRecord" : "0:310b0",
"lastRecord" : "0:310b0"
},
"deletedCount" : 1,
"deletedSize" : 3852,
"nIndexes" : 1,
"keysPerIndex" : {
"test1.mycappedcoll.$_id_" : 1
},
"valid" : true,
"errors" : [ ],
"warning" : "Some checks omitted for speed. use {full:true} option to do more thorough scan.",
"ok" : 1
}
默认情况下Capped Collection不会创建_id索引,需要用到autoIndexId
db.createCollection(" mycappedcoll ", { "capped":true, "size" : 100000 ,"autoIndexId" : true})
五. 注意事项:
① 当写比读多时,建议不要在Capped Collection上创建索引,会降低速度
② 没有指定顺序,返回结果就是按照插入顺序排序,使用nature ordering可以有效检索最近插入的元素
③ createCollection还可以创建一般的集合,有参数autoIndexID决定是否需要在_id字段上创建索引
④Capped集合大小固定,经常被刷新,所以不能被Shard
来自《深入云计算:MongoDB管理与开发实战详解》