简单介绍:
在mongodb中,除了普通的collections,还有一种特殊的collections,叫做capped collections,他有点类似于myql 的ib_logfile,
预先分配大小,插入时以先进先出的方式处理,自动维护集群的大小和顺序,写入时如果不建索引和mysql的日志写入性能差不多,都是顺序写入;
创建方式:
db.createCollection;
function (name, opt) {
var options = opt || {};
var cmd = {create:name, capped:options.capped, size:options.size, max:options.max};
if (options.autoIndexId != undefined) {
cmd.autoIndexId = options.autoIndexId;
}
var res = this._dbCommand(cmd);
return res;
}
5个参数
name:集合名字
capped:创建capped 集合必选
size:文件大小字节
max最大记录数
autoIndexId如果指定为true,会在_id上创建索引,默认情况下collection是创建索引的,但是capped collection不创建
在32为机器上最大大小为482M,在64为机器上受文件系统限制;
查看已经使用了多少空间的函数
validate()
查看是否是固定集合
isCapped()
将普通集合转换为capped collection
db.runCommand({"convertToCapped":"mysqlcoll",size:1000})
使用约束
只能插入和更新,删除需要使用drop()删除所有行,删除行数之后必须显示重新创建;
如果试图插入一个比size还大的集合会失败
检查大小是优先顺序是先size后maxRowNumber
不能sharding
常见用处
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操作
参考文献
http://www.cnblogs.com/zhy4606/archive/2011/09/14/2175424.html
http://xiayuanfeng.iteye.com/blog/989024