oplog是什么,有什么作用

MongoDB的oplog(操作日志)是用于实现副本集(Replica Set)数据同步的核心组件,其核心特性如下:


1. 定义与作用

  • 功能
    oplog记录所有对数据库的修改操作(如插入、更新、删除及系统命令),类似MySQL的binlog。
    • 仅记录实际修改数据的操作,若操作未修改数据(如查询或失败的写操作),则不会生成oplog条目。
  • 用途
    副本集的备节点(Secondary)通过读取主节点(Primary)的oplog并重放操作,实现数据同步。

2. 存储位置与结构

  • 存储位置
    oplog是local数据库中的一个固定大小集合(capped collection),默认名称为oplog.rs
  • 特性
    • 固定大小:达到配置上限后,旧日志会被新日志覆盖(MongoDB 4.0前严格限制,之后允许动态扩展)。
    • 每个副本集节点(包括隐藏节点)均维护自己的oplog。

3. 同步机制

  1. 主节点写入
    客户端写操作成功修改数据后,主节点将操作记录到本地oplog。
  2. 备节点拉取
    备节点持续从主节点或其他备节点的oplog中拉取新操作,并按顺序重放以保持数据一致。
  3. 幂等性保障
    oplog设计为幂等操作,多次重放同一操作不会导致数据不一致。

4. 关键特性

  • 异步复制
    备节点同步存在延迟,主节点写入与备节点重放之间存在时间差。
  • 滚动覆盖
    oplog按插入顺序存储,旧日志被覆盖后可能导致备节点无法追上主节点(需合理配置oplog大小)。

参考文献

  • 副本集Oplog - MongoDB手册v8.0
  • MongoDB Oplog深入理解-腾讯云开发者社区
  • MongoDB journal 与oplog,究竟谁先写入?
  • MongoDB oplog详解- Joans - 博客园
  • 副本集日志 - MongoDB中文手册
posted @ 2025-03-13 11:59  程煕  阅读(95)  评论(0)    收藏  举报