Mongodb 简明教程

MongoDB - Capped Collections

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

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

Creating Capped Collection

要创建固定大小集合,我们使用常规 createCollection 命令,但使用 capped 选项为 true ,并指定集合的最大大小(以字节为单位)。

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

除了集合大小之外,我们还可以使用 max 参数限制集合中的文档数量:

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

如果你想检查一个集合是否固定大小, hãy使用以下 isCapped 命令:

>db.cappedLogCollection.isCapped()

如果有一个你正在计划转换为固定大小的现有集合,你可以使用以下代码执行:

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

此代码会将我们现有的集合 posts 转换为固定大小集合。

Querying Capped Collection

默认情况下,对固定大小集合执行的 find 查询将按插入顺序显示结果。但是,如果你希望反向检索文档,请使用 sort 命令,如下代码所示:

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

关于固定大小集合还有一些其他值得了解的重要事项:

  1. 我们无法从固定大小集合中删除文档。

  2. 固定大小集合中不存在默认索引,即使在 _id 字段上也不存在。

  3. 在插入新文档时,MongoDB 实际上不必在磁盘上寻找放置新文档的位置。它可以盲目地将新文档插入到集合的尾部。这让固定大小集合中的插入操作变得非常快。

  4. 类似地,当读取文档时,MongoDB 会按照磁盘上的顺序返回文档。这使得读取操作非常快速。