固定集合:capped collection 是性能出色的固定大小的集合,以LRU算法淘汰记录,自助维护集合中的对象的插入顺序,创建时预先制定大小,空间使用完,心对象取代旧的对象,保持最新的数据。
可以插入及更新,但更新不能超出
collection 的大小,否则更新失败。不允许删除,但是可 以调用 drop() 删除集合中的所有行,但是drop 后需要显式地重建集合。在 32 位机上,一 个 capped collection 的最大值约为 482.5M,64 位上只受系统文件大小的限制。
属性以及用法:
属性:1、对固定集合插入速度极快。
2、按照插入顺序的查询输出速度极快。
3、能够在插入最新时候淘汰最早的数据。
用法:1、储存日志信息。
2、储存少量的文档。
使用
1、可以在创建 capped collection 时指定 collection 中能够存放的最大文档数。但这时也要指
定 size, 因为总是先检查 size 后检查 maxRowNumber。 可以使用 validate()查看一个 collection 已经使用了多少空间,从而决定size 设为多大。如:
db.createCollection("mycoll", {capped:true, size:100000, max:100}); //100000表示字节
注意:指定文档上限,必须指定大小,文档限制是在容量没满时进行淘汰,要是满了,就根据容量限制来进行淘汰。
> db.createCollection("mycol",{capped:true,size:100000,max:100}) { "ok" : 1 } > db.mycol.val db.mycol.validate( db.mycol.valueOf( > db.mycol.validate() //用来查看固定集合的使用情况 { "ns" : "admin.mycol", "capped" : true, "max" : 100, "firstExtent" : "0:8c000 ns:admin.mycol", "lastExtent" : "0:8c000 ns:admin.mycol", "extentCount" : 1, "datasize" : 0, "nrecords" : 0, "lastExtentSize" : 102400, "padding" : 1, "firstExtentDetails" : { "loc" : "0:8c000", "xnext" : "null", "xprev" : "null", "nsdiag" : "admin.mycol", "size" : 102400, "firstRecord" : "null", "lastRecord" : "null" }, "deletedCount" : 2, "deletedSize" : 102224, "nIndexes" : 1, "keysPerIndex" : { "admin.mycol.$_id_" : 0 }, "valid" : true, "errors" : [ ], "warning" : "Some checks omitted for speed. use {full:true} option to do more thorough scan.", "ok" : 1 } > db.createCollection("mycol",{capped:true,size:100000,max:100,autoIndexId:false}) //创建collection时还有一个参数”autoIndexID”,值可以为”true”和”false”,决定是否需要在”_id”上创建索引 { "ok" : 0, "errmsg" : "collection already exists" } > db.mycol.drop() true > db.createCollection("mycol",{capped:true,size:100000,max:100,autoIndexId:false}) { "ok" : 1 } >
2、转换集合 把test普遍集合转换为固定集合,大小为10000字节.
db.runCommand( { convertTocapped:"test",size:10000 } );
3、自然排序
固定集合文档按照插入顺序储存的,默认情况下查询就是按照插入顺序返回的,也可以使用$natural调整返回顺序.
db.mycappedcolt.find().sort( {"$natural":1} );
参数1表示默认顺序,-1则相反.
4、判断集合是否为固定集合
db.colt.isCapped();
5、查看集合状态信息
db.colt.stats();