面试题答案
一键面试索引在MongoDB副本集高可用性场景下保障数据一致性机制
- 索引更新机制
- 主节点:在MongoDB副本集中,主节点(Primary)负责处理写操作。当有新数据插入、更新或删除时,主节点不仅更新数据文档,也会同步更新相关索引。例如,若对集合中的某个文档的特定字段建立了索引,当该字段值改变时,主节点会相应调整索引结构,确保索引准确反映数据状态。这种更新操作会按照事务的原子性原则进行,即要么索引和数据都更新成功,要么都回滚,以保证数据与索引的一致性。
- 从节点:从节点(Secondary)通过复制 oplog(操作日志)来同步主节点的更改。当从节点应用 oplog 中的写操作时,同样会按照主节点的更新逻辑更新本地的索引。这意味着从节点上的索引会随着数据的同步而同步更新,保持与主节点索引的一致性。
- 数据同步机制
- oplog 复制:主节点将所有写操作记录在 oplog 中,oplog 是一个特殊的固定集合,记录了数据库的所有更改操作。从节点通过持续轮询主节点的 oplog,获取新的操作记录,并按照操作顺序在本地应用这些更改。这个过程不仅包括数据的插入、更新和删除,也包含索引的更新操作,从而保证从节点的数据和索引与主节点一致。
- 心跳检测与选举:副本集成员之间通过心跳检测(通常每 2 秒一次)来保持联系,确认彼此的状态。如果主节点出现故障,从节点会发起选举,在选举过程中,拥有最新 oplog 且数据和索引状态最完整的节点有更高概率被选举为新的主节点。新主节点当选后,其他从节点会调整与新主节点的同步,继续通过 oplog 复制保持数据和索引的一致性。这样,即使在主节点故障转移的情况下,副本集整体的数据一致性(包括索引)也能得到保障。