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
要限制整个数据库:用 目录磁盘配额(最稳)
要集群多租户:用 分片 + 监控脚本
网友回复


