一 Capped Collection 简介 

Capped Collection 是一种特殊的集合,它大小固定,当集合的大小达到指定大小时,新数据覆盖老数据。Capped collections可以按照文档的插入顺序保存到集合中,而且这些文档在磁盘上存放位置也是按照插入顺序来保存的,所以当我们更新Capped collections中文档的时候,更新后的文档不可以超过之前文档的大小,这样话就可以确保所有文档在磁盘上的位置一直保持不变。
        由于Capped collection是按照文档的插入顺序而不是使用索引确定插入位置 ,这样的话可以提高增添数据的效率。MongoDB的操作日志文件oplog.rs就是利用Capped Collection来实现的。
       除此之外,Capped Collection还有以下的一些特点,首先是不允许删除,但是可以调用drop()删除集合中的所有行,不许删除的原因也是为了保持每个文档在磁盘上的位置不变。在32位机器上一个capped collection的最大值约482.5M,64位上没有限制系统文件大小限制。不可以对 Capped Collection 进行分片,在 2.2 版本以后,创建的Capped Collection 默认在  _id 字段上创建索引,而在 2.2 版本或以前没有。        
         Capped Collection主要用于存储日志信息和缓存一些少用的文档。

二 Capped Collection 使用  

1.创建Capped Collection

> db.createCollection("mycoll",{capped:true,size:1024,max:10})
{ "ok" : 1 } > for(var i=1;i<1000;i++) db.mycoll.save({id:i,name:"Hello"}) > db.mycoll.count() 10 > db.mycoll.find() { "_id" : ObjectId("5274b854f007ff8bb84f6347"), "id" : 990, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f6348"), "id" : 991, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f6349"), "id" : 992, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f634a"), "id" : 993, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f634b"), "id" : 994, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f634c"), "id" : 995, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f634d"), "id" : 996, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f634e"), "id" : 997, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f634f"), "id" : 998, "name" : "Hello" } { "_id" : ObjectId("5274b854f007ff8bb84f6350"), "id" : 999, "name" : "Hello" }
> db.mycoll.isCapped()     true > db.mycoll.stats() {         "ns" : "test.mycoll",         "count" : 0,         "size" : 0,         "storageSize" : 4096,         "numExtents" : 1,         "nindexes" : 1,         "lastExtentSize" : 4096,         "paddingFactor" : 1,         "systemFlags" : 1,         "userFlags" : 0,         "totalIndexSize" : 8176,         "indexSizes" : {                 "_id_" : 8176         },         "capped" : true,         "max" : NumberLong("9223372036854775807"),         "ok" : 1 }

上面个创建了一个Capped Collection,占用1024个字节,最多10个文档,然后向其中插入了1000条数据通过 db.collection.isCapped() 和  db.mycoll.stats() 命令可以查看一个集合是否是 Capped Collection 。
 
注意: a.创建固定集合不像普通集合,固定集合需要显示的创建使用
              b.创建固定集合必须指定其大小否则会报错:
               > db.createCollection("mycoll",{capped:true})
               {                        "errmsg" : "exception: specify size:<n> when capped is true" ,                        "code" : 14832,                         "ok" : 0                }      
         c.创建集合的时候Max属性是可选的,文档数量限制是在容量没满的时候进行淘汰,要是满了,就根据容量限制来替换数据。例如上面的例子我们设置文档数量限制是10这样的话在没有达到容量上限的时候,最多只能存储10个文档。

2.查看索引
> db.mycoll.getIndexes() [        {                "v" : 1,                "key" : {                        "_id" : 1                },                "ns" : "test.mycoll",                "name" : "_id_"        }]
在2.2版本以后,创建的Capped Collection 默认在  _id 字段上创建索引。
3.尝试去更新一个文档

> db.mycoll.find({id:9998}) { "_id" : ObjectId("5274b477f007ff8bb84f5f67"), "id" : 9998, "name" : "aa" }> db.mycoll.update({id:9998},{$set:{name:"China"}})
> db.mycoll.find({id:9998}) { "_id" : ObjectId("5274b477f007ff8bb84f5f67"), "id" : 9998, "name" : "China" } >
> db.mycoll.update({id:9998},{$set:{name:"HeBeiOfChina"}}) failing update: objects in a capped ns cannot grow >
注意:
      这里成功的把name属性从aa更新为China,但当我们从China更新到HeBeiOfChina时失败了。失败的原因 更新后的文档大小值不能超过原有空间,否则更新失败。但是为什么我们更新为China没有报错呢?这里面就涉及到MongDB的Record Padding和内存对齐问题,为了提高数据的插入效率,减少数据的移动带来的性能下降,每条记录都会有不定长度的预留空间。

4.尝试去删除一个文档

> db.mycoll.remove({id:9988})
can't remove from a capped collection

