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 }