MongoDB 5.0.2 Oplog更新字段带's'前缀是bug还是官方特性?
MongoDB Oplog格式差异问题解答
这是MongoDB官方有意设计的特性,不属于v5.0.2版本的bug。
相关背景说明如下:
- 你观察到的
$v字段是Oplog的格式版本标识:v4.4及更早版本默认使用v1版本的Oplog格式,v5.0版本开始默认升级为v2版本的增量差异编码格式。 - v2格式使用
diff结构替代了原有的$set/$unset顶层操作字段,diff下的字段前缀是官方预定义的操作类型标识:s前缀代表对对应字段执行set操作,你看到的smyField实际含义为「对myField字段执行set操作」- 除此之外还有
u前缀代表更新字段值、d前缀代表删除字段、a前缀代表数组专项操作等规范,v2格式的设计目的是缩小Oplog存储空间、提升主从增量同步的执行效率。
如果你的业务依赖旧版Oplog的解析逻辑,可以在MongoDB v5.0及以上版本中通过配置
oplogApplicationMode: "compat"参数强制输出v1格式的Oplog,该兼容模式会额外损耗部分写入性能,非迁移过渡场景不建议长期开启。
内容的提问来源于stack exchange,提问作者Kinght007
相关产品推荐
相关产品推荐