使用Capped Collection 不能删除一个文档。

5.删除这个集合
> db.mycoll.drop() true
6. 普通集合转成固定集合
> db.createCollection("mycoll") { "ok" : 1 } > db.mycoll.isCapped() false > db.runCommand({convertToCapped:'mycoll',size:10000,max:3}) { "ok" : 1 } > db.mycoll.isCapped() true

首先我们创建了一个普通集合,然后使用命令  db.runCommand({convertToCapped:'mycoll',size:10000,max:3}) 将其转化为一个Capped Collection

MongoDB Capped Collection 使用相关推荐

  1. mongodb Capped Collection

    MongoDB 支持 Capped Collection,一种固定大小的集合,当集合的大小达到指定大小时, 新数据覆盖老数据,MongoDB Replica set 中的 oplog 就是 Cappe ...

  2. Mongodb Capped Collection集合

    MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素! ...

  3. MongoDB Capped Collection介绍

    简单介绍 capped collections是性能出色的有着固定大小的集合(定容集合),以LRU(Least Recently Used最近最少使用)规则和插入顺序进行 age-out(老化移出)处 ...

  4. MongoDB固定集合(capped collection)

    一 . 什么是固定集合 MongoDB中有一种特殊类型的集合,值得我们特别留意,那就是固定集合(capped collection). 固定集合可以声明collection的容量大小,其行为类似于循环 ...

  5. mongodb固定集合(Capped Collection)和大文件管理(GridFS)

    Capped Collection 固定集合(Capped Collection)是性能出色的有着固定大小的集合,以LRU(Least Recently Used最近最少使用)规则和插入顺序进行age ...

  6. 解决MongoDB报错:Cannot create collection “None“ as a capped collection as it already exist

    解决MongoDB报错:Cannot create collection "None" as a capped collection as it already exist Roo ...

  7. MongoDB 之 Capped Collection

    MongoDB 支持 Capped Collection,一种固定大小的集合,当集合的大小达到指定大小时, 新数据覆盖老数据,MongoDB Replica set 中的 oplog 就是 Cappe ...

  8. MongoDB之——Capped Collection

    转载请注明出处:https://blog.csdn.net/l1028386804/article/details/79995628 1.简单介绍 capped collections 是性能出色的有 ...

  9. 关于mongodb的Capped Collection

    在mongodb中日志的累积是个可怕的问题,日志会记录mongodb中的每项操作,项目中我们在做测试,连续发查询一周就积累了快4G的日志.查阅一些博客发现一些人是固定住日志的大小,当文件大小达到一些数 ...

最新文章

  1. java 根据圆心计算圆弧上点的经纬度_冲压件展开计算方法(二),转发给每一位冲压人...
  2. spring根据名称获取bean_带你从零开始手写 spring ioc 框架,深入学习 spring 源码
  3. ibm服务器报错代码大全_微信认证订阅号开发者模式服务器配置自定义菜单PHP独立完整版...
  4. 支付宝蚂蚁森林合种树,2-4天领证,1/2号车满员,3号车成立
  5. freebsd原理与设计精要(1)-freebsd与unix简介
  6. 日志管理(一):slf4j原理简单介绍
  7. 运维老鸟职场生活交友经验谈
  8. [Codeforces Round #195 (Div. 2)] A. Vasily the Bear and Triangle
  9. 华泰证券:科技无界,赋能金融新生态
  10. 无法启动此程序 因为计算机中丢失hypertrm.dll,开机弹出找不到HYPERTRM.dll
  11. 高斯公式积分matlab,数值分析 高斯—勒让德积分公式
  12. fw313r手机登录_2017最新迅捷(FAST)fw313r路由器手机设置教程
  13. Java语言,从入门到放弃
  14. python ttk separator_Python GUI编程(Tkinter)
  15. 2019CVPR单目深度估计综述
  16. html5指纹特效,小米11指纹特效很神奇这样设置
  17. E450Think pad 开机亮红灯,无法启动修复
  18. 直接反投影 matlab,直接反投影法.ppt
  19. CSP在线考试环境 | OBS录屏软件下载安装和设置教程
  20. 去掉设备和驱动器的百度网盘

热门文章

  1. 民用建筑工程给水排水设计深度图样_给水排水工程中几种设计流量的取值
  2. Unity Shader 屏幕后处理之血屏
  3. js中import 和require 出现@ 是什么意思
  4. 小米应用商店:网易考拉2016海淘APP下载量第一
  5. Mac npm run dev Permission denied
  6. j2ee tomcat https 证书等一系列相关知识的学习总结
  7. Pthon实现本地excel文件,病例识别分类
  8. FDTD Solutions-监视器
  9. 服装企业该如何借助ERP促进企业的良性发展?
  10. 浅谈Libre运用的技术