大多数情况下,mongoDB中都是普通的集合,这些集合也称为动态集合,可以自动增长以容纳更多的数据。但这并不适合所有的场景。比如需要保存应用程序的某一个时间段日志,对于历史日志需要定期老化。这种情形下,定长集合就派上了用场。本文描述了定长集合的特性以及给出相关演示。

一、定长集合的特性

需要事先创建,创建时指定大小,即大小固定,后续不可以随意改变
新文档被插入到队列末尾
使用循环的方式老化最老的文档,即不支持从定长集合手动删除文档
数据被顺序写入到磁盘上的固定空间
固定集合不能被分片
由于覆盖特性,其应用场景通常可以用于记录日志

二、演示定长集合

//mongoDB版本及运行环境
C:\Users\Think>mongod --version
db version v3.2.9
git version: 22ec9e93b40c85fc7cae7d56e7d6a02fd811088c
OpenSSL version: OpenSSL 1.0.1p-fips 9 Jul 2015
allocator: tcmalloc
modules: none
build environment:distmod: 2008plus-ssldistarch: x86_64target_arch: x86_64//创建语法:
db.createCollection(<name>, { capped: <boolean>,autoIndexId: <boolean>,size: <number>,max: <number>,storageEngine: <document>,validator: <document>,validationLevel: <string>,validationAction: <string>,indexOptionDefaults: <document> } ))
name指定集合的名字
autoIndexId是否自动基于_id列创建索引,缺省情况下创建索引
size指定collection的大小。
max指定collection中的document的个数C:\Users\Think>mongo
MongoDB shell version: 3.2.9
connecting to: test
//创建一个名为log的定长集合,长度为100000个字节
> db.createCollection( "log", { capped: true, size: 100000 } )
{ "ok" : 1 }//创建一个名为log1的定长集合,长度为5242880个字节,可容纳的文档数为5
> db.createCollection("log1", { capped : true, size : 5242880, max : 5 } )
{ "ok" : 1 }> for (var i=1;i<10;i++){
... db.log1.insert({"ename":"usr"+i});
... }
WriteResult({ "nInserted" : 1 })
> db.log1.find()
{ "_id" : ObjectId("57cbb1cadbe9385190a86560"), "ename" : "usr5" }
{ "_id" : ObjectId("57cbb1cadbe9385190a86561"), "ename" : "usr6" }
{ "_id" : ObjectId("57cbb1cadbe9385190a86562"), "ename" : "usr7" }
{ "_id" : ObjectId("57cbb1cadbe9385190a86563"), "ename" : "usr8" }
{ "_id" : ObjectId("57cbb1cadbe9385190a86564"), "ename" : "usr9" }//从上面的测试可知,usr1到usr4已经被覆盖了//判断一个集合是否是定长集合
> db.log.isCapped()
true//查看集合的状态
> db.getCollection('log1').stats()
{"ns" : "test.log1","count" : 5,"size" : 190,"avgObjSize" : 38,"storageSize" : 16384,"capped" : true,    //表示一个定长集合"max" : 5,          //最大文档数为5"maxSize" : 5242880,//最大长度为5242880"sleepCount" : 0,"sleepMS" : 0,..........//定长集合的倒序输出
> var list=db.log1.find().sort( { $natural: -1 } ).toArray();
> printjson(list)
[{"_id" : ObjectId("57cbb1cadbe9385190a86564"),"ename" : "usr9"},{"_id" : ObjectId("57cbb1cadbe9385190a86563"),"ename" : "usr8"},{"_id" : ObjectId("57cbb1cadbe9385190a86562"),"ename" : "usr7"},{"_id" : ObjectId("57cbb1cadbe9385190a86561"),"ename" : "usr6"},{"_id" : ObjectId("57cbb1cadbe9385190a86560"),"ename" : "usr5"}
]  //普通集合转换为定长集合> db.users.insert({ename:"robin",age:25,male:"M"})
WriteResult({ "nInserted" : 1 })
> db.users.isCapped()
false
> db.runCommand({"convertToCapped":"users","size":1000})
{ "ok" : 1 }
> db.users.isCapped()
true

mongoDB 定长集合(capped collection)相关推荐

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

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

  2. MongoDB固定集合(capped collection)

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

  3. Mongodb Capped Collection集合

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

  4. MongoDB 官方文档学习笔记(一):概述、数据库、集合、视图及定容集合

    MongoDB概述 Getting started 准备环境 学习之前需要,安装MongoDB,可参考:https://docs.mongodb.com/manual/installation/ Mo ...

  5. MongoDB Capped Collection介绍

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

  6. mongodb固定集合(Capped Collections) | MongoDB 自动删除集合中过期的数据——TTL索引

    文章目录 mongodb固定集合(Capped Collections) 一.什么是mongodb固定集合(Capped Collections) 二.Capped Collections使用场景 三 ...

  7. mongodb Capped Collection

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

  8. MongoDB 之 Capped Collection

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

  9. 【MongoDB】固定集合(Capped Collections)

    本章内容: 概述 特性 限制和建议 使用步骤 一.概述 固定集合是大小固定的集合,它们支持高吞吐量操作,这些操作根据插入文档和按照插入顺序检索(retrieve)文档.固定集合的工作方式类似于循环缓存 ...

最新文章

  1. Dynamic CRM 2013学习笔记(四十三)流程6 - 自定义流程活动
  2. 如何测试一个网页登陆界面
  3. why my detail page in SAP UI5 application is failed to be loaded from router
  4. python seed()
  5. 戴尔看好Ubuntu超越Windows的十个优势
  6. 前端学习(2380):调整目录结构
  7. ios沙箱模式开启_iOS沙盒篇
  8. [CC]CC插件初探
  9. AndroidStudio_从Eclipse到AndroidStudio开发工具_认识使用AndroidStudio_导入用eclipse开发的工程---Android原生开发工作笔记69
  10. php网页示例,新手入门:初学动态网页PHP的18个例子
  11. 2016 ICPC 大连网络赛 部分题解
  12. 数组:正整数数组分成2组使其和的差的绝对值最小
  13. 校园网客户端没有linux版,Linux版校园网客户端公测中(已添加GUI输入窗口)njit-clent...
  14. 最详细的讲解过滤器,拦截器,AOP的区别
  15. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
  16. 用LSTM生成武侠人名
  17. Greenplum -- 最全分区表操作
  18. 求阶乘之和(循环版)(利用阶乘函数)
  19. r语言 网站数据查找
  20. ESX5.1 安装Hyper v

热门文章

  1. django-vue互传图片并处理和展示
  2. java图片高斯模糊
  3. gwas snp 和_GWAS分析原理浅谈
  4. Policy Iteration与Value Iteration
  5. linux suspend函数,linux pm-suspend过程彻底研究
  6. sublime使用浏览器快捷键配置问题和谷歌浏览器打开html文件问题(小菜鸟汇总)
  7. 人工智能-模糊计算(二)
  8. 三、单片机读取ID卡(EM4100的数据格式)
  9. BUUCTF闯关日记--[MRCTF2020]你传你呢(超详解)
  10. 数据融合的技术/算法