MongoDB日志文件和oplog有何不同?

时间:2012-01-23 11:15:02

标签: mongodb

我最近开始使用MongodDb,我正在尝试探索副本集和崩溃恢复。

我已经读过像日志文件那样写一个头重做日志文件。 oplog文件是将写入每个写入活动的文件。

这两者有什么区别......? 我们在主设备和从设备上都有oplog吗? 请发布任何有关该领域的网站链接。

3 个答案:

答案 0 :(得分:14)

Oplog存储修改数据库的高级事务(例如,不存储查询),例如插入此文档,更新等等.Oplog保留在主服务器上,从服务器将定期轮询主服务器以获取新执行的操作(自上次民意调查以来)。操作有时会在存储到oplog之前进行转换,以便它们是幂等的(并且可以安全地应用多次)。

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

答案 1 :(得分:0)

journal和oplog之间必定存在关系。当w = 1时,你提交了主要的jouranl,并为replset集合创建了一个oplog条目。我认为至少在replSet的主要版本中 - 它们都以不同的格式包含相同的更新/删除/插入。

答案 2 :(得分:0)

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

Journal是基础存储引擎的功能。由于MongoDB 3.2的默认存储引擎为WiredTiger,而自MongoDB 4.0以来,您无法禁用WiredTiger的日记功能。在日志文件中跟踪所有操作。如果发生崩溃,WiredTiger使用检查点来恢复数据。每60秒创建一个检查点。如果在检查点之间发生崩溃,则可能会丢失一些数据。为了避免这种情况,WiredTiger使用日记文件在最后一个检查点之后应用所有更改。

通常,MongoDB中的写流程如下:

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