这是 4.0 版中一个非常有趣的变化,因为检查点似乎起到了与日志非常相似的作用。
检查点确保数据文件在最后一个检查点之前是一致的,包括最后一个检查点;即检查点可以充当恢复点。
好的,所以检查点为我提供了最后一个检查点的数据的持久视图。在发生崩溃的情况下,我在最后一个检查点之后丢失了所有数据。
WiredTiger 日志保留检查点之间的所有数据修改。如果 MongoDB 在检查点之间退出,它会使用日志重放自上一个检查点以来修改的所有数据。
当 Journal 跟踪所有操作时,这有点额外的耐用性。它就像一个我们可以在失败后重新申请的清单。
日志记录包括由初始写入引起的任何内部写入操作。例如,对集合中文档的更新可能会导致对索引的修改;WiredTiger 创建一个日志记录,其中包括更新操作及其关联的索引修改。
似乎检查点的目的是快速移动,但有一次丢失一分钟数据的风险。而该杂志是关于对一切进行会计处理的。那么为什么两者都有呢?似乎让 Journal 覆盖了 Checkpoints 应该提供的任何收益。
尽管日志和检查点进程都将数据写入磁盘,但它们的用途不同。日志写入是对较小日志文件(最大 100MB)的快速追加写入,而检查点会持久保存对数据文件的更改(这在文件和协调更新方面具有更多开销)。
使用 WiredTiger 的 MongoDB 4.0+ 副本集成员的日志要求是出于对复制性能和回滚行为的改进:
w:majority
表示写入关注j:true
(已确认的写入由大多数数据承载成员确认并且不会回滚) 。j
如果未启用日志,另一种方法是确认内存中的写入j:true
(这可能会导致回滚)或触发检查点(这将强制在每次写入时同步对数据文件的更改)。要求日志是一个更强有力的保证,确认的多数写入不会被回滚,这对于基于多数读取问题返回数据的应用程序或服务器功能(如Change Streams )很重要。如果您没有副本集配置,仍然可以(但不推荐)在 MongoDB 4.0+ 中禁用日志的情况下运行。
如果您尝试在禁用日志的情况下使用 WiredTiger 启动 MongoDB 4.0+ 副本集成员,
mongod
将无法完成启动序列并关闭并显示如下日志消息: