我最近开始使用MongodDb,我正在尝试探索副本集和崩溃恢复。
我已经读过像日志文件那样写一个头重做日志文件。 oplog文件是将写入每个写入活动的文件。
这两者有什么区别......? 我们在主设备和从设备上都有oplog吗? 请发布任何有关该领域的网站链接。
答案 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中的写流程如下: