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

Uda*_*day 10 mongodb

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

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

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

mil*_*lan 14

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

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

  • 从 MongoDB 4.0 开始,您无法使用 WT 引擎关闭 RS 的日志记录。 (2认同)

小智 7

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

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

一般来说,MongoDB 中的写入流程是这样的:

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