MongoDB 固定集合(Capped Collections)
MongoDB 固定集合(Capped Collections)
简介
MongoDB 固定集合是一种大小固定、按照插入顺序排序的集合,其可以实现无限写入、高性能和自动整理的特性。在数据量较大的情况下,可以为 MongoDB 系统提供性能优化的解决方案。
使用说明
创建固定集合
可以使用 MongoDB shell 中的 createCollection 命令来创建固定集合:
db.createCollection("logs", { capped : true, size : 5242880, max : 5000 })
上述命令创建了一个名为 logs
的固定集合,其大小固定为 5MB,最多能容纳 5000 条记录。其中,capped 参数必须设置为 true。
使用 mongoose 创建一个固定集合同样也很简单,只需在 schema 中设置 capped 属性即可。
const logSchema = new mongoose.Schema({
message: String,
timestamp: {
type: Date,
default: Date.now()
}
}, {
capped: {
size: 5242880,
max: 5000,
autoIndexId: true,
strict: true
}
})
插入数据
向固定集合插入数据的方式与普通集合相同,直接使用 insertOne、insertMany 或 save 方法即可。
Log.create({
message: "Hello world!"
})
查询数据
固定集合可以提升查询效率,因为其采用了先进先出(FIFO)的数据存储方式,查询时只需要按照插入顺序遍历即可。
db.logs.find({})
自动整理
由于 MongoDB 固定集合的大小是固定的,当达到设置的最大值时,新数据插入会覆盖掉最早插入的数据。这里需要注意的是,在 MongoDB 3.0 之前的版本,需要自己手动删除旧数据;在 3.0 之后的版本,可以设置 cappedAutomatically: true,使得上限达到时自动整理固定集合。
db.createCollection("logs", { capped : true, size : 5242880, max : 5000, cappedAutomatically: true})
总结
固定集合(Capped Collections)是 MongoDB 中非常实用的一种数据结构,其适用于存储大量的无顺序的、实时产生的数据,如日志信息、监控数据等。由于数据大小有限,相对于一般的集合,查询固定集合时会具备更高的读取速度,同时固定集合也支持自动整理,非常适合在实时数据更新较为频繁的场景下使用。