MongoDB 基础教程

MongoDB 高级教程

MongoDB 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/mongodb-capped-collections.html

MongoDB 固定集合


固定集合(Capped Collection)是一种尺寸固定的“循环”集合,可提供高效的创建、读取、删除等操作。这里所指的“循环”的意思是,当分配给集合的文件尺寸耗尽时,就会自动开始删除最初的文档,不需要提供任何显式的指令。

如果文档更新后增加了文档的尺寸,那么固定集合会限制对文档的更新。因为固定集合按照磁盘存储的顺序来保存文档,所以能确保文档尺寸不会增加磁盘分配的尺寸。固定集合最适合保存日志信息,缓存数据以及任何其他大容量数据。

创建固定集合

要想创建固定集合,需要使用 createCollection 命令,并将 capped 选项设为 true,同时还需要指定集合的最大尺寸(以字节计)。

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

除了集合尺寸外,还可以使用 max 参数限制集合中的文档最大数量。

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

如果想要检查集合是否固定,使用 isCapped 命令即可。

>db.cappedLogCollection.isCapped()

如想将现有集合转化为固定集合,使用下列代码:

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

上述代码会将现有的 posts 集合转化为固定集合。

查询固定集合

默认情况下,利用 find 查询固定集合,结果会按照插入顺序进行显示。但如果想按相反顺序获取文档,可以使用 sort 命令,如下所示:

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

关于固定集合,有以下几个非常值得注意的要点:

  • 无法从固定集合中删除文档。
  • 固定集合没有默认索引,甚至在 _id 字段中也没有。
  • 在插入新的文档时,MongoDB 并不需要寻找磁盘空间来容纳新文档。它只是盲目地将新文档插入到集合末尾。这使得固定集合中的插入操作是非常快速的。
  • 同样的,在读取文档时,MongoDB 会按照插入磁盘的顺序来读取文档,从而使读取操作也非常快。