109.聊聊 MongoDB 备份?

和 MySQL 备份方式和策略类似,MongoDB 也需要定期的全量备份,以及定期的增量备份。具体可以看看 《MongoDB 增量备份方案》《Mongodb 增量备份脚本与原理》

? journal 回放在条目(entry)不完整时(比如恰巧有一个中途故障了)会遇到问题吗?

每个 journal (group) 的写操作都是一致的,除非它是完整的,否则在恢复过程中它不会回放。

? 更新操作立刻 fsync 到磁盘?

不会,磁盘写操作默认是延迟执行的。写操作可能在两三秒(默认在60秒内)后到达磁盘。

  • 例如,如果一秒内数据库收到一千个对一个对象递增的操作,仅刷新磁盘一次。

  • 通过 syncPeriodSecs 启动参数,可以进行配置。

    mongod 使用 fsync 操作将数据 flush 到磁盘的时间间隔,默认值为 60(单位:秒),强烈建议不要修改此值。

    mongod 将变更的数据写入journal后再写入内存,并间歇性的将内存数据 flush 到磁盘中,即延迟写入磁盘,有效提升磁盘效率。

? 为什么我的数据文件如此庞大?

MongoDB 会积极的预分配预留空间,来防止文件系统碎片。