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

1 查看 oplog 是否是 Capped Collection

 [mongo@redhatB ~]$ mongo 127.0.0.1:
MongoDB shell version: 2.2.
connecting to: 127.0.0.1:/test rs0:PRIMARY> use local;
switched to db local rs0:PRIMARY> show collections;
me
oplog.rs
replset.minvalid
slaves
system.indexes
system.replset rs0:PRIMARY> db.oplog.rs.isCapped();
true

备注:通过 db.collection.isCapped() 命令可以查看一个集合是否是 Capped Collection 。
  
  
   Capped Collection 具有以下特性,在使用的时候需要注意:
  
   1 不可以对 Capped Collection 进行分片。
  
   2 在 2.2 版本以后,创建的Capped Collection 默认在  _id 字段上创建索引,而在 2.2 版本或以前没有。
  
   3 在 Capped Collection 插入文档后可以进行更新(update)操作,当更新不能导致原来文档占用
       空间增长,否则更新失败。
    
   4 不可以对 capped collection 执行删除文档操作,但可以删除整个集合。
   
       接下来会测试其中的部分特性。

2 创建 Capped Collection

 rs0:PRIMARY> db.createCollection("mycoll1",{capped:true,size:});
{ "ok" : }

备注:通过 db.createCollection 命令创建 Capped Collection 集合,创建时必须指定
             集合大小,用于预先分配空间。

3 查看一个集合是否是 Capped Collection
 
   可以通过以下两种方法查看一个集合是否是 Capped Collection 。

 rs0:PRIMARY> db.mycoll1.isCapped();
true rs0:PRIMARY> db.mycoll1.stats();
{
"ns" : "test.mycoll1",
"count" : ,
"size" : ,
"storageSize" : ,
"numExtents" : ,
"nindexes" : ,
"lastExtentSize" : ,
"paddingFactor" : ,
"systemFlags" : ,
"userFlags" : ,
"totalIndexSize" : ,
"indexSizes" : {
"_id_" :
},
"capped" : true,
"max" : ,
"ok" :
}

备注:"capped" 属性为 true 表示是 Capped Collection 。

4 测试:插入记录

 rs0:PRIMARY>  for (var i = ; i <= ; i++) db.mycoll1.save({id : i, name : 'francs'});

rs0:PRIMARY> db.mycoll1.find().count();

rs0:PRIMARY> db.mycoll1.find();
{ "_id" : ObjectId("50b811cf68b1911e7096db7f"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db80"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db81"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db82"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db83"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db84"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db85"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db86"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db87"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db88"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db89"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db8a"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db8b"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db8c"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db8d"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db8e"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db8f"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db90"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db91"), "id" : , "name" : "francs" }
{ "_id" : ObjectId("50b811cf68b1911e7096db92"), "id" : , "name" : "francs" }
Type "it" for more

备注:由于限制了集合大小不小,目标插入 10000 条,结果只插入了 56 条数据,并且老数据被新数据
             覆盖。另外不可以删除 Capped Collection 的文档,下面测试下。
 
5  测试: 删除 capped collection 中的文档

 rs0:PRIMARY> db.mycoll1.remove({id:});
canot remove from a capped collection

备注:删除文档时抛出异常。

6  测试:更新 capped collection 中的文档

 rs0:PRIMARY> db.mycoll1.find({id:});
{ "_id" : ObjectId("50b811cf68b1911e7096db8a"), "id" : , "name" : "francs" } rs0:PRIMARY> db.mycoll1.update({id:},{$set:{name:'aaa_francs'}});
failing update: objects in a capped ns cannot grow rs0:PRIMARY> db.mycoll1.update({id:},{$set:{name:'bbb'}}); rs0:PRIMARY> db.mycoll1.find({id:});
{ "_id" : ObjectId("50b811cf68b1911e7096db8a"), "id" : , "name" : "bbb" }

