MST

星途 面试题库

面试题:MongoDB复制集环境下事务的基本运作流程

请描述在MongoDB复制集环境中,事务从开始到提交的基本运作流程,包括涉及到的节点角色以及它们所承担的任务。
18.7万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
  1. 事务开始
    • 客户端:应用程序发起事务请求,连接到MongoDB复制集的任意一个节点(通常是Primary节点,但也可以是Secondary节点并自动重定向到Primary)。客户端开始定义事务的操作,例如插入、更新或删除文档等。
  2. 操作执行与传播
    • Primary节点
      • 接收客户端的事务操作请求。对事务中的每一个操作,首先在内存中进行预写日志(WAL,Write - Ahead Logging)记录,这确保了即使系统崩溃,事务也可以恢复。
      • 将事务操作应用到自身的数据集,更新内存中的数据结构以反映操作的变化。
      • 把包含事务操作的日志条目通过心跳机制,以oplog(操作日志)的形式发送给所有的Secondary节点。
    • Secondary节点
      • 接收来自Primary节点的oplog条目。将接收到的oplog条目应用到自身的数据集,按照与Primary节点相同的顺序重新执行事务操作,从而保持与Primary节点数据的一致性。
  3. 事务提交
    • Primary节点
      • 当客户端发送事务提交请求时,Primary节点会等待所有已复制的oplog条目被Secondary节点确认接收。这个确认过程基于复制集的多数投票机制(majority write concern)。
      • 一旦Primary节点接收到来自大多数节点(包括自身)对相关oplog条目的确认,它就会将事务标记为已提交,并向客户端发送事务提交成功的响应。同时,Primary节点会清理相关的事务资源,如事务相关的临时数据结构等。
    • Secondary节点:在接收到Primary节点提交事务的信息后,Secondary节点也会将事务标记为已提交,并清理相关的事务资源。此时,事务操作对数据的修改已在整个复制集中持久化。