Capped集合

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管理与开发实战详解》

你可能感兴趣的:(Collection,Capped,Capped集合)