MongoDB - 固定大小集合



固定大小集合是固定大小的循环集合,它们遵循插入顺序以支持高性能的创建、读取和删除操作。循环是指,当分配给集合的固定大小用尽时,它将开始删除集合中最旧的文档,而无需任何显式命令。

如果更新导致文档大小增加,则固定大小集合会限制对文档的更新。由于固定大小集合按磁盘存储顺序存储文档,因此它确保文档大小不会增加磁盘上分配的大小。固定大小集合最适合存储日志信息、缓存数据或任何其他大量数据。

创建固定大小集合

要创建固定大小集合,我们使用正常的 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 按与磁盘上相同的顺序返回文档。这使得读取操作非常快。

广告