简单介绍:
capped collections 是性能出色的有着固定大小的集合,以 LRU(Least Recently Used 最近最少 使用)规则和插入顺序进行 age-out(老化移出)处理,自动维护集合中对象的插入顺序,在创 建时要预先指定大小。如果空间用完,新添加的对象将会取代集合中最旧的对象。
功能特点
可以插入及更新,但更新不能超出 collection 的大小,否则更新失败。不允许删除,但是可 以调用 drop() 删除集合中的所有行,但是 drop 后需要显式地重建集合。在 32 位机上,一 个 capped collection 的最大值约为 482.5M,64 位上只受系统文件大小的限制。
常见用处
1、 logging MongoDB 中日志机制的首选,MongoDB 没有使用日志文件,而是把日志事件存储在数 据库中。在一个没有索引的 capped collection 中插入对象的速度与在文件系统中记录日 志的速度相当。
2、 cache 缓存一些对象在数据库中,比如计算出来的统计信息。这样的需要在 collection 上建立 一个索引,因为使用缓存往往是读比写多。
3、 auto archiving 可以利用 capped collection 的 age-out 特性,省去了写 cron 脚本进行人工归档的工作。
推荐用法
1、 为了发挥 capped collection 的最大性能,如果写比读多,最好不要在上面建索引,否则 插入速度从"log speed"降为"database speed"。
2、使用"nature ordering"可以有效地检索最近插入的元素,因为 capped collection 能够保证 自然排序就是插入时的顺序,类似于 log 文件上的 tail 操作。
注意事项
1、可以在创建 capped collection 时指定 collection 中能够存放的最大文档数。但这时也要指 定 size,因为总是先检查 size 后检查 maxRowNumber。可以使用 validate()查看一个 collection已经使用了多少空间,从而决定 size 设为多大。
如:
db.createCollection("mycoll", {capped:true, size:100000, max:100});
db.mycoll.validate();
max=1 时会往 collection 中存放尽量多的 documents。
2、上述的 createCollection 函数也可以用来创建一般的 collection,还有一个参数 “autoIndexID”,值可以为”true”和”false”来决定是否需要在”_id”字段上自动创建索引,如:
db.createCollection("mycoll", {size:10000000, autoIndexId:false})。
默认情况下对一般的 collection 是创建索引的,但不会对 capped collection 创建。