oplog字段实际上意味着什么?

Cyn*_*mer 5 mongodb

我之前看过这个问题,但答案很模糊.我一直在对oplog进行一些研究,并试图准确理解它是如何工作的.特别是,我希望能够很好地理解oplog文档中的字段以及它们存储的数据.

这些是我通过测试找到的领域,我认为它们的意思以及我仍然不确定的内容:

  • ts:写操作/ oplog条目的时间戳
  • h:oplog条目的唯一标识符(但为什么它有时是正面的,有时是负面的?)
  • op:执行的操作类型(通常用于插入,更新或删除的i/u/d)
  • ns:受影响的数据库和集合
  • o:执行更改后文档的新状态
  • o2:在更新操作期间似乎包含文档的_id字段.当相同的字段作为o字段的一部分出现时,为什么还需要这个字段,o字段还包含文档的其余部分?
  • b:似乎是删除操作时出现的bool.这个领域有什么意义?

我想确认我上面提出的观点是否准确,以及对不明确的位的澄清.我也有兴趣知道是否有任何其他字段可以出现在oplog文档中.

Dav*_*lis 6

  • h是哈希(签名长)
  • ts是内部时间戳格式(bsonspec.org上显示的"\ x11"类型;在api.mongodb.org上搜索驱动程序的API文档以获取更多信息)
  • 你对op,ns,o和o2是正确的
  • 还有一个"v"字段(我将推测这是版本,这将允许他们更新oplog的模式).
  • b对于我能找到的所有删除操作都是True,因此我无法提供任何信息.

我发现的最好的文档来源是这个.这是一家名为Stripe的公司在2014年的MongoDB世界大会上的演示,它包含一些示例Ruby代码.

  • 还有一个名为"t"的新领域,它是复制品的选举"术语".有关所有字段,请参阅https://github.com/mongodb/mongo/blob/master/src/mongo/db/repl/oplog.cpp#L273-L296 (2认同)