mongoDB 定长集合(capped collection)

简介: 大多数情况下,mongoDB中都是普通的集合,这些集合也称为动态集合,可以自动增长以容纳更多的数据。

大多数情况下,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-ssl
    distarch: x86_64
    target_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
目录
相关文章
|
NoSQL MongoDB 数据库
MongoDB 删除集合
10月更文挑战第14天
509 1
|
NoSQL 关系型数据库 MongoDB
微服务——MongoDB常用命令——集合操作
本节主要介绍MongoDB中的集合操作,包括显式与隐式创建集合的方法。显式创建使用`db.createCollection(name)`,需遵循命名规范(如不能以&quot;system.&quot;开头或包含`\0`字符)。隐式创建则通过直接向不存在的集合插入文档实现,更为常用。此外,还介绍了集合删除方法`db.collection.drop()`及其返回值规则,帮助用户管理数据库中的集合资源。
528 0
|
缓存 NoSQL MongoDB
|
存储 NoSQL MongoDB
MongoDB 创建集合
10月更文挑战第13天
315 1
|
存储 NoSQL 数据管理
揭秘MongoDB时间序列集合:这个超级功能将如何彻底改变你的数据管理?
【8月更文挑战第8天】时间序列数据记录随时间变化的信息,在数据库管理中至关重要。MongoDB自4.0版起引入时间序列集合,专为这类数据优化存储与查询。通过问答形式介绍其特点:自动数据过期、高效存储机制及快速查询操作。创建时需指定时间字段及可选元数据字段。支持设置数据过期时间,采用粗粒度索引减少I/O操作。查询时可通过时间范围筛选数据,并利用聚合框架进行数据分析。随着实时分析需求的增长,时间序列集合的应用将更加广泛。
941 1
|
NoSQL 安全 MongoDB
精准数据清理:掌握 MongoDB 删除集合的方法与最佳实践
精准数据清理:掌握 MongoDB 删除集合的方法与最佳实践
859 0
|
存储 NoSQL MongoDB
MongoDB 集合创建指南:命名规范、索引优化和数据模型设计
MongoDB 集合创建指南:命名规范、索引优化和数据模型设计
571 0
|
9月前
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
9月前
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
948 79
|
9月前
|
存储 NoSQL MongoDB
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
376 8
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉

推荐镜像

更多