MongoDB中的封顶集合介绍

297 阅读3分钟

MongoDB中的封顶集合

Capped Collection in MongoDB

目录

灵活性、可扩展性和易用性帮助MongoDB这个面向文档的数据库逐渐流行起来。这个开源的NoSQL数据库是用C++编写的它有一个分片和聚合框架,再加上细粒度的锁定、文档验证,以及满足现代应用的复杂要求所需的所有解决方案。MongoDB中的封顶集合允许用户控制集合的大小。

什么是MongoDB中的封顶集合?

固定大小的集合在MongoDB中被称为上限集合。在创建一个集合时,用户必须指定该集合的最大尺寸(以字节为单位)和它所要存储的最大文档数。如果添加的文档超过了指定的容量,现有的文档会被覆盖。

MongoDB中的封顶集合支持高吞吐量的操作,用于根据插入的顺序插入和检索文档。封顶集合的工作方式类似于循环缓冲区,也就是说,有一个固定的空间分配给封顶集合。一旦固定的空间用完,最老的文档就会被覆盖,以便为集合中的新文档腾出空间。

在MongoDB中创建封顶集合

使用createCollection命令和capped选项来创建一个有上限的集合。指定集合的最大尺寸,以字节为单位,如下所示。

>db.createCollection("cappedLogCollection",{capped:true,size:10000})

为了限制可以包含在封顶集合中的文件数量,使用max参数,如下所示。

>db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})

在MongoDB中查询封顶的集合

在一个封顶的集合中,查找查询默认以插入顺序显示结果。要从一个封顶的集合中以相反的顺序检索文档,请使用排序命令,如下所示。

>db.cappedLogCollection.find().sort({$natural:-1})

如何检查一个集合是否被封顶?

你可以使用isCapped()方法检查一个集合是否被封顶。如果指定的集合是一个有上限的集合,该方法的输出结果为true。否则,它返回false。

要检查一个给定的集合是否被封顶,使用isCapped函数,如下所示。

>db.cappedLogCollection.isCapped()

如何将一个集合转换为封顶?

如果有一个正常的集合,你可以通过使用convertToCapped命令将其改为capped。要将现有的集合转换为封顶,请使用以下代码。

>db.runCommand({"convertToCapped":"posts",size:10000})

MongoDB中封顶集合的优点

  • 它按插入顺序返回文档,不需要索引,并提供更大的插入吞吐量。
  • 封顶的集合能够实现与原始文档大小相匹配的变化,确保文档在磁盘上的位置不会改变。
  • 保持日志文件。

封顶集合的缺点

  • 它不能被共享。
  • 当文档超过MongoDB中封顶集合的原始大小时,更新操作失败。
  • 不可能从一个有上限的集合中删除文档。你可以使用以下命令删除所有记录。{ emptycapped:Collection_name }