【MongoDB】固定集合(Capped Collections)
本章内容:
- 概述
- 特性
- 限制和建议
- 使用步骤
一、概述
固定集合是大小固定的集合,它们支持高吞吐量操作,这些操作根据插入文档和按照插入顺序检索(retrieve)文档。固定集合的工作方式类似于循环缓存:一旦集合的分配空间占满了,它就会通过覆盖集合中最旧的文档为新文档腾出空间。
有关创建固定集合的更多信息,请参见createCollection()或create。
提示
作为固定集合的替代方案,可以考虑MongoDB TTL(Time To Live生存时间)索引。如通过设置TTL使集合中的数据过期中所述,TTL索引可以基于日期类型字段的值和索引的TTL值使正常集合中的数据过期并删除。
TTL索引与固定集合不兼容。
二、特性
1. 插入顺序
固定集合确保对数据插入顺序进行维护。因此,无需索引查询即可按插入顺序返回文档。由于没有这种索引开销,则有固定集合可以支持更高的插入吞吐量。
2. 自动删除最早文档
为了给新文档腾出空间,固定集合会自动删除集合中最早的文档,而无需脚本或显式删除操作。
以下是可能使用固定集合的场景:
- 存储大容量系统生成的日志信息。在没有索引的情况下将文件插入固定集合中,将插入日志信息速度接近于直接写入文件系统的速度。此外,内置的先进先出属性可在管理存储空间的同时维护插入事件的顺序。
- 在固定集合中缓存少量数据。由于缓存数据大量读取操作而非写操作,因此要么确保此集合始终保留在工作集中(即在RAM中),要么对所需的一个或多个索引进行写惩罚。
例如,存储操作日志的副本集的oplog.rs集合就是使用固定集合。从MongoDB 4.0开始,不同于其他固定集合,操作日志可以超出其配置的大小限制,以避免删除多数提交点。
3. _id索引
固定集合默认具有_id字段和_id字段上的索引。
三、限制和建议
1. 更新文档
如果要更新固定集合中的文档,最好先创建索引,这样更新操作就不会执行集合扫描。
2. 文档大小
在版本3.2中更改。
如果更新或替换操作更改了文档大小,则该操作将失败。
3. 文档删除
无法从固定集合中删除文档。
要删除集合中的所有文档,使用drop()方法删除集合并重新创建固定集合。
4. 分片
固定集合无法分片。
5. 查询效率
使用自然顺序可以有效地从集合中检索最近插入的元素。这(有点)类似于日志文件上的tail。
6. 聚合$ out
聚合管道 $ out结果不能写入固定集合。
7. 事务
从MongoDB 4.2开始,在事务中不能写入固定集合。在事务中支持从固定集合中读取。
四、操作步骤
1. 创建固定集合
只能使用db.createCollection()方法显式创建固定集合,该方法是mongo shell中create命令的帮助器。
创建固定集合时,必须指定集合大小的上限(以字节为单位),MongoDB将为该集合预先分配指定上限大小的空间。固定集合的大小包括少量内部开销空间。
db.createCollection( "log", { capped: true, size: 100000 } )
如果size字段小于或等于4096,则集合的上限为4096字节。否则,MongoDB将提高提供size的大小,使其成为256的整数倍。
此外,还可以使用max字段为集合指定最大文档数,如以下文档所示:
db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )
重要
即使指定最大文档数,也始终需要size参数。如果集合在达到最大文档数之前达到最大size限制,MongoDB将删除较早的文档。
参考资料:db.createCollection()和create。
2.查询固定集合
如果在不指定任何顺序的固定集合上执行find(),则MongoDB保证查询出结果的顺序与插入顺序相同。
要与插入顺序的相反顺序来检索文档,执行find()同时执行sort()方法,并将sort的$natural参数设置为-1,如以下示例所示:
db.cappedCollection.find().sort( { $natural: -1 } )
3.检查集合是否是固定集合
使用isCapped()方法来判断集合是否是固定集合,如下所示:
db.collection.isCapped()
4.将集合转换为固定集合
convertToCapped命令可将非固定集合转换为固定集合:
db.runCommand({"convertToCapped": "mycoll", size: 100000});
size参数以字节为单位,指定固定集合的大小。
在转换操作期间,它将持有数据库排他锁。被锁定的数据库的其他操作将被阻止,直到该操作完成。
对于锁定数据库的操作,请参阅一些常见的客户端操作采取了哪些锁?。
5.tailable游标
可以将tailable游标(尾游标)与固定集合一起使用。与Unix tail -f命令类似,tailable游标“尾随”在固定集合的末尾。
将新文档插入固定集合后,可使用可尾游标继续检索文档。
有关创建可尾光标的信息,请参见尾游标。
关于尾游标:MongoDB Tailable Cursors深入剖析
英文原文参考:capped-collections
【MongoDB】固定集合(Capped Collections)相关推荐
- mongodb固定集合(Capped Collections) | MongoDB 自动删除集合中过期的数据——TTL索引
文章目录 mongodb固定集合(Capped Collections) 一.什么是mongodb固定集合(Capped Collections) 二.Capped Collections使用场景 三 ...
- mongodb固定集合(Capped Collection)和大文件管理(GridFS)
Capped Collection 固定集合(Capped Collection)是性能出色的有着固定大小的集合,以LRU(Least Recently Used最近最少使用)规则和插入顺序进行age ...
- MongoDB 固定集合(Capped Collections)
refs: 1)Capped Collections | MongoDB Blog 2)https://xiayuanfeng.iteye.com/blog/989024 3)MongoDB 固定集合 ...
- Mongodb固定集合
2019独角兽企业重金招聘Python工程师标准>>> Mongodb固定集合 博客分类: java mongodb Capped Collection(固定集合) 简单介绍 cap ...
- MongoDB 教程五: MongoDB固定集合和性能优化
MongoDB 固定集合(Capped Collections) MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环 ...
- 10,有上限集合(Capped collections)
有上限集合(Capped collections): Capped集合是固定大小的集合,支持基于插入顺序插入和检索文档的高吞吐量操作.Capped集合的工作方式类似于循环缓冲区:一旦集合填满了它分配的 ...
- MongoDB 教程五: MongoDB固定集合和性能优化 (索引Indexes, 优化器, 慢查询profile)
mongodb索引详解(Indexes) 索引介绍 索引在mongodb中被支持,如果没有索引,mongodb必须扫描每一个文档集合选择匹配的查询记录.这样扫描集合效率并不高,因为它需要mongod进 ...
- mongodb主从设置,capped collections等常用命令集合
############### Mongodb 主 <==> 从切换的时候要删除 ############## ############### use local ####### ...
- MongoDB固定集合(capped collection)
一 . 什么是固定集合 MongoDB中有一种特殊类型的集合,值得我们特别留意,那就是固定集合(capped collection). 固定集合可以声明collection的容量大小,其行为类似于循环 ...
最新文章
- 多任务学习(Multi-Task Learning, MTL)、其他分类形式、与迁移学习的关系
- 潜移默化学会WPF--绘图 学习(一)
- Document Builder: directly change element in Webdynpro ui
- idea mac 替换_Mac软件IntelliJ IDEA 上的快捷键,让你的工作更加顺畅
- python轮廓函数的使用
- Java字节序,java整型数与网络字节序 byte[] 数组转换关系
- 扫地机器人的特点描写_扫地机器人的特点和作用
- SpringBoot/Cloud 统一返回优雅设计+自定义异常
- (八)linux驱动之ioctl的使用
- java启动应用_java 学习:在java中启动其他应用,由jenkins想到的
- 顶级MySQL主从复制企业应用
- unbuntu 18.04 LTS 版 安装Samba服务器
- python中素数的求法_python求质数的3种方法
- git中将多次commit合并为一次commit
- 充电IC驱动调试----移植充电IC bq25601
- debugger for mysql_debugger for mysql
- python数字华容道
- 爬虫:Robots协议
- 【必看】论文写作入门技巧
- Flink1.16 发布新特性
热门文章
- spark读取hive表异常,处理WARN HiveExternalCatalog: The table schema given by Hive metastore
- poj 1966 Cable TV Network
- 开源如何推动云计算的发展与创新 | 雨林开源行
- im即时通讯开发:万人群聊消息
- oracle for循环遍历数组,foreach循环
- A电机不转 米兔机器人_米兔积木机器人改装智能车库(上)|搭建步骤
- eNSP路由协议——静态路由配置
- 做好项目管理,项目经理需要具备哪些优秀品质?
- 【JSOI2016】【st表/猫树】【枚举】灯塔
- 使用Scrutiny在您的网站中查找不同网址中的重复内容的方法