mongoDB 定长集合(capped collection)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 大多数情况下,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
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
2月前
|
NoSQL MongoDB 数据库
MongoDB 删除集合
10月更文挑战第14天
33 1
|
1月前
|
缓存 NoSQL MongoDB
|
2月前
|
存储 NoSQL MongoDB
MongoDB 创建集合
10月更文挑战第13天
34 1
|
4月前
|
存储 NoSQL 数据管理
揭秘MongoDB时间序列集合:这个超级功能将如何彻底改变你的数据管理?
【8月更文挑战第8天】时间序列数据记录随时间变化的信息,在数据库管理中至关重要。MongoDB自4.0版起引入时间序列集合,专为这类数据优化存储与查询。通过问答形式介绍其特点:自动数据过期、高效存储机制及快速查询操作。创建时需指定时间字段及可选元数据字段。支持设置数据过期时间,采用粗粒度索引减少I/O操作。查询时可通过时间范围筛选数据,并利用聚合框架进行数据分析。随着实时分析需求的增长,时间序列集合的应用将更加广泛。
186 0
|
6月前
|
NoSQL 安全 MongoDB
精准数据清理:掌握 MongoDB 删除集合的方法与最佳实践
精准数据清理:掌握 MongoDB 删除集合的方法与最佳实践
211 0
|
6月前
|
存储 NoSQL MongoDB
MongoDB 集合创建指南:命名规范、索引优化和数据模型设计
MongoDB 集合创建指南:命名规范、索引优化和数据模型设计
122 0
|
NoSQL MongoDB 数据库
04 MongoDB - 集合操作
04 MongoDB - 集合操作
60 0
|
2月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
1月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
2月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。