109.聊聊 MongoDB 备份?
和 MySQL 备份方式和策略类似,MongoDB 也需要定期的全量备份,以及定期的增量备份。具体可以看看 《MongoDB 增量备份方案》 和 《Mongodb 增量备份脚本与原理》 。
? journal 回放在条目(entry)不完整时(比如恰巧有一个中途故障了)会遇到问题吗?
每个 journal (group) 的写操作都是一致的,除非它是完整的,否则在恢复过程中它不会回放。
? 更新操作立刻 fsync 到磁盘?
不会,磁盘写操作默认是延迟执行的。写操作可能在两三秒(默认在60秒内)后到达磁盘。
例如,如果一秒内数据库收到一千个对一个对象递增的操作,仅刷新磁盘一次。
通过
syncPeriodSecs
启动参数,可以进行配置。mongod 使用 fsync 操作将数据 flush 到磁盘的时间间隔,默认值为 60(单位:秒),强烈建议不要修改此值。
mongod 将变更的数据写入journal后再写入内存,并间歇性的将内存数据 flush 到磁盘中,即延迟写入磁盘,有效提升磁盘效率。
? 为什么我的数据文件如此庞大?
MongoDB 会积极的预分配预留空间,来防止文件系统碎片。