MongoDB 有界集合
有界集合 是固定大小的循环集合,按照插入顺序支持高性能的创建、读取和删除操作。循环的意思是当分配给集合的固定大小用完时,它将开始删除集合中最旧的文档,而不提供任何显式命令。
有界集合限制了对文档的更新,如果更新导致文档大小增加。由于有界集合按照磁盘存储的顺序存储文档,它确保文档大小不会增加磁盘上的分配大小。有界集合最适合存储日志信息、缓存数据或任何其他高容量数据。
创建有界集合
要创建一个有界集合,我们使用普通的createCollection命令,但是加上 capped 选项,其值为 true ,并指定集合的最大大小(以字节为单位)。
>db.createCollection("cappedLogCollection",{capped:true,size:10000})
除了集合大小之外,我们还可以使用 max 参数限制集合中文档的数量
>db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})
如果想要检查一个集合是否为固定大小的(capped),可以使用以下的 isCapped 命令 –
>db.cappedLogCollection.isCapped()
如果您计划将现有集合转换为固定大小的集合,可以使用以下代码:
>db.runCommand({"convertToCapped":"posts",size:10000})
这段代码将会将我们现有的集合 posts 转换成一个有限集合。
查询有限集合
默认情况下,在有限集合上进行的查询按照插入顺序显示结果。但是如果你希望以相反的顺序检索文档,请使用以下代码中所示的 sort 命令。
>db.cappedLogCollection.find().sort({$natural:-1})
下面有关于已设置上限的集合的几个重要点值得知道−
-
我们不能从已设置上限的集合中删除文档。
-
已设置上限的集合中没有默认的索引,甚至没有_id字段的索引。
-
在插入新文档时,MongoDB不必真正查找磁盘上的位置来容纳新文档。它可以盲目地将新文档插入到集合的末尾。这使得插入操作在已设置上限的集合中非常快。
-
同样,在读取文档时,MongoDB按照在磁盘上的顺序返回文档。这使得读取操作非常快。