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