MongoDB日志文件和操作日志有何不同?

j2datikz  于 2022-11-03  发布在  Go
关注(0)|答案(3)|浏览(202)

我最近开始对MongodDb和我试图探索的副本集和崩溃恢复。
我读它就像日记文件正在写一个头重做日志文件。操作日志文件是那些每个写活动都将被写入的文件。
这两个有什么区别...?我们有关于主服务器和从服务器的操作日志吗...?请发布任何有助于了解这一领域的Web链接。

4si2a6ki

4si2a6ki1#

操作日志存储修改数据库的高级事务(例如,不存储查询),如插入此文档、更新此文档等。操作日志保存在主服务器上,辅助服务器将定期轮询主服务器,以获取最新执行的操作(自上次轮询以来)。操作有时会在存储到操作日志之前进行转换,以便它们是幂等的(并且可以安全地多次应用)。
另一方面,日志可以在任何节点(主节点或次节点)上打开/关闭,它是一个低级操作日志,用于崩溃恢复和单个mongo示例的持久性。您可以读取 * 低级操作 *,如'将这些字节写入此文件的这个位置'。
注意:从MongoDB 4.0开始,您不能关闭使用WiredTiger存储引擎的副本集成员的日志记录。https://docs.mongodb.com/manual/tutorial/manage-journaling/

jqjz2hbq

jqjz2hbq2#

操作日志只是一个有上限的集合,MongoDB在其中跟踪其集合中的所有更改(插入、更新、删除)。它不跟踪读取操作。MongoDB使用操作日志在副本集中的所有节点中传播所有更改。辅助节点复制并应用这些更改。
日志是底层存储引擎的一项功能。由于MongoDB 3.2默认的存储引擎是WiredTiger,而从MongoDB 4.0开始,您不能禁用WiredTiger的日志功能。所有操作都在日志文件中跟踪。WiredTiger使用检查点在崩溃时恢复数据。检查点每60秒创建一次。如果在检查点之间发生崩溃,一些数据可能会丢失。为了防止这种情况,WiredTiger使用日志文件来应用最后一个检查点之后的所有更改。
一般来说,MongoDB中的写流如下所示:
1.* 高级 * -当客户写入/更新/删除数据时,MongoDB将其应用到适当的集合,更新索引并将更改插入到操作日志中。如果这些操作中的任何一个失败,则必须回滚其他相关操作以防止不一致。为此,MongoDB使用WiredTiger事务:
1.开始交易
1.将更改应用于集合
1.更新索引
1.将更改添加到操作日志
1.提交事务
1.* 低级 * - WiredTiger运行事务并将更改添加到日志文件。

erhoui1w

erhoui1w3#

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

相关问题