MongoDB日志文件和oplog有何不同



我最近刚开始研究MongodDb,我正试图探索副本集和崩溃恢复。

我读过它就像日志文件是写一个头重做日志文件。oplog文件是每个写入活动都将写入的文件。

这两者之间有什么区别。。。?主机和从机上都有操作日志吗。。。?请发布任何有助于了解这一领域的网络链接。

操作日志存储修改数据库的高级事务(例如,不存储查询),如插入此文档、更新该文档等。操作日志保存在主数据库和辅助数据库中。操作日志将定期轮询主数据库以获取新执行的操作(自上次轮询以来)。操作有时会在存储在oplog中之前进行转换,以便它们是幂等的(并且可以安全地多次应用)。

另一方面,日志可以在任何节点(主节点或辅助节点)上打开/关闭,它是一个操作的低级别日志,用于崩溃恢复和单个mongo实例的持久性。您可以读取低级操作,如"在此位置将这些字节写入此文件"。

注意:从MongoDB 4.0开始,您不能为使用WiredTiger存储引擎的副本集成员关闭日志记录。来源:https://docs.mongodb.com/manual/tutorial/manage-journaling/

Oplog只是一个有上限的集合,MongoDB在其中跟踪其集合中的所有更改(插入、更新、删除)。它不跟踪读取操作。MongoDB使用oplog将所有更改分布在副本集中的所有节点中。辅助节点复制并应用此更改。

日志是底层存储引擎的一个功能。由于MongoDB 3.2的默认存储引擎是WiredTiger,并且由于MongoDB 4.0,您不能禁用WiredTigeer的日志记录。所有操作都在日志文件中进行跟踪。WiredTiger使用检查点在发生故障时恢复数据。检查点每60秒创建一次。如果在检查点之间发生崩溃,一些数据可能会丢失。为了防止这种情况,WiredTiger使用日志文件来应用最后一个检查点之后的所有更改。

一般来说,MongoDB中的写入流如下所示:

  • 高级-当客户写入/更新/删除数据时,MongoDB会将其应用于正确的收集、更新索引并将更改插入oplog。如果这些操作中的任何一个失败,则必须回滚其他相关操作,以防止不一致。为此,MongoDB使用WiredTiger事务:
    1. 开始交易
    2. 将更改应用于集合
    3. 更新索引
    4. 将更改添加到操作日志
    5. 提交事务
  • 低级-WiredTiger运行事务并将更改添加到日志文件中

日志和操作日志之间必须存在关系。当w=1时,提交到主jouranl,并为replset集合创建一个oplog条目。我认为至少在replSet的主要部分,它们都包含相同的更新/删除/插入,只是格式不同。

最新更新