备注:这里正好验证了特性3,更新后的值不能超过原有空间,否则更新失败。

MongoDB 之 Capped Collection的更多相关文章

  1. 基于mongoDB的capped collection的性能优化

    MonitorLogging改造(消息接入) 改造前架构: 可以看出原来的流程中,大量业务分析,业务接入耦合在web服务层.大量操作,导致线程线性的挂起线程. 改造后: 将业务通讯抽象成为Monito ...

  2. mongodb的capped Collection集合

    db.createCollection(name, {capped: true, autoIndexId: true, size: 1000, max :100} ) name:集合的名字 cappe ...

  3. MongoDB整理笔记のCapped Collection

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

  4. 关于MongoDB 固定集合(capped collection)的知识梳理

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

  5. MongoDB固定集合(capped collection)

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

  6. mongoDB 固定集合(capped collection)

    固定集合(Capped Collection)是一种尺寸固定的“循环”集合,可提供高效的创建.读取.删除等操作.这里所指的“循环”的意思是,当分配给集合的文件尺寸耗尽时,就会自动开始删除最初的文档,不 ...

  7. Mongodb Capped Collection集合

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

  8. Mongodb学习笔记(二)Capped Collection固定集合

    一.Capped Collection固定集合 简单介绍 capped collections是性能出色的有着固定大小的集合(定容集合),以LRU(Least Recently Used最近最少使用) ...

  9. MongoDB-固定集合 capped collection 操作 介绍

    固定集合:capped collection 是性能出色的固定大小的集合,以LRU算法淘汰记录,自助维护集合中的对象的插入顺序,创建时预先制定大小,空间使用完,心对象取代旧的对象,保持最新的数据. 可 ...

随机推荐

  1. ResolveUrl的用法

    <script src='<%=ResolveUrl("~/UserControls/M3/Validate.js") %>' type="text/j ...

  2. C语言 · 色盲的民主

    算法提高 色盲的民主   时间限制:1.0s   内存限制:256.0MB      问题描述 n个色盲聚在一起,讨论一块布的颜色.尽管都是色盲,却盲得各不相同.每个人都有自己的主张,争论不休.最终, ...

  3. C语言 · 递归倒置字符数组

    算法提高 递归倒置字符数组   时间限制:1.0s   内存限制:512.0MB      问题描述 完成一个递归程序,倒置字符数组.并打印实现过程 递归逻辑为: 当字符长度等于1时,直接返回 否则, ...

  4. android:screenOrientation的说明

    在Android的官方文档当中,对android:screenOrientation的说明如下: http://www.cnblogs.com/snowberg/archive/2012/07/15/ ...

  5. Go Revel - Websockets

    revel提供了对`Websockets`的支持. 处理`Websockets`链接: 1.添加一个`WS`类型方法的路由 2.添加一个action接受 `*websocket.Conn`参数 例如, ...

  6. systemd管理网络应用

    采用systemd-networkd管理网卡 主网卡eth0的配置文件/etc/systemd/network/20-eth0.network,静态配置时内容示例如下: [Match] Name=et ...

  7. Vagrant (2) —— 基本安装与配置(下)

    Vagrant (2) -- 基本安装与配置(下) 摘要 基本安装与配置 版本 Vagrant版本: 1.8.1 内容 预置 我们可以通SSH登录然后安装一个web服务器,但是这样每个使用Vagran ...

  8. 【oneday_onepage】——美国主食吃什么

    Cocktail 鸡尾酒 It is quite usual to drink cocktails before lunch and dinner in America and somewhat le ...

  9. WebForm发送邮件

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Ne ...

  10. 无法转换json问题 Error: Model.nodeDataArray value is not an instance of Array or NodeList or HTMLCollection

    var jsonobj=eval('('+t+')'); 使用eval 函数,讲后台json字符串转换为前台jsarray数组. 如果使用 ajax不会出现这种情况,因为会自动转换. 但是如果直接从后 ...