+
23
-

回答

MongoDB(WiredTiger)没有直接“锁死整个数据库总容量”的官方参数,只能用固定集合、文件系统配额、分片、脚本监控四种方式间接限制。

1. 固定集合(Capped Collection):限制单个集合

创建时指定最大字节数,满了自动覆盖旧数据(适合日志):

db.createCollection("log", {
  capped: true,
  size: 104857600,  // 100MB
  max: 100000       // 最多10万条(可选)
})

优点:原生、自动清理、高性能

缺点:只限制单个集合,不能限制整个库

2. 数据库目录磁盘配额(最实用)

把每个库放独立目录,用操作系统配额限制目录大小:

Linux:xfs_quota / setquota

Windows:磁盘配额

Docker:--storage-opt size=10G

效果:数据库写满时直接报磁盘满,最接近“库容量限制”

3. 分片(Sharding):集群级容量控制

按库/集合分片,控制每个分片大小:

sh.enableSharding("db1")
sh.shardCollection("db1.col1", { _id: 1 })

适合:多租户、超大集群

缺点:架构复杂

4. 脚本监控 + 拒绝写入(业务层)

定时用 db.stats() 检查大小,超阈值暂停写入:

db.stats().dataSize  // 数据大小(字节)
db.stats().storageSize // 磁盘占用

适合:多租户、严格配额场景

一句话总结

限制单个集合:用 Capped

限制整个数据库:用 目录磁盘配额(最稳)

集群多租户:用 分片 + 监控脚本

网友回复

我知道答案,我要回答