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