本章内容:

  • 概述
  • 特性
  • 限制和建议
  • 使用步骤

一、概述

固定集合是大小固定的集合,它们支持高吞吐量操作,这些操作根据插入文档和按照插入顺序检索(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)相关推荐

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

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

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

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

  3. MongoDB 固定集合(Capped Collections)

    refs: 1)Capped Collections | MongoDB Blog 2)https://xiayuanfeng.iteye.com/blog/989024 3)MongoDB 固定集合 ...

  4. Mongodb固定集合

    2019独角兽企业重金招聘Python工程师标准>>> Mongodb固定集合 博客分类: java mongodb Capped Collection(固定集合) 简单介绍 cap ...

  5. MongoDB 教程五: MongoDB固定集合和性能优化

    MongoDB 固定集合(Capped Collections) MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环 ...

  6. 10,有上限集合(Capped collections)

    有上限集合(Capped collections): Capped集合是固定大小的集合,支持基于插入顺序插入和检索文档的高吞吐量操作.Capped集合的工作方式类似于循环缓冲区:一旦集合填满了它分配的 ...

  7. MongoDB 教程五: MongoDB固定集合和性能优化 (索引Indexes, 优化器, 慢查询profile)

    mongodb索引详解(Indexes) 索引介绍 索引在mongodb中被支持,如果没有索引,mongodb必须扫描每一个文档集合选择匹配的查询记录.这样扫描集合效率并不高,因为它需要mongod进 ...

  8. mongodb主从设置,capped collections等常用命令集合

    ############### Mongodb  主 <==> 从切换的时候要删除  ############## ############### use local    ####### ...

  9. MongoDB固定集合(capped collection)

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

最新文章

  1. 多任务学习(Multi-Task Learning, MTL)、其他分类形式、与迁移学习的关系
  2. 潜移默化学会WPF--绘图 学习(一)
  3. Document Builder: directly change element in Webdynpro ui
  4. idea mac 替换_Mac软件IntelliJ IDEA 上的快捷键,让你的工作更加顺畅
  5. python轮廓函数的使用
  6. Java字节序,java整型数与网络字节序 byte[] 数组转换关系
  7. 扫地机器人的特点描写_扫地机器人的特点和作用
  8. SpringBoot/Cloud 统一返回优雅设计+自定义异常
  9. (八)linux驱动之ioctl的使用
  10. java启动应用_java 学习:在java中启动其他应用,由jenkins想到的
  11. 顶级MySQL主从复制企业应用
  12. unbuntu 18.04 LTS 版 安装Samba服务器
  13. python中素数的求法_python求质数的3种方法
  14. git中将多次commit合并为一次commit
  15. 充电IC驱动调试----移植充电IC bq25601
  16. debugger for mysql_debugger for mysql
  17. python数字华容道
  18. 爬虫:Robots协议
  19. 【必看】论文写作入门技巧
  20. Flink1.16 发布新特性

热门文章

  1. spark读取hive表异常,处理WARN HiveExternalCatalog: The table schema given by Hive metastore
  2. poj 1966 Cable TV Network
  3. 开源如何推动云计算的发展与创新 | 雨林开源行
  4. im即时通讯开发:万人群聊消息
  5. oracle for循环遍历数组,foreach循环
  6. A电机不转 米兔机器人_米兔积木机器人改装智能车库(上)|搭建步骤
  7. eNSP路由协议——静态路由配置
  8. 做好项目管理,项目经理需要具备哪些优秀品质?
  9. 【JSOI2016】【st表/猫树】【枚举】灯塔
  10. 使用Scrutiny在您的网站中查找不同网址中的重复内容的方法