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