MongoDB学习笔记(4)--Capped Collection
简单介绍
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创建。