固定集合
固定集合是固定大小的集合,根据插入顺序插入和检索文档。固定集合的工作方式类似于循环缓冲区:一旦集合填满分配的空间,它通过覆盖集合中最旧的文档来为新文档腾出空间。
限制
受限集合不能进行分片。
您无法在无服务器实例上创建受限集合.
受限集合不支持在稳定API V1中。
您无法在事务中写入受限集合。
聚合管道阶段
$out
无法将结果写入受限集合。
命令语法
以下示例创建了一个最大大小为100,000字节的受限集合,名为log
。
db.createCollection( "log", { capped: true, size: 100000 } )
有关创建受限集合的更多信息,请参阅createCollection()
或create
。
用例
通常,TTL(生存时间)索引比固定大小集合提供更好的性能和更多的灵活性。TTL索引根据日期类型字段和索引的TTL值过期并从普通集合中删除数据。
固定大小集合将写操作序列化,因此其并发插入、更新和删除性能比非固定大小集合差。在创建固定大小集合之前,考虑是否可以使用TTL索引代替。
固定大小集合最常用的用例是存储日志信息。当固定大小集合达到其最大大小时,旧日志条目会自动用新条目覆盖。
开始使用
要创建和查询固定大小集合,请参阅以下页面
行为
考虑以下固定大小集合的行为细节。
Oplog 收集
存储副本集操作日志的 oplog.rs 使用了限制大小的集合。
与其他限制大小的集合不同,oplog 可以超过其配置的大小限制,以避免删除 大多数提交点
。
注意
MongoDB 将 oplog 的限制大小向上舍入到最接近的 256 的整数倍,单位为字节。
_id 索引
限制大小的集合默认有一个 _id
字段和一个基于 _id
字段的索引。
更新
避免在限制大小的集合中更新数据。因为限制大小的集合是固定大小的,更新可能会导致数据超出集合分配的空间,这可能导致意外行为。
查询效率
使用自然排序来高效地检索集合中最最近插入的元素。这类似于在日志文件上使用tail
命令。
可变光标
您可以使用可变光标与上限集合一起使用。类似于Unix的tail -f
命令,可变光标“跟踪”上限集合的末尾。当新文档插入到上限集合中时,您可以使用可变光标继续检索文档。
有关创建可变光标的信息,请参阅可变光标。
多并发写入
如果存在对受限集合的并发写入,MongoDB 不保证返回的文档顺序与插入顺序一致。
快照读关注
从 MongoDB 8.0 版本开始,您可以在 受限 集合上使用 "snapshot"
读取关注。