Capped collections是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能 创建一个 Capped Collection 和标准的collection不同,你必须要显式的创建一个capped collection, > db.createCollection("mycoll", {capped:true, size:100000}) 使用和约束 •在capped collection中,你能添加新的对象。 你可能也需要限定collection中对象的数量。如果到了限制的数量,就要移除一个最近的插入。 限制对象的数量, 指定 max参数。 注意: 当指定了对象的数量,你也必须要限制存储大小。 要确定的是存储大小要完全能够存储限制的对象数, 不然的话,移除对象速度会加快。你可以使用validate()工具来查看collection使用的存储空间, 这样就可以预估需要的空间。 注意: 只限制存储大小性能要更好一些。 db.createCollection("mycoll", {capped:true, size:100000, max:100}); 提示: 当编程的时候,存储最近对象的版本号的方法就是把max参数设为1(max=1)。 预分配普通的collection db.createCollection("mycoll", {size:10000000}); 通过createCollection来显式创建一个非capped collection允许指定一些参数。 如,指定collection大小,来预分配collection所需的硬盘空间。 autoIndexId 字段可以指定是否要在_id创建唯一索引。默认的情况下, 非capped collection要在_id上创建索引。 默认的情况下,capped collection不会在_id添加索引。 Sharding 查看一个collection是否为capped collection
我们通过createCollection来创建一个固定集合,且capped选项设置为true: >db.createCollection("cappedLogCollection",{capped:true,size:10000}) 还可以指定文档个数,加上max:1000属性: >db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000}) 判断集合是否为固定集合: >db.cappedLogCollection.isCapped() 如果需要将已存在的集合转换为固定集合可以使用以下命令: >db.runCommand({"convertToCapped":"posts",size:10000}) 以上代码将我们已存在的 posts 集合转换为固定集合。 固定集合查询 固定集合文档按照插入顺序储存的,默认情况下查询就是按照插入顺序返回的,也可以使用$natural调整返回顺序。 >db.cappedLogCollection.find().sort({$natural:-1}) 固定集合的功能特点 可以插入及更新,但更新不能超出collection的大小,否则更新失败,不允许删除,但是可以调用drop()删除集合中的所有行,但是drop后需要显式地重建集合。 在32位机子上一个cappped collection的最大值约为482.5M,64位上只受系统文件大小的限制。 固定集合属性及用法 属性 属性1:对固定集合进行插入速度极快 用法 用法1:储存日志信息 |