现在的位置: 首页 > 综合 > 正文

mongo capped collection功能介绍及使用注意事项

2013年08月20日 ⁄ 综合 ⁄ 共 1352字 ⁄ 字号 评论关闭

简单介绍:
 在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

抱歉!评论已关闭.