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 中非常实用的一种数据结构,其适用于存储大量的无顺序的、实时产生的数据,如日志信息、监控数据等。由于数据大小有限,相对于一般的集合,查询固定集合时会具备更高的读取速度,同时固定集合也支持自动整理,非常适合在实时数据更新较为频繁的场景下使用